模型一投入使用就掉链子?可能是数据泄露的锅……



640?wx_fmt=jpeg


全文共1660字,预计学习时长3分钟


640?wx_fmt=png


在训练机器学习模型时,我们通常会选用那些在某些指标上(例如精确度)表现最好的模型。当一个训练中的模型在验证或测试数据集上表现极佳时,就会自然而然地被认定为性能良好的模型并进行生产化/最终化。


但你是否遇到过这样的情况:测试过程中表现良好的模型,实际使用中却无法达到与测试中相同的性能水平。例如,一个模型在测试中达到了99%的精确度,但一旦投入生产并作用于真实数据,其准确性便远无法企及测试中所表现出的水平。


测试性能与实际性能之间的这种差异,通常可用一种名为数据泄露的现象来解释。


640?wx_fmt=jpeg

数据泄露


数据泄露指的是机器学习模型创建者所犯的一个错误,那就是不小心共享了测试数据集和训练数据集的信息。通常情况下,在把一个数据集分成测试集与训练集时,要保证其间不存在任何数据共享。这是因为测试集的目的是模拟现实世界中的不可见数据。然而,在评估模型时,创建者对训练集与测试集具有全部访问权限,因此创建者应保证训练数据中的信息不会泄露到测试集中。


数据泄露通常会导致在测试集中得到虚高的表现,这是因为模型是在已经在训练集中(某种程度上)获取数据的基础上运行的。该模型有效地存储了训练集数据,并可轻易地为测试数据集输入正确的标签/值。显然,这种对评价模型的人产生误导的行为并不理想。当这样的模型后期应用在真实的不可见数据上时,其效果表现会比预期中差很多。


640?wx_fmt=jpeg

数据泄露的原因



640?wx_fmt=jpeg 图片来源: unsplash.com/@daanmooij


下面将介绍几种常见的导致数据泄露的原因。在训练模型的时候,避开数据泄露是至关重要的。总的来说,模型创建者应该杜绝任何将训练集涉及测试集信息的可能性。


预处理


人们常犯的一个错误是在机器学习数据预处理阶段将数据泄露。很重要的一点是,即使这些转换也应用于测试集,它们仍然只应具有训练集的信息。比方说,如果想要将PCA作为预处理步骤运行,创建者就只应将其运行在训练集上。若要在之后将其应用在测试集上,只需调用转换方法(对于Scikit学习模型)。如果将预处理器应用于整个数据集上,由于预处理模型的参数与测试集的信息相匹配,测试集的信息就会泄露。


数据重复


另一种错误叫做数据重复,在数据集来源于真实生活中时最为常见。当数据集包含多个完全相同或极相似数据的时候,就会出现这种情况。比方说,如果一个数据集包含某消息平台的用户信息时,重复数据就会与那些向许多用户发送相同信息的垃圾邮件传播者相对应。


在这种情况下,即使训练集与测试集可能对应着不同的观测值,创建者也可能会因其包含相同的数据点而遭遇数据泄露。


在将数据集分为训练集和测试集之前,可以通过消除数据集中的重复数据来解决这个问题。创建者既可以通过移除完全相同项来完成此操作,也可以使用模糊匹配方法(例如编辑文本数据的距离)来移除近似匹配项。


时间数据(隐式泄露)


640?wx_fmt=jpeg 图片来源: unsplash.com/@loic


即使没有明确的泄露信息,如果测试集与训练集之间存在依赖关系,数据泄露仍有可能发生。


一个常见的例子是时间数据,即时间是数据中的相关因素,其中一个例子是时间序列数据。考虑以下一个简单的例子:一个训练集中包含两个数据点A和C,且训练集中包含一个数据点B。假设这些数据点按时间顺序排列是A →B →C。在这里,数据泄露很可能通过创建训练集与测试集的方式发生。通过对点C的训练,并在点B进行测试,创建者在这里创建了一个不现实的情况。


在这种情况下,相对于测试集的时间点,对当前模型的训练使用了未来的数据,因此产生了信息泄露。就如同在现实生活中一样,现在的社会明显无法掌握未来的信息。


为了解决这个问题,模型创建者应该确保在将数据集分为测试集与训练集时,同样也将其依据时间拆分。训练集中的所有信息都应发生在测试集中的任何事情之前。这将创建一个更为现实的训练环境,并让创建者合理的评估模型在现实生活数据中的应用情况。


640?wx_fmt=jpeg

留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货


编译组:段昌蓉、蒋馨怡

相关链接:

https://towardsdatascience.com/data-leakage-in-machine-learning-10bdd3eec742


如需转载,请后台留言,遵守转载规范

推荐文章阅读


ACL2018论文集50篇解读

EMNLP2017论文集28篇论文解读

2018年AI三大顶会中国学术成果全链接

ACL2017 论文集:34篇解读干货全在这里

10篇AAAI2017经典论文回顾


长按识别二维码可添加关注

读芯君爱你


640?wx_fmt=gif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值