在数据科学的实际工作中,我们经常会遇到这样的情况:手头的真实数据要么不够用,要么因为隐私合规问题无法直接使用,但这些数据往往包含重要的统计规律,但直接拿来做实验或测试却十分的麻烦。
这时候合成数据就派上用场了,简单说就是根据现有数据集的分布特征,人工创造出任意数量的新数据行,让这些"假数据"在统计意义上跟真实数据无法区分。听起来像是是在"造假",但实际上这是一项真正的技术活——既要保证数据的真实性(统计规律相符),又要确保隐私性(无法反推个体)。
合成数据的应用场景非常广泛:异常检测模型需要大量边缘案例来训练,但真实异常样本稀缺;敏感数据需要脱敏处理,生成统计特征相似但无法追溯的数据;软件系统测试需要海量数据,但真实数据获取成本高昂。不管做哪个方向的数据科学工作,掌握几种合成数据生成方法都是最近本的要求。
本文将重点介绍如何让合成数据在分布特征和列间关系上都跟真实数据保持一致。我们会介绍两种基于多项式分布的实践方法,不预设具体应用场景,纯粹从技术角度拆解生成过程。
最简单的生成方式
最直接的思路就是逐行逐单元格地生成数据,每个单元格独立生成,互不影响。这个办法确实简单粗暴,在某些场景就够用,并且也是其他复杂方法的基础。
假设有这么一张真实数据表:
这是某公司某段时间的员工报销记录,七个字段(实际业务数据字段会更多)。
https://avoid.overfit.cn/post/46d206b780a844c0b9a72334a5f276da