◾️はじめに
https://dk521123.hatenablog.com/entry/2025/12/19/233012
で「SDV (Synthetic Data Vault)」っていうのを知ったので 調べてみた
目次
【1】SDV (Synthetic Data Vault) 1)合成データ(Synthetic Data)とは? 2)主要モデル 【2】インストール 【3】サンプル 1)Hello world 2)CSVデータから読み取って、CSV出力する
【1】SDV (Synthetic Data Vault)
* 実データからパターンをさまざまな機械学習アルゴリズムを使用し、 合成データ(Synthetic Data) を生成するためのPythonライブラリ
https://docs.sdv.dev/sdv
https://github.com/sdv-dev/SDV
1)合成データ(Synthetic Data)とは?
https://aws.amazon.com/jp/what-is/synthetic-data/
より抜粋 ~~~~~~~~ 合成データは、現実世界のデータを模倣した、 人間が作成したデータではありません。 生成型人工知能技術に基づく計算アルゴリズムと シミュレーションによって作成されます。 ~~~~~~~~
2)主要モデル
| モデル名 | カテゴリ | 手法 対象データの特徴 | 強み・メリット |
|---|---|---|---|
| Gaussian Copula(ガウスコピュラ) | 単一テーブル(単一で完結するデータ) | 統計モデル | 相関が比較的単純なデータ|爆速。 計算負荷が低く、数値を綺麗に再現する。 |
| CTGAN / TVAE | 単一テーブル(単一で完結するデータ) | 深層学習 | 複雑な分布やカテゴリ変数|精度重視。非線形な関係や偏ったデータに強い。 |
| HMA | 複数テーブル | 階層的統計 | データベース(親子関係)|整合性。 ID連携やテーブル間の統計量を維持する。 |
| PAR | 時系列・連続 | 深層学習 | 履歴、センサー、行動ログ|順序性。 「過去の状態が次に影響する」流れを再現 |
https://docs.sdv.dev/sdv/tutorials
【2】インストール
pip install sdv
# pip install sdv pandas numpy
【3】サンプル
1)Hello world
import pandas as pd from sdv.datasets.demo import download_demo from sdv.metadata import SingleTableMetadata from sdv.single_table import GaussianCopulaSynthesizer # 1. 元となるデータの準備(単一テーブル) # ここでは「顧客情報」のようなシンプルなデータを作成します data = pd.DataFrame({ 'user_id': [1, 2, 3, 4, 5], 'age': [25, 34, 45, 23, 56], 'plan': ['Basic', 'Premium', 'Premium', 'Basic', 'Free'], # カテゴリ変数 'satisfaction': [0.8, 0.9, 0.7, 0.2, 0.5] # 数値(0~1) }) # 2. メタデータの作成 # データの型(どの列がIDか、数値かなど)を自動検出します metadata = SingleTableMetadata() metadata.detect_from_dataframe(data) # 3. 合成モデル(Synthesizer)の選択と学習 # 最も高速な GaussianCopula を使用します synthesizer = GaussianCopulaSynthesizer(metadata) synthesizer.fit(data) # 4. 合成データの生成(サンプリング) # 10件の新しい「本物そっくりのデータ」を生成します synthetic_data = synthesizer.sample(num_rows=10) # 結果の表示 print("--- 元のデータ ---") print(data.head()) print("\n--- 生成された合成データ ---") print(synthetic_data.head(10))
出力結果(警告が出るので、コードは感じを掴む形で、、、)
/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/sdv/single_table/base.py:168: FutureWarning: The 'SingleTableMetadata' is deprecated. Please use the new 'Metadata' class for synthesizers.
warnings.warn(DEPRECATION_MSG, FutureWarning)
/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/sdv/single_table/base.py:134: UserWarning: We strongly recommend saving the metadata using 'save_to_json' for replicability in future SDV versions.
warnings.warn(
--- 元のデータ ---
user_id age plan satisfaction
0 1 25 Basic 0.8
1 2 34 Premium 0.9
2 3 45 Premium 0.7
3 4 23 Basic 0.2
4 5 56 Free 0.5
--- 生成された合成データ ---
user_id age plan satisfaction
0 6138286 48 Premium 0.9
1 9216891 37 Premium 0.5
2 15482477 30 Premium 0.8
3 6685114 29 Premium 0.6
4 6689746 49 Premium 0.8
5 11818073 33 Premium 0.5
6 4498502 42 Premium 0.7
7 153594 30 Premium 0.9
8 4933337 56 Free 0.9
9 11440469 27 Basic 0.5
2)CSVデータから読み取って、CSV出力する
import pandas as pd from sdv.metadata import SingleTableMetadata from sdv.single_table import GaussianCopulaSynthesizer df = pd.read_csv('sample.csv') metadata = SingleTableMetadata() metadata.detect_from_dataframe(df) metadata.update_column(column_name='id', sdtype='id') metadata.update_column(column_name='name', sdtype='categorical') metadata.update_column(column_name='gender', sdtype='categorical') metadata.update_column(column_name='birth_day', sdtype='datetime') metadata.update_column(column_name='address', sdtype='categorical') metadata.update_column(column_name='phone_number', sdtype='categorical') metadata.update_column(column_name='email', sdtype='categorical') synthesizer = GaussianCopulaSynthesizer( metadata, enforce_min_max_values=True ) synthesizer.fit(df) synthetic_data = synthesizer.sample(num_rows=5000) synthetic_data.to_csv('synthetic_data.csv', index=False) print("Done!")
参考文献
https://zenn.dev/enostech/articles/4dc11e93be2ae8
https://yolo-kiyoshi.com/2020/11/19/post-2384/
https://yolo-kiyoshi.com/2020/11/27/post-2410/
https://tech.ledge.co.jp/entry/sdv
関連記事
Python SDV 〜 HMASynthesizer 〜
https://dk521123.hatenablog.com/entry/2025/12/26/001812
AWS上に合成データ生成システムを構築する 〜 構想編 〜
https://dk521123.hatenablog.com/entry/2025/12/19/233012
Python 〜 Faker 〜
https://dk521123.hatenablog.com/entry/2025/12/20/001758
AWS Glue ~ Wheelファイル作成 ~
https://dk521123.hatenablog.com/entry/2026/01/13/191945