专栏首页相约机器人用于时间序列预测的AutoML

用于时间序列预测的AutoML

作者 | 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编码器对类别进行编码,并按原样使用目标。该模型分两个步骤进行训练:

  1. 首先将数据分为训练和验证部分。通常希望训练/验证/测试拆分模拟“生产设置”中模型的使用。对于时间序列,这意味着该模型不会频繁更新,并且需要在验证部分中获取20%到30%的数据(或使用具有相同比例的滚动窗口)。在这次比赛中,可以频繁更新模型,因此验证部分应该较小:验证部分是全部训练数据的10%。它用于早期停止,即在增强合奏时优化树木的数量。完成此步骤后,模型可以开始进行预测,并且随后的所有步骤都是可选的(bt对于获得高分至关重要)。
  2. 使用最佳数量的树,可以对完整数据进行模型拟合。

使用了单独的LigthGBM模型进行预测。测试了CatBoost(没有GPU的速度太慢)和LinearModels(不够精确)。还用不同的种子测试了装袋和训练以减少预测的差异,但是这些方法花费了很多时间,并且得分的提高不足以包含在最终解决方案中。

超参数优化

超参数优化的步骤

在推理过程中,花很少的时间进行超参数优化,因此决定将所有可能的超参数组合缩小到最有前途的组合,即:

  1. 处理类别变量:将类别特征视为pandas类别类型,让LightGBM头痛不已,或者使用CatBoost编码对每个类别进行编码。
  2. 目标预处理:按原样使用目标,或通过区分:new_target(t)= target(t)-target(t-1)计算新的目标以进行回归。差异可以帮助克服非平稳时间序列数据。还测试了功率变换(扎根于目标和Box-Cox)以减少平稳性,但是它并没有将分数提高到足以包含在最终解决方案中。

首先对每组参数进行验证,如果新的验证评分更好,则重新安装模型。在选择了最佳的管道超参数集之后,模型开始特征选择:使用最重要的特征(“获得”重要性)的前5%,10%,20%等对模型进行重新拟合。如果分数提高了-在最后的可选步骤中使用了一组新功能-优化超参数(RandomGrid)。

更新中

更新很简单:用完整的数据(训练数据加上新的训练数据)重新拟合最佳模型。然而频繁更新对于获得高分至关重要。

结果

为这个项目付出了很多努力,而奋斗得到了回报。在公共排行榜中排名第三,在私人排行榜中排名第一。

比赛的私人排行榜

总结经验

在比赛中,遇到了很多错误,这浪费了时间和精力。错误是不可避免的,但是有一些注释,如果从一开始就使用它们,这些注释有很大帮助:

  1. 记录尽可能多的有用信息:数据框中的列(训练和测试数据中的列顺序可能不同),数据类型(训练和测试数据框中的数据类型可能不同),每次训练的时间,训练剩余时间等等。这将有助于理解为什么提交失败或得分较低的原因。例如某些提交中的模型由于一个愚蠢的错误而没有更新,而却没有注意到。因此分数远远低于应有的分数。简单的消息打印(“模型已更新!”)节省了一天的时间,并帮助找到了错误。
  2. 在AutoML中,对看不见的数据进行测试至关重要。可能很容易为公共部分过度安装解决方案,并且可能导致看不见的数据崩溃。这就是提交在第一项任务上失败了。在比赛开始时尝试收集更多数据。新的数据集应该是多种多样的,例如,缺少值或类别中的字符串以及其他因素,这可能会使代码崩溃。用不同的时间预算测试它们:尝试在时间紧张的情况下输出甚至较差的模型。
  3. 以“即插即用”的方式组织代码:管道的每个部分都不应依赖其他部分。例如,想拟合线性回归而不是LightGBM,这容易吗?如果代码井井有条,那就可以了。在这场比赛中,朝着更干净,更有条理的代码迈出了一大步。
  4. 请勿在pandas中使用就地操作,因为它有故障。只是尽可能不要使用它。

https://github.com/pandas-dev/pandas/issues/30484

致谢

要感谢AutoSeries竞赛的组织者-4Paradigm和ChaLearn团队。他们做得很好:收集了数据,准备了提交评分引擎,编写了可靠的基准解决方案,并在论坛和电子邮件中回答了出现的问题。

本文分享自微信公众号 - 相约机器人(xiangyuejiqiren),作者:代码医生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 机器学习中踩过的坑,如何让你变得更专业?

    数据科学家Archy de Berker 在本文中详述了他和周围同伴在机器学习探索中踩过的坑,这也都是大家经常性遇到的问题。他 希望通过这一篇文章,带大家了解机...

    代码医生工作室
  • 数据受限的Kaggle图像分类的最新获奖技术

    在本文中,将介绍用于课堂内Kaggle挑战的方法。花了大约两个星期的时间在挑战赛上,最终提交分数为0.97115,使在最终排行榜上排名第二。

    代码医生工作室
  • 26亿参数,智源、清华开源中文大规模预训练模型

    自 2018 年谷歌发布 BERT 以来,预训练模型在自然语言处理(NLP)领域逐渐成为主流。今年 5 月份,OpenAI 推出的史上最大 AI 模型 GPT-...

    代码医生工作室
  • 15分钟开启你的机器学习之旅——随机森林篇

    【新智元导读】本文用一个机器学习评估客户风险水平的案例,从准备数据到测试模型,详解了如何随机森林模型实现目标。 机器学习模型可用于提高效率,识别风险或发现新的机...

    新智元
  • MICCAI 2020 | 腾讯开源大规模X光预训练模型及代码

    “ 预训练模型能够加速任务模型收敛速度和提升模型性能。自然场景图像有ImageNet预训练模型,但此类数据和医学图像差异较大。因此腾讯提出了一个基于70万X光数...

    Amusi
  • Edge2AI自动驾驶汽车:训练模型并将其部署到边缘

    训练深度神经网络的最大挑战之一在于为训练而收集的数据的质量和数量。在之前的文章中,我们重点介绍了如何从微型自动驾驶汽车中收集数据,以及如何使用Cloudera ...

    大数据杂货铺
  • 【调参经验】图像分类模型的调参经验前言调参经验与我交流

    用深度学习做图像分类任务也有近一年时间了,从最初模型的准确率只有60%到后来调到有80%,再到最后的90%+的准确率,摸索中踩了很多坑,也总结出了一些经验。现在...

    keloli
  • 【NLP】NLP的12种后BERT预训练方法

    论文:A Robustly Optimized BERT Pretraining Approach.

    yuquanle
  • NLP的12种后BERT预训练方法

    论文:A Robustly Optimized BERT Pretraining Approach.

    zenRRan
  • 谷歌最新端到端语音识别系统:词错率降至5.6%,性能提升16%!

    -免费加入AI技术专家社群>> 导读:谷歌大脑和Speech团队发布最新端到端自动语音识别(ASR)模型,词错率将至5.6%,相比传统的商用方法实现了16%的改...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券