作者 | Denis Vorotyntsev
来源 | Medium
编辑 | 代码医生团队
最近,参加了AutoSeries —时间序列数据的AutoML竞赛,在其中设法获得40个竞争对手(决赛中的15个)的第一名。这篇文章是解决方案的概述。
比赛说明
AutoSeries是Web搜索和数据挖掘(WSDM)会议的竞赛之一。该竞赛是由4Paradigm和ChaLearn组织的第十届AutoML竞赛。先前的旨在为表格数据,计算机视觉,自然语言处理和语音识别任务提供自动机器学习解决方案。过去挑战的完整列表可以在AutoML挑战的官方网站上找到。
http://automl.chalearn.org/
这项挑战旨在为时间序列回归任务提出自动化解决方案。AutoSeries仅限于多元回归问题,这些问题来自不同的时间序列域,包括空气质量,销售,工作状态,城市交通等。挑战中的每个数据集都是表格数据,其特征主要有以下三种类型:Id(可以是多个特征或没有特征),时间戳(每个数据集只有一个时间戳),其他特征(数值或分类)以及预测目标。Id功能的组合标识一个变量(时间序列)。
给定数据集的示例。数据被混淆了,但是有一些时间序列模式
参与者必须提交代码,这些代码将在Docker容器中运行(CPU:4核,16 Gb RAM,无GPU)。首先,该模型是在完整数据上训练的,但是在推理过程中,可以对其进行更新或重新训练。公开排行榜是根据五个数据集(私有)得出的-5个新数据集,无需人工干预。私有数据集的结果确定最终排名。
最终解决方案概述
最终解决方案的一般步骤
本节专门介绍最终解决方案的主要部分。它的代码在这里发布:
https://github.com/DenisVorotyntsev/AutoSeries
特色工程
该解决方案包括几个步骤。首先,为时序任务生成通用功能。这些功能的数量和类型是管道的超参数,应针对每个任务分别对其进行优化,但是由于缺乏计算时间,决定为所有任务生成相同的功能,并在功能选择阶段删除无用的功能。
第一批特征是基于最关键的数字特征的特征。成对的数字特征的数字运算(加,减,乘和除)始终会提高基于树的模型的得分,因为新特征可能会揭示数据中的某些隐藏关系。
例如,预测一下公寓的价格。在公寓的地板(已知信息ap_floor)和地板(总数total_floors -在建筑物)可能通过添加新功能来丰富relative_floor -这说明在建设公寓的地板上的相对位置:
rel_floor = ap_floor / total_floors
此功能可能有助于模型理解排屋的第三层(rel_floor接近于1)与摩天大楼的第三层(rel_floor接近于0)不同。
但是,如果执行所有可能对的数值运算,则此类特征工程策略存在两个重大问题:过拟合(在时间序列任务中尤其重要)和内存问题(使用了16个RAM泊坞窗)。为了减少负面影响,选择了一小部分特征并将其用于对。通过将整个数据集拟合到浅LigtGBM模型(10棵树)来完成。所有使用的功能均按“获得”重要性进行排序,即使用该功能的拆分的总增益之和。然后,将对前n个最 重要的数字特征进行选择。
下一批功能基于数据的时间序列性质:先前的值和差异。计算目标的滞后值,最重要的数字和分类特征,目标的最后一个值(滞后= 1)和目标的滞后值(滞后> 1)之间的差。这些新功能是最重要的功能。
最后一批是时间序列功能:年,月,周几,年几和小时。可以添加更多基于时间的功能,例如一天中的一分钟,一年中的时数等,但是决定不这样做,因此解决方案将是通用的。将这些新功能视为类别有时会提高得分,但在其他情况下,它会大大降低得分。在推理过程中,没有足够的计算时间来优化此超参数(即,将其视为数值或分类),因此将它们全部都视为数值。
验证和基准模型
生成新功能后,将对基线模型进行训练。基准模型使用所有初始和创建的功能。它使用CatBoost编码器对类别进行编码,并按原样使用目标。该模型分两个步骤进行训练:
使用了单独的LigthGBM模型进行预测。测试了CatBoost(没有GPU的速度太慢)和LinearModels(不够精确)。还用不同的种子测试了装袋和训练以减少预测的差异,但是这些方法花费了很多时间,并且得分的提高不足以包含在最终解决方案中。
超参数优化
超参数优化的步骤
在推理过程中,花很少的时间进行超参数优化,因此决定将所有可能的超参数组合缩小到最有前途的组合,即:
首先对每组参数进行验证,如果新的验证评分更好,则重新安装模型。在选择了最佳的管道超参数集之后,模型开始特征选择:使用最重要的特征(“获得”重要性)的前5%,10%,20%等对模型进行重新拟合。如果分数提高了-在最后的可选步骤中使用了一组新功能-优化超参数(RandomGrid)。
更新中
更新很简单:用完整的数据(训练数据加上新的训练数据)重新拟合最佳模型。然而频繁更新对于获得高分至关重要。
结果
为这个项目付出了很多努力,而奋斗得到了回报。在公共排行榜中排名第三,在私人排行榜中排名第一。
比赛的私人排行榜
总结经验
在比赛中,遇到了很多错误,这浪费了时间和精力。错误是不可避免的,但是有一些注释,如果从一开始就使用它们,这些注释有很大帮助:
https://github.com/pandas-dev/pandas/issues/30484
致谢
要感谢AutoSeries竞赛的组织者-4Paradigm和ChaLearn团队。他们做得很好:收集了数据,准备了提交评分引擎,编写了可靠的基准解决方案,并在论坛和电子邮件中回答了出现的问题。