机器学习中七种常见的数据泄露原因
原文towardsdatascience.com/seven-common-causes-of-data-leakage-in-machine-learning-75f8a6243ea5当我在评估 ChatGPT、Claude 和 Gemini 等 AI 工具用于机器学习用例时如我在上一篇文章中所述我遇到了一个关键陷阱机器学习中的数据泄露。这些 AI 模型在将数据集分成训练集和测试集之前使用了整个数据集来创建新的特征——这是数据泄露的常见原因。然而这不仅仅是一个 AI 错误人类也常常犯这样的错误。机器学习中的数据泄露发生在训练数据集之外的信息渗透到模型构建过程中。这导致性能指标膨胀模型无法泛化到未见过的数据。在这篇文章中我将介绍七种常见的数据泄露原因以便你不会像 AI 一样犯同样的错误。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1bec4b99abbee5057b2a13ec229f5929.png图像由 DALL·E 提供问题设置为了更好地解释数据泄露让我们考虑一个假设的机器学习用例想象一下你是一家像美国运通这样的主要信用卡公司的数据科学家。每天数百万笔交易被处理不可避免地其中一些是欺诈性的。你的任务是构建一个能够实时检测欺诈的模型。你拥有包含已知欺诈案例的历史数据这使得这是一个典型的分类问题数据不平衡因为欺诈交易通常只占总额的一小部分。以下是一些您手头可用的功能与交易相关的特征交易金额、货币、时间、账单地址、类型在线与实体、位置等。与卡片相关的特征信用额度、卡片余额、卡片类型、卡片期限等。与商家相关的特征商家名称、商家类别、商家地址等。与客户相关的特征客户地址、年龄、收入、消费历史等。数据预处理中的错误为了准备您的数据集以进行模型开发您通常会执行一些基本的数据转换步骤例如缩放数值特征、编码分类变量和填充缺失数据。这些转换可能涉及从数据集的多个行中计算分布或指标。因此如果在将数据集分成训练集和测试集之前对整个数据集应用它们您就有可能将测试集中的信息泄露到训练过程中。这可能发生的方式如下错误 1使用完整数据集缩放数值特征在我们的欺诈检测案例中我们有许多数值特征例如transaction amount和card tenure。某些机器学习模型如具有 L1 或 L2 正则化的逻辑回归岭回归或 Lasso 回归需要将数值变量归一化因为正则化会惩罚大的系数。通常这涉及计算一个特征的均值和标准差使用 scikit-learn 中的StandardScaler等。如果你使用整个数据集来计算transaction amount的分布然后将其应用到标准化训练和测试集上你就是在将未见数据测试数据的交易信息暴露给训练。因此我们应该只使用训练集的均值和标准差来在训练和测试集中标准化transaction amount。错误 2在完整数据集上执行目标编码许多机器学习模型只接受数值变量。因此我们需要将分类变量编码成数值变量。虽然独热编码很常见但目标编码也是一种流行的方法。目标编码用来自标变量例如这里的欺诈或非欺诈的数值替换类别。这通常涉及计算每个类别的目标均值例如每个商家类别的欺诈率。如果你从整个数据集中计算均值你又会将测试集中包含的欺诈交易的重要信息泄露给训练集。因此我们应该只使用训练数据来计算每个类别的目标均值然后将学到的编码应用到测试集上。错误 3用测试集信息填补缺失值在现实世界的数据集中缺失数据很常见。例如我们可能没有每个客户的income。一种常见的方法是用中位数值即非空行的客户收入中位数来填补缺失的数值。出于类似的原因你应该只从训练集中计算中位数值而不是整个数据集并将其应用到两个集合上。错误 4在分割数据之前进行上采样/SMOTE如上所述欺诈检测通常是一个不平衡的分类问题其中欺诈交易仅占总交易的一小部分。重采样特别是上采样复制少数类记录是一种有用的技术可以平衡数据集。如果你在上采样少数类欺诈记录后再将其划分为训练集和测试集相同的欺诈案例可能会出现在两者中导致人为的高性能。SMOTE合成少数类过采样技术是处理不平衡数据集的另一种常见方法。同样如果它在训练-测试划分之前应用从测试数据生成的合成示例可能会将信息泄露到训练集中。因此这些不平衡数据集的处理应该只应用于训练集——一旦训练集通过上采样或 SMOTE 进行了增强你应该在增强的训练集上训练你的模型并在原始测试集上评估性能。特征工程中的错误现在你已经准备好了数据集你就可以创建新的特征作为特征工程的一部分。然而这也带来了数据泄露的风险。错误 5在特征工程中使用未来数据在欺诈检测中消费行为的突然变化通常是一个红旗。因此你可能会创建像“交易金额与平均金额”这样的特征衡量某笔交易与客户平均消费相比有多不寻常。但我们应该使用哪些数据点来计算这个平均值为了避免数据泄露我们需要确保不使用任何未来数据因为当你对实时交易进行预测时这些数据将不可用。在这种情况下只有过去的交易应该用来计算平均消费。数据划分中的错误虽然将数据随机划分为训练集和测试集是常见的做法但并不总是合适的。某些划分策略可能会无意中导致数据泄露使得模型在训练过程中“看到”测试数据。错误 6训练集和测试集中的数据重叠我们的欺诈检测数据集在交易级别这意味着它将包含来自同一客户的多个交易记录。欺诈者在短时间内进行多次类似的欺诈交易尝试并不罕见。如果您随机将数据分割成训练集和测试集来自同一客户的交易可能会同时出现在两个集中使得模型可以从测试数据中“学习”。一个解决方案是使用分组洗牌分割而不是随机分割它将在客户级别执行训练-测试分割确保在分割过程中来自同一客户的交易保持在一起。这确保了您的模型是在真正未见过的数据上测试的并且可以更好地泛化到新客户。错误 7未能为时间序列数据使用时间分割当处理时间序列数据例如股票价格、天气模式、用户活动日志时在训练-测试分割中保持基于时间的序列至关重要。随机分割数据可能导致严重的数据泄露因为模型将学习到在预测时间不可用的事件。让我们假设一个新的机器学习用例其中您想要预测一个客户的未来交易金额。随机分割数据集可能会导致未来交易影响训练集。相反您应该使用时间分割其中测试集中的所有数据点都发生在训练数据之后。这反映了现实世界场景其中预测总是基于历史数据。结论当构建机器学习模型时我们经常将数据预处理、特征工程和训练-测试分割作为独立的步骤来讨论。然而它们是紧密相连的一个步骤中的错误可能会影响整个建模过程。如上述示例所示这些步骤的顺序需要仔细设计以避免数据泄露。在我们的例子中您应该遵循以下顺序数据收集训练-测试分割数据预处理仅基于训练数据特征工程仅使用预测时可用信息模型训练和评估更普遍地为了防止数据泄露始终问自己两个关键问题我是不是将测试集的信息暴露给了训练过程我是不是使用了在预测时不会可用未来的数据这两个问题将帮助您避免过度乐观的性能指标并构建对新数据泛化良好的模型。您还应该将相同的原理应用于交叉验证过程以确保每个折叠也免受泄露。喜欢这篇文章吗请在下方留言告诉我您的想法或者您所知道的其它数据泄露的常见原因你可能还会喜欢我关于数据科学和 AI 的其他文章ChatGPT 与 Claude 与 Gemini 数据分析对比第三部分最佳机器学习 AI 助手ChatGPT 与 Claude 与 Gemini 数据分析对比第二部分谁在 EDA 方面最出色三步构建基于 RAG 的聊天机器人以检索可视化
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2497649.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!