Synthesizer API

Synthesizer API

合成資料產生模組,支援多種合成方法並提供資料生成功能。

類別架構

classDiagram
    class Synthesizer {
        +config: dict
        +data_syn: pd.DataFrame
        +synthesizer: object
        +_impl: object
        +__init__(method: str, **kwargs)
        +create(metadata: SchemaMetadata)
        +fit(data: pd.DataFrame)
        +sample(sample_num_rows: int, reset_sampling: bool, output_file_path: str)
        +fit_sample(data: pd.DataFrame, **kwargs)
    }

    class SynthesizerBase {
        <<abstract>>
        +config: dict
        +data_syn: pd.DataFrame
        +fit(data: pd.DataFrame)
        +sample(**kwargs)
        +fit_sample(data: pd.DataFrame, **kwargs)
    }

    class SDVSynthesizer {
        +config: dict
        +synthesizer: object
        +metadata: SchemaMetadata
        +__init__(config: dict, metadata: SchemaMetadata)
        +fit(data: pd.DataFrame)
        +sample(sample_num_rows: int, reset_sampling: bool, output_file_path: str)
        +_create_synthesizer()
        +_convert_metadata()
    }

    class CustomSynthesizer {
        +config: dict
        +metadata: SchemaMetadata
        +custom_synthesizer: object
        +__init__(config: dict, metadata: SchemaMetadata)
        +fit(data: pd.DataFrame)
        +sample(sample_num_rows: int, reset_sampling: bool, output_file_path: str)
        +_load_custom_module()
    }

    class CustomData {
        +config: dict
        +metadata: SchemaMetadata
        +__init__(config: dict, metadata: SchemaMetadata)
        +fit(data: pd.DataFrame)
        +sample()
        +_load_custom_data()
    }

    class SchemaMetadata {
        <<dataclass>>
        +id: str
        +name: str
        +attributes: list
    }

    class Config {
        <<dataclass>>
        +method: str
        +method_code: int
        +kwargs: dict
    }

    Synthesizer ..> SynthesizerBase : 使用
    Synthesizer ..> SchemaMetadata : 依賴
    Synthesizer ..> Config : 組合

    SynthesizerBase <|-- SDVSynthesizer : 繼承
    SynthesizerBase <|-- CustomSynthesizer : 繼承
    SynthesizerBase <|-- CustomData : 繼承

    SDVSynthesizer *-- SchemaMetadata : 組合
    SDVSynthesizer *-- Config : 組合

    CustomSynthesizer *-- SchemaMetadata : 組合
    CustomSynthesizer *-- Config : 組合

    CustomData *-- SchemaMetadata : 組合
    CustomData *-- Config : 組合

圖例說明:

  • 藍色框:主要類別
  • 橘色框:子類別實作
  • 淺紫框:配置與資料類別
  • <|--:繼承關係 (inheritance)
  • *--:組合關係 (composition)
  • ..>:依賴關係 (dependency)

基本使用

from petsard import Synthesizer

# 使用預設方法(SDV GaussianCopula)
synthesizer = Synthesizer(method='default')
synthesizer.create(metadata=metadata)
synthesizer.fit_sample(data=df)
synthetic_data = synthesizer.data_syn

# 使用特定 SDV 方法
synthesizer = Synthesizer(method='sdv-single_table-ctgan')
synthesizer.create(metadata=metadata)
synthesizer.fit_sample(data=df, sample_num_rows=1000)

建構函式 (init)

初始化合成資料產生器實例。

語法

def __init__(
    method: str,
    **kwargs
)

參數

  • method : str, required

    • 合成方法名稱
    • 必要參數
    • 支援的方法:
      • 'default':使用 SDV-GaussianCopula
      • 'sdv-single_table-{method}':使用 SDV 提供的單表方法(考量未來 SDV 版本可能變動,不詳列所有內建方法)
      • 'custom_method':自訂合成方法(需要額外參數)
  • kwargs : dict, optional

    • 傳遞給特定合成器的額外參數
    • 自訂方法需要:
      • module_path:自訂模組路徑
      • class_name:自訂類別名稱

返回值

  • Synthesizer
    • 初始化後的合成器實例

使用範例

from petsard import Synthesizer

# 使用預設方法
synthesizer = Synthesizer(method='default')

# 使用 SDV CTGAN
synthesizer = Synthesizer(method='sdv-single_table-ctgan')

# 使用 SDV GaussianCopula 並設定參數
synthesizer = Synthesizer(
    method='sdv-single_table-gaussiancopula',
    default_distribution='truncnorm'
)

# 使用自訂合成器
synthesizer = Synthesizer(
    method='custom_method',
    module_path='custom_synthesis.py',
    class_name='MySynthesizer'
)

預設參數

所有 SDV 合成器都會使用以下預設參數進行初始化,以確保數值精度:

  • enforce_rounding=True:套用至所有 SDV 合成器類型,維持數值欄位的整數精度
  • enforce_min_max_values=True:僅套用於 TVAE 和 GaussianCopula 合成器,用於強制數值範圍限制

精度四捨五入

所有合成器會根據 schema metadata 自動套用精度四捨五入。當 schema 中指定了精度設定(無論是 v1.0 或 v2.0 格式),合成器會將生成的數值四捨五入到指定的小數位數。

此功能確保合成資料維持與原始資料相同的數值精度,這對以下應用非常重要:

  • 金融資料(價格、金額)
  • 科學測量
  • 統計報告
  • 任何對精度敏感的應用

注意事項

  • custom_data 方法'custom_data' 方法用於載入外部合成資料,由框架層級處理,不需要合成器實例化
  • 建議作法:使用 YAML 配置檔而非直接使用 Python API
  • 方法調用順序:必須先呼叫 create() 再呼叫 fit()fit_sample()
  • 資料輸出:生成的合成資料儲存於 data_syn 屬性
  • 文件說明:本段文件僅供開發團隊內部參考,不保證向後相容
  • Schema 使用:建議使用 SchemaMetadata 來定義資料結構,詳細設定請參閱 Metadater API 文檔