当模型在训练期间使用在预测时本不可用的信息时,就会发生机器学习中的数据泄漏。泄露会导致预测模型在部署前看似准确,但在实际使用中会产生错误结果,引发决策失误和错误洞察分析。
预测建模的目标是创建一个机器学习模型,该模型能够对真实世界的未来数据做出准确预测,而这些数据在模型训练期间是无法获得的。为避免出现不准确的结果,不应该在与训练数据相同的数据上对模型进行评估。因此,数据科学家通常将可用数据分成两组:一组用于训练模型,另一组用于验证模型在未知数据上的表现。
当使用训练数据集之外的数据构建模型,而这些未来数据在模型用于预测时不可用时,就会发生数据泄露。该模型在测试和验证阶段表现良好,但在生产环境中会变得完全不准确。
泄漏分为两种类型:目标泄漏和训练与测试污染。
目标泄漏:模型包含了在用于预测时无法获取的数据。
使用真实世界预测中不可用的信息会导致过拟合,即模型在训练和验证数据上表现异常出色,但在生产环境中表现糟糕。
训练与测试污染:当训练数据和验证数据都用于创建模型时,通常是由于分割或预处理不当造成的。
例如,设想一个为预测信用卡欺诈而创建的模型。在预测应用中,模型必须根据不完整的数据做出可靠的未来预测,而这一问题令人担忧。原始数据集将包含客户信息、交易金额、交易地点、是否检测到欺诈行为以及是否拒付。
在训练模型时,欺诈检测和拒付列将输入真值或假值。在真实世界中,拒付通常是在发现欺诈行为后启动的,因此在发现欺诈行为时无法获得这些信息。
使用此类信息训练模型,会使其认为拒付的交易几乎总是欺诈性的。在验证过程中,由于训练数据中欺诈与拒付之间存在强关联性,模型会表现出高准确率。然而,在部署时将无法获得拒付信息,导致模型在实际应用中表现不佳。
假设数据科学家正在构建一个基于房屋面积、卧室数量和所在社区等特征的房价预测模型。将数值特征(如房屋面积和房龄)标准化,使它们具有相同的尺度,这是一个常见的预处理步骤,这对许多机器学习都很有帮助。
但是,假设数据科学家在将数据集分割为训练集和测试集之前,对整个数据集应用了标准化。在这种情况下,模型将在训练过程中间接“看到”来自测试集的信息。因此,由于在预处理步骤中使用了测试集的信息,模型在测试数据上的性能可能会被人为夸大。这使得模型更容易在测试集上表现出色,但却有可能降低其泛化到新的、未见过的数据的能力。
缩放、插补或特征选择等预处理步骤应仅在训练数据上拟合,然后应用于验证集,而不是在分割前对整个数据集进行拟合。错误地使用转换器(例如缩放或归一化),会导致训练和测试集混淆,尤其是在神经网络模型中。当这些不当执行的预处理步骤应用于整个数据集时,会导致预测有偏倚和模型性能的虚假表现。
数据泄露可能造成耗时且损失数百万美元的错误,其发生原因多样:部分常见原因有:
包含未来信息:使用在真实世界中预测时无法获得的信息。
特征选择不当:选择与目标相关但无因果关系的特征。模型正在学习如何利用在实际预测中无法获得的信息。
外部数据污染:将外部数据集与训练数据合并可能会导致预测有偏倚或不准确,因为外部数据可能包含有关目标变量的直接或间接信息。
数据预处理错误:在将数据分成训练集和验证集之前,或在用整个数据集的信息填补缺失值时,会出现数据分割不正确的情况。在深度学习模型中,这可能尤其成问题,因为在这些模型中通常需要进行大量预处理,因此避免混合训练数据和测试数据至关重要。
不正确的交叉验证:在对包含随时间变化的数据的数据集进行交叉验证时,如果包含了未来的数据点,模型就会获得本不应该获得的信息,导致评估结果过于乐观。
归一化:数据转换,如缩放或归一化特征,如果不正确地同时应用于训练数据和测试数据,而不是分别应用,就会导致数据泄漏。
验证和过程变更泄漏:改变验证的执行方式可能会让新信息进入训练集,从而造成泄漏。在调整模型后,通过重新运行交叉验证或重新分割数据来对过程进行部分调整,可能会无意中将信息泄露到训练过程中。
数据泄露是预测建模机器学习算法训练中的常见隐患。美国国家医学图书馆的一项研究发现1,在应用机器学习方法的 17 个不同科学领域中,至少有 294 篇科学论文受到数据泄露的影响,导致性能评估过于乐观。
耶鲁大学的一项研究发现2,数据泄露可能会夸大或降低神经影像模型的性能指标,具体取决于泄露信息是引入噪声还是产生不真实模式。这些模型用于疾病诊断、治疗方案确定以及帮助神经科学家更好地了解大脑与身体之间的关系。
机器学习模型中的数据泄漏可能会对不同领域和数据类型产生不同的影响,以下是最常见的影响:
对新数据的泛化能力差:当模型是根据不代表真实世界的信息进行训练时,模型将很难泛化到未见过的数据。对新数据的预测可能不准确、不可靠。
有偏倚的决策: 泄露数据中的偏倚有可能会扭曲模型行为,从而导致不公平且脱离实际情况的决策。
不可靠的洞察分析和结果:数据泄漏会损害从模型中得出的洞察分析的可靠性,导致用户不信任结果。
虚高的性能指标:机器学习中的泄漏常常导致模型错误地显示较高的准确率和精确度。
资源浪费:在模型训练完成后,查找和修复数据泄漏不但耗时且成本高昂。修复数据泄漏需要从头开始重新训练模型,这需要高昂的计算成本,还需要重新设计从数据预处理到重新训练的整个模型管道,这在人力和计算成本方面都是资源密集型的。
失去信任:不可靠的模型最终会导致对数据科学团队和整个分析过程的不信任。
法律与合规风险:预测性分析中的数据泄露可能会导致法律与监管风险。如果敏感信息被滥用,可能会导致处罚和声誉受损。
检测数据泄露需要组织了解模型准备和处理过程;需要采用严格的策略来验证机器学习模型的完整性。以下是在构建模型和检测数据泄漏方面需要牢记的一些最佳实践:
准备:数据必须正确分割,预处理步骤应仅应用于训练数据集。审查所有特征,有助于确保它们在预测过程中不代表未来或不可用的信息。
搜索:模型训练完成后,调查可能表明泄漏的可疑模式。审查特征重要性和模型行为,以发现任何不切实际的关系。
测试: 使用真实数据测试有限模型。监测其在实际场景中的性能;如果性能大幅下降,可能表明在训练过程中出现泄漏。
以下是一些常见的泄漏信号:
异常高性能:如果模型显示出明显高于预期的准确度、精确度或召回率,尤其是在验证数据上,则可能表明数据泄露。
训练和测试性能之间的差异:训练集和测试集的性能差距较大,表明模型可能因泄漏而过拟合。
不一致的交叉验证结果:如果交叉验证折间的性能差异很大或异常高,则可能发生训练测试泄漏或分割不当。
意外的模型行为:如果模型严重依赖于逻辑上不合理的特征,这可能表明存在泄漏。
为防止数据泄漏,组织必须谨慎处理数据并进行系统评估。以下是一些基本做法:
数据预处理: 为防止数据集之间的信息泄漏,可对训练集和测试集分别进行缩放或缺失值归因等预处理步骤。对训练集和测试集分别进行缩放、编码和插补等预处理,尽可能自动化管道。
正确数据分割:正确分割训练集和测试集。精心策划的训练/测试分割可防止测试集的信息泄漏到训练阶段。对于随时间变化的数据,按时间顺序分割,以防止未来数据进入训练过程。要检查泄漏,请维护一个单独且不同的验证集,该验证集在训练过程中未曾使用,且能代表真实世界的数据
交叉验证:使用 k 折交叉验证在多个数据子集上测试模型,有助于捕捉潜在的泄漏并提高泛化能力。
特征工程:避免创建引入未来数据的特征。审查推导出的特征,确认它们仅反映预测时可用的特征。定期评估特征相关性,确认它们是适当的,并且不会在预测时引入不可用的信息。
基于时间的验证:对于时间序列数据,使用基于时间的验证来模拟真实世界的性能。这有助于确保使用过去的数据来预测未来的结果,并避免未来的数据泄露。谨慎处理时间序列数据,使用滚动窗口验证或前瞻验证等方法,避免在训练过程中泄漏未来数据。
定期模型评估:在训练和测试期间持续监控性能,以检测任何显示泄漏的意外变化。
使用面向 AI 构建器的新一代企业级开发平台 IBM watsonx.ai,可以训练、验证、调整和部署生成式 AI、基础模型和机器学习功能。使用一小部分数据,即可在很短的时间内构建 AI 应用程序。
借助 IBM 业界领先的人工智能专业知识和解决方案组合,让人工智能在您的业务中发挥作用。
通过增加 AI 重塑关键工作流程和运营,最大限度提升体验、实时决策和商业价值。