别把引擎当汽车:AutoML不值得……

全文共3101字,预计学习时长6分钟

别把引擎当汽车:AutoML不值得……

猫和老鼠,第70集——机器猫(1952)

日常工作中,我经常用到AutoML(Automated Machine Learning,自动机器学习),在参加ML竞赛时,也用过几次AutoML来辅助主模型,还参加过两次AutoML竞赛。我认为,AutoML自动化建模过程的想法是很棒的,但这一领域其实被吹吹捧得言过其实了。在未来,一些重要概念,如特征工程、元学习超参优化,可以释放AutoML的潜能;但是目前,一站式的AutoML作为一种工具,只会徒增开销。

下文提到的所有数据和操作都是关于表格数据的。

别把引擎当汽车:AutoML不值得……

什么是AutoML?

数据科学项目

数据科学项目包括几个基本步骤:从商业角度提出问题(选择任务和成功与否的指标)、收集数据(收集、清理、探索)、建模及评估模型性能,以及在生产环境中应用模型并观察其性能。

别把引擎当汽车:AutoML不值得……

数据挖掘跨行业标准流程

该流程的每一部分都对项目的成功至关重要。然而,机器学习专家认为,建模过程是最基本的。设计良好的机器学习模型可以为公司带来很多潜在价值。

给定一个数据集和目标(特定指标值越大越好),数据科学家需要在建模过程中解决优化问题。这一过程非常复杂,需要多种技巧:

1. 需要将特征工程当作一种艺术,而不仅仅是一门科学;

2. 优化超参需要深刻理解算法和ML核心概念;

3. 需要运用软件工程技术来输出简洁易懂、便于应用的代码。

此时,AutoML就能派上用场了。

别把引擎当汽车:AutoML不值得……

ML建模既是一种艺术,也是一门科学,还是软件工程。

AutoML

AutoML的输入是数据和任务(分类、回归、推荐等),输出则是生产就绪、能预测未知数据的模型。数据驱动管道的每一个决策都是一个超参。AutoML的关键在于找到能够在合理时间内给出良好分数的超参。

• AutoML用于数据预处理的方法:如何处理数据不平衡;如何填补空值;移除、替代或保留异常值;如何给类别和多个类别列编码;如何避免目标泄露;如何避免内存错误等等;

• AutoML生成并选出有意义的新特征;

• AutoML选择模型(线性模型、K-Nearest Neighbors、Gradient Boosting、神经网络等);

• AutoML调节所选模型的超参(如,树模型中数的数量和子采样的数量、神经网络中的学习率和epoch数);

• 有条件的话,AutoML可以生成一组稳定的模型集合来提高分数。

别把引擎当汽车:AutoML不值得……

别把引擎当汽车:AutoML不值得……

AutoML发展动力

AutoML将会填补数据科学市场中“供给”和“需求”之间的空白

现在,越来越多的公司要么刚开始收集数据,要么想要从已收集的数据中获取潜在价值——他们都想从中分一杯羹。然而,能够满足公司需求、具有相关经验的数据科学家却很少。市场供需不平衡,缺口扩大。AutoML恰好可以填补这一空缺。

但是AutoML这种一站式的解决方案能否给公司创造价值呢?在我看来,答案是否定的。

这些公司需要的是一个过程,而AutoML仅仅是一个工具。工具上的先进弥补不了战略上的缺失。在开始使用AutoML前,可以先考虑和咨询公司合作,制定一个数据科学战略。这也是为什么大部分AutoML供应商不仅提供解决方案,还提供咨询的原因。这其中颇有技巧。

别把引擎当汽车:AutoML不值得……

看起来并不是一个好计划(《南方公园》,s2e17)

AutoML可以帮助数据科学团队节省时间

根据2018年Kaggle机器学习和数据科学调查报告,一个普通的数据科学项目,其15%-26%的时间会花在建模或选择模型过程上。这一过程既要求人力,又要求计算时间。一旦目标或数据发生变动(比如说增加了新的特征),则需要再重复一遍该过程。而AutoML可以帮助数据科学家节省这一时间,从而把时间放在更重要的事情上(如椅上击剑)。

别把引擎当汽车:AutoML不值得……

只需几行代码就可以使用AutoML

如果一家公司的数据科学团队说建模并不是他们最重要的任务,那么这家公司的数据科学过程显然是有问题的。通常,模型性能的一点点提升就能为公司带来巨大利益。这样一来,在建模上花的时间是非常有意义的。

Oversimplified rules:if (Gain from model > Costs of DS team time) → Time savings are not needed.

if (Gain from model <= Costs of DS team time) → Are you solving the right problem?

写下数据科学团队每日任务的脚本,可以在将来节省时间,比使用一站式的解决方案要好得多。我已经写了一些用于自动化日常任务的脚本,包括自动化特征生成、特征筛选、模型训练、超参调节等,现在每天都会用到。

AutoML表现优于普通数据科学家

不幸的是,除了开源AutoML基准,我们没有任何能够有效比较表格AutoML和人类数据科学家的基准。2019年7月1日,也就是几个月前,几位作者发表了一篇文章,比较了调参后的随机森林和几个AutoML库的性能。其结果如下图所示:

别把引擎当汽车:AutoML不值得……

出于好奇,我决定制定自己的基准。我将我的模型的性能和AutoML解决方法进行了比较,使用了三个二分类数据集,包括信用数据、KDD促销数据和按揭贷款数据。随机将每个数据集中的60%分为训练集(按目标分层),剩下40%为测试集。

我的基础模型非常简单,既没有深入挖掘数据,也没有创建高级特征:

1. 5折StratifiedKFold;

2. 对分类列使用Catboost Encoder(不熟悉Catboost Encoder的读者可以先参考我以前的文章:分类编码基准);

3. 对数值列对使用数学操作(+-*/)。新特征限制为500。

4. 模型为LightGBM,使用默认参数;

5. 融合OOF排序预测。

我使用了两个AutoML标准库:H2O和TPOT,并使用多个时间间隔对它们进行训练,从15分钟到6小时不等,结果非常令人惊讶。衡量指标如下:

Score = (ROC AUC / ROC AUC of my baseline) * 100%

别把引擎当汽车:AutoML不值得……

首先,几乎在所有情况下,我的基础模型都完胜AutoML。这让我有点失望,毕竟我本来还打算让AutoML干脏活累活,我能趁机放松一下。但是看样子也无法实现了。

其次,随着训练间隔时间的增长,AutoML的分数并没有提高。这意味着不管我们等多久,15分钟也好,6小时也罢,得到的分数都是一样的低。

AutoML并不总能得到高分。

别把引擎当汽车:AutoML不值得……

总结

1. 如果公司是第一次接触数据科学,建议聘请一个咨询师。

2. 尽可能使工作自动化。

3. 一站式解决方案并不是个好的选择——它的分数太低了。

PS:别把引擎当汽车

别把引擎当汽车:AutoML不值得……

这篇文章讲的是工具,但是我们也需要意识到,建模只是整个数据科学项目管道的一部分。我觉得将项目类比为汽车非常贴切。这样一来,建模的输出——也就是机器学习模型——就可以看作是汽车引擎。

毫无疑问,引擎是汽车最基本的组件,但它并不能代表一辆车。如果忽视了其他部分,那么花再多时间在创造高端、周到、复杂的特征、选择神经网络结构或调节模型参数上,也是徒劳无功的。

如果解决问题的方向是错的(从商业角度理解),或者数据有偏差需要重新训练(数据探索),又或者模型太复杂,不能用于生产(应用阶段),那么就算模型能够取得很高的分数,也无法用于实践。

到最后,你可能会发现自己处在一个很愚蠢的情境下:在花了数日或数周,辛辛苦苦完成建模之后,你骑的是一辆车篮里装着汽车引擎的慢吞吞的自行车。

工具是基础;战略是关键。

别把引擎当汽车:AutoML不值得……

别把引擎当汽车:AutoML不值得……

推荐阅读专题

别把引擎当汽车:AutoML不值得……

别把引擎当汽车:AutoML不值得……

别把引擎当汽车:AutoML不值得……

别把引擎当汽车:AutoML不值得……

别把引擎当汽车:AutoML不值得……

留言 点赞 关注

我们一起分享AI学习与发展的干货

如需转载,请后台留言,遵守转载规范