但即使在目标值的已知范围内,模型现在也会出错。 自从训练以来,情况确实发生了变化。
我们可以看到模型不能很好地推断。 预测的需求量保持在相同的已知范围内,而实际值正在达到峰值。
如果我们放大特定日期,我们可能会认为该错误在一天中的特定(活跃的)时间更高。 我们从晚上 10 点到早上 6 点做得很好!
但是,我们在解释这种模式时应该小心。这也可能是由于其他一些相关因素,例如:在这些相同时间的温度更暖和。
Evidently 生成更多图表来显示错误。 在当前情况下,这些是描绘同一个故事的不同方式。 我们有一个很大的错误,而且它明显倾向于低估。
在过去的几周中,这些相同模型质量问题的早期迹象已经显现。 随着变化的积累,它们被放大了。
回归性能报告还生成了一组洞悉,以深入了解表现不佳的段(segments)。 目标是探索特定的特征范围是否可以解释错误。
在我们的示例中,我们特别想了解模型低估了目标函数的段(segments)。
误差偏差表提供了更多细节。
我们按“Range%”字段对其进行排序。如果特定特征的值在模型低估或高估的组中存在显着差异,则该特征将排名靠前。
在我们的例子中,我们可以看到极端误差取决于“temp”(温度)和“atemp”(感觉温度)特征。
在训练中,情况并非如此。 我们在不同的温度下有各种各样的错误,没有一致的模式。
在这个快速分析之后,我们对模型性能及其弱点有了更具体的了解。 该模型面临着新的、异常高的需求量。 考虑到它是如何训练的,它往往会低估它。 最重要的是,这些错误根本不是随机的。 至少,它们与我们观察到的温度有关。 温度越高,低估的幅度越大。
它提出了模型以前无法学习的与天气相关的新模式。 日子越来越暖和了,模型变得离群了。
如果我们运行目标漂移报表,我们还将看到特征和目标之间的线性相关性的相关变化。 温度和湿度脱颖而出。
在这一点上,该模型似乎无用。这是一个生动的例子,说明在有限数据集上训练的模型如何无法捕捉季节性模式。
我们应该尽快重新训练,并经常这样做,直到我们学会所有的模式。 如果我们不习惯频繁的再训练,我们可能会选择更适合时间序列或推理更好的算法。
在它崩溃之前:数据和预测漂移
在实践中,一旦我们获得了ground truth,我们确实可以快速纠正方向。 如果我们在第一周后重新训练模型,它可能不会那么戏剧性地结束。
但是,如果我们没有可用的ground truth怎么办? 我们能提前捕捉到这种退化吗?
在这种情况下,我们可以分析数据漂移。 我们不需要实际值来计算误差。 相反,我们的目标是查看输入数据是否发生了变化。
再一次,让我们将生产的第一周数据与训练中的数据进行比较。
当然,我们可以查看我们所有的特征。 但我们也可以得出结论,分类特征(如“季节”、“假期”和“工作日”)不太可能变化。让我们只看数字特征!
我们指定这些特征,以便该工具应用正确的统计测试。 在这种情况下,它将是 Kolmogorov-Smirnov 测试。
column_mapping = {} column_mapping['numerical_features'] = numerical_features 复制代码
然后,我们调用所选时间段的漂移报表:
data_drift_dashboard = Dashboard(tabs=[DataDriftTab]) data_drift_dashboard.calculate( reference, production.loc['2011-01-29 00:00:00':'2011-02-07 23:00:00'], column_mapping=column_mapping) 复制代码
一旦我们显示报表,它就会返回一个答案。 我们可以在第一周看到特征分布的统计变化。
让我们放大我们平常的疑点——温度(temperature)。
该报表为我们提供了关于特征分布如何随时间演变的两个展示。 我们可以注意到观察到的温度是如何一天天变高的。
这些值明显偏离了我们在训练中看到的绿色走廊(与平均值的一个标准偏差)。 从稳定的增长来看,我们可以怀疑有上升的趋势。
在这个图表中,我们还看到:天气越来越暖和了。 这不是我们的模型所习惯的!
正如我们之前检查的那样,我们在第一周后没有检测到模型预测中的漂移。鉴于我们的模型不擅长推断,我们不应该真的期望它。
这种预测漂移可能仍然会发生,并会发出诸如输入数据损坏之类的信号。在其他情况下,如果我们有一个更敏感的模型,我们会观察到它。
尽管如此,仅数据漂移本身就可以提供出色的早期监控,以检测变化并对其做出反应。
结语
频繁的再训练是解决生产模型维护问题的一种方法。监控和可观察性增加了一层以确保模型质量。
为什么我们应该将它包含在我们的工作流程中?
- 它加快了调试速度。每当您的模型失败时,您都需要确定根本原因。预先构建的仪表板使其更快。
- 它详细显示了性能。如果在交叉验证中只依赖聚合模型的性能,它可能会掩盖重要的模式。您的模型可能会在特定段上静默失败并需要重建。
- 它有助于改进模型。您可以探索模型在何处以及如何出错。它有助于确定最佳模型架构、重新训练计划、生成特征工程的想法。或者,向您的主题专家提出正确的问题。
- 它让你积极主动。数据输入的变化可能是模型质量的最重要指标。我们希望在问题导致模型失败之前发现这些问题。