您将获得一个预训练的二进制 ML 分类模型,在测试集上具有 99% 的准确率(假设客户需要 95% 并且测试集是平衡的)。我们想在生产中部署我们的模型。会出什么问题?你会怎么检查?
我的回答是,该模型可能偏向于我们的测试集,并且可能无法概括尚未看到的数据。我们可以通过在多个以前从未见过的不相关测试集上运行模型来检查这一点。
这是正确的角度吗?
您将获得一个预训练的二进制 ML 分类模型,在测试集上具有 99% 的准确率(假设客户需要 95% 并且测试集是平衡的)。我们想在生产中部署我们的模型。会出什么问题?你会怎么检查?
我的回答是,该模型可能偏向于我们的测试集,并且可能无法概括尚未看到的数据。我们可以通过在多个以前从未见过的不相关测试集上运行模型来检查这一点。
这是正确的角度吗?
有很多可能的方法可以让你在数据科学测试中获得非常高的分数。这里有一些例子 :
您的测试集也在您的训练集中:假设您有 2010 年到 2020 年的数据,并使用 2019 年作为测试。如果您在不排除 2019 年的情况下对所有 2010-2020 年进行了训练,那么您将在模型众所周知的数据上进行测试,因为它用于训练它。此外,如果模型倾向于过度拟合(因此与训练集“太完美和精确”地拟合),您可以达到 99% 的准确率
数据泄漏:这是一种现象,其中您的测试集包含您在真正的新案例中不应该拥有的信息。示例:您正在使用 Titanic 数据集,预测谁死谁生。想象一下,现在数据集有一个名为“死亡时间”的属性,如果人幸存,则为空,如果他死亡,则为一小时。然后您的模型将学习“如果此属性为空,则此人生存,否则他死亡”。在您的测试集上,您将应用您的模型,知道如果您必须预测真正的新案例,您不应该知道这些信息
不管发生什么,99% 的准确率必须让你怀疑并寻找错误,这几乎是不可能实现的,除非你的问题真的很容易(并且可能根本不需要数据科学模型)
如前所述,数据泄漏以及在测试和训练集中有一些相同的数据可能是有问题的。
其他可能出错的事情:
模型试图预测的目标变量的统计特性会随着时间以不可预见的方式发生变化
即使您在训练时做的一切都正确,也会发生这种情况,并且在您使用旧数据进行训练时尤其重要。
《看见未来》
假设您有某种时间序列,当前数据和模式可能会影响未来数据(如股票价格或客户行为)。如果您使用与测试集相关的未来数据进行训练,这并不能反映现实世界(因为您无法在现实世界中看到未来),并且模型测试性能可能不准确。
测试集中的示例需要在训练集中的每个示例之后。
这与概念漂移有关(可能会也可能不会分类)。
优化测试集
如果您正在进行超参数调整,则应为此使用单独的集合(交叉验证集)。
根据您的测试集优化超参数意味着您基本上是在测试集上进行训练,然后您不能真正信任模型的性能,原因与您不能信任在训练集上测试的模型相同。
错误的指标?
根据问题的措辞方式,我认为这可能不相关,但重要的是要提一下。
如果您在选择评估指标时没有采取适当的谨慎措施,您的模型可能在纸面上看起来不错,但如果它在生产中实际获得相同的结果,则会对业务产生相当糟糕的影响。
有很多很多方法可以选择错误的指标,但选择正确指标的总体思路是,您需要考虑模型可能不准确的各种方式(误报和误报)对现实世界的影响。二元分类)以及这样做的副作用是什么(例如,拒绝有效的客户成本意味着他们不太可能回来并可能说服其他人转而去其他地方)。
不要在没有完全理解使用该指标的含义的情况下直接使用一些流行的指标。
这本身就是一个很大的话题,但我可以在这里简要介绍一下。
除了我上面已经提到的之外,您还可以执行以下操作:
增量推出
例如,您可以在几个城市开始运行该模型,而不是立即在全球推广。
这限制了模型在现实世界中表现不佳的风险。
A/B 测试
这允许您以您可能无法以其他方式准确评估模型(例如,如果您拒绝标记为欺诈的交易,您可能永远不知道它是否真的是欺诈)。
适当监控模型性能
使用各种指标密切关注模型在生产中的表现,并确保没有任何不可预见的副作用。
定期重新训练模型
这与概念漂移最相关。通常,您会期望模型性能会随着时间的推移而下降。