1. 一些简单的预测方法
- 平均值预测法:所有预测值都等于历史数据的均值。
- 朴素预测法:所有预测值都等于数据中最后一个观测值。
- 季节朴素预测法:对于季节性数据,预测值等于同一季度的最后一个观测值。比如,假设数据是以月份为间隔,那么未来所有1月份的预测值都等于历史数据中最后一个1月份的值。
- 趋势预测法:在
y
1
y_1
y1和
y
T
y_T
yT之间画一条直线,未来所有预测值都落在这条直线上,即:
在某些场景下,这些预测方法还真的管用。但我们常把它们作为评价其他方法的benchmark。
2. 变换与调整
变换与调整可以使得历史数据中的模式更加简单,从而可以使用更简单的预测模型,获得更准确的预测结果。
日历调整(Calendar adjustments)
有时候数据的差异是由于日历因素造成的。比如,我们的数据是每月的牛奶产量,而一年有12个月,每个月的天数不一样。如果能消除掉这个影响,比如把数据转化为以天为单位,我们会得到更简单的pattern。示例:
人口调整(Population adjustments)
当数据受到人口变化的影响时,我们应当将数据转化为per-capita的数据,也就是说,考虑每人、每一百人或每一千人的data,而非总的data。
通胀调整(Inflation adjustments)
如果数据受到货币价值的影响,我们应当对其调整。20年前一套20万的房子与现在一套20万的房子没法比。因此,financial相关的时间序列通常基于某一年美元价格进行调整。
数学变换
有时候, 数据的方差随时间变化。这时候,可以使用对数变换。假如我们以10为底,则原始数据变化10倍,在对数域上仅增减1,因此对数起到压缩变化范围的作用。
也可以使用幂变换,比如平方根也能起到压缩的作用。
一般地,有Box-Cox变换:
λ
\lambda
λ是一个可调的参数,可以根据需要选择对数变换或幂变换。
我们使用变换后的数据进行预测,预测完成后,要进行反变换:
3. 残差诊断
残差
残差是指观测值与拟合值的差:
e
t
=
y
t
−
y
^
t
e_t=y_t-{\hat y}_t
et=yt−y^t
其中, y ^ t {\hat y}_t y^t是对观测值预测的结果。一个好的预测方法的残差应该满足:
- 残差是不相关的。否则,残差中包含未被利用的信息。
- 残差是0均值的。否则,我们的预测是有偏的。
如果一个预测算法不满足以上二点,则它有提升的空间。若残差均值为 m ( m ≠ 0 ) m(m\neq0) m(m̸=0),我们只需要给预测值加上m即可。检查上述两个条件有助于知道我们的model是否充分利用了可用的信息,但不应该作为选择模型的标准。此外,如果残差满足下面2个性质,则预测区间的计算会更加容易:
- 残差的方差一致。
- 残差服从正态分布。
portmanteau test
除了观察残差的自相关,我们可以做portmanteau test来检验残差自相关的前h个值是否显著区别于白噪声。一种portmanteau test为Box-Pierce test:
另一种是Box-Pierce test:
太大的Q或
Q
∗
Q^*
Q∗意味着此自相关不是来自白噪声。
4. 评价预测准确度
训练集与测试集
对于预测问题,我们也需要划分训练集与测试集。训练集用于估计模型参数,测试集用于评估预测准确度,这样才能反映模型对于新数据的预测能力。
预测误差
预测误差指观测值与预测值的差。注意,误差是在测试集上算的,而残差是在训练集上算的,这两个概念要分清。
Scale-dependent errors
Scale-depentent就是指误差的值与数据的值的单位一样,也就是一个绝对的误差,不能用来比较不同单位(尺度)的数据。两种常用的Scale-depentent误差为:
百分比误差
上面的
e
t
e_t
et为绝对误差,我们可以定义百分比误差(也就是相对误差)
p
t
=
100
e
t
/
y
t
p_t=100e_t/y_t
pt=100et/yt,
p
t
p_t
pt自然就和数据的单位无关了。定义:
百分比误差的问题在于,当 y t y_t yt为0或接近0时,会产生不稳定的值。同时,它仅对定比变量(ratio scale)有意义,而对定距变量(interval scale)没有意义。关于定比变量和定距变量可以参考。
Scaled errors
另一种衡量相对误差的方法是scaled errors,它是基于采用一个简单预测方法时的训练MAE对预测误差进行scale。
对于非季节性数据,scaled error可以定义为:
其中,分母是采用朴素预测法时在训练集上的MAE。
对于季节性数据,scaled error可以定义为:
分母是采用季节朴素预测法时在训练集上的MAE。