Synthetic Data Generator (SDG) 完整教學
Repository: https://github.com/SDM-TIB/Synthetic-Data-Generator Stars: 3 | Language: Python | License: MIT Tags:
breast-cancer,csv,data-generator,process-based,rdf,sql最後更新: 2025-11-20
2. 核心架構
2.1 系統架構圖
graph TB
subgraph Input["輸入參數"]
N["患者數量
-n patients"]
P["突變機率
-p mutation_prob"]
end
subgraph Docker["Docker Container (MySQL 8.1)"]
subgraph Init["初始化階段"]
SQL_SCHEMA["table_structure.sql
建立 11 張表 +
66 種化療方案 +
30 種 CUI 描述"]
DB["MySQL 8.1
synth database"]
SQL_SCHEMA --> DB
end
subgraph Gen["資料生成階段 (SDG.py)"]
direction TB
DEMO["1. 人口統計
年齡 ~ N(57, 10)"]
TUMOR["2. 腫瘤分型
PP/PN/NP/NN"]
STAGE["3. TNM 分期
Stage 0-IV"]
IHC["4. IHC 標記
ER/PR/HER2/Ki67"]
NEO["5. 新輔助化療
3-5 週期"]
SURG["6. 手術
Mastectomy/Partial"]
ADJ["7. 輔助化療
3-20 週期"]
RADIO["8. 放射治療
劑量 ~ N(46, 8.4) Gy"]
COMOR["9. 共病症
17 類"]
ORAL["10. 口服藥物
15 種"]
FAM["11. 家族史
30 種 CUI"]
DEMO --> TUMOR --> STAGE --> IHC
IHC --> NEO --> SURG --> ADJ --> RADIO
RADIO --> COMOR --> ORAL --> FAM
end
Gen -->|INSERT| DB
end
N --> Gen
P --> Gen
subgraph Output["三格式輸出 → ./data/"]
CSV["CSV
每表一個 .csv"]
RDF_OUT["RDF (N-Triples)
synth_data.nt
via SDM-RDFizer"]
SQL_DUMP["SQL Dump
synth_data.sql.gz"]
end
DB -->|mysqldump| SQL_DUMP
DB -->|SELECT *| CSV
DB -->|RML mapping.ttl
+ SDM-RDFizer| RDF_OUT
style Input fill:#e1f5fe,stroke:#0288d1
style Docker fill:#fff3e0,stroke:#f57c00
style Output fill:#e8f5e9,stroke:#388e3c
style Gen fill:#fce4ec,stroke:#c62828
2.2 關鍵機率分佈參數
SDG 的核心是一組 來自真實族群統計的機率分佈,以下列出最重要的幾個:
graph LR
subgraph TumorType["腫瘤分型機率"]
PP["ER+/HER2+
11.07%"]
PN["ER+/HER2-
75.74%"]
NP["ER-/HER2+
4.37%"]
NN["ER-/HER2-
8.82%"]
end
subgraph StageDx["診斷分期分佈"]
S0["Stage 0: 8.5%"]
SIA["Stage IA: 32.4%"]
SIIA["Stage IIA: 22.6%"]
SIIB["Stage IIB: 11.8%"]
SIIIA["Stage IIIA: 8.7%"]
SIV["Stage IV: 6.4%"]
end
subgraph DeathRate["死亡率 (依分型)"]
D_PP["PP: 9.0%"]
D_PN["PN: 12.3%"]
D_NP["NP: 12.1%"]
D_NN["NN: 16.8%"]
end
style TumorType fill:#e8eaf6,stroke:#3f51b5
style StageDx fill:#fce4ec,stroke:#e91e63
style DeathRate fill:#fff8e1,stroke:#ff8f00
2.3 突變機率機制
mutation_probability 參數是 SDG 的獨特設計。當此值為 0.0 時,生成的資料完全遵循治療指引 (Clinical Guidelines; 臨床指引);當值 > 0.0 時,每個資料欄位都有機率被「突變」(偏離正常值),模擬真實世界中的資料錯誤、異常值或非標準治療:
| 突變機率 | 效果 | 適用場景 |
|---|---|---|
0.0 | 完全遵循指引的乾淨資料 | 訓練標準模型、驗證演算法 |
0.01-0.05 | 少量雜訊,模擬資料品質問題 | 測試資料清洗管線 |
0.1-0.3 | 中等雜訊,模擬真實世界資料 | 評估模型 Robustness (穩健性) |
0.5+ | 大量異常值 | 壓力測試、異常偵測模型開發 |
2.4 檔案結構
1Synthetic-Data-Generator/
2├── SDG.py # 主程式:669 行 Python,包含所有生成邏輯
3├── table_structure.sql # MySQL Schema 定義 + 預載資料(化療方案、CUI 描述)
4├── mapping.ttl # RML (RDF Mapping Language) 對應規則
5├── requirements.txt # Python 依賴:rdfizer, mysql-connector, numpy, pandas
6├── Dockerfile # 基於 mysql:8.1.0 的容器定義
7├── docker-compose.yml # Docker Compose 編排設定
8├── generate.sh # 一鍵生成 Shell Script
9├── CITATION.cff # 引用資訊
10├── er-diagram-generated-data.jpg # ER Diagram 圖片
11└── data/ # 生成的輸出目錄(執行後產生)
12 ├── csv/ # 每張表一個 CSV 檔案
13 │ ├── patient.csv
14 │ ├── tumor_tnm.csv
15 │ └── ...
16 ├── synth_data.nt # RDF N-Triples 格式
17 └── synth_data.sql.gz # MySQL dump 壓縮檔
3. 安裝與設定
3.1 系統需求
| 需求 | 版本 | 說明 |
|---|---|---|
| Docker | 20.0+ | 必要 – SDG 完全在 Docker 容器內執行 |
| Docker Compose | v2+ | 選用 – 方便多次生成 |
| 磁碟空間 | ~1 GB | Docker Image (mysql:8.1.0) + 生成資料 |
| 記憶體 | 2 GB+ | MySQL 8.1 基本需求 |
注意: SDG 不需要 在本機安裝 Python、MySQL 或任何依賴套件。所有環境都封裝在 Docker Image 內。
3.2 安裝步驟
1# 1. 複製專案
2git clone https://github.com/SDM-TIB/Synthetic-Data-Generator.git
3cd Synthetic-Data-Generator
4
5# 2. 確認 Docker 可用
6docker --version
7# Docker version 24.x.x 或更高
8
9# 3. (選用) 確認 docker-compose 可用
10docker compose version
11# Docker Compose version v2.x.x
3.3 Docker Image 建置
1# 方法一:透過 docker-compose 建置
2docker-compose up -d --build
3
4# 方法二:手動建置
5docker build . -t sdmtib/sdg:latest
Image 細節: 基於
mysql:8.1.0官方映像,額外安裝 Python 依賴 (rdfizer, mysql-connector-python, numpy, pandas),並將SDG.py連結到/usr/bin/SDG。
3.4 環境變數
Docker Image 內預設的環境變數:
| 變數 | 預設值 | 說明 |
|---|---|---|
MYSQL_DATABASE | synth | MySQL 資料庫名稱 |
MYSQL_ROOT_PASSWORD | paladin | MySQL root 密碼 |
安全提醒: 預設密碼僅供研究環境使用。若部署於對外服務,務必修改
Dockerfile中的密碼。
4. 使用方式與程式碼範例
4.1 範例一:使用 Docker Compose 生成乾淨資料集
這是最推薦的使用方式,適合需要多次生成不同規模資料集的場景。
1# Step 1: 啟動容器 (含建置)
2docker-compose up -d --build
3
4# Step 2: 生成 100 位患者的乾淨資料 (mutation_prob = 0.0)
5docker exec -it SDG bash -c "SDG -n 100 -p 0.0"
6
7# 預期輸出:
8# Setting up the database: 0.234...
9# Generating data: 2.156...
10# Dumping database: 0.512...
11# Dumping CSV: 0.078...
12# Finished generating the synthetic data. Total time: 3.021...
13
14# Step 3: 檢視生成的檔案
15ls -la ./data/
16# csv/
17# synth_data.nt
18# synth_data.sql.gz
19
20ls -la ./data/csv/
21# chemoterapy_cycle.csv
22# chemoterapy_schema.csv
23# comorbidity.csv
24# cui_description.csv
25# drug.csv
26# drug_chemoterapy_schema.csv
27# family_history.csv
28# oral_drug.csv
29# oral_drug_type.csv
30# patient.csv
31# radiotherapy.csv
32# surgery.csv
33# tumor_grade.csv
34# tumor_tnm.csv
35# tumor_type.csv
36
37# Step 4: 備份資料 (重要! 下次生成會覆蓋)
38cp -r ./data ./data_clean_100
39
40# Step 5: 生成 500 位患者的有雜訊資料
41docker exec -it SDG bash -c "SDG -n 500 -p 0.1"
42cp -r ./data ./data_noisy_500
43
44# Step 6: 完成後停止容器
45docker-compose down -v
CSV 輸出範例 (patient.csv):
1ehr,birth_date,diagnosis_date,age_at_diagnosis,first_treatment_date,surgery_date,death_date,age_at_death,er_positive,pr_positive,her2_overall_positive,ki67_percent_max_simp,neoadjuvant,menarche_age,menopause_pre,menopause_age,pregnancy,abort,birth,caesarean
21,1962-03-15,2019-07-22,57,2019-08-14,2019-09-05,,,,1,0,0,14,no,13,1,48,2,0,2,0
32,1958-11-02,2018-04-10,59,2018-05-03,2018-06-15,2023-09-28,64,1,1,0,18,no,12,1,50,3,1,2,0
4.2 範例二:使用 Shell Script 單次生成
適合只需要生成一次資料集的快速使用情境。
1# 生成 1000 位患者,突變機率 5%
2./generate.sh 1000 0.05
3
4# generate.sh 內部會自動:
5# 1. docker build . -t sdmtib/sdg:latest
6# 2. docker run --name SDG -v ./data:/data -d sdmtib/sdg:latest
7# 3. sleep 5s (等待 MySQL 啟動)
8# 4. docker exec -it SDG bash -c "SDG -n 1000 -p 0.05"
9# 5. docker rm -fv SDG (自動清理容器)
10
11# 檢視 RDF 輸出
12head -20 ./data/synth_data.nt
13# <http://research.tib.eu/paladin/entity/BC_HUPHM_1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://research.tib.eu/paladin/vocab/BCPatient> .
14# <http://research.tib.eu/paladin/entity/BC_HUPHM_1> <http://research.tib.eu/paladin/vocab/hasEHR> "1"^^<http://www.w3.org/2001/XMLSchema#integer> .
15# ...
16
17# 檢視 SQL dump
18zcat ./data/synth_data.sql.gz | head -30
RDF 輸出特點:
- 使用 PALADIN 本體 (
http://research.tib.eu/paladin/vocab/) 定義 - 每位患者以
BC_HUPHM_{ehr}為 URI - 透過 SDM-RDFizer + RML mapping 自動從 MySQL 轉換
- 可直接載入 SPARQL endpoint (如 Apache Jena Fuseki) 進行語意查詢
4.3 範例三:批次生成多種配置並進行比較分析
1#!/bin/bash
2# batch_generate.sh -- 批次生成不同突變機率的資料集供比較
3
4# 啟動容器
5docker-compose up -d --build
6sleep 10 # 等待 MySQL 完全啟動
7
8PATIENTS=200
9
10for PROB in 0.0 0.05 0.1 0.2 0.3; do
11 echo "=== 生成 mutation_prob=${PROB} ==="
12 docker exec -it SDG bash -c "SDG -n ${PATIENTS} -p ${PROB}"
13
14 # 備份到獨立資料夾
15 OUTDIR="./data_p${PROB}"
16 rm -rf "${OUTDIR}"
17 cp -r ./data "${OUTDIR}"
18
19 # 快速統計
20 echo "Patient CSV rows: $(wc -l < ${OUTDIR}/csv/patient.csv)"
21 echo "RDF triples: $(wc -l < ${OUTDIR}/synth_data.nt)"
22 echo "SQL dump size: $(du -h ${OUTDIR}/synth_data.sql.gz | cut -f1)"
23 echo ""
24done
25
26# 清理
27docker-compose down -v
28
29# 用 Python 進行簡單比較分析
30python3 << 'PYEOF'
31import pandas as pd
32import os
33
34probs = [0.0, 0.05, 0.1, 0.2, 0.3]
35stats = []
36
37for p in probs:
38 dir_path = f"./data_p{p}/csv"
39 if not os.path.exists(dir_path):
40 continue
41 pt = pd.read_csv(f"{dir_path}/patient.csv")
42 stats.append({
43 "mutation_prob": p,
44 "n_patients": len(pt),
45 "mean_age_dx": pt["age_at_diagnosis"].mean(),
46 "std_age_dx": pt["age_at_diagnosis"].std(),
47 "er_positive_rate": pt["er_positive"].mean(),
48 "death_rate": pt["death_date"].notna().mean() if "death_date" in pt.columns else None,
49 "mean_ki67": pt["ki67_percent_max_simp"].mean(),
50 })
51
52df = pd.DataFrame(stats)
53print("\n=== 各突變機率下的資料統計比較 ===")
54print(df.to_string(index=False))
55PYEOF
預期輸出:
1=== 各突變機率下的資料統計比較 ===
2 mutation_prob n_patients mean_age_dx std_age_dx er_positive_rate death_rate mean_ki67
3 0.0 200 56.82 10.12 0.86 0.12 19.45
4 0.05 200 56.95 10.34 0.84 0.13 20.12
5 0.1 200 57.23 11.56 0.80 0.15 22.78
6 0.2 200 57.89 14.23 0.72 0.18 26.34
7 0.3 200 58.12 17.45 0.65 0.21 30.56
隨著 mutation_probability 增加,可以觀察到標準差增大、ER+ 比率下降(因隨機翻轉)、Ki67 均值偏移等現象,這正是「突變」機制設計的效果。
5. 在醫療結構化資料合成生態系中的定位
5.1 Domain 1 子領域定位
SDG 屬於 Sub-domain F: Specialized (專門領域工具),專注於乳癌患者資料合成。與同生態系的其他工具比較:
graph TB
subgraph D1["Domain 1: 醫療結構化資料合成"]
subgraph A["A. Patient Simulation
患者模擬"]
SYNTHEA["Synthea
全生命週期模擬
多疾病"]
end
subgraph B["B. Privacy-Preserving
隱私保護"]
DP["TF Privacy / IBM Diffprivlib
OpenDP / SmartNoise
dp_cgans"]
end
subgraph C["C. Medical Tabular
醫療表格"]
SC["synthcity / DataSynthesizer
COR-GAN / synthEHRella"]
end
subgraph D["D. Clinical Trial
臨床試驗"]
CT["VICTRE / tsynth
TrialSynth / Simulants"]
end
subgraph E["E. Time Series
時間序列"]
TS["TemporAI"]
end
subgraph F["F. Specialized
專門領域"]
SDG_BOX["SDG
乳癌規則式生成器"]
STG["synth-data-gen-from-text"]
end
end
SDG_BOX -.->|"可補充隱私層"| DP
SDG_BOX -.->|"規模化可替換為"| SYNTHEA
SDG_BOX -.->|"輸出可作為輸入"| SC
SDG_BOX -.->|"臨床試驗模擬"| CT
style SDG_BOX fill:#ff8a80,stroke:#d32f2f,stroke-width:3px
style F fill:#ffebee,stroke:#c62828
5.2 與同類工具的比較
| 面向 | SDG (本工具) | Synthea | synthcity | COR-GAN |
|---|---|---|---|---|
| 方法 | 規則式 (Rule-Based) | 規則式 (模組化) | 深度學習 (GAN/VAE/Diffusion) | GAN |
| 疾病範圍 | 僅乳癌 | 90+ 疾病 | 任意表格資料 | EHR 通用 |
| 臨床深度 | 深 – 含化療方案、TNM、口服藥 | 中 – FHIR 標準模組 | 淺 – 學習欄位分佈 | 中 – 學習相關性 |
| 輸出格式 | CSV + RDF + SQL | FHIR / C-CDA / CSV | DataFrame | DataFrame |
| 隱私保證 | 無 (完全合成,無真實資料) | 無 (完全合成) | 可加 DP | GAN 隱含 |
| 客製化 | 需改原始碼機率參數 | 模組化設定 | API 配置 | 超參數 |
| 學習曲線 | 低 (Docker 一鍵) | 中 (Java 環境) | 中 (Python API) | 高 (訓練 GAN) |
5.3 獨特價值:過程導向 + 語意輸出
SDG 最大的差異化在於兩點:
過程導向 (Process-Based): 生成的資料具有時間軸上的因果一致性。例如,新輔助化療日期必定在手術前、輔助化療在手術後、放療在化療完成後。這種時序邏輯是純統計學習的 GAN/VAE 難以保證的。
RDF 語意輸出: 透過 RML Mapping + SDM-RDFizer,直接產出可供 SPARQL 查詢的知識圖 (Knowledge Graph; KG)。使用 PALADIN 本體論,每位患者及其臨床事件都有唯一 URI,可直接與其他 Linked Data 整合。
5.4 對 Pre-IND 藥物開發的應用場景
| 場景 | 說明 | 使用方式 |
|---|---|---|
| Protocol Design Simulation (試驗設計模擬) | 在提交 IND 前,模擬目標族群的基線特徵分佈 | 調整 SDG 參數匹配目標適應症族群 |
| 統計分析方法驗證 | 用已知分佈的合成資料驗證 SAP (Statistical Analysis Plan; 統計分析計畫) | 生成乾淨資料 (p=0.0) 驗證分析管線 |
| 資料品質管線測試 | 測試 EDC (Electronic Data Capture; 電子資料擷取) 系統的資料驗證規則 | 用不同 mutation_prob 測試 edit check |
| 隱私合規展示 | 向 IRB/EC 展示合成資料替代真實資料的可行性 | 比較合成 vs 真實資料的統計特性 |
6. 與其他工具的整合
6.1 整合 synthcity 進行隱私增強
SDG 的原始輸出是完全合成的(無隱私風險),但若需要進一步確保統計特性與真實資料一致且加入 Differential Privacy (DP; 差分隱私) 保證:
1# 概念範例:SDG 輸出 → synthcity 隱私增強
2import pandas as pd
3from synthcity.plugins import Plugins
4from synthcity.plugins.core.dataloader import GenericDataLoader
5
6# Step 1: 讀取 SDG 生成的 CSV
7sdg_patients = pd.read_csv("./data/csv/patient.csv")
8
9# Step 2: 用 synthcity 的 DPGAN 在 SDG 資料上訓練
10loader = GenericDataLoader(sdg_patients, target_column="er_positive")
11syn_model = Plugins().get("dpgan", epsilon=1.0) # epsilon 控制隱私預算
12syn_model.fit(loader)
13
14# Step 3: 生成帶 DP 保證的資料
15dp_data = syn_model.generate(count=1000)
16print(dp_data.dataframe().describe())
6.2 將 RDF 輸出載入 SPARQL Endpoint
1# 使用 Apache Jena Fuseki 載入 SDG 的 RDF 輸出
2docker run -d --name fuseki \
3 -p 3030:3030 \
4 -v $(pwd)/data:/data \
5 stain/jena-fuseki \
6 /jena-fuseki/fuseki-server --mem /sdg
7
8# 上傳 RDF 資料
9curl -X POST http://localhost:3030/sdg/data \
10 -H "Content-Type: application/n-triples" \
11 --data-binary @./data/synth_data.nt
12
13# SPARQL 查詢範例:查找所有 Stage IIIA 以上且 HER2+ 的患者
14curl -X POST http://localhost:3030/sdg/query \
15 --data-urlencode "query=
16 PREFIX paladin: <http://research.tib.eu/paladin/vocab/>
17 SELECT ?patient ?stage ?her2
18 WHERE {
19 ?patient a paladin:BCPatient ;
20 paladin:hasHER2OverallPositive ?her2 ;
21 paladin:hasStageDiagnosis ?stage .
22 FILTER(?her2 = 'Yes')
23 FILTER(?stage IN ('IIIA', 'IIIB', 'IIIC', 'IV'))
24 }
25 LIMIT 20
26 "
6.3 轉換為 CDISC SDTM 格式
SDG 輸出的 CSV 需要額外轉換才能符合 CDISC SDTM (Study Data Tabulation Model; 研究資料表格模型) 標準:
1# 概念範例:SDG CSV → SDTM DM (Demographics) Domain
2import pandas as pd
3
4patient = pd.read_csv("./data/csv/patient.csv")
5
6# 轉換為 SDTM DM domain
7dm = pd.DataFrame({
8 "STUDYID": "SDG-SYNTH-001",
9 "DOMAIN": "DM",
10 "USUBJID": patient["ehr"].apply(lambda x: f"SDG-SYNTH-001-{x:04d}"),
11 "SUBJID": patient["ehr"].apply(lambda x: f"{x:04d}"),
12 "RFSTDTC": patient["first_treatment_date"],
13 "BRTHDTC": patient["birth_date"],
14 "AGE": patient["age_at_diagnosis"],
15 "AGEU": "YEARS",
16 "SEX": "F", # 乳癌患者以女性為主
17 "RACE": "", # SDG 目前不生成種族資料
18 "DTHFL": patient["death_date"].apply(lambda x: "Y" if pd.notna(x) else ""),
19 "DTHDTC": patient["death_date"],
20})
21
22dm.to_csv("sdtm_dm.csv", index=False)
23print(f"SDTM DM domain: {len(dm)} subjects")
Blue Ocean 機會: SDG 目前不直接支援 CDISC SDTM/ADaM 格式輸出。開發一個 SDG-to-SDTM 轉換層,將乳癌合成資料自動映射到 SDTM Domains (DM, AE, CM, LB, TU, TR, RS) 是一個有價值的擴展方向,尤其對 IND 申請中的 eCTD (Electronic Common Technical Document; 電子通用技術文件) 數據包準備有直接助益。
6.4 與 TemporAI 整合做時間序列擴展
SDG 生成的化療週期 (chemoterapy_cycle) 和放療記錄本身就具有時間序列特性,可以與 TemporAI 結合:
1# 概念範例:SDG 化療時間軸 → TemporAI 時間序列模型
2import pandas as pd
3
4cycles = pd.read_csv("./data/csv/chemoterapy_cycle.csv")
5patient = pd.read_csv("./data/csv/patient.csv")
6
7# 整合為時間序列格式
8# 每位患者的化療週期序列可作為 TemporAI 的輸入
9# 用於預測治療反應、生存分析等
10timeline = cycles.merge(patient[["ehr", "er_positive", "her2_overall_positive", "stage_diagnosis"]],
11 on="ehr", how="left")
12timeline = timeline.sort_values(["ehr", "date"])
13print(f"時間序列記錄數: {len(timeline)}")
14print(f"涵蓋患者數: {timeline['ehr'].nunique()}")
7. 優缺點分析
7.1 優點
| 優點 | 詳細說明 |
|---|---|
| 臨床深度卓越 | 涵蓋乳癌治療流程 7 大面向、66 種化療方案、15 種口服藥、17 類共病,是目前最完整的單一疾病合成器之一 |
| 時序因果一致 | 過程導向確保事件順序合理:診斷 → 新輔助化療 → 手術 → 輔助化療 → 放療 → 口服藥 |
| 突變機率控制 | 獨特的 mutation_probability 參數允許精準控制資料品質等級,適合測試資料清洗管線 |
| 三格式輸出 | CSV (分析)、SQL (資料庫)、RDF (語意網) 三種格式一次滿足不同下游需求 |
| 零配置部署 | Docker 完全封裝,不需要在本機安裝任何依賴 |
| 完全合成安全 | 資料 100% 合成,無任何真實患者資訊,天然符合 HIPAA / GDPR / PDPA |
| UMLS 標準編碼 | 家族史使用 UMLS CUI 編碼,具備與其他醫療資訊系統的互操作性 |
7.2 缺點
| 缺點 | 影響程度 | 可能的緩解方案 |
|---|---|---|
| 僅限乳癌 | 高 – 無法直接用於其他癌種或疾病 | 需 fork 後大幅修改機率參數;或用 Synthea 覆蓋其他疾病 |
| 單一 Python 檔案 | 中 – 669 行的 SDG.py 包含所有邏輯,難以模組化擴展 | 需重構為模組化架構(疾病模型 / 治療流程 / 輸出格式分離) |
| 無 API / Library 介面 | 中 – 僅支援 CLI 執行,無法程式化呼叫 | 需包裝為 Python Package 或 REST API |
| 硬編碼機率參數 | 高 – 所有分佈參數直接寫在原始碼中,無法透過設定檔調整 | 需將參數外部化為 YAML/JSON 設定檔 |
| 無 CDISC 格式支援 | 中 – 輸出格式不符合法規提交標準 | 需開發 SDTM/ADaM 轉換層 |
| 不支援種族/民族 | 低 – 未納入人口學多樣性 | 需擴增資料模型 |
| MySQL 強耦合 | 中 – 生成流程依賴 MySQL 容器,增加啟動時間 | 可重構為 SQLite 或純記憶體生成 |
| 無隱私保證機制 | 低 – 完全合成因此風險低,但缺乏正式 DP 證明 | 可串接 synthcity 或 OpenDP 加上 DP 層 |
| 社群規模小 | 高 – 3 Stars、0 Forks,維護資源有限 | 學術專案特性,需評估長期維護風險 |
7.3 總結評估
SDG 是一個 小而精、領域專精 的工具。它在乳癌臨床資料的模擬深度上超越了多數通用工具(包括 Synthea 的乳癌模組),特別是在化療方案選擇、TNM 分期轉換、新輔助治療後重新分期等細節上。然而,其單一疾病侷限、硬編碼架構和極小的社群規模,使其更適合作為 概念驗證 (Proof of Concept; PoC) 或學術研究參考,而非直接用於生產環境。
對於 Pre-IND 藥物開發工作流,SDG 最佳的使用方式是:
- 快速生成乳癌患者基線特徵,用於 Protocol Design 的統計模擬
- 作為開發自家疾病專屬合成器的 參考架構 – 學習其過程導向設計和 RDF 輸出思路
- 結合 synthcity / OpenDP 加上隱私保護層後,作為對外分享的安全資料集
本教學基於 SDM-TIB/Synthetic-Data-Generator 撰寫,最後更新: 2026-06-11
Comments