python+ARIMA 进行时间序列处理

  • Post author:
  • Post category:python

1什么时候进行时间序列处理?

发现进行预测时,与属性没有多大关系,只和时间有关,这时候就不能利用机器学习模型来解决,要用时间序列处理
这里用的python语言,使用一种统计模型ARIMA

2ARIMA

Auto-Regressive Integrated Moving Averages
该模型需要三个参数 p d q
d一般在1和2之间选择,不做太多讨论

p:number of AR terms.  AR terms 是指依赖变量的延迟。

如果p=5,则x(t)的预测将变为 x(t-1),x(t-2),x(t-3),x(t-4),x(t-5)

q: number of MA terms. MA terms是指延迟误差,在预测等式的时候。

如果q=5,对于x(t)的预测将会变为e(t-1),e(t-2),e(t-3),e(t-4),e(t-5)

e(i)是指第i次,实际值与MA的差异

最主要的是如何确定p和q的值,用ACF和PACF决定这两个数字。


acf Autocorrelation Function 

用来测量ts之间的关联性(包括自身的延迟版本)

在lag=5的时候,acf会比较序列在t1和t2时刻,在t1-5 和 t2-5

pacf Partial Autocorrelation Function

也是用来测量ts之间的关联性,但是消除了那些已经被干预比较解释过的变量。比如:

在lag=5的时候,在检查关联性的时候,会去除lag1-4的影响

3检验平稳性

使用ARIMA进行预测,需要数据具有平稳性。所以需要先对数据进行平稳性检测

Dicky-Fuller Test可以实现该功能


4如何使数据平稳


让一个序列平稳几乎是不可能的,但是我们可以尽可能的接近
有两个元素导致不平稳:趋势和季节性(不一定是天气)
原则就是为这两个元素建模或者估计,然后从序列中将起剔除,就可以利用统计模型对其进行预测。最后需要将预测值转换为原始的尺寸,通过将这两个因素约束回来
如何移除以及移除趋势
一个方法是利用转换函数,这个函数对更好的数做出更多的惩罚,比如使用log函数,开平方根
如何移除趋势和季节性
有两个方法:
Differencing  带有时间延迟的差别
Decomposition(分解) 同时为趋势和季节性建模并从模型中将他们移除

5代码和数据

代码
https://github.com/wangtuntun/tianchi/blob/master/TimeSeries
数据
https://github.com/wangtuntun/tianchi/blob/master/案例数据




版权声明:本文为wtt561111原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。