我希望标题可以自我解释。在Kaggle中,大多数获胜者会使用有时与数百个基本模型进行堆叠的方式,以降低MSE的准确性,从而获得额外的百分比...一般来说,根据您的经验,精美的建模方法(例如堆叠与简单地收集更多数据和更多功能)有多么重要用于数据?
我希望标题可以自我解释。在Kaggle中,大多数获胜者会使用有时与数百个基本模型进行堆叠的方式,以降低MSE的准确性,从而获得额外的百分比...一般来说,根据您的经验,精美的建模方法(例如堆叠与简单地收集更多数据和更多功能)有多么重要用于数据?
Answers:
作为背景,我已经做了12年的零售销售预测 SKU时间序列。跨数以百计的商店的数以万计的时间序列。我喜欢说自从该术语流行以来我们一直在进行大数据。
我一直发现,最重要的事情就是了解您的数据。如果您不了解复活节或促销等主要驱动因素,那么您注定要失败。通常,这归结为对特定业务的了解足够,可以提出正确的问题,并从未知未知数中分辨出已知未知数。
了解数据后,您需要进行工作以获取干净的数据。我监督了许多初级和实习生,他们在所有统计和数据科学课程中从未经历过的一件事是,您的数据中有多少垃圾。然后,您需要回到源头并尝试获取它以带来良好的数据,或者尝试对其进行清理,甚至只是丢掉一些东西。更改正在运行的系统以产生更好的数据可能非常困难。
一旦了解了数据并且实际上有了一些干净的数据,就可以开始摆弄它了。不幸的是,到这个时候,我经常发现自己没有时间和资源了。
我个人是模型组合(“堆叠”)的忠实拥护者,至少从抽象的角度来说,我不太喜欢花哨的功能工程,因为这些通常会越过边界进入过度拟合的领域-即使您的理想模型的平均性能稍好一些,人们常常发现,使用更复杂的模型,真正糟糕的预测会变得更糟。这是我业务的突破口。一个非常糟糕的预测可能会完全破坏对整个系统的信任,因此在我的优先级列表中,鲁棒性非常高。你的旅费可能会改变。
以我的经验,是的,模型组合可以提高准确性。但是,前两个步骤确实取得了很大的收获:了解您的数据并进行清理(或首先获取干净的数据)。
显然,我不能代表整个行业,但是我从事行业工作并且参加过Kaggle比赛,所以我将分享我的POV。
首先,您应该怀疑Kaggle与人们在行业中所做的不完全匹配。这是一款游戏,受制于游戏规则,但有很多疯狂的限制。例如,在当前运行的桑坦德比赛中:
如果有人在工作时给我提供了这样的数据集,我将立即提供与他们一起进行要素工程的服务,以便我们获得更有用的要素。我建议我们使用领域知识来确定可能的交互作用术语,阈值,分类变量编码策略等。以这种方式解决问题显然比尝试从数据库工程师没有提供任何信息的情况下从废气文件中提取含义要更有生产力。 ML培训。
此外,如果您得知某个特定的数字列根本不是数字,而是一个邮政编码,那么,您可以从诸如美国人口普查等第三方数据源获取数据,以扩充您的数据。或者,如果您有日期,也许您会包括该日S&P 500的收盘价。这样的外部扩充策略需要特定数据集的详细知识和重要的领域知识,但与纯算法改进相比,通常具有更大的收益。
因此,行业与Kaggle之间的第一个大区别是在行业中,可以协商功能(就输入数据而言)。
第二类差异是性能。通常,模型将通过以下两种方式之一部署到生产环境:1)将针对非常大的数据库表中的每一行预先计算模型预测,或2)应用程序或网站将模型传递单行数据,然后需要实时返回的预测。两种用例都需要良好的性能。由于这些原因,您不会经常看到预测或使用K-最近邻居或Extra Random Forests这样的模型可能会很慢的模型。相比之下,逻辑回归或神经网络可以用少量矩阵乘法对一批记录进行评分,并且可以使用正确的库对矩阵乘法进行高度优化。即使我堆叠在另一个非参数模型上,即使我可以获得+0.001 AUC,我也不会这样做,因为预测吞吐量和延迟会下降太多。
这样做有一个可靠性方面的问题,它可以很好地堆叠四个不同的最新的第三方库,例如LightGBM,xgboost,catboost和Tensorflow(当然,在GPU上)可能会使您的MSE降低0.01。在Kaggle竞赛中获胜,但如果出了问题,则可以使用四个不同的库进行安装,部署和调试。如果您可以在笔记本电脑上使用所有这些功能,那真是太好了,但是让它在AWS上运行的Docker容器中运行却是另一回事。大多数公司不希望只组建一个小的开发团队来解决这类部署问题。
也就是说,堆叠本身并不一定是一件大事。实际上,堆叠几个性能相同但决策边界不同的不同模型是获得AUC微小变化和鲁棒性较大变化的好方法。只是不要将太多的厨房水槽扔到异构集合中,以致开始出现部署问题。
根据我的经验,更多的数据和更多的功能比提供的最先进,最堆叠,最优化的模型更重要。
查看发生的在线广告竞赛。获胜的模型是如此复杂,以至于需要花整整一周的时间进行训练(与行业标准相比,这是一个非常小的数据集)。最重要的是,堆叠模型中的预测要比简单线性模型中的预测更长。在同一主题上,请记住,由于工程成本,Netflix从未使用过其1M $算法。
我想说,在线数据科学竞赛是公司使用(在某个时间点)收集的数据了解“可以实现的最高准确性(或任何性能指标)的好方法”。注意,这实际上是一个很难解决的问题!但是,在行业中,现场知识,硬件和业务约束通常不鼓励使用“幻想模型”。
堆叠显着增加了复杂性并降低了可解释性。收益通常相对较小以证明其合理性。因此,尽管集成可能被广泛使用(例如XGBoost),但我认为堆叠在行业中相对较少。
这在Kaggle上并没有太多体现:
在该模型的生命周期内,您将面临的风险越大。通常在Kaggle竞赛中冻结时间,或者在不久的将来会出现测试集值的时间窗口。在行业中,该模型可能会运行数年。而且,即使它是完美构建的,一个变量也可能使整个模型陷入困境。我明白了,没有人愿意看一场比赛,竞争者会在模型的复杂性和风险之间进行谨慎的权衡,但是在工作中,如果您掌管的模型出了问题,您的业务和生活质量就会受到损害。即使是非常聪明的人也无法幸免。以Google流感趋势预测失败为例。世界改变了,他们没有看到它的到来。
对于OP的问题,“ 一般而言,根据您的经验,像堆叠这样简单的建模与简单地收集更多数据和更多数据特征之间的重要性有多重要? ”嗯,我正式年龄很大,但我的回答是,除非您有如果要建立真正强大的建模基础架构,最好是使用简单的模型,并使用最少的变量集,其中输入输出关系相对简单。如果变量几乎不能改善您的损失指标,则将其忽略。请记住,这是一项工作。在Kaggle竞赛的工作之外踢球,那里有“变大或回家”的奖励。
一个例外情况是,如果业务情况需要一定水平的模型性能,例如,如果您的公司需要与竞争对手的性能相匹配或超过竞争对手以获取某种优势(可能在营销方面)。但是,当模型性能与业务收益之间存在线性关系时,复杂性的增加通常并不能证明财务收益是合理的(请参阅“ 由于工程成本,Netflix从未使用过其$ 1百万算法 ”-@ RUser4512对此表示歉意)文章)。但是,在Kaggle比赛中,通过附近的解决方案时,这种额外的收获可能会使您移动数百个职位。