如何知道你的机器学习问题是没有希望的?

机器算法验证 机器学习 预测 造型 模型选择 可预测性
2022-01-16 11:09:59

想象一个标准的机器学习场景:

你面对的是一个大型的多元数据集,你对它的理解非常模糊。您需要做的是根据您所拥有的对某些变量进行预测。像往常一样,你清理数据,查看描述性统计数据,运行一些模型,交叉验证它们等等,但经过几次尝试,来回尝试多个模型似乎没有任何效果,你的结果很糟糕。您可以在这样的问题上花费数小时、数天或数周……

问题是:什么时候停止?你怎么知道你的数据实际上是没有希望的,所有花哨的模型都不会比预测所有案例的平均结果或其他一些微不足道的解决方案更好?

当然,这是一个可预测性问题,但据我所知,在尝试之前很难评估多变量数据的可预测性。还是我错了?

免责声明:这个问题的灵感来自这个问题 我什么时候停止寻找模特?这并没有引起太多关注。如果能对此类问题有详细的回答以供参考,那就太好了。

3个回答

可预测性

你说得对,这是一个可预测性的问题。IIF 面向从业者的期刊Foresight中有几篇关于可预测性的文章。(全面披露:我是副主编。)

问题是在“简单”情况下已经很难评估可预测性。

几个例子

假设您有这样的时间序列,但不会说德语:

蛋

您将如何模拟 4 月的大高峰,以及如何将这些信息包含在任何预测中?

除非您知道这个时间序列是瑞士连锁超市的鸡蛋销售量,它在西方日历复活节前达到顶峰,否则您将没有机会。此外,随着复活节在日历中的移动多达六周,任何不包括复活节具体日期的预测(假设这只是明年某个特定周会再次出现的一些季节性高峰)可能会很差。

同样,假设您有下面的蓝线,并且想要对 2010 年 2 月 28 日发生的任何事情进行建模,与 2010 年 2 月 27 日的“正常”模式不同:

曲棍球游戏

同样,如果不知道当整个城市的加拿大人在电视上观看奥运会冰球决赛时会发生什么,你就没有机会了解这里发生了什么,你也无法预测这样的事情何时会再次发生。

最后,看看这个:

离群值

这是现金和自运商店每日销售的时间序列。(在右边,你有一个简单的表:282 天销售额为零,42 天销售额为 1...,一天销售额为 500。)我不知道它是什么项目。

直到今天,我都不知道那一天销售额 500 件发生了什么。我最好的猜测是,一些客户预先订购了大量的任何产品并收集了它。现在,在不知道这一点的情况下,对这一特定日子的任何预测都将遥遥无期。相反,假设这发生在复活节之前,我们有一个愚蠢的智能算法,它认为这可能是复活节效应(也许这些是鸡蛋?)并愉快地预测下一个复活节有 500 个单位。哦,我的,会不会出错。

概括

在所有情况下,我们都看到只有在对影响数据的可能因素有足够深入的了解后,才能很好地理解可预测性。问题是除非我们知道这些因素,否则我们不知道我们可能不知道它们。根据唐纳德拉姆斯菲尔德

[T]这里是已知的;有些事情我们知道我们知道。我们也知道有已知的未知数;也就是说,我们知道有些事情我们不知道。但也有未知的未知数——我们不知道我们不知道的。

如果复活节或加拿大人对曲棍球的偏爱对我们来说是未知的未知数,我们就会陷入困境 - 我们甚至没有前进的道路,因为我们不知道我们需要问什么问题。

处理这些问题的唯一方法是收集领域知识。

结论

我由此得出三个结论:

  1. 总是需要在建模和预测中包含领域知识。
  2. 即使拥有领域知识,也不能保证您获得足够的信息以使您的预测和预测能够被用户接受。请参阅上面的异常值。
  3. 如果“你的结果很糟糕”,你可能希望得到比你能实现的更多的东西。如果您要预测一次公平的抛硬币,那么就没有办法达到 50% 以上的准确率。也不要相信外部预测准确性基准。

底线

以下是我推荐构建模型的方法 - 并注意何时停止:

  1. 如果您自己还没有领域知识,请与具有领域知识的人交谈。
  2. 根据步骤 1,确定您想要预测的数据的主要驱动因素,包括可能的交互。
  3. 迭代地构建模型,包括按照步骤 2 按强度降序排列的驱动程序。使用交叉验证或坚持样本评估模型。
  4. 如果你的预测准确性没有进一步提高,要么返回第 1 步(例如,通过识别你无法解释的明显错误预测,并与领域专家讨论这些),要么接受你已经到达你的终点模型的能力。提前为您的分析设置时间盒会有所帮助。

请注意,如果您的原始模型停滞不前,我不提倡尝试不同类别的模型。通常,如果您从一个合理的模型开始,使用更复杂的东西不会产生很大的好处,并且可能只是“在测试集上过度拟合”。我经常看到这种情况,其他人也同意

Stephan Kolassa 的回答非常好,但我想补充一点,通常还存在经济停止条件:

  1. 当您为客户而不是为了好玩而进行 ML 时,您应该看看客户愿意花多少钱。如果他向你的公司支付 5000 欧元,而你花了一个月的时间寻找模特,你就会亏本。听起来微不足道,但我已经看到“必须有一个解决方案!!!!”——这种想法导致了巨大的成本超支。因此,当资金用完时停止并将问题传达给您的客户。
  2. 如果您已经完成了一些工作,您通常会感觉到当前数据集的可能性。尝试将其应用于您可以通过模型赚取的金额,如果金额微不足道或净负数(例如,由于收集数据、开发解决方案等的时间),您应该停止。

举个例子:我们有一个客户想预测他的机器什么时候坏,我们分析了现有的数据,发现基本上是噪音。我们深入研究了这个过程,发现最关键的数据没有记录下来,而且很难收集。但是如果没有这些数据,我们的模型就太差了,没有人会使用它,而且它被罐装了。

虽然我在开发商业产品时专注于经济学,但这条规则也适用于学术界或有趣的项目——虽然在这种情况下金钱不那么重要,但时间仍然是一种稀有商品。例如。在学术界,当你没有产生切实的成果时,你应该停止工作,而你还有其他更有希望的项目可以做。但不要放弃该项目 - 请同时发布 null 或“需要更多/其他数据”结果,它们也很重要!

还有另一种方法。问你自己 -

  1. 谁或什么对这个特定变量做出了最好的预测?”
  2. 我的机器学习算法会产生比最佳预测更好或更差的结果吗?

因此,例如,如果您有大量与不同足球队相关的变量,并且您试图预测谁会获胜,您可能会查看博彩公司赔率或某种形式的众包预测,以与您的机器学习结果进行比较算法。如果你更好,你可能会处于极限,如果更糟,那么显然还有改进的余地。

你提高的能力(大体上)取决于两件事:

  1. 您是否使用与该特定任务的最佳专家相同的数据?
  2. 您是否像在这项特定任务中的最佳专家一样有效地使用数据?

这完全取决于我想要做什么,但我倾向于使用这些问题的答案来推动我在构建模型时的方向,特别是是否尝试提取更多我可以使用的数据或专注于试图完善模型。

我同意 Stephan 的观点,通常最好的方法是咨询领域专家。