python+ARIMA进行时间序列处理
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(分解) 同时为趋势和季节性建模并从模型中将他们移除