时间序列规则法快速入门

前言

大家好~我是drop-out(GitHub)。今年我参加了IJCAI-17数据挖掘竞赛KDD CUP 2017,分别获得了第三名和第九名。两个比赛都是时间序列数据。我对时间序列接触的比较多,所以这里写一篇文章,以IJCAI-17口碑客流量预测大赛为背景,介绍一下时间序列规则法,让大家快速入门。
IJCAI-17给的是蚂蚁金服的支付数据,具体来说,给的是店铺(实体店)过去每天的客流量,预测店铺未来14天每天的客流量。由过去外推未来,这是典型的时间序列问题。像支付数据、客流量数据、交通数据等,具有明显的周期性。从预测的角度说,周期性是核心,只要抓住了周期性,任务就完成了一大半。

基本规则法快速入门

假设给定下面的数据,任务是预测第四周每天的客流量。

周一 周二 周三 周四 周五 周六 周日 周均值
第一周 20 10 70 50 250 200 100 100
第二周 26 18 66 50 180 140 80 80
第三周 15 8 67 60 270 160 120 100

明显能看到周一到周日的周期波动。预测的核心任务就是尽可能准确的提取这种周期。
第一步: 除以周均值,得到一个比例。
第二步: 按列取中位数。
就可以得到一组鲁棒的周期因子。

周一 周二 周三 周四 周五 周六 周日
第一周 0.2 0.1 0.7 0.5 2.5 2 1
第二周 0.325 0.225 0.825 0.625 2.25 1.75 1
第三周 0.15 0.08 0.67 0.6 2.7 1.6 1.2
中位数 0.2 0.1 0.7 0.6 2.5 1.75 1

做预测时,只要将周期因子,乘以一个base,就可以做下一周的预测啦。比如说,我们取最后一周的平均客流量100作为base,那么我们直接乘上周期因子,就得到下一周的预测:

周一 周二 周三 周四 周五 周六 周日
中位数 0.2 0.1 0.7 0.6 2.5 1.75 1
预测 (base=100) 20 10 70 60 250 175 100

这里只拿了三周来举例。实际应用当然要取更长的时段啦。具体取几周以测试集的效果来确定。

针对周期因子的优化

按列提取中位数是一种简单而有效的提取周期因子的方法。中位数十分鲁棒,不受极端值的影响。但中位数损失了很多信息。实践中,可以在此基础上进一步优化。比如可以提取一个均值和一个中位数,然后将均值和中位数融合。融合的比例按照测试集的表现来确定。也可以根据与预测周的时间距离来赋予不同的权重。

针对base的优化

直接用最后一周的平均客流量作为base并不一定是最好的方法。也许最后三天或最后五天的均值能更好的反映最新的情况。但是,我们不能直接对最后三天客流量取均值(最后三天是周末,这样取的base就偏大了)。需要去掉周期性因素后,再取平均。具体做法,就是用客流量除以周期因子。

周一 周二 周三 周四 周五 周六 周日
第三周 15 8 67 60 270 160 120
中位数 0.2 0.1 0.7 0.6 2.5 1.75 1
去周期以后的客流量 75 80 95.7 100 108 91.4 120

这样我们就可以取最后三天的平均,(108+91.4+120)/3=106.5,作为base。具体取多少天的,也要通过测试集的表现来确定。当然也可以按某些函数形式来给每天赋予不同的权重。

其他影响因素

在IJCAI-17的这个赛题里面,天气是非常重要的一个影响因素。可以提取残差,然后用残差训练一个天气的模型。推荐使用xgboost。其他影响因素可以如法炮制。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 131,303评论 18 138
  • 一键克隆代码 在多因子量化投资体系中,具有稳定的预期收益,可解释的经济驱动理论,与其他因子的低相关性是选择alph...
    Ricequant米筐阅读 2,344评论 0 8
  • 从去年的12月1日,到今天1月20日。鲸鱼在第四期自控力读写小组,已经度过51天的时间,还有19天就要结束,有些舍...
    鲸鱼我爱你阅读 142评论 4 3
  • 匮乏的心灵 小时候未满足的需求,常会不经意的带入关系中,变成期待与渴望!小时候,渴望被赞美,被肯定,安全...
    洪美琪阅读 509评论 0 1