前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用于时间序列预测的AutoML

用于时间序列预测的AutoML

作者头像
代码医生工作室
发布2020-01-17 17:43:10
1.8K0
发布2020-01-17 17:43:10
举报
文章被收录于专栏:相约机器人相约机器人

作者 | 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团队。他们做得很好:收集了数据,准备了提交评分引擎,编写了可靠的基准解决方案,并在论坛和电子邮件中回答了出现的问题。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 相约机器人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
语音识别
腾讯云语音识别(Automatic Speech Recognition,ASR)是将语音转化成文字的PaaS产品,为企业提供精准而极具性价比的识别服务。被微信、王者荣耀、腾讯视频等大量业务使用,适用于录音质检、会议实时转写、语音输入法等多个场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档