简介
这篇讲ARIMA。前一篇谈到ETS的灵感来自于两个极端方案的折中,一个极端是只用最近的一次观测,一个是求平均,折中方案是用指数衰减来用到所有点,同时又给近期观测更高的权重。换个角度看,这两个极端反映的其实是两个朴素的观念。其一,近期的数据由于recency的关系,对揭示未来也许更有帮助。其二,只依赖近期的数据又容易被outlier带偏,所以还是需要用历史数据点来修正预测。ARIMA的理论体系虽然和ETS完全不同,出发点却很相似。
ARIMA的全称是Autoregressive Integrated Moving Average。拆开来看,Autoregressive是个自动回归模型,通常仅用p个近期观测值而不是所有观测点,否则作参数估计会是个噩梦。AR这一块,和ETS中指数权重异曲同工,只是不那么精致美用上所有点而已。Integrated比较好理解,假如存在趋势之类,自动回归不足以捕捉到,而需要做差分。
Moving Average可能是最难理解的部分。首先它很容易和移动平均混淆,但这里完全是另一个概念。这里的moving average是一个q阶的自动回归模型,只是回归的对象是预测误差而非实际观测值。那么既然已经有了autoregressive model (AR),为何还需要MA?这个需要用实例来理解。有个叫Dimitriy V. Masterov的好人给了个很好的例子。在美帝(以及天朝)很多市场营销活动会发出去很多优惠券打折券啥的,这些外部噪声会影响到销售量。MA的自动回归就是用来对付这些外部噪声导致的预测偏差的。为什么不直接把这些噪声移出,而要用q阶回归模型来处理?因为咱家也不知道那些优惠券在某个时间点用掉了多少啊。优惠券的使用是有实效性的,有衰减并且会在有效期内衰减到0。这本身是个时序序列,故而需要另一个针对预测偏差的自动回归模型来模拟。在看到这个例子之前我想了三天都没想明白MA的必要性,所以看到这里的大兄弟大妹子,我很可能让你们的绳命少了三天的煎熬,请遥祝我健康。
Box-Cox变换
如果存在振幅变化怎么办呢?这时候需要variance stablization,往往用Box-cox Transformation来处理。在数学的世界里总是有那么些佛系的武器,比如Fourier函数,又比如Box-Cox变换。前者可以拟合天下任意函数,后者则能撸平一切浮华。
比如,这几行代码构造了一个振幅有变化的体态婀娜且积极向上的时序:
> a = c(10,20,30,40,50,60,70,80)
> b = c(-1,2,-3,4,-5,6,-7,8)^3
> c = a+b
> c_ts = ts(c,start=c(1,1))
> autoplot(c_ts)
上Box-Cox,拈指一算:
> BoxCox.lambda(c_ts)
[1] 4.102259e-05
把这个lambda值代入变换函数:
> autoplot(BoxCox(c_ts,4.102259e-5))
是不是撸平了?
怎么做到的?
祖师爷Hyndman有个很好的总结:
就靠这俩函数,不同的lambda值,撸到不服不行。
ARIMA在非季节性数据上的应用
ARIMA在季节性数据上的应用
ARIMA和Dynamic Regression