数据泄漏
2021-9-2
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
数据泄漏是指使用来自训练数据集外部的信息来创建模型。这些额外的信息可以让模型学习或知道一些它原本不会知道的东西,进而使正在构建的模式的估计性能无效。
例如,如果对整个数据集进行规范化或标准化,然后使用交叉验证来估计模型的性能,那么会导致了数据泄漏。在计算缩放因子(标准化)时,执行的数据在缩放过程中了解了训练集中数据的完整分布。
 
如果不是完全无效的预测模型,数据泄漏可能会导致创建过于乐观的预测模型。
这是一个严重的问题,至少有 3 个原因:
  1. 如果正在运行机器学习竞赛,顶级模型将使用泄漏数据,而不是潜在问题的良好通用模型
  1. 如果是一家提供数据的公司逆转匿名化和混淆可能会导致未预料到的隐私泄露
  1. 开发自己的预测模型时,可能正在创建实际上无用且无法在生产中使用的过于乐观的模型
 

我有数据泄露吗?

了解是否存在数据泄漏的一种简单方法是:是否实现了看起来好得令人难以置信的性能。就像您可以高精度地预测彩票号码或挑选股票一样。
数据泄漏通常更多是复杂数据集的问题,例如:
  • 创建训练和测试集时,时间序列数据集可能很困难
  • 随机抽样方法难以构建的图问题
  • 模拟观察,例如声音和图像,其中样本存储在具有大小和时间戳的单独文件中
 

最小化数据泄漏的技术

在开发预测模型时,可以使用以下两种很好的技术来最大程度地减少数据泄漏:
  1. 在交叉验证中执行数据准备
    1. 保留一个验证数据集,以对开发的模型进行最终健全性检查
    通常,使用这两种技术是一种很好的做法。
     

    打击数据泄露的 5 个技巧

    • 时间截止
      • 删除感兴趣事件之前的所有数据,重点关注了解一个事实或观察结果的时间,而不是观察结果发生的时间
    • 添加噪音
      • 向输入数据添加随机噪声,以尝试消除可能泄漏变量的影响
    • 删除泄漏变量
      • 使用帐号和 ID 等变量评估基于规则的简单模型线 OneR,以查看这些变量是否泄漏,如果是,则删除它们。如果您怀疑某个变量有泄漏,请考虑将其删除。
    • 使用Pipelines
      • 大量使用允许在交叉验证折叠中执行一系列数据准备步骤的Pipelines架构,例如scikit-learn中的Pipelines
    • 使用Holdout数据集
      • 在使用之前保留一个看不见的验证数据集作为模型的最终健全性检查
     
  2. Scikit-Learn
  3. 多项式特征变换爬山测试集
    目录