合成数据挑战赛夺冠秘诀:精妙后处理策略超越AI模型
近期在“Mostly AI大奖赛”中的一项胜利,揭示了合成数据生成的一个关键洞察:尽管先进的机器学习模型不可或缺,但要获得高保真数据,往往取决于复杂的后处理。赢得FLAT和SEQUENTIAL两大数据挑战赛桂冠的解决方案表明,细致的优化如何能将原始模型输出提升至与源数据近乎完美的统计对齐。
“Mostly AI大奖赛”旨在生成能够精确反映原始源数据统计特征的合成数据集,关键在于不直接复制任何真实记录。比赛设有两个不同的挑战:FLAT数据挑战赛,要求生成80列的10万条记录;以及SEQUENTIAL数据挑战赛,涉及2万条记录序列。数据质量采用“总体准确性”指标进行严格评估,该指标量化了合成数据与源数据在单列、配对列和三列分布之间的L1距离(一种差异度量)。为防止过拟合或数据复制,还应用了诸如最近记录距离(DCR)和最近邻距离比(NNDR)等隐私指标。
最初对最先进生成模型集成方案的探索只带来了微小的改进。关键的转折点在于对后处理的集中投入。该策略涉及使用Mostly AI SDK训练单个生成模型,然后进行过采样以创建显著更大的候选样本池。从这个庞大的样本池中,最终输出被精心挑选和优化。这种方法极大地提升了性能:对于FLAT数据挑战赛,原始合成数据得分约为0.96,但经过后处理后,得分飙升至令人印象深刻的0.992。修改后的版本在SEQUENTIAL挑战赛中也取得了类似的提升。
FLAT挑战赛的最终处理流程包括三个主要步骤:迭代比例拟合(IPF)、贪婪修剪和迭代优化。
IPF是关键的第一步,它从最初生成的250万行数据池中选择了一个高质量的超大子集。这种经典的统计算法调整了合成数据的二元(两列)分布,使其与原始数据紧密匹配。IPF专注于5,000个相关性最高的列对,为每个合成行计算小数权重,并迭代调整它们,直到二元分布与目标对齐。这些权重随后被转换为整数计数,产生了一个包含12.5万行的超大子集——是所需大小的1.25倍——并且已经具备强大的二元准确性。
随后,这个超大子集进入了贪婪修剪阶段。这个迭代过程计算每行的“误差贡献”,系统地移除那些对与目标分布的统计距离贡献最大的行。这一过程持续进行,直到精确地剩下10万行,从而剔除了最不准确的样本。
最后阶段是迭代优化,涉及一个复杂的交换过程。该算法迭代地识别10万行子集中表现最差的行,并在未使用的240万行数据池中寻找最佳替换候选。只有当交换能带来整体得分提升时才执行,从而提供了关键的最终完善。
SEQUENTIAL挑战赛引入了独特的复杂性:样本是行组,并且“一致性”指标评估事件序列与源数据的相似程度。后处理流程也相应地进行了调整。首先引入了一致性预选步骤,迭代地交换整个组以与原始数据的一致性指标对齐,例如“每个序列的唯一类别”分布。这确保了良好的序列结构。随后,2万个经过一致性优化的组进行了类似于FLAT数据的统计优化(交换)过程,其中整个组被交换以最小化单变量、二变量和三变量分布上的L1误差。值得注意的是,“序列长度”被作为一个特征包含在内,以确保组长度得到考虑。对于FLAT数据有效的IPF方法在这里效果不佳,因此被省略以重新分配计算资源。
计算密集型后处理策略需要显著优化以满足时间限制。关键技术包括减小数据类型(例如,从64位到32位或16位)以管理内存。SciPy的稀疏矩阵被用于有效存储统计贡献。此外,对于标准NumPy中计算缓慢的核心优化循环,利用了Numba。通过使用@numba.njit
装饰瓶颈函数,Numba自动将其转换为高度优化的机器代码,实现了与C语言相当的速度,尽管Numba仅针对特定的数值瓶颈进行了审慎使用。
这次胜利为数据科学家们揭示了一个重要教训:“秘密武器”往往超越了生成模型本身。虽然健壮的模型构成了基础,但预处理和后处理阶段同样关键,甚至更为关键。对于这些合成数据挑战,一个精心设计、专门针对评估指标的后处理流程,被证明是决定性因素,在无需额外开发机器学习模型的情况下确保了胜利。这场比赛再次强调了数据工程和统计优化在实现高保真合成数据方面的深远影响。