想生成表格合成数据,可以先用无隐私的玩具表验证 SDV 的“检测元数据、拟合、采样、检查”流程。合成数据是根据输入表学到的统计关系生成的新行;它不会自动保证隐私安全、业务约束正确或下游模型有效。下面的数据完全是人为编造的接口演示,未对真实业务数据实测。
准备玩具表并检查元数据
在独立 Python 环境安装 sdv 与 pandas。SDV 的元数据文档说明可以用 Metadata.detect_from_dataframes() 检测表结构,但自动检测之后仍要检查列类型。这里明确把类别列指定为 categorical,避免把编号误当连续数值。

import pandas as pd
from sdv.metadata import Metadata
rows = []
for day in range(1, 21):
rows.append({
"segment": "new" if day % 2 else "returning",
"visits": 1 + day % 5,
"orders": 1 if day % 4 == 0 else 0,
})
real_data = pd.DataFrame(rows)
metadata = Metadata.detect_from_dataframes({"visits_table": real_data})
metadata.update_column(column_name="segment", sdtype="categorical",
table_name="visits_table")
metadata.validate()
print(real_data.dtypes)
print(metadata.to_dict())
请先核对 segment、visits 和 orders 的类型与业务含义;真实表中的标识符、日期、缺失值和约束需要单独检查。20 行玩具数据过少,生成值只用于看接口是否通顺,不用于判断统计质量。
拟合、采样并比较基本分布
SDV 的GaussianCopulaSynthesizer 官方文档给出构造合成器、fit() 和 sample(num_rows=...) 的流程。下面生成 10 行,并把原表与合成表的列、空值和简单分布并排检查。
from sdv.single_table import GaussianCopulaSynthesizer
synthesizer = GaussianCopulaSynthesizer(metadata)
synthesizer.fit(real_data)
synthetic = synthesizer.sample(num_rows=10)
print(synthetic.head())
print("列一致:", list(synthetic.columns) == list(real_data.columns))
print("空值数量:", synthetic.isna().sum().to_dict())
print("原表类别:", real_data["segment"].value_counts().to_dict())
print("合成类别:", synthetic["segment"].value_counts().to_dict())
print("原表数值范围:", real_data[["visits", "orders"]].agg(["min", "max"]))
print("合成数值范围:", synthetic[["visits", "orders"]].agg(["min", "max"]))
验证方法是确认采样返回 10 行、列名和预期类型正确,再检查类别、范围、缺失率及业务规则;实际项目还应比较相关性和下游任务表现。若元数据检测错误,应先人工修正列类型再拟合;若生成行违反业务规则,不能直接投入生产。对真实个人或商业敏感数据,使用前需要独立做泄漏与隐私风险评估,不能因为数据标为“合成”就对外公开。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/29972.html