作者:Artur Suilin
下面我们将简要介绍 Artur Suilin 如何修正 GRU 以完成网站流量时序预测竞赛。
预测有两个主要的信息源:
- 局部特征。我们看到一个趋势时,希望它会继续(自回归模型)朝这个趋势发展;看到流量峰值时,知道它将逐渐衰减(滑动平均模型);看到假期交通流量增加,就知道以后的假期也会出现流量增加(季节模型)。
- 全局特征。如果我们查看自相关(autocorrelation)函数图,就会注意到年与年之间强大的自相关和季节间的自相关。
我决定使用 RNN seq2seq 模型进行预测,原因如下:
- RNN 可以作为 ARIMA 模型的自然扩展,但是比 ARIMA 更灵活,更具表达性。
- RNN 是非参数的,大大简化了学习。想象一下对 145K 时序使用不同的 ARIMA 参数。
- 任何外源性的特征(数值或类别、时间依赖或序列依赖)都可以轻松注入该模型。
- seq2seq 天然适合该任务:我们根据先前值(包括先前预测)的联合概率(joint probability)预测下一个值。使用先前预测可保持模型稳定,因为误差会在每一步累积,如果某一步出现极端预测,则有可能毁了所有后续步的预测质量。
- 现在的深度学习出现了太多的炒作。
特征工程
RNN 足够强大来发现和学习自身特征。模型的特征列表如下:
- pageviews:原始值经过 log1p() 的转换得到几乎正态的时序内值分布,而不是偏态分布。
- agent, country, site:这些特征从网页 url 中提取,然后经过 One-Hot 编码。
- day of week:捕捉每周的季节效应。
- year-to-year autocorrelation, quarter-to-quarter autocorrelation:捕捉各年、各季度的季节效应。
- page popularity:高流量和低流量页面具有不同的流量变化模式,该特征(pageviews 的中间值)帮助捕捉流量规模。pageviews 特征丢失了规模信息,因为每个 pageviews 序列被独立归一化至零均值和单位方差。
- lagged pageviews:之后将具体介绍。
特征预处理
所有特征(包括 One-Hot 编码的特征)被归一化至零均值和单位方差。每个 pageviews 序列被独立归