如果有新的观察结果,是否应该重新训练模型?

数据挖掘 机器学习 预测建模 优化 训练
2021-10-06 20:29:13

所以,我还没有找到任何关于这个主题的文献,但似乎值得考虑一下:

  • 如果有新的观察结果,模型训练和优化的最佳实践是什么?

  • 有没有办法在预测开始退化之前确定重新​​训练模型的周期/频率?

  • 如果针对聚合数据重新优化参数是否过拟合?

请注意,学习可能不一定是在线的。在观察到最近预测的显着差异后,人们可能希望升级现有模型。

4个回答

当有新的观测值可用时,可以通过三种方式重新训练您的模型:

  1. 在线:每次有新的观察可用时,您使用这个单一数据点来进一步训练您的模型(例如,加载您当前的模型并通过使用该单一观察进行反向传播来进一步训练它)。使用这种方法,您的模型以顺序方式学习,并在某种程度上适应您的数据,因为它受最近观察的影响比受旧观察的影响更大。这在您的模型需要动态适应数据中的新模式的情况下可能很有用。当您处理无法一次对所有数据集进行培训的超大型数据集时,它也很有用。
  2. 离线:您将新的观察结果添加到您已经存在的数据集中,并在这个新的、更大的数据集上完全重新训练您的模型。这通常会导致目标函数更好的全局逼近,如果您有固定的数据集,或者如果您不经常有新的观察结果,这将非常受欢迎。但是,对于大型数据集是不切实际的。
  3. 批量/小批量:这是一种中间方法。使用批次,你等到你有一批n新的观察结果,然后在整个批次上训练您已经存在的模型。它不离线,因为您没有将此批次添加到预先存在的数据集中,然后在其上重新训练您的模型,并且它不在线,因为您正在训练您的模型n一次观察,而不仅仅是一次观察。所以两者兼而有之 :) Mini batch完全一样,只是batch size 更小,所以它倾向于在线学习。实际上,在线学习只是批大小为 1 的批,而离线学习是批大小为整个数据集大小的批。

今天的大多数模型将使用批量/小批量,批量大小的选择取决于您的应用程序和模型。选择正确大小的批次相当于选择正确的频率来重新训练您的模型。如果您的新观察结果与现有数据的差异很小,我建议使用较大的批次(可能是 256-512),如果相反,新的观察结果往往与您现有的数据有很大差异,请使用小批次(8-256)。归根结底,批量大小有点像您需要调整的另一个超参数,它特定于您的数据

  1. 训练模型并获得可用于训练的新数据后,您可以加载以前的模型并对其进行训练。例如,您可以将模型保存为.pickle文件并在新数据可用时加载并进一步训练。请注意,为了使模型正确预测,the new training data should have a similar distribution as the past data.
  2. 预测往往会根据您使用的数据集而降级。例如,如果您尝试使用 Twitter 数据进行训练,并且您收集了有关当天在 Twitter 上广泛发布的产品的数据。但是,如果您在甚至没有讨论该产品的几天后使用推文,则可能会产生偏见。The frequency will be dependent on dataset并且没有具体的时间来说明这一点。If you observe that your new incoming data is deviating vastly, then it is a good practise to retrain the model.
  3. 在聚合数据上优化参数不会过拟合。大数据并不意味着过度拟合。使用交叉验证来检查过度拟合。

你什么时候应该重新训练?

从理论上讲,如果您正在建模的系统或数据的性质发生了变化,模型只会降级(变得过时且不再有用)。理想情况下,您可以通过在生产中设置模型的自动监控来发现这一点。这可能意味着将对新传入数据的预测与真实数据进行比较,如果您的错误指标超出您的期望范围,您将收到警报。或者这可能意味着您密切关注间接相关的 KPI,如果它超出了您的期望范围,您必须重新评估该模型是否仍在为您的事业服务。如果您的模型不再那么有用,那么是时候重新训练了,并且应该遵循与创建原始模型时相同的最佳实践,尤其是在模型验证方面。

如果错误度量/KPI 保持在您想要的范围内(如果您的模型正在服务于其目的),则没有理由重新训练。当数据的性质和被建模的系统没有改变时,增量更新模型没有任何好处,但也有缺点:

  1. 云计算成本增加,
  2. 丢失可用于模型验证的“未见”数据,
  3. 对于必须验证这些新模型的数据科学家来说,这是不必要的额外工作。

再培训的最佳实践是什么?

以自动化方式建立这种重新训练是有风险的,因为自动化模型训练还不能产生与人工验证模型的质量和可靠性相匹配的模型。

不能在缺席的情况下进行适当的模型验证。理想情况下,它看起来类似于以下内容(取决于您正在构建的模型的类型):

  • 确保数据仍然满足算法的假设(例如,对于线性回归,Y 变量是否正态分布?误差是否独立地分散在均值上?等等)
  • 训练/验证/测试集(注意过度拟合)
  • 使用交叉验证和/或自举样本
  • 验证关键模型指标(即错误、准确性、F 值、p 值等)
  • 将模型分数(例如准确度)与 ANOVA F 统计量进行比较,以确定模型之间是否存在统计学上的显着差异(如果这些分数是每个模型的平均 CV 分数,则加分)
  • 模型分数的置信区间的近似和评估(例如“该模型准确度的 95% CI 在 [78.04%, 79.60%] 范围内”)
  • 使用 ROC 曲线比较模型
  • 最佳模型的成本/收益分析:
    • 训练模型的时间
    • 查询模型的时间
    • 可扩展性
    • 可审查性(我可以轻松地向利益相关者解释这个模型是如何工作的吗?)
    • 可解释性(我是否可以轻松查看该模型认为哪些因素重要且可操作?)
    • 可更新性
  • 等等。

如果您认为您的模型将受益于增量更新,这意味着底层系统或数据的性质会随着时间而变化,因此您昨天验证的模型今天不一定有效。您不应该假设简单地优化旧模型(给定新数据)上的参数会在您的模型中产生统计学上的显着改进,或者在这方面产生有效的模型。这种增量更新应该在数据科学家监督下进行适当的模型验证。这是因为验证模型是一项复杂的任务,并且可能会出现半定性的挑战。例如:

  • 可能是某些预测变量不再相关,应该删除
  • 也许数据的性质在 2015 年之后发生了根本性的变化,因此应该过滤训练集
  • 也许需要收集一些新数据以更好地反映正在建模的系统
  • 新数据中反映的变化可能会在模型中引入多重共线性,从而违反模型假设,从而使其无效
  • 也许算法或一般方法需要完全改变

什么时候可以自动进行再培训?

当然,您可以(谨慎)应用机器学习,而不考虑基本假设和概念。这可能是您应用领域的成本/收益问题。

例如,当您有数以万计的模型需要定期更新并且预测的风险很低时,设置自动重新训练可能是有益的。例如,您可以为应用程序的每个单独用户建立一个模型,并且您只想预测一些半琐碎的行为。也许不准确预测的成本很低,但准确预测的好处很高。这可能具有良好的商业意义。

但是,如果您的预测结果风险很高,我会应用基本概念并严格遵循最佳实践。

问题:你应该重新训练吗?

答案取决于您的模型尝试做什么以及它应用在什么环境中。

让我通过几个例子来解释:

假设您的模型试图预测客户的行为,例如,在给定为他量身定制的报价的情况下,客户购买您的产品的可能性有多大。显然,市场会随着时间而变化,客户的偏好会发生变化,而您的竞争对手也会随之调整。你也应该调整,所以你需要定期重新训练。在这种情况下,我建议添加新数据,但也忽略不再相关的旧数据。如果市场瞬息万变,您甚至应该考虑仅根据新数据定期进行再培训。

另一方面,如果您的模型将某些成像(例如 X 射线或 MRI)归类为医疗条件,并且模型表现良好,则如果技术或医学知识没有变化,则您无需重新训练. 添加更多数据不会有太大改善。