SDV 人工データ生成
SDV (Synthetic Data Vault) を使用して、実データのパターンを学習した高品質な合成データを生成する。
最重要: データプライバシー制限
このセクションを必ず最初に確認し、以下のルールを厳守すること。
禁止事項(絶対に行わないこと)
- •
Readツールでデータファイルを読み取らない- •対象拡張子:
.csv,.xlsx,.xls,.json,.pkl,.html,.txt - •ユーザーのデータ内容を確認・表示しない
- •生成された合成データも閲覧禁止
- •対象拡張子:
- •
データプレビューコードを生成しない
- •
print(data),print(df),data.head(),data.tail(),data.sample()等を含めない
- •
- •
実際のデータ値をログ出力しない
事前のデータ確認は不要
スクリプトがデータ構造を自動検出するため、事前にデータファイルの内容や構造を確認しないこと。 ワークフローに従い、ユーザーへの確認(生成行数、シード値等)のみを行い、直接スクリプトを実行すること。
対応ファイル形式
データ入力(対応形式)
| 形式 | 拡張子 | 読み込み方法 |
|---|---|---|
| CSV | .csv | pd.read_csv() |
| Excel | .xlsx, .xls | pd.read_excel() |
| JSON | .json | pd.read_json() |
SDV生成ファイル
| ファイル種別 | 拡張子 | 説明 |
|---|---|---|
| 合成データ | .csv, .xlsx, .json | 生成された合成データ |
| シンセサイザー | .pkl | 学習済みモデル |
| メタデータ | .json | データ構造定義 |
| 品質レポート | .html, .txt | 評価レポート |
実行環境の確認と実行方法
このスキルは、スキルを実行するプロジェクトの Python 環境を確認し、その環境でスクリプトを実行する。
確認の目安(上から優先):
- •
uv.lockやpyproject.tomlがある →uv環境を優先し、uv run python scripts/...で実行 - •
.venv/がある → その仮想環境の Python を使用(例:.venv/bin/python scripts/...) - •上記がない場合 → どの環境で実行するかユーザーに確認する
※ 実行コマンドは、必ず対象プロジェクトの環境(uv/venv/poetry/pipenv 等)に合わせて選ぶ。
ワークフロー
合成データを生成する際は、以下の手順に従う。 スクリプトはすべてのオプションを実行時引数として受け取るため、ステップ1〜4の確認をすべて完了してからステップ5でスクリプトを実行すること。
- •
生成行数の確認: ユーザーに生成したい行数(num_rows)を確認する。
AskUserQuestionツールを使用して以下のように尋ねる:- •質問: "合成データを何行生成しますか?"
- •ヘッダー: "生成行数"
- •選択肢:
- •"元データと同じ行数(推奨)" - 元データと同じ行数を生成
- •"1,000行" - 1,000行を生成
- •"10,000行" - 10,000行を生成
- •"100,000行" - 100,000行を生成
- •ユーザーが「Other」を選択した場合は、入力された数値を使用する
- •
シード値の確認: 再現性を確保するため、シード値(seed)を確認する。
AskUserQuestionツールを使用して以下のように尋ねる:- •質問: "再現性のためシード値を指定しますか?"
- •ヘッダー: "シード値"
- •選択肢:
- •"指定しない(ランダム)(推奨)" - シード値を指定せずランダムに生成
- •"42" - シード値42を使用(一般的なデフォルト値)
- •"123" - シード値123を使用
- •"0" - シード値0を使用
- •ユーザーが「Other」を選択した場合は、入力された数値を使用する
- •シード値を指定する場合は、乱数シードを設定し、
sampleがseed引数に対応している場合のみ渡す(実装はスクリプト内を参照)
- •
シンセサイザーの選択: 必要に応じてシンセサイザーの種類を確認する
- •
モデルとメタデータの保存確認: 学習済みモデルを再利用できるよう、保存するか確認する。
AskUserQuestionツールを使用して以下のように尋ねる:- •質問: "学習済みシンセサイザーとメタデータを保存しますか?"
- •ヘッダー: "モデル保存"
- •選択肢:
- •"両方保存(推奨)" - シンセサイザーとメタデータの両方を保存
- •"シンセサイザーのみ" - 学習済みシンセサイザーのみ保存
- •"保存しない" - 保存せずに終了
- •保存手順・読み込み手順は各スクリプトのオプション(
--save-model,--save-metadata)を参照
- •
データ生成: ステップ1〜4で確認したすべてのオプション(行数、シード値、シンセサイザー、保存設定)をスクリプトの引数として渡して実行する
クイックスタート
scripts/generate_single_table.py を使って単一テーブルの合成データを生成する。
注意: スクリプトはこのスキル配下の .codex/skills/sdv-synthetic-data/scripts/ に存在する。新規スクリプトは作成せず、既存スクリプトを直接実行する(例: uv run python .codex/skills/sdv-synthetic-data/scripts/generate_single_table.py ...)。
シンセサイザー選択
| シンセサイザー | 特徴 | 推奨用途 |
|---|---|---|
GaussianCopulaSynthesizer | 高速・透明性・カスタマイズ可能 | デフォルト選択 |
CTGANSynthesizer | GAN使用・高忠実度 | より複雑なパターン |
TVAESynthesizer | VAE使用・高忠実度 | 複雑なパターン |
CopulaGANSynthesizer | GaussianCopula + CTGAN | ハイブリッド |
具体的な選択は generate_single_table.py の --synthesizer オプションを参照。
メタデータ設定
自動検出
generate_single_table.py / generate_multi_table.py が Metadata.detect_from_dataframe(...) を使用。
手動設定
手動設定が必要な場合は --save-metadata で保存し、編集後に読み込む運用を推奨。
sdtype一覧
- •
numerical: 数値 - •
datetime: 日時(datetime_format必須) - •
categorical: カテゴリ - •
boolean: 真偽値 - •
id: 識別子(regex_formatでパターン指定可) - •
email,phone_number,ssn等: PII自動匿名化
制約設定
ビジネスルールを100%保証する制約を追加。
制約設定はメタデータの編集や追加実装が必要。必要に応じてスクリプトを拡張する。
複数テーブル(リレーショナル)
generate_multi_table.py を使用。設定ファイルで tables と relationships を指定し、--scale で生成量を調整。
generate_multi_table.py は各テーブルを metadata.detect_from_dataframe(..., table_name=...) で自動検出し、設定ファイルの primary_key と relationships を適用します。必要なら --save-metadata で保存して後から調整できます。
時系列データ
時系列は現状スクリプト未対応。必要なら新規スクリプトを追加する。
品質評価
品質評価は evaluate_quality.py を使用。診断レポートは実行時に確認され、--diagnostic または --diagnostic-output で明示的に出力可能。
モデル保存・読み込み
保存・読み込みは各スクリプトの --save-model / --save-metadata オプションを使用。
スクリプト
再利用可能なスクリプトは scripts/ を参照:
- •
generate_single_table.py: 単一テーブル合成データ生成(--rows,--seed,--synthesizer,--epochs,--save-model,--save-metadata) - •
generate_multi_table.py: 複数テーブル合成データ生成(--config,--output-dir,--output-format,--scale,--seed,--save-model,--save-metadata) - •
evaluate_quality.py: 品質評価レポート生成(--output,--diagnostic,--diagnostic-output)