分类变量处理期间的数据泄漏?

Data Leakage during categorical variable handling?

我对机器学习还很陌生。我遇到了数据泄漏的概念。文章说在执行预处理步骤之前总是拆分数据。

我的问题是,离散化、将类别分组到单个类别以减少基数、将类别变量转换为二进制变量等步骤是否会导致数据泄漏?

我应该在应用这些步骤之前将数据拆分为训练集和测试集吗?

此外,为了避免数据泄露,我真正需要注意的主要预处理步骤有哪些?

这是一个非常有趣的话题,我会尽量保持简单和简短。数据泄漏是您的 ML 模型根据在真实或生产环境中找不到的预测变量进行训练的状态。如果你对你的训练数据做了预处理,那么你应该对你的测试数据做同样的步骤来做出预测,但这不会导致数据泄漏。某些 ML 库会为您执行此操作,例如 tidymodels.

中的 R 的 recipes

回答你的问题,在对数据进行预处理和特征工程时,你不应该害怕数据泄漏,但在很久以前,当你定义你的问题和你将用来训练模型的数据时解决它。这是我在实践中反复遇到的一个例子:

假设您正在拟合 ML 模型来预测未来一年贵公司某些产品的销售情况。为此,您使用产品的历史数据以及互补和替代商品的数据。该模型的训练和测试性能很好,您打算将模型移至生产环境,但是您遇到了一个巨大的问题:互补和替代产品数据要等到一年后才能获得。到那个时候,做一年的预测就没有意义了,因为你已经观察到了销售数据。

总而言之,可以通过预测自变量或仅使用不需要比响应更多变量的时间序列模型来防止这种数据泄漏情况。这只是数据泄露的一个案例,但您可以在 Max Kuhn 的好书中找到更多信息 "Feature Engineering and Selection: a practical approach for predictive models".