作者:黄天元,复旦大学博士在读,热爱数据科学与开源工具(R),致力于利用数据科学迅速积累行业经验优势和科学知识发现,涉猎内容包括但不限于信息计量、机器学习、数据可视化、应用统计建模、知识图谱等,著有《R语言数据高效处理指南》(《R语言数据高效处理指南》(黄天元)【摘要 书评 试读】- 京东图书)。知乎专栏:R语言数据挖掘。邮箱:huang.tian-yuan@qq.com.欢迎合作交流。
数据转化
进行建模之前,往往要对数据进行预处理。在常见的时间序列模型中,也需要这种处理,下面列出一些情况:
1、如果要统计月销量,那么有效销售时间就非常重要。如果每天的销售是定额的,很容易会得到二月份销售量比较少的结论,因为二月份的日子总是比其他月份的日子少。要解决这个问题,就必须把月销量转化为月的日均销量,这样才更具有意义。
2、既然能够进行月份的日矫正,那么所有事物有时候都应该计算其单位的数值,而不是总值。比如省市的人均收入比总收入有意义,因为不同省市的人口数量原本就不一样。
3、有的时间序列很难直接发现特征,但是取其对手或进行其他转化之后,发现其规律就非常明显了。这样做的模型之后,也依然能够通过标准的转化反推回去,进行稳健的预测。
不过是不是要转化,如何转化,还是具体情况具体分析,这里暂不深入。
残差诊断
一个预测做得好不好,就要看预测值与实际值的差距,这个非常好理解。
比如一个原始序列(谷歌的股价变化):
library(fpp2)
autoplot(goog200) +
xlab("Day") + ylab("Closing Price (US$)") +
ggtitle("Google Stock (daily ending 6 December 2013)")
下面用naive方法直接拟合,然后进行残差的诊断:
checkresiduals(naive(goog200))
#>
#> Ljung-Box test
#>
#> data: Residuals from Naive method
#> Q* = 11, df = 10, p-value = 0.4
#>
#> Model df: 0. Total lags used: 10
上面的结果中,首先进行了Ljung-Box检验,如果p值不小于0.05,那么就可以认为这个序列为白噪声。残差图见图片中上面,其ACF图和残差分布图则在下方。这些图能够让我们判断拟合的模型后不能解释的部分,是不是白噪声。如果是的话,那么说明拟合得不错;如果不是白噪声,说明还有提高的空间,可以再加以调整来提高拟合度。