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, quality Documentation: 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全表合成資料訓練的分類器在真實資料上的 F10~1
偵測LogisticDetection全表分類器區分真實/合成的 AUROC0~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-learnDetection 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 評估工具對照

工具定位指標數量隱私指標視覺化多表支援活躍度
SDMetricsSDV 官方評估~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 + DCRFDA 合規需要隱私保證
合成 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 (藍海) 機會:

  1. Bio-SDMetrics:擴展 SDMetrics 加入生物特化指標(DE gene preservation、pathway fidelity score、cell type proportion accuracy)
  2. Privacy-for-Omics:針對 omics 資料的隱私攻擊模型(membership inference 在高維稀疏資料上的特殊性)
  3. Temporal Omics Metrics:時間序列 omics 資料(如 longitudinal scRNA-seq)的評估框架
  4. 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}