目前,有多种技术可用于机器学习检测概念漂移的方法。熟悉这些检测方法是为每个漂移和模型使用正确度量的关键。
在本文章中,回顾了四种类型的检测方法:统计、统计过程控制、基于时间窗口和上下文方法。
如果您正在寻找有关概念漂移的介绍,我建议您查看机器学习中的概念漂移一文。
统计方法
统计方法用于比较分布之间的差异。
在某些情况下,会使用散度,这是分布之间的一种距离度量。 在其他情况下,运行测试以获得分数。
Kullback-Leibler 散度
Kullback-Leibler 散度有时被称为相对熵。
KL散度试图量化一个概率分布与另一个概率分布有多大不同,所以,如果我们有分布Q和P,其中,Q分布是旧数据的分布,P是我们想要计算的新数据的分布:
其中,“||”代表散度。
我们可以看到,
- 如果 P(x) 高而 Q(x) 低,则散度将很高。
- 如果 P(x) 低而 Q(x) 高,则散度也会很高,但不会那么大。
- 如果 P(x) 和 Q(x) 相似,则散度就会很低。
JS 散度
Jensen-Shannon 散度使用 KL 散度
其中,
JS散度和KL散度的主要区别在于JS是对称的,它总是有一个有限值。
Kolmogorov-Smirnov 检验 (K-S 检验)
两样本 KS 检验是比较两个样本的有用且通用的非参数方法。 在 KS 测试中,我们计算:
其中, 是先前数据与 样本的经验分布函数, 是新数据与 样本和的经验分布函数, 是使 最大化的样本
KS 检验对两个样本的经验累积分布函数的位置和形状的差异很敏感。它非常适合数值数据。
何时使用统计方法
统计方法部分的想法是评估两个数据集之间的分布。
我们可以使用这些工具来查找不同时间范围内的数据之间的差异,并衡量随着时间的推移数据行为的差异。
对于这些方法,不需要标签,也不需要额外的内存,我们可以快速获得模型输入特征/输出变化的指标。 这将帮助我们甚至在模型的性能指标出现任何潜在下降之前就开始调查这种情况。 另一方面,如果没有正确处理,缺少标签和忽视对过去事件和其他特征的记忆可能会导致误报。
统计过程控制
统计过程控制的想法是验证我们模型的误差是否在可控范围内。 这在生产中运行时尤其重要,因为性能会随着时间而变化。因此,我们希望有一个系统,如果模型达到了一定错误率,就会发送警报。请注意,某些模型具有“红绿灯”系统,其中也有警告报警。
漂移检测方法/早期漂移检测方法 (DDM/EDDM)
这个想法是将误差建模为二项式变量。 这意味着我们可以计算出我们的预期误差值。 当我们使用二项式分布时,我们可以标记 ,因此, 。
DDM
在这里我们可以提出:
- 当
- 当
优点:DDM 在检测逐渐变化(如果它们不是很慢)和突然变化(增量和突然漂移)时表现出良好的性能。
缺点:当变化缓慢时,DDM 难以检测漂移。许多样本可能在漂移水平激活之前储存了很长时间,存在样本储存溢出的风险。
EDDM
在这里,通过测量 2 个连续错误的距离,我们可以提出:
- 当
- 当
EDDM 方法是 DDM 的修改版本,其重点是识别逐渐漂移。
CUMSUM 和 Page-Hinckley (PH)
CUSUM 及其变体 Page-Hinckley (PH) 是社区中的开拓方法之一。 该方法的想法是提供一种序列分析技术,该技术通常用于监测高斯信号平均值的变化检测。
CUSUM 和 Page-Hinckley (PH) 通过计算观测值与平均值的差异来检测概念漂移,并在该值大于用户定义的阈值时设置漂移警报。 这些算法对参数值很敏感,导致在误报和检测真实漂移之间进行权衡。
由于 CUMSUM 和 Page-Hinckley (PH) 用于处理数据流,因此每个事件都用于计算下一个结果:
CUMSUM:
- 当发出警报,并设置
注意:CUMSUM 是无记忆的、单边的或不对称的,因此它只能检测到值的增加。
Page-Hinckley (PH) :
-
当发出警报,并设置。
何时使用统计过程控制方法
要使用所介绍的统计过程控制方法,我们需要提供样本的标签。 在许多情况下,这可能是一个挑战,因为延迟可能很高,并且很难提取它,尤其是在大型组织中使用它时。 另一方面,一旦获得这些数据,我们就会得到一个相对快速的系统来涵盖 3 种漂移类型:突然漂移、渐进漂移和增量漂移。
该系统还允许我们与部门一起跟踪退化情况(如果有的话),以发出警告和警报。
时间窗口分布
时间窗口分布模型关注时间戳和事件的发生。
ADWIN
ADWIN 的思想是从时间窗口 开始,在上下文没有明显变化时动态增大窗口 ,并在检测到变化时将其缩小。 该算法试图找到显示不同平均值的 和 的两个子窗口。 这意味着窗口的旧部分
Paired Learners
假设对于给定的问题,我们有一个使用大量数据进行训练的大型稳定模型,让我们将其标记为模型 A。
我们还将设计另一个模型,一个更轻量级的模型,在更小和更新的数据上进行训练(它可以具有相同的类型)。 我们将其称为模型 B。
想法:找到模型 B 优于模型 A 的时间窗口。由于模型 A 比模型 B 稳定并且封装了更多数据,我们预计它会胜过它。 但是,如果模型 B 优于模型 A,则可能表明发生了概念漂移。
上下文方法(Contextual Approaches)
这些方法的想法是评估训练集和测试集之间的差异。 当差异显著时,可能表明数据存在漂移。
树特征
树特征的想法是在数据上训练一个相对简单的树,并添加预测时间戳作为特征之一。 由于树模型也可以用于特征重要性,我们可以知道时间如何影响数据以及在什么时候。此外,我们可以查看由时间戳创建的拆分,我们可以看到拆分前后概念之间的差异。
在上图中,我们可以看到日期特征位于根部,这意味着该特征具有最高的信息增益,这意味着在 7 月 22 日,他们可能在数据中发生了漂移。
漂移检测实现
您可以找到相关的提供漂移检测的实现:
- Java 实现:MOA
- Python 实现:scikit-multiflow