SDMetrics 完整教學
Repository: https://github.com/sdv-dev/SDMetrics Stars: 261 | Forks: 52 | License: MIT Language: Python | Last Updated: 2026-06-09 Tags:
synthetic-data,metrics,qualityDocumentation: https://docs.sdv.dev/sdmetrics DOI: 10.5281/zenodo.14279167
2. 核心架構 (Core Architecture)
2.1 四層指標體系
SDMetrics 的指標 (metric) 架構分為四個粒度層級 (granularity levels),從單一欄位到多表關聯:
graph TD
subgraph "SDMetrics 指標層級架構"
L1["Single Column Metrics
單欄位指標"]
L2["Column Pair Metrics
欄位對指標"]
L3["Single Table Metrics
單表指標"]
L4["Multi Table Metrics
多表指標"]
end
subgraph "Single Column
(11 個指標)"
SC1["BoundaryAdherence
邊界遵守"]
SC2["KSComplement
KS 統計量補數"]
SC3["TVComplement
全變差補數"]
SC4["CSTest
卡方檢定"]
SC5["CategoryCoverage
類別覆蓋率"]
SC6["RangeCoverage
範圍覆蓋率"]
SC7["StatisticSimilarity
統計量相似度"]
SC8["MissingValueSimilarity
缺失值相似度"]
SC9["KeyUniqueness
鍵值唯一性"]
SC10["CategoryAdherence
類別遵守"]
SC11["SequenceLengthSimilarity
序列長度相似度"]
end
subgraph "Column Pairs
(7 個指標)"
CP1["CorrelationSimilarity
相關性相似度"]
CP2["ContingencySimilarity
列聯相似度"]
CP3["KLDivergence
KL 散度"]
CP4["ReferentialIntegrity
參照完整性"]
CP5["CardinalityBoundaryAdherence
基數邊界遵守"]
end
subgraph "Single Table 進階"
ST1["NewRowSynthesis
新列合成度"]
ST2["Detection Metrics
偵測指標"]
ST3["Efficacy Metrics
效能指標"]
ST4["Privacy Metrics
隱私指標"]
ST5["BNLikelihood
貝氏網路似然"]
end
L1 --> SC1 & SC2 & SC3 & SC4 & SC5
L2 --> CP1 & CP2 & CP3
L3 --> ST1 & ST2 & ST3 & ST4
L4 --> CP4 & CP5
style L1 fill:#4ECDC4,stroke:#333,color:#000
style L2 fill:#45B7D1,stroke:#333,color:#000
style L3 fill:#96CEB4,stroke:#333,color:#000
style L4 fill:#FFEAA7,stroke:#333,color:#000
2.2 報告系統架構
graph LR
subgraph "輸入"
R["real_data
pd.DataFrame"]
S["synthetic_data
pd.DataFrame"]
M["metadata
dict / JSON"]
end
subgraph "報告引擎"
BR["BaseReport
基礎報告類別"]
QR["QualityReport
品質報告"]
DR["DiagnosticReport
診斷報告"]
end
subgraph "QualityReport Properties"
CS["Column Shapes
欄位形狀"]
CT["Column Pair Trends
欄位對趨勢"]
end
subgraph "DiagnosticReport Properties"
DV["Data Validity
資料有效性"]
DS["Structure
資料結構"]
end
subgraph "輸出"
SC["Overall Score
0~100%"]
VZ["Visualization
Plotly 互動圖"]
DT["Details Table
pd.DataFrame"]
PK["Pickle Report
.pkl 檔案"]
end
R & S & M --> BR
BR --> QR & DR
QR --> CS & CT
DR --> DV & DS
CS & CT --> SC & VZ & DT
DV & DS --> SC & VZ & DT
SC --> PK
style QR fill:#2ECC71,stroke:#333,color:#000
style DR fill:#E74C3C,stroke:#333,color:#fff
2.3 指標分類與計算邏輯
| 類別 | 指標名稱 | 適用資料型別 | 計算方法 | 輸出範圍 |
|---|---|---|---|---|
| 分布形狀 | KSComplement | 數值 (numerical) | 1 - KS statistic (KS 統計量) | 0~1 |
| 分布形狀 | TVComplement | 類別 (categorical) | 1 - Total Variation distance (全變差距離) | 0~1 |
| 分布形狀 | CSTest | 類別 | Chi-squared test p-value (卡方檢定) | 0~1 |
| 邊界 | BoundaryAdherence | 數值 | 合成值落在真實 min/max 內的比例 | 0~1 |
| 覆蓋 | CategoryCoverage | 類別 | 合成值覆蓋的真實類別比例 | 0~1 |
| 覆蓋 | RangeCoverage | 數值 | 合成值覆蓋的真實範圍比例 | 0~1 |
| 關聯性 | CorrelationSimilarity | 數值對 | 真實 vs 合成的 Pearson r 差距 | 0~1 |
| 關聯性 | ContingencySimilarity | 類別對 | 列聯表 (contingency table) 相似度 | 0~1 |
| 隱私 | NewRowSynthesis | 全表 | 合成列與真實列的距離 (非複製品比例) | 0~1 |
| 隱私 | DisclosureProtection | 全表 | 隱私洩漏防護分數 | 0~1 |
| 隱私 | DCRBaselineProtection | 全表 | Distance to Closest Record (DCR; 最近紀錄距離) 基準防護 | 0~1 |
| 效能 | BinaryLogisticRegression | 全表 | 合成資料訓練的分類器在真實資料上的 F1 | 0~1 |
| 偵測 | LogisticDetection | 全表 | 分類器區分真實/合成的 AUROC | 0~1 |
3. 安裝與設定 (Installation & Setup)
3.1 基本安裝
1# 使用 pip(推薦搭配虛擬環境)
2pip install sdmetrics
3
4# 使用 conda
5conda install -c conda-forge sdmetrics
6
7# 使用 uv(AIKT 推薦方式)
8uv pip install sdmetrics
3.2 依賴說明
SDMetrics 的核心依賴包含:
| 套件 | 用途 |
|---|---|
pandas | 資料載入與處理 |
numpy | 數值計算 |
scipy | 統計檢定 (KS test, Chi-squared test) |
scikit-learn | Detection metrics、Privacy metrics 的分類器 |
plotly | 報告視覺化 |
tqdm | 進度條 |
3.3 驗證安裝
1import sdmetrics
2print(sdmetrics.__version__)
3
4# 載入 demo 資料驗證
5from sdmetrics import load_demo
6real_data, synthetic_data, metadata = load_demo(modality='single_table')
7print(f"Real data shape: {real_data.shape}")
8print(f"Synthetic data shape: {synthetic_data.shape}")
9print(f"Metadata columns: {list(metadata['columns'].keys())}")
3.4 Metadata 格式
SDMetrics 需要一個 metadata dictionary (元資料字典) 來描述每個欄位的資料型別:
1metadata = {
2 "columns": {
3 "gene_expr_A": {"sdtype": "numerical"},
4 "gene_expr_B": {"sdtype": "numerical"},
5 "cell_type": {"sdtype": "categorical"},
6 "patient_id": {"sdtype": "id"},
7 "measurement_date": {"sdtype": "datetime", "datetime_format": "%Y-%m-%d"}
8 },
9 "primary_key": "patient_id"
10}
支援的 sdtype 值:
numerical— 連續數值categorical— 離散類別boolean— 布林值datetime— 日期時間id— 主鍵/唯一識別碼(報告會跳過此欄位)
4. 使用方式與程式碼範例 (Usage & Code Examples)
4.1 範例一:品質報告 — 評估合成臨床資料的統計保真度
這個範例展示如何使用 QualityReport 來評估合成資料是否保留了真實資料的統計分布特性。適用場景:你用 CTGAN 或 TabDDPM 生成了合成的臨床試驗表格,需要量化品質。
1import pandas as pd
2import numpy as np
3from sdmetrics.reports.single_table import QualityReport, DiagnosticReport
4
5# === 模擬藥物開發場景的資料 ===
6np.random.seed(42)
7n = 500
8
9# 真實資料:臨床試驗的受試者數據
10real_data = pd.DataFrame({
11 "patient_age": np.random.normal(55, 12, n).clip(18, 85),
12 "tumor_size_mm": np.random.lognormal(3.0, 0.5, n),
13 "biomarker_level": np.random.gamma(2, 3, n),
14 "treatment_group": np.random.choice(["drug_A", "drug_B", "placebo"], n, p=[0.4, 0.4, 0.2]),
15 "response": np.random.choice(["CR", "PR", "SD", "PD"], n, p=[0.15, 0.25, 0.35, 0.25]),
16})
17
18# 合成資料(假設由某個 SDG 模型生成)
19synthetic_data = pd.DataFrame({
20 "patient_age": np.random.normal(54, 13, n).clip(18, 85),
21 "tumor_size_mm": np.random.lognormal(3.1, 0.6, n),
22 "biomarker_level": np.random.gamma(2.1, 2.8, n),
23 "treatment_group": np.random.choice(["drug_A", "drug_B", "placebo"], n, p=[0.38, 0.42, 0.20]),
24 "response": np.random.choice(["CR", "PR", "SD", "PD"], n, p=[0.13, 0.27, 0.33, 0.27]),
25})
26
27# Metadata 定義
28metadata = {
29 "columns": {
30 "patient_age": {"sdtype": "numerical"},
31 "tumor_size_mm": {"sdtype": "numerical"},
32 "biomarker_level": {"sdtype": "numerical"},
33 "treatment_group": {"sdtype": "categorical"},
34 "response": {"sdtype": "categorical"},
35 }
36}
37
38# === 生成品質報告 ===
39quality_report = QualityReport()
40quality_report.generate(real_data, synthetic_data, metadata)
41
42# 取得整體分數
43print(f"Overall Quality Score: {quality_report.get_score():.2%}")
44
45# 取得各 property 的分數
46properties = quality_report.get_properties()
47print(properties)
48# 輸出範例:
49# Property Name Score
50# 0 Column Shapes 0.89
51# 1 Column Pair Trends 0.76
52
53# 取得各欄位的詳細分數
54details = quality_report.get_details(property_name='Column Shapes')
55print(details)
56# 輸出範例:
57# Column Metric Score
58# 0 patient_age KSComplement 0.92
59# 1 tumor_size_mm KSComplement 0.85
60# 2 biomarker_level KSComplement 0.88
61# 3 treatment_group TVComplement 0.94
62# 4 response TVComplement 0.91
63
64# === 生成診斷報告 ===
65diagnostic_report = DiagnosticReport()
66diagnostic_report.generate(real_data, synthetic_data, metadata)
67print(f"Diagnostic Score: {diagnostic_report.get_score():.2%}")
68
69# === 視覺化 ===
70# 產生 Plotly 互動圖(在 Jupyter Notebook 中直接顯示)
71fig = quality_report.get_visualization(property_name='Column Shapes')
72# fig.show() # 取消註解以顯示
73
74# 儲存報告
75quality_report.save(filepath='clinical_trial_quality.pkl')
4.2 範例二:隱私指標 — 確認合成 scRNA-seq 不洩漏個體基因資訊
在藥物開發中,合成 scRNA-seq 資料必須確保不洩漏個別病患的基因表達譜 (gene expression profile)。SDMetrics 提供多種隱私指標來量化洩漏風險。
1from sdmetrics.single_table import NewRowSynthesis
2from sdmetrics.single_table.privacy import (
3 DisclosureProtection,
4 DCRBaselineProtection,
5 DCROverfittingProtection,
6 CategoricalCAP,
7)
8
9# === 檢查合成資料是否為真實資料的複製品 ===
10# NewRowSynthesis:計算合成列中有多少比例是「新」的(非真實資料的精確複製)
11new_row_score = NewRowSynthesis.compute(
12 real_data,
13 synthetic_data,
14 metadata,
15 numerical_match_tolerance=0.01, # 數值容差 1%
16 synthetic_sample_size=100, # 抽樣 100 列做比對
17)
18print(f"New Row Synthesis Score: {new_row_score:.4f}")
19# 理想值 = 1.0(所有合成列都是新的)
20# 警戒值 < 0.9(過多複製)
21
22# === Disclosure Protection(洩漏防護)===
23# 衡量攻擊者能否透過合成資料推斷真實資料中的敏感欄位
24disclosure_score = DisclosureProtection.compute(
25 real_data,
26 synthetic_data,
27 metadata,
28 known_column_names=["treatment_group", "patient_age"], # 攻擊者已知的欄位
29 sensitive_column_names=["response"], # 敏感欄位(目標推斷)
30)
31print(f"Disclosure Protection Score: {disclosure_score:.4f}")
32# 高分 = 隱私保護好,攻擊者難以推斷
33
34# === DCR (Distance to Closest Record) 指標 ===
35# DCRBaselineProtection:合成資料與真實資料的最近距離是否高於隨機基線
36dcr_baseline = DCRBaselineProtection.compute(
37 real_data,
38 synthetic_data,
39 metadata,
40)
41print(f"DCR Baseline Protection: {dcr_baseline:.4f}")
42
43# DCROverfittingProtection:合成資料是否過擬合(memorize)訓練資料
44dcr_overfit = DCROverfittingProtection.compute(
45 real_data,
46 synthetic_data,
47 metadata,
48)
49print(f"DCR Overfitting Protection: {dcr_overfit:.4f}")
50
51# === 解讀隱私分數的決策框架 ===
52print("\n=== 隱私評估摘要 ===")
53privacy_pass = True
54checks = {
55 "New Row Synthesis": (new_row_score, 0.9),
56 "Disclosure Protection": (disclosure_score, 0.7),
57 "DCR Baseline": (dcr_baseline, 0.5),
58 "DCR Overfitting": (dcr_overfit, 0.5),
59}
60for name, (score, threshold) in checks.items():
61 status = "PASS" if score >= threshold else "FAIL"
62 if score < threshold:
63 privacy_pass = False
64 print(f" {name}: {score:.3f} (threshold={threshold}) [{status}]")
65
66print(f"\nOverall Privacy: {'PASS - Safe to share' if privacy_pass else 'FAIL - Review needed'}")
4.3 範例三:跨模型比較 — 評估多個 SDG 生成器的品質
這是 SDMetrics 最強大的用法:同一份真實資料,比較不同 SDG 模型(CTGAN vs TabDDPM vs Copula)生成的合成資料品質。
1from sdmetrics.reports.single_table import QualityReport
2from sdmetrics.single_table import NewRowSynthesis
3from sdmetrics.single_column import KSComplement, TVComplement, BoundaryAdherence
4import pandas as pd
5import numpy as np
6
7# === 假設有三個模型的合成輸出 ===
8# (實際使用中,這些會由 SDV/CTGAN/TabDDPM 分別生成)
9models = {
10 "CTGAN": synthetic_data_ctgan, # CTGAN 生成的資料
11 "TabDDPM": synthetic_data_tabddpm, # TabDDPM 生成的資料
12 "GaussianCopula": synthetic_data_gc, # GaussianCopula 生成的資料
13}
14
15# === 逐模型評估 ===
16results = []
17
18for model_name, syn_data in models.items():
19 # 品質報告
20 qr = QualityReport()
21 qr.generate(real_data, syn_data, metadata)
22 quality_score = qr.get_score()
23
24 # 隱私分數
25 privacy_score = NewRowSynthesis.compute(
26 real_data, syn_data, metadata,
27 numerical_match_tolerance=0.01,
28 synthetic_sample_size=min(100, len(syn_data)),
29 )
30
31 # 逐欄位 KS / TV 分數
32 column_scores = {}
33 for col, col_meta in metadata["columns"].items():
34 if col_meta["sdtype"] == "numerical":
35 column_scores[col] = KSComplement.compute(real_data[col], syn_data[col])
36 elif col_meta["sdtype"] == "categorical":
37 column_scores[col] = TVComplement.compute(real_data[col], syn_data[col])
38
39 # 邊界遵守
40 boundary_scores = {}
41 for col, col_meta in metadata["columns"].items():
42 if col_meta["sdtype"] == "numerical":
43 boundary_scores[col] = BoundaryAdherence.compute(real_data[col], syn_data[col])
44
45 results.append({
46 "Model": model_name,
47 "Quality Score": quality_score,
48 "Privacy Score": privacy_score,
49 "Avg Column Score": np.mean(list(column_scores.values())),
50 "Avg Boundary Adherence": np.mean(list(boundary_scores.values())),
51 })
52
53# === 比較結果表 ===
54comparison_df = pd.DataFrame(results)
55comparison_df = comparison_df.sort_values("Quality Score", ascending=False)
56print(comparison_df.to_string(index=False))
57
58# 輸出範例:
59# Model Quality Score Privacy Score Avg Column Score Avg Boundary Adherence
60# TabDDPM 0.91 0.98 0.89 0.95
61# CTGAN 0.84 1.00 0.82 0.88
62# GaussianCopula 0.79 0.99 0.77 0.92
63
64# === 決策建議 ===
65best_model = comparison_df.iloc[0]
66print(f"\n推薦模型: {best_model['Model']}")
67print(f" 品質分數: {best_model['Quality Score']:.2%}")
68print(f" 隱私分數: {best_model['Privacy Score']:.2%}")
5. 在 SDG 生態系中的定位 (Position in the SDG Ecosystem)
5.1 SDG 評估工具對照
| 工具 | 定位 | 指標數量 | 隱私指標 | 視覺化 | 多表支援 | 活躍度 |
|---|---|---|---|---|---|---|
| SDMetrics | SDV 官方評估 | ~30+ | 完整(DCR, CAP, Disclosure) | Plotly 互動 | 原生支援 | 高 |
| syncora-benchmarks | 學術 benchmark 框架 | ~15 | 有限 | 基本 | 部分 | 中 |
| STDG-evaluation-metrics | 論文實驗用 | ~10 | 無 | 無 | 無 | 低 |
| table-evaluator | 獨立評估 | ~20 | 部分 | Matplotlib | 無 | 低 |
5.2 在 Bio-SDG 管線中的角色
在 Domain 3 的 SDG 生態系中,SDMetrics 扮演的是 「品質守門員 (quality gatekeeper)」 的角色:
1生成器 (Generator) 評估器 (Evaluator) 決策 (Decision)
2┌─────────────┐ ┌────────────┐ ┌──────────┐
3│ CTGAN │──┐ │ │──Quality──→ │ │
4│ TabDDPM │──┼─synthetic│ SDMetrics │──Privacy──→ │ GO/NO-GO │
5│ GaussianCopula│──┤ data │ │──Efficacy─→ │ │
6│ ForestDiffusion│──┘ │ │──Diagnostic→│ │
7└─────────────┘ └────────────┘ └──────────┘
8 ↑ ↑ │
9 real_data metadata 最佳模型選擇
5.3 與 AIKT WP1-WP7 管線的對應
| AIKT 階段 | SDMetrics 用途 |
|---|---|
| WP1 (資料前處理) | 用 DiagnosticReport 驗證資料格式、結構有效性 |
| WP2 (特徵工程) | 用 CorrelationSimilarity 確認合成資料保留特徵間關聯 |
| WP3 (模型訓練) | 用 Efficacy Metrics (ML Efficacy) 評估合成資料的下游任務效能 |
| WP4 (模型驗證) | 用 QualityReport 做整體品質評估 |
| WP5 (隱私合規) | 用 DisclosureProtection + DCR 系列確保 HIPAA / GDPR 合規 |
6. 與其他工具的整合 (Integration with Other SDG Tools)
6.1 與 SDV (Synthetic Data Vault) 的原生整合
SDMetrics 是 SDV 生態系的一部分,與 SDV 的整合是無縫的:
1# SDV 生成 + SDMetrics 評估的完整流程
2from sdv.single_table import CTGANSynthesizer, GaussianCopulaSynthesizer
3from sdv.metadata import Metadata
4from sdmetrics.reports.single_table import QualityReport
5
6# 1. 定義 metadata
7metadata = Metadata.detect_from_dataframe(real_data)
8
9# 2. 訓練 + 生成
10ctgan = CTGANSynthesizer(metadata)
11ctgan.fit(real_data)
12synthetic_ctgan = ctgan.sample(num_rows=len(real_data))
13
14gc = GaussianCopulaSynthesizer(metadata)
15gc.fit(real_data)
16synthetic_gc = gc.sample(num_rows=len(real_data))
17
18# 3. 用 SDMetrics 比較
19for name, syn in [("CTGAN", synthetic_ctgan), ("GaussianCopula", synthetic_gc)]:
20 qr = QualityReport()
21 qr.generate(real_data, syn, metadata.to_dict())
22 print(f"{name}: {qr.get_score():.2%}")
6.2 與 CTGAN / TabDDPM 等獨立生成器的整合
由於 model-agnostic 設計,SDMetrics 可直接用於任何生成器的輸出:
1# 與 TabDDPM 整合範例
2# 1. TabDDPM 生成合成資料(見 08-TabDDPM 教學)
3# synthetic_tabddpm = tabddpm_generate(real_data, ...)
4
5# 2. 直接用 SDMetrics 評估
6from sdmetrics.reports.single_table import QualityReport
7qr = QualityReport()
8qr.generate(real_data, synthetic_tabddpm, metadata)
9
10# 3. 與 CTGAN 的結果並排比較
11# (SDMetrics 不需要知道資料來源)
6.3 與 synthcity 的整合
synthcity 有自己的評估模組,但 SDMetrics 可以作為額外的第三方驗證:
1# synthcity 生成 → SDMetrics 獨立評估
2from synthcity.plugins import Plugins
3from sdmetrics.reports.single_table import QualityReport
4
5# synthcity 生成
6syn_model = Plugins().get("ctgan")
7syn_model.fit(real_data)
8synthetic_synthcity = syn_model.generate(count=len(real_data)).dataframe()
9
10# SDMetrics 獨立評估
11qr = QualityReport()
12qr.generate(real_data, synthetic_synthcity, metadata)
13print(f"synthcity CTGAN Quality: {qr.get_score():.2%}")
6.4 與 pandas / scikit-learn 的整合
SDMetrics 的所有輸出都是標準 Python 物件(float、pandas.DataFrame),可以直接整合到任何 ML pipeline:
1# 將 SDMetrics 結果整合到 MLflow 追蹤
2import mlflow
3
4with mlflow.start_run(run_name="sdg_evaluation"):
5 qr = QualityReport()
6 qr.generate(real_data, synthetic_data, metadata)
7
8 mlflow.log_metric("sdmetrics_quality_score", qr.get_score())
9
10 details = qr.get_details("Column Shapes")
11 for _, row in details.iterrows():
12 mlflow.log_metric(f"sdmetrics_{row['Column']}_{row['Metric']}", row['Score'])
7. 優缺點分析 (Strengths & Limitations)
7.1 優勢 (Strengths)
| 優勢 | 說明 |
|---|---|
| Model-Agnostic | 不綁定任何生成器,可用於 CTGAN、TabDDPM、LLM-based 等任何來源的合成資料 |
| 完整的隱私指標 | DCR、Disclosure Protection、CAP 等隱私指標是同類工具中最完整的 |
| 報告系統 | QualityReport / DiagnosticReport 提供一鍵式評估 + Plotly 視覺化 |
| 多表支援 | 原生支援含外鍵的多表資料集評估,其他工具多半只支援單表 |
| MIT 授權 | 可自由用於商業研究,無授權疑慮 |
| API 設計一致 | 所有指標都遵循 Metric.compute(real, synthetic) 的統一介面 |
| 學術引用 | 有 DOI (Zenodo),可在論文中正式引用 |
7.2 限制 (Limitations)
| 限制 | 說明 | 因應策略 |
|---|---|---|
| 無生物特化指標 | 缺少基因表達特有的評估維度(如 DE gene 保留率、pathway 保真度) | 需自行擴展或搭配 scDesign3 的內建評估 |
| 高維資料效能 | 數千欄位(如完整 scRNA-seq 基因矩陣)的逐欄計算耗時 | 先做特徵選擇 (feature selection) 後再評估 |
| 時序支援有限 | Time series 模式目前僅有 demo 資料,指標不如 single/multi table 成熟 | 時序場景考慮用 TSTR (Train on Synthetic, Test on Real) 自行計算 |
| 無影像/非表格支援 | 僅限表格資料 (tabular),不支援影像、文字、圖 (graph) 等模式 | 影像用 FID/IS,文字用 BLEU/BERTScore |
| Column Pair 組合爆炸 | 欄位數 N 大時,Column Pair 指標的計算量為 O(N^2) | 設定 real_correlation_threshold 過濾弱相關 |
| 與 SDV 的耦合 | metadata 格式沿用 SDV 的 sdtype 規範,非 SDV 使用者需額外適配 | metadata dict 結構簡單,適配成本低 |
7.3 對藥物開發場景的建議
| 場景 | 推薦指標組合 | 備註 |
|---|---|---|
| 合成臨床試驗表格 | QualityReport + DisclosureProtection + DCR | FDA 合規需要隱私保證 |
| 合成 scRNA-seq 矩陣 | KSComplement (per-gene) + CorrelationSimilarity (gene pairs) + NewRowSynthesis | 高維場景需先降維 |
| 合成分子描述符 | BoundaryAdherence + RangeCoverage + Efficacy Metrics | 確保分子屬性值域合理 |
| 資料增強 (data augmentation) | BinaryClassifierPrecisionEfficacy + Recall Efficacy | 直接衡量增強後下游效能 |
| 多中心臨床資料 | Multi-Table QualityReport + ReferentialIntegrity | 保留跨表關聯 |
7.4 Blue Ocean 機會
SDMetrics 的「缺口」正好指向幾個 blue ocean (藍海) 機會:
- Bio-SDMetrics:擴展 SDMetrics 加入生物特化指標(DE gene preservation、pathway fidelity score、cell type proportion accuracy)
- Privacy-for-Omics:針對 omics 資料的隱私攻擊模型(membership inference 在高維稀疏資料上的特殊性)
- Temporal Omics Metrics:時間序列 omics 資料(如 longitudinal scRNA-seq)的評估框架
- Cross-Modality Metrics:跨模態合成資料品質評估(例如同時生成的基因表達 + 臨床表格的一致性)
附錄:快速參考
常用指標速查
1from sdmetrics.single_column import (
2 KSComplement, # 數值分布 (越高越好)
3 TVComplement, # 類別分布 (越高越好)
4 BoundaryAdherence, # 邊界遵守 (越高越好)
5 CategoryCoverage, # 類別覆蓋 (越高越好)
6 RangeCoverage, # 範圍覆蓋 (越高越好)
7 StatisticSimilarity, # 統計量相似 (越高越好)
8)
9
10from sdmetrics.column_pairs.statistical import (
11 CorrelationSimilarity, # 相關性相似 (越高越好)
12 ContingencySimilarity, # 列聯相似 (越高越好)
13)
14
15from sdmetrics.single_table import (
16 NewRowSynthesis, # 新列比例 (越高越好)
17)
18
19from sdmetrics.single_table.privacy import (
20 DisclosureProtection, # 洩漏防護 (越高越好)
21 DCRBaselineProtection, # DCR 基線 (越高越好)
22 DCROverfittingProtection, # DCR 過擬合 (越高越好)
23)
24
25from sdmetrics.reports.single_table import (
26 QualityReport, # 一鍵品質報告
27 DiagnosticReport, # 一鍵診斷報告
28)
Metadata 模板(藥物開發場景)
1pharma_metadata = {
2 "columns": {
3 "patient_id": {"sdtype": "id"},
4 "age": {"sdtype": "numerical"},
5 "weight_kg": {"sdtype": "numerical"},
6 "sex": {"sdtype": "categorical"},
7 "diagnosis": {"sdtype": "categorical"},
8 "treatment_arm": {"sdtype": "categorical"},
9 "dosage_mg": {"sdtype": "numerical"},
10 "response_rate": {"sdtype": "numerical"},
11 "adverse_event": {"sdtype": "boolean"},
12 "enrollment_date": {"sdtype": "datetime", "datetime_format": "%Y-%m-%d"},
13 },
14 "primary_key": "patient_id"
15}
Comments