我希望标题是不言自明的。在 Kaggle 中,大多数获胜者有时会使用数百个基本模型进行堆叠,以挤压额外 % 的 MSE、准确性……总的来说,根据您的经验,花哨的建模(例如堆叠)与简单地收集更多数据和更多功能相比有多重要数据?
行业与 Kaggle 的挑战。收集更多的观察结果并获得更多的变量比花哨的建模更重要吗?
作为背景,我已经为零售额数百或数千家商店的数万个时间序列。我喜欢说我们在大数据这个词流行之前就一直在做。
我一直发现,最重要的是了解您的数据。如果您不了解复活节或促销等主要驱动因素,那么您注定要失败。通常,这归结为对特定业务的了解足以提出正确的问题,并从未知的未知中分辨出已知的未知。
了解数据后,您需要努力获取干净的数据。我指导过很多大三学生和实习生,他们在所有统计和数据科学课程中从未经历过的一件事就是你所拥有的数据中有多少纯粹的废话。然后你需要要么回到源头并尝试让它带来好的数据,要么尝试清理它,甚至只是扔掉一些东西。更改正在运行的系统以产生更好的数据可能非常困难。
一旦你理解了你的数据并且实际上有一些干净的数据,你就可以开始摆弄它了。不幸的是,到了这个时候,我经常发现自己没有时间和资源。
我个人是模型组合(“堆叠”)的忠实粉丝,至少在抽象意义上,不太喜欢花哨的特征工程,它经常越界进入过拟合领域 - 即使您的更高级的模型平均表现略好,人们经常会发现,如果使用更复杂的模型,真正糟糕的预测会变得更糟。这是我的业务中的一个交易破坏者。一个非常糟糕的预测可能会完全破坏对整个系统的信任,因此稳健性在我的优先级列表中非常重要。你的旅费可能会改变。
以我的经验,是的,模型组合可以提高准确性。然而,真正的大收获来自前两个步骤:了解您的数据,并清理它(或首先获得干净的数据)。
显然,我不能代表整个行业,但我在行业工作并在 Kaggle 上竞争过,所以我会分享我的 POV。
首先,你怀疑 Kaggle 并不完全符合人们在行业中所做的事情是正确的。这是一个游戏,受制于游戏技巧,有很多疯狂的限制。例如,在目前正在进行的桑坦德竞赛中:
- 特征名称被人为散列以隐藏其含义
- “训练”集被人为地限制为行数少于列数,因此特征选择、鲁棒性和正则化技术对于成功来说是必不可少的。
- 所谓的“测试”集与训练集有明显不同的分布,两者显然不是来自同一群体的随机样本。
如果有人在工作中给我这样的数据集,我会立即提出与他们合作进行特征工程,以便我们可以获得更有用的特征。我建议我们使用领域知识来决定可能的交互术语、阈值、分类变量编码策略等。以这种方式解决问题显然比试图从数据库工程师产生的无用文件中提取意义更有效率。机器学习训练。
此外,如果您知道某个特定的数字列根本不是数字,而是邮政编码,那么您可以从美国人口普查等第三方数据源获取数据以扩充您的数据。或者,如果您有一个日期,也许您将包括当天的标准普尔 500 指数收盘价。这种外部增强策略需要对特定数据集和重要领域知识的详细了解,但通常比纯粹的算法改进具有更大的回报。
因此,行业和 Kaggle 之间的第一个大区别在于,在行业中,特征(在输入数据的意义上)是可以协商的。
第二类差异是性能。通常,模型将通过以下两种方式之一部署到生产环境中:1) 将为非常大的数据库表中的每一行预先计算模型预测,或者 2) 应用程序或网站将向模型传递单行数据和需要实时返回的预测。这两个用例都需要良好的性能。由于这些原因,您不会经常看到预测速度慢或使用大量内存的模型,例如 K-Nearest-Neighbors 或 Extra Random Forests。相比之下,逻辑回归或神经网络可以通过少量矩阵乘法对一批记录进行评分,并且可以使用正确的库对矩阵乘法进行高度优化。即使如果我叠加另一个非参数模型,我可能会得到 +0.001 AUC,但我不会因为预测吞吐量和延迟会下降太多。
这也有一个可靠性维度——堆叠四个不同的最先进的第 3 方库,比如LightGBM、xgboost、catboost和Tensorflow(当然是在GPU上)可能会让你 MSE 减少 0.01赢得了 Kaggle 比赛,但如果出现问题,需要安装、部署和调试四个不同的库。如果您可以让所有这些东西在您的笔记本电脑上运行,那就太好了,但是让它在 AWS 上运行的 Docker 容器中运行是完全不同的故事。大多数公司不想仅仅为了处理这些类型的部署问题而组建一个小型 devops 团队。
也就是说,堆叠本身并不一定是一件大事。事实上,堆叠几个性能相同但决策边界非常不同的不同模型是获得 AUC 小提升和鲁棒性大提升的好方法。只是不要将这么多的厨房水槽投入到您的异构集成中,以至于您开始遇到部署问题。
根据我的经验,更多的数据和更多的功能比一号模型能想出的最华丽、最堆叠、最优化的模型更重要。
看看发生的在线广告比赛。获胜的模型非常复杂,最终需要整整一周的时间来训练(与行业标准相比,在一个非常小的数据集上)。最重要的是,堆叠模型中的预测比简单线性模型中的预测要长。在同一主题上,请记住,由于工程成本,Netflix 从未使用过其 100 万美元的算法。
我想说,在线数据科学竞赛是公司使用他们收集的数据(在某个时间点)了解“可以实现的最高精度(或任何性能指标)是什么”的好方法。请注意,这实际上是一个正在解决的难题!但是,在行业中,领域知识、硬件和业务限制通常不鼓励使用“花式建模”。
堆叠显着增加了复杂性并降低了可解释性。收益通常相对较小以证明其合理性。因此,虽然集成可能被广泛使用(例如 XGBoost),但我认为堆叠在行业中相对较少。