外观
使用代理标注来识别漂移
Using Proxy-Labelling to Identify Drift
几乎所有现实世界中的机器学习模型,都会因特征分布发生漂移(drift)而出现性能逐渐下降:


这是一个严重的问题,因为模型是在一种分布上训练的,却要在生产环境中对另一种分布生成预测。因此,尽早检测漂移至关重要,这样模型才能持续保持良好表现。下图展示了我常用的一种直观技巧,用来判断数据集中哪些特征正在发生漂移。
假设我们有两个版本的数据集——旧版本(模型训练时所用的版本)和当前版本(模型当前正在生成预测时所用的版本):

核心思路是评估这两个版本之间是否存在任何分布上的差异。所以我们这样做:
- 给旧数据集添加一个 label 列。
- 给当前数据集添加一个 label 列。
- 然后,将这两个数据集合并,并在合并后的数据集上训练一个有监督的分类模型:


分类模型的选择可以稍微随意一些,但要确保能够可靠地确定特征重要性。因此,我个人倾向于使用随机森林分类器,因为它本身就具备确定特征重要性的内在机制:

话虽如此,并不一定非要用随机森林。在分类模型之上使用诸如 shuffle feature importance(打乱特征重要性,我们前面讨论过)这类技术也可以。如果特征重要性值显示存在某些特征的重要性很高,这就意味着这些特征正在发生漂移。

为什么?
这是因为,如果某些特征能够可靠地区分数据集的两个版本,那么它们对应于旧标签和新标签的(条件)分布很可能正在发生变化。
- 如果存在分布差异,模型就会捕捉到它们。
- 如果不存在分布差异,模型就很难区分这些类别。这个想法在直觉上也说得通。到这里,许多人会有一个疑问:……我们为什么不能直接监控模型准确率来判断漂移呢?当然,只要我们拥有当前版本的真实标签,或者有办法比较模型在旧版本和新版本上的表现,我们就可以这么做。但在许多情况下,生产数据上的真实输出预测永远无法立即获得,而总是需要一段时间。例如,我在 Mastercard 做交易欺诈检测模型时,持卡人的发卡行可能需要长达 45 到 50 天,才能把经过 Mastercard 网络的交易对应的欺诈标签发回来。这段时间可不短,是吧?因此,我们必须依靠系统给出的某些相关反馈,来判断模型性能是否在下降。使用上面讨论的这种“代理标注(proxy-labelling)技术”,是我发现极为有用的一种做法。