打开数据处理工具,它在你说明数据用途之前,就要求你先做决定:生成模拟行,还是抽取真实数据?合成数据与真实数据的对比,常被描述成一场必有唯一赢家的正面交锋,于是人们试图找出哪种数据源“总体上”更安全、更忠实。其实不存在这样的赢家。只有当你明确这份数据要被用来完成什么任务,比较才有意义;因为让一组数据在某类任务中表现出色的属性,在另一类任务中可能毫无价值。
多数困惑来自把真实数据当作默认项、合成数据当作备选。生产环境中的真实数据拥有权威性,因为它确实发生过;但它只在一类工作中体现价值,在另一类工作中意义甚微。如果把工作分成两条赛道,僵局就迎刃而解。
几乎所有复制或生成数据库的需求,都落在这两条赛道之一,而两条赛道要求的东西正好相反。
第一条是统计型工作:机器学习模型的训练与评估,以及配套的分析。这类任务把数据当作总体的代表,关键是整体形态要与现实足够接近。列与列之间的相关性保持成立,数值带有真实的偏态,千分之一概率的极端情况大约在一千行里出现一次。数百万行集中出现少量错误行并不会造成破坏,因为模型读的是整体,不是例外。
第二条是应用数据库:软件在开发、测试、预发布或演示时连接的那个数据库。这条赛道服从的不是分布,而是模式。每个外键都必须落在真实存在的行上;违反约束或留下空的必填字段,数据库会拒绝写入,工作立刻停摆。因此,真实世界分布在这里只是加分项,而满足模式约束才是硬性要求。
两条赛道的分水岭是容错能力。统计型任务能容忍个别错误,因为它是从海量数据中提取规律;应用型任务却连一条坏数据都不能放过,因为一次非法写入就足以让流程中断。理解了这一点,就不会再问“合成数据和真实数据哪个更好”,而会改问:“我要用这批数据做统计推断,还是支撑应用运行?”答案不同,选择自然不同。
热门跟贴