工业与Kaggle的挑战。收集更多的观测值并获得更多的变量是否比幻想建模更重要?


56

我希望标题可以自我解释。在Kaggle中,大多数获胜者会使用有时与数百个基本模型进行堆叠的方式,以降低MSE的准确性,从而获得额外的百分比...一般来说,根据您的经验,精美的建模方法(例如堆叠与简单地收集更多数据和更多功能)有多么重要用于数据?


4
这完全取决于您是否想要一个有用的可通用流程,该流程可以快速地进行重新训练(或重新定位到新数据集或新功能),或者只是赢得特定的Kaggle竞争(在该特定的静态数据集上,具有泄漏漏洞利用,“魔术功能”和所有)。对于前者,在较短的训练时间和较小的数据集上获得相同精度的算法是“更好的”。想象一下,如果Kaggle曾经开始惩罚过多的计算/内存需求或培训时间,或者将其作为提交分数的一部分(我建议他们应该已经)。
smci

2
摘自Rasmus Rothe的“将深度学习应用于现实世界中的问题”:“ […]在现实世界中的场景,这与显示另一种方法相比,表明您的新算法的性能提高了1%无关紧要。是要建立一个强大的系统,以足够的精度解决所需的任务。”
Beatngu13 '18

Answers:


77

作为背景,我已经做了12年的零售销售预测 SKU时间序列。跨数以百计的商店的数以万计的时间序列。我喜欢说自从该术语流行以来我们一直在进行大数据。×

我一直发现,最重要的事情就是了解您的数据。如果您不了解复活节或促销等主要驱动因素,那么您注定要失败。通常,这归结为对特定业务的了解足够,可以提出正确的问题,并从未知未知数中分辨出已知未知数

了解数据后,您需要进行工作以获取干净的数据。我监督了许多初级和实习生,他们在所有统计和数据科学课程中从未经历过的一件事是,您的数据中有多少垃圾。然后,您需要回到源头并尝试获取它以带来良好的数据,或者尝试对其进行清理,甚至只是丢掉一些东西。更改正在运行的系统以产生更好的数据可能非常困难。

一旦了解了数据并且实际上有了一些干净的数据,就可以开始摆弄它了。不幸的是,到这个时候,我经常发现自己没有时间和资源了。

我个人是模型组合(“堆叠”)的忠实拥护者,至少从抽象的角度来说,我不太喜欢花哨的功能工程,因为这些通常会越过边界进入领域-即使您的理想模型的平均性能稍好一些,人们常常发现,使用更复杂的模型,真正糟糕的预测会变得更糟。这是我业务的突破口。一个非常糟糕的预测可能会完全破坏对整个系统的信任,因此在我的优先级列表中,鲁棒性非常高。你的旅费可能会改变。

以我的经验,是的,模型组合可以提高准确性。但是,前两个步骤确实取得了很大的收获:了解您的数据并进行清理(或首先获取干净的数据)。


4
@ bendl,YMMV表示您的里程可能会有所不同。在不同情况下,此之前的句子或多或少是正确的。
Orphevs

2
我还从事零售业,在〜10时间序列中进行SKU /位置级别预测:-)。但是我想知道我们所做的是否算作“大数据”。尽管总体数据集在大数据范围内,但是预测模型通常应用于较小的数据分组(即使在使用分层预测方法之后)以及真正的大数据处理所必需的技术(例如MapReduce,数据哈希等)。 。)从未被要求。亚马逊的DeepAR似乎是真正的大数据,我怀疑这与科学一样大肆宣传。106
Skander H.

2
没关系,只有课堂经验。有很多行业从业者,他们主要在高信噪比的环境(例如图像识别)方面经验丰富,并且为了上帝的缘故,尝试将相同的方法应用于嘈杂的社会过程(如招聘)。
垃圾平衡

2
@Orphevs换句话说,此声明可能与我的情况不符,不能一概而论。:P
JAD

2
(+1)关于应届毕业生的数据清理问题,也值得注意的是,在我接受正规教育期间,很容易想到数据清理是一件坏事。也就是说,数据清理严重影响I型错误率(尤其是在清理过程中存在偏差的情况下),因此我们了解了数据清理的危险。这些课程没有错,但我认为我的正规教育并不强调数据清理的好处,尤其是在预测建模的情况下。
Cliff AB

42

显然,我不能代表整个行业,但是我从事行业工作并且参加过Kaggle比赛,所以我将分享我的POV。

首先,您应该怀疑Kaggle与人们在行业中所做的不完全匹配。这是一款游戏,受制于游戏规则,但有很多疯狂的限制。例如,在当前运行的桑坦德比赛中:

  1. 人为地将特征名称进行哈希处理以隐藏其含义
  2. 人为地限制了“训练”集,使其行数少于列数,因此,特征选择,鲁棒性和正则化技术对于成功必不可少。
  3. 所谓的“测试”集与训练集的分布明显不同,这两个显然不是来自同一群体的随机样本。

如果有人在工作时给我提供了这样的数据集,我将立即提供与他们一起进行要素工程的服务,以便我们获得更有用的要素。我建议我们使用领域知识来确定可能的交互作用术语,阈值,分类变量编码策略等。以这种方式解决问题显然比尝试从数据库工程师没有提供任何信息的情况下从废气文件中提取含义要更有生产力。 ML培训。

此外,如果您得知某个特定的数字列根本不是数字,而是一个邮政编码,那么,您可以从诸如美国人口普查等第三方数据源获取数据,以扩充您的数据。或者,如果您有日期,也许您会包括该日S&P 500的收盘价。这样的外部扩充策略需要特定数据集的详细知识和重要的领域知识,但与纯算法改进相比,通常具有更大的收益。

因此,行业与Kaggle之间的第一个大区别是在行业中,可以协商功能(就输入数据而言)。

第二类差异是性能。通常,模型将通过以下两种方式之一部署到生产环境:1)将针对非常大的数据库表中的每一行预先计算模型预测,或2)应用程序或网站将模型传递单行数据,然后需要实时返回的预测。两种用例都需要良好的性能。由于这些原因,您不会经常看到预测或使用K-最近邻居或Extra Random Forests这样的模型可能会很慢的模型。相比之下,逻辑回归或神经网络可以用少量矩阵乘法对一批记录进行评分,并且可以使用正确的库对矩阵乘法进行高度优化即使我堆叠在另一个非参数模型上,即使我可以获得+0.001 AUC,我也不会这样做,因为预测吞吐量和延迟会下降太多。

这样做有一个可靠性方面的问题,它可以很好地堆叠四个不同的最新的第三方库,例如LightGBMxgboostcatboostTensorflow(当然,在GPU上)可能会使您的MSE降低0.01。在Kaggle竞赛中获胜,但如果出了问题,则可以使用四个不同的库进行安装,部署和调试。如果您可以在笔记本电脑上使用所有这些功能,那真是太好了,但是让它在AWS上运行的Docker容器中运行却是另一回事。大多数公司不希望只组建一个小的开发团队来解决这类部署问题。

也就是说,堆叠本身并不一定是一件大事。实际上,堆叠几个性能相同但决策边界不同的不同模型是获得AUC微小变化和鲁棒性较大变化的好方法。只是不要将太多的厨房水槽扔到异构集合中,以致开始出现部署问题。


次要注意事项,我认为您的要点2缺少句子的结尾吗?
mbrig

20

根据我的经验,更多的数据和更多的功能比提供的最先进,最堆叠,最优化的模型更重要。

查看发生的在线广告竞赛。获胜的模型是如此复杂,以至于需要花整整一周的时间进行训练(与行业标准相比,这是一个非常小的数据集)。最重要的是,堆叠模型中的预测要比简单线性模型中的预测更长。在同一主题上,请记住,由于工程成本Netflix从未使用过其1M $算法

我想说,在线数据科学竞赛是公司使用(在某个时间点)收集的数据了解“可以实现的最高准确性(或任何性能指标)的好方法”。注意,这实际上是一个很难解决的问题!但是,在行业中,现场知识,硬件和业务约束通常不鼓励使用“幻想模型”。


2
没错,数据收集过程总是在不断发展。这意味着当前使用的算法将过时(如您所指出的,在工程成本或培训时间之上)。因此,将需要更简单,更快和更灵活的算法。
汤姆(Tom)

4
我听到这篇文章的要点之一总结为“好的变量选择将始终胜过好的模型选择”
aginensky

14

堆叠显着增加了复杂性并降低了可解释性。收益通常相对较小以证明其合理性。因此,尽管集成可能被广泛使用(例如XGBoost),但我认为堆叠在行业中相对较少。


1
好点子。可解释性是在我的应用中非常重要的(商店经理想明白为什么预测是它是什么),所以难以解释的模型有问题。
S. Kolassa-恢复莫妮卡

感谢您对斯蒂芬的个人见解。尽管我认为随着模型复杂性的增加,可解释性会受到影响或消失,但我没有想到时间约束肯定会在公司中更为紧迫。花式建模可能具有(精度获得)/(花费时间)最差的比率。
汤姆(Tom)

8

以我的经验,收集好的数据和功能非常重要。

我们与之合作的客户通常拥有大量数据,但并非所有数据都易于导出或使用。第一批数据通常不是很有用;与客户合作是我们的任务,以确定使模型更有用的数据。这是一个非常反复的过程。

有许多实验正在进行,我们需要的模型是:

  1. 快速训练
  2. 快速预测(通常也是一项业务要求)
  3. 容易解释

要点3)尤其重要,因为易于解释的模型更易于与客户沟通,如果我们做错了事,也更容易捕获。


7

这在Kaggle上并没有太多体现:

  • 您的模型中有更多变量,以及
  • 这些变量与输出之间的关系越复杂,

在该模型的生命周期内,您将面临的风险越大。通常在Kaggle竞赛中冻结时间,或者在不久的将来会出现测试集值的时间窗口。在行业中,该模型可能会运行数年。而且,即使它是完美构建的,一个变量也可能使整个模型陷入困境。我明白了,没有人愿意看一场比赛,竞争者会在模型的复杂性和风险之间进行谨慎的权衡,但是在工作中,如果您掌管的模型出了问题,您的业务和生活质量就会受到损害。即使是非常聪明的人也无法幸免。以Google流感趋势预测失败为例。世界改变了,他们没有看到它的到来。

对于OP的问题,“ 一般而言,根据您的经验,像堆叠这样简单的建模与简单地收集更多数据和更多数据特征之间的重要性有多重要? ”嗯,我正式年龄很大,但我的回答是,除非您有如果要建立真正强大的建模基础架构,最好是使用简单的模型,并使用最少的变量集,其中输入输出关系相对简单。如果变量几乎不能改善您的损失指标,则将其忽略。请记住,这是一项工作。在Kaggle竞赛的工作之外踢球,那里有“变大或回家”的奖励。

一个例外情况是,如果业务情况需要一定水平的模型性能,例如,如果您的公司需要与竞争对手的性能相匹配或超过竞争对手以获取某种优势(可能在营销方面)。但是,当模型性能与业务收益之间存在线性关系时,复杂性的增加通常并不能证明财务收益是合理的(请参阅“ 由于工程成本,Netflix从未使用过其$ 1百万算法 ”-@ RUser4512对此表示歉意)文章)。但是,在Kaggle比赛中,通过附近的解决方案时,这种额外的收获可能会使您移动数百个职位。


3

一个简短的答案是我喜欢加里·卡斯帕罗夫(Gary Kasparov)的著作《深度思维》(Deep Thinking)中的一句话

聪明的过程胜过卓越的知识和卓越的技术

我主要处理时序财务数据,以及从收集数据,清理数据,处理数据,然后与问题负责人一起确定他们实际想要的工作,然后构建功能和模型以尝试解决的过程。问题,并最终回顾下一次改进的过程。

整个过程大于其各个部分的总和。通过线性/逻辑回归并与领域专家交谈以生成功能,我倾向于获得“可接受的”泛化性能,与花费时间使模型对我的数据过度拟合相比,花费的时间更好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.