# 数据泄露

数据泄漏意味着用于训练机器学习算法的数据包括您试图预测的信息。这可能会导致模型在训练中比在现实世界中表现得更好，从而对模型的表现产生错误的保证。了解如何识别和防止数据泄漏，以获得可靠的预测。

一般来说，数据泄露由以下至少一种原因引起：

* 当训练集中的一个或多个特征可用于导出您试图预测的目标变量时。例如，您的目标是一个 Sales 字段，而您的一个特性是从 Sales 中计算的 Sales Tax 字段。

* 当训练集中的一个或多个特征包括在预测时未知的信息时。

在下表中，Stage 列是我们要预测的 Stage (Binary) 列的重复列。通过将 Stage 包含在训练数据集中，我们将为预期结果提供答案，从而为我们的模型带来高分。

带有“漏列”StageStage 的表，其中包含有关目标列 Stage (Binary)Stage (Binary) 的信息

| Total Employees | Annual Revenue (M$) | Lead Source | Forecast Deal ($) | Stage | Stage (Binary) |
| --- | --- | --- | --- | --- | --- |
| 12078 | 2705 | Partner | 369,000 | 6 - Closed/Lost | LOST |
| 10076 | 1783 | Inside sales | 71,000 | 6 - Closed/Won | WON |
| 8518 | 2114 | Inside sales | 294,000 | 6 - Closed/Lost | LOST |
| 3978 | 1159 | Sales rep | 214,000 | 6 - Closed/Won | WON |
| 3517 | 2285 | Marketing promo | 154,000 | 6 - Closed/Lost | LOST |
| 3370 | 97 | Customer referral | 41,000 | 6 - Closed/Won | WON |

## 目标泄露

目标泄露是数据泄露的一种形式。当特性数据引用可用于预测的目标数据时，就会发生目标泄露。引用或“泄露”可以是直接的或间接的。

通过智能模型优化，Qlik Predict 可以识别目标泄露并防止其被引入您的模型。会自动检测指示目标泄露的特性并从模型训练中将其删除。有关智能模型优化的更多信息，请参阅[智能模型优化](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/AutoML/intelligent-model-optimization.htm)。

## 识别数据泄漏

要识别数据泄露，请考虑诸如“您在进行预测时是否具有相同的记录信息？”或“30 天后记录是否相同？”之类的问题。请记住，训练数据集中的所有数据都必须与业务问题中的时间限制相关。

当您训练了一个模型后，可以在模型度量中查找以下线索。

* 高分：分数真的高吗？例如，F1 成绩是否超过 85 分？

* 特性重要性：一个特性是否比其他特性重要得多？

* 保持分数：保持分数是否远低于交叉验证分数？

下表显示了可能导致数据泄漏的常见特征示例。

| 业务用例 | 目标 | 潜在泄露特性 |
| --- | --- | --- |
| 销售机会会结束吗？ | 关闭（是或否） | 阶段、结束日期、发票详细信息、支付的佣金 |
| 预测未来交易金额 | 下一笔交易的金额 | 税费、订单详情 |
| 潜在客户会转化为商机吗？ | 转换（是或否） | 商机详细信息，转换日期 |
| 客户会流失吗？ | 流失（是或否） | 客户流失原因、流失日期、静态客户任期、客户温度 |
| 员工是否自愿离职？ | 停职（是或否） | 离职面试详情、任期日期、辞职信信息 |

## 防止数据泄露

防止数据泄露的最佳方法是使用结构化框架来获得良好的业务问题和数据集。有关更多信息，请参阅[定义机器学习问题](https://help.qlik.com/zh-CN/cloud-services/Subsystems/Hub/Content/Sense_Hub/AutoML/machine-learning-framework.htm)。

提示注释如果确定了不应在模型训练中使用的泄露列，则仍可以将其保存在数据集中。只需在机器学习实验中从训练数据中排除此特征。