预测合同流失/取消:伟大的模型结果在现实世界中不起作用

数据挖掘 机器学习 Python 分类 scikit-学习 搅拌
2021-10-07 03:23:27

我正忙于预测合同取消的监督机器学习问题。虽然是一个冗长的问题,但我确实希望有人能花时间,因为我相信它会帮助其他人(我只是找不到任何对我有帮助的解决方案)

我有以下两个数据集:

1)“建模数据集”

包含约 40 万份合同(行),具有 300 个特征和一个标签(0 =“未取消”,1 =“取消”)。

每行代表一个合同,每个合同在数据中只表示一次。有 35 万个“未取消”和 5 万个“取消”案例。

特征都是在每个合同的特定日期提取的。该日期称为“生效日期”。对于“已取消”合同,“生效日期”是取消日期。对于“未取消”合同,“生效日期”是 6 个月前的日期。这将在稍后解释。

2)“实时数据集”

包含 300k 个合同(行),具有相同的 300 个功能列表。当然,所有这些合同都是“未取消”的,因为我们想预测其中哪些将取消。这些合同被跟踪了 2 个月,然后我在这个数据中添加了一个标签,以表明它是否真的在这两个月内最终取消:0 =“未取消”,1 =“取消”

问题:

我在“建模数据集”(随机训练/测试拆分)上得到了惊人的结果(例如精度 95%,AUC 0.98),但是一旦将该模型应用于“实时数据集”,它就表现不佳(无法很好地预测哪个合同最终取消)(例如 Precision 50%,AUC 0.7)。

在建模数据集上,结果非常好,几乎与模型或数据准备无关。我测试了许多模型(例如 SkLearn 随机森林、Keras 神经网络、Microsoft GbmLight、SkLearn 递归特征消除)。即使使用默认设置,模型通常也表现良好。我已经标准化了功能。我已经对功能进行了分类,以尝试提高它的泛化程度。没有什么可以帮助它推广到“实时数据集”

我的怀疑:

在我看来,这不是一个过度训练的问题,因为我在“建模数据集”中有一个测试集,并且这些结果在测试集上非常好。这不是建模甚至超参数优化问题,因为结果已经很好了。

我还通过逐个特征地查看直方图,研究了两个数据集之间的特征配置文件是否存在显着差异。没有什么令人担忧的不同。

我怀疑问题出在“建模数据集”中标记为“未取消”的相同合同,模型训练当然识别“未取消”,基本上与“实时数据集”中的合同完全相同,除了现在已经过去了 6 个月。

我怀疑“未取消”案例的特征没有发生足够的变化,现在无法让模型将其中一些案例识别为即将“取消”。换句话说,合约在特征空间中的移动还不够。

我的问题:

首先,我的怀疑听起来正确吗?

其次,如果我已经错误地说明了要解决的问题,那么如果目的是预测合同之类的取消(当您训练的数据几乎肯定包含数据时),我将如何设置问题陈述你想预测)?

作为记录,我在这里使用的问题陈述与其他人这样做的方式相似。他们报告了很好的结果。但我不确定这些模型是否在现实生活中进行过测试。在其他情况下,要解决的问题略有不同,例如酒店预订取消,这是不同的,因为有新的传入预订流并且预订持续时间相对较短,因此建模和实时数据集之间没有共同的预订。另一方面,合同的期限很长,可以随时取消,有时甚至永远不会取消。

3个回答

如果您的模型对未来 6 个月进行预测,那么在 6 个月之前判断其性能是没有意义的。如果只过了 2 个月,那么可能有 2/3 的真阳性还没有揭示它们的真实性质,而你得出的结论还为时过早。

为了测试这个理论,我会训练一个新模型来预测 2 个月后的情况,并使用它来获得实时准确度的近似值,而你要再等待 4 个月才能获得第一个模型。当然,可能还有其他问题,但这是我首先要尝试的。

如果不仔细查看数据,很难回答。
但如果我不得不猜测,你的观点似乎是有效的。(考虑到交叉验证方法或泄漏没有问题)

如果您在不同时间点“测量”合同特征,则可能存在很大偏差,即在取消合同的时间点测量的已取消合同的特征可能与“初始”有很大不同那些相同的合同的特点。

因此,您的建模将学习如何预测合同在给定日期被取消,而不是在它被取消之前,这就是为什么它不能在您的“真实世界数据”上正常工作的原因。

如果可以,请尝试使用合同设置(初始化)时的数据来构建您的模型。

这是问题之后的一段时间,但我认为值得将其包括在内。在数据集之间获得相似结果的解决方案是在“建模数据”中包含不同的数据,其中训练数据是其子集。

我不得不多次在数据中包含每个合同,而不是只包含每个合同,例如从 2016/01/01 到取消日期(如果取消)或今天(如果没有取消)。所以合同包括在许多生效日期。

在每种情况下,现在的标签将是从该记录的生效日期起是否在固定的关注期限(例如 1 个月)内发生了取消。因此,“1”表示在 1 个月内取消,“0”表示在 1 个月内未取消。

现在,该模型学会识别合同是否可能会在一个月内取消。

结果并不令人惊讶,但建模和现场设置之间的一致性最低。但实际上这是意料之中的,因为在许多情况下很难预测短期内取消长期合同。