本文是澳大利亚莫纳什大学Rob J Hyndman 和 George Athanasopoulos所著《Forecasting: Principles and Practice》的读书笔记。
要获得足够多的历史数据以构建良好的统计模型是很困难的。而且有时候,陈旧数据会因相应数据发生结构性的变化而失效,因此我们一般只选择使用较新的数据。然而,一个好的统计模型可以处理系统中的结构变化,因此不要轻易丢弃好的数据。
一定要记住一个原则,没有谁是先知和神仙,科学不是,统计模型更不是。我们试图预测的东西是未知的 (或者我们不能预测它),所以我们可以把它想象成一个随机变量。在 naïve 预测方法中,我们简单地将所有预测值设为最后一次的观测值,这种方法在很多经济和金融时间序列预测中表现得非常好。相对于 Naïve 方法,趋势法 (漂移法) 允许预测值随着时间的推移增大或减小,并且我们假定单位时间改变量 (“漂移”) 等于历史数据的平均改变量。这相当于把第一个观测点和最后一个观测点连成一条直线并延伸到未来预测点。
残差是观测值和对应的拟合值的差。一个好的预测方法产生的残差具有以下特性:
- 残差是不相关的。如果残差之间存在相关性,那么残差中包含的数据信息应该被用于计算预测值。
- 残差的均值接近于零,如果残差的均值不为零,那么说明预测是有偏差的。
- 残差的方差是常数。
- 残差满足正态分布。
有时,我们可以使用Box-Cox变换让模型满足残差应有的后面两条性质。Box-Cox变换是统计建模中常用的一种数据变换,用于连续的响应变量不满足正态分布的情况。但除此之外,几乎没有什么方法能够确保模型的残差既有常数方差,又满足正态分布。调整有偏差的预测较为容易:如果残差的均值为m,那么只需给所有预测值的加上m,有偏的问题就解决了。
对于时间序列数据而言,在当前时间段观测到的变量值很可能与历史时段的变量值很相似。因此,当采用回归模型拟合时间序列数据时,残差经常会出现自相关效应。此时,模型违背了残差中无序列自相关的假设,并会导致模型的预测效率低下。检查残差是否服从正态分布也是很有必要的。这对预测值来说并不重要,但它可以让我们更加容易的确定预测区间。如果观察到残差与拟合值、与真实值之间的明显规律,则残差中可能存在“异方差性”、异质性,这意味着残差的方差不是固定的。如果出现异方差性,可能需要对预测变量做对数或者平方根变换。
测试数据集的大小通常为总样本集的20%。使用真实的测试集来评估预测精度是很重要的。由于残差是在训练集上的结果,因此残差的大小并不能很好地表示真实预测误差的大小。预测误差与残差的区别有两点:第一,残差是在训练数据集上计算得到的,而预测误差是在测试数据集上计算得到的;第二,残差仅仅是基于一步预测得到的,而预测误差可能是涉及多步预测。
评估模型表现最常使用的两种方法都是基于绝对误差MAE和平方误差RMSE。MAE方法不仅容易被理解,而且便于计算。使MAE最小化的预测方法的预测结果是预测分布的中位数,而使RMSE最小化的预测方法的预测结果是预测分布的平均值。因此,RMSE方法尽管在解释方面有些困难,但使用范围非常广。
在实践中,使用判断预测非常普遍。在很多情况下,判断预测是唯一的选择,例如完全缺乏历史数据时,新产品上市时,新的竞争对手进入市场时,或者在全新并且独特的市场条件下。2012年12月,澳大利亚政府首次通过立法禁止在香烟包装上使用公司标识,并要求所有香烟包装必须为深绿色。由于没有历史先例,所以必须采用判断法来预测这种政策的效果。还有一些情况是数据不完整,或者数据获取有一定的滞后。当预测者拥有(i)重要的专业知识和(ii)更及时的最新信息时,判断预测的准确性会提高。
多年来,人们越来越多地接受判断预测作为一门科学,也越来越认识到它的必要性。需要注意的是,判断预测具有主观性和局限性。一般有三种情况需要使用判断预测:(i)没有可用数据,因此统计方法不适用,判断预测是唯一可行的方法;(ii)数据可用,先进行统计预测,然后使用判断法进行调整;(iii)数据可用,分别使用统计预测和判断预测,然后将两者进行组合。
统计预测每次都可以用相同的数学公式生成,但判断预测严重依赖于人类的认知,容易受到其局限性的影响。例如,有限的记忆可能使人认为最近发生的事件比实际情况更重要,并可能忽略很久之前的发生重大事件;有限的注意力可能会导致重要信息被遗漏;或者对因果关系的误解可能导致错误的推论。在判断预测中常见的另一个不良特性是锚定效应。在这种情况下,之后的预测倾向于收敛或非常接近初始参考点。例如,通常将上一个观测值作为参考点。预测者受到先验信息的不良影响,因此在预测过程中对上一个观测值赋予了更多的权重。锚定效应可能会导致保守主义,低估了当前更新的信息,从而造成系统偏差。
德尔斐法是在20世纪50年代由兰德公司的奥拉夫.赫尔默和诺曼.达尔基提出的,目的是解决一个特定的军事问题。该方法基于一个关键假设,即来自小组的预测通常比来自个体的预测更精确。德尔菲法的目标是以结构化迭代方式,从一组专家中构建的一致的预测。通常需要选出一位协调者来实施和管理这一过程。德尔菲法通常包括以下几个阶段:
组建专家小组。
设置预测任务分配给各个专家。
专家提交初步的预测和理由。然后对这些内容进行汇总和总结以提供反馈。
向专家提供反馈,接着专家根据反馈回顾他们的预测。这个步骤可能会不断重复,直到达到满意的水平。
最终预测是通过汇总专家的预测来构建的。
德尔菲法的一个关键特点是参与的专家始终保持匿名,这意味着专家在预测中不会受到政治和社会压力的影响。此外,所有专家都有同等的发言权,并且对他们的预测结果负责。这样可以避免召开小组会议时,一些成员没有作出贡献,而另一些成员占主导地位的情况,它还可以防止专家们由于资历或性格的原因产生不良影响。
即使是小组座位安排这样的细节,也会对小组活力产生影响。此外,有充分的证据表明,小组会议的设置会提升积极性并影响个人判断,导致过度乐观和过度自信的情况。匿名的另一个好处是专家不需要在同一个地方开会。这样做的一个重要优势是它更可能从不同地点找到具有不同技能和专业知识的专家。此外,通过减少差旅的费用和不便,该流程更具成本效益,并且更具有灵活性,因为专家只需在共同截止日期前提交预测结果即可,不必安排共同的会议时间。应用德尔菲法十分耗时。如果用德尔菲法达成共识需要很长时间,专家组可能会失去兴趣和凝聚力。
时间序列数据一般都是“不平稳的”;也就是说,时间序列数据没有固定的均值和方差。因此我们需要解决非平稳数据对回归模型的影响。不平稳的时间序列会导致伪回归。例如澳大利亚航空客运对与几内亚水稻产量的回归模型结果。伪回归的特点是高 R2值和高残差自相关共存。伪回归模型似乎可以给出合理的短期预测,但在长期时间中,伪回归是无效的。
当你想要预测一个超市的日销量时,你需要把当天是否为法定节假日考虑进来。此时,则需要引入一个预测变量,当天为法定节假日时该变量取值为“是”,否则取值为“否”。值得注意的是,编码七个类别只需要六个虚拟变量。当所有虚拟变量都取0时,即可表示第七类(上例中的周日)。许多初学者会给第七类添加第七个虚拟变量,这会导致模型预测变量之间出现完全共线性,一般被称为“虚拟变量陷阱”,它会导致回归失败。因此如果定性变量有 m个类别,只需要引入 m−1 个虚拟变量。例如对于季度数据,需要引入3个虚拟变量;对于月度数据,需要引入11个虚拟变量;对于日度数据,需要引入6个虚拟变量。
我们想要预测未来的啤酒产量。不需要其他因素,完全利用时间本身,可以构造一个具有线性趋势和季度虚拟变量的回归模型。对于季节性虚拟变量,尤其是长季节周期,通常可以采用傅里叶级数。让·巴普蒂斯·约瑟夫·傅里叶是一位出生于18世纪的法国数学家。他表明一定频率的一系列正弦和余弦项可以逼近任何周期函数。我们可以把傅里叶级数用于季节模式中。当序列的季节周期为 m 时,其傅里叶级数的前几项为:
如果数据中存在月度季节性,那么我们使用这些傅里叶级数中的前11个,我们将得到与使用11个虚拟变量完全相同的预测。当采用傅里叶级数时,尤其当 m 值很大时,我们通常可以用较少的预测变量得到与采用虚拟变量相同的预测结果。例如,周度数据中 m≈52 ,因此这对于周度数据非常有效。对于短季节周期数据,使用傅里叶级数相比于季节性虚拟变量几乎没有优势。
fourier()函数的第一个参数是季节性周期的长度 m ;第二个参数K用来确定包含多少正弦项和余弦项,K的最大值为 K=m/2。当K取最大值时,预测结果与使用季节性虚拟变量时获得的预测结果相同。如果仅使用前两个傅立叶项,此时季节性模式将遵循简单的正弦波。由于连续的傅里叶项表示前两个傅立叶项的谐波,因此包含傅里叶项的回归模型通常称为谐波回归。
当存在很多备选的预测变量时,我们需要从中筛选出一部分较好的预测变量供回归模型使用。一个常见的、但是不推荐的方法是画出被预测变量和特定的预测变量之间的关系图,如果不能看出明显的相关关系,则删除该预测变量。但这个方法常常会失效,尤其在未考虑其他预测变量时,散点图并不总能正确的反映两个变量之间的关系。另一种常见的无效方法是对所有预测变量进行多元线性回归,并删除所有 p 值大于0.05的所有变量。但是统计显著性并不总能表示预测变量的预测价值。因为当两个或者多个预测变量相互关联时, p 值可能会是错误的结果。
在此之前,我们都假设预测变量和被预测变量之间为线性关系,但是在某些情况下,非线性函数形式可能更加符合真实情况。一般情况下,可以通过变换预测变量 x 或被预测变量 y 来构造非线性回归模型。虽然此时为非线性函数形式,但是模型中的参数认为线性的。最常见的变换方式是对变量做自然对数变换。进行对数变换的前提是,所有的观测值都必须大于0。当观测值中存在0值时,我们人为的对所有的观测值加1,然后进行对数变换,即取 log(x+1) 。这种变换方式具备一个良好的特点:0的原始比例的整齐效果,即取值为0的观测值在对数变换之后仍为0。
拟合非线性趋势的最简单方法是采用二次或更高阶趋势。但要注意,在预测问题中,推断二阶甚至更高阶趋势是不现实的,因此不建议采用二阶甚至更高阶趋势。
变量 x 可能会对预测变量 y 的值非常有用,但这并不意味这 x 的发生导致 y 的发生。有可能是 x 导致 y ,或者是 y 导致 x ,亦或是比因果关系更复杂的关系。同样的,通过观察早上道路上骑自行车的人数,可以预测下午是否下雨。当骑车人比平常少时,当天晚些时候更容易下雨。 该模型可以给出合理的预测,因为当发布的天气预报是晴天时,人们更有可能骑自行车。 在这种情况下,存在因果关系。但当我们从相反的角度进行预测时,会得到相反的结论:由于有降雨预报,骑车人数下降。
一般情况下,两个自变量之间如果是相关的,不可能完全将这两个变量分隔开来。当不同变量对被预测变量的影响无法分离时会产生混淆。事实上,任何一对相关预测变量都会有一定程度的混淆,但在实际操作中只有当两预测变量之间的相关性较高时,才把它们当作混淆变量处理。
与预测密切相关的问题是多重共线性,当多元回归中的两个或多个预测变量高度相关时就会导致模型存在多重共线性问题。当两个预测变量彼此高度相关时,就会导致模型出现多重共线性。在这种情况下,假如我们知道其中一个变量的信息,那么同时我们也知道了另一个变量的大部分信息。 例如,利用脚的尺寸可用于预测身高,但在同一模型中同时引入左脚和右脚的尺寸并不会使预测更好。
如果未来预测变量的值超出预测变量的历史值范围,那么模型的预测结果是不可靠的。当预测变量的未来值远远超出历史范围时,尤其当在多重共线性时,这会对模型的预测结果产生巨大影响,导致预测结果不准确。如果对每个预测变量的具体贡献不感兴趣,预测变量的未来值在其历史范围内,且预测变量之间不存在完全相关性,则无需过度担心多重共线性的问题。
时间序列数据通常有很多种潜在模式,因此一种有效的处理时间序列的方式是将其分解为多个成分,其中每个成分都对应某一种基础模式。时间序列分解的经典方法起源于20世纪20年代,直到20世纪50年代才被广泛使用。它仍然是许多时间序列分解方法的基础,它的步骤相对简单,它是很多其他的时间序列分解法的基石。有两种经典时间序列分解法:加法分解和乘法分解。如果季节性波动的幅度或者趋势周期项的波动不随时间序列的变化而变化,那么加法模型是最为合适的。当季节项或趋势周期项的变化与时间序列成比例时,则乘法模型更为合适。在经济时间序列中,乘法模型较为常用。
尽管经典时间序列分解法的应用还很广泛,但是我们不十分推荐使用它,因为现在已经有了一些更好的方法。“SEATS分解法”表示“ARIMA时间序列的季节提取 (Seasonal Extraction in ARIMA Time Series)”。这个方法是西班牙银行发明的,现在被世界各地的政府机构广泛使用。这个方法仅能分析季度数据和月度数据。因此,其他类型的季节性,如每日数据,或每小时数据,或每周数据,需要其他方法。
平稳的时间序列的性质不随观测时间的变化而变化。因此具有趋势或季节性的时间序列不是平稳时间序列——趋势和季节性使得时间序列在不同时段呈现不同性质。与它们相反,白噪声序列(white noise series)则是平稳的——不管观测的时间如何变化,它看起来都应该是一样的。
在判断平稳性上,下面这个例子容易让人混淆:如果一个循环变化的时间序列没有趋势和季节性,那么它仍然是平稳的。这是因为这些循环变化并没有一个固定的周期,因此在进行观测之前我们无法知道循环变化的峰值和谷值会出现在哪个位置。一般而言,一个平稳的时间序列从长期来看不存在可预测的特征。它的时间曲线图反映出这个序列近似于水平并保持固定的方差。
上面那张图哪个是平稳的时间序列呢?显然存在季节性的序列(d)、(h)和(i)可以被排除。存在趋势的序列(a)、(c)、(e)、(f)和(i)也应该被排除,除此之外,序列(i)的方差随时间增大,也不符合平稳时间序列的性质。用上述方法排除后,剩下的(b)和(g)是平稳时间序列。序列(g)的循环变化让它第一眼看上去不太平稳,但是这种变化其实是不定期的——当猞猁的数量超过食物承载的上限时,它们会停止繁殖从而使得数量回落到非常低的水平,之后食物来源的再生使得猞猁数量重新增长,周而复始。从长期来看,这种循环的时间点是不能预测的,因此序列(g)是平稳的。
我们注意到(a)中谷歌股价数并不平稳,但(b)中谷歌股价每天的变化量则是平稳的。这向我们展示了一种让非平稳时间序列变平稳的方法——计算相邻观测值之间的差值,这种方法被称为差分。诸如对数变换的变换方法可用于平稳化时间序列的方差。差分则可以通过去除时间序列中的一些变化特征来平稳化它的均值,并因此消除(或减小)时间序列的趋势和季节性。和时间曲线图一样,自相关图(ACF图)也能帮助我们识别非平稳时间序列。 对于一个平稳时间序列,自相关系数(ACF)会快速的下降到接近 0 的水平,然而非平稳时间序列的自相关系数会下降的比较缓慢。
差分后的谷歌股价的自相关图看起来像白噪声序列。所有自回归系数都在 95% 的置信度以内,这反映出谷歌股价的每日变化在本质上是一个与过去时间无关的随机值。
差分序列是指原序列的连续观测值之间的变化值组成的时间序列。有时差分后的数据仍然不平稳,所以可能需要再一次对数据进行差分来得到一个平稳的序列。在现实应用中,通常没有必要进行二阶以上的差分。差值应该是可解释(interpretable)的。
在多元线性回归模型中,我们通过对多个预测变量的线性组合预测了目标变量。在自回归模型中,我们则是基于目标变量历史数据的组合对目标变量进行预测。自回归一词中的自字即表明其是对变量自身进行的回归。一个 p 阶的自回归模型可以表示如下:
这里的 εt 是白噪声。这就相当于将预测变量替换为目标变量的历史值的多元回归。我们将这个模型称为AR(p) 模型——-p阶自回归模型。
不同于使用预测变量的历史值来进行回归,移动平均模型使用历史预测误差来建立一个类似回归的模型。当我们将差分和自回归模型以及移动平均模型结合起来的时候,我们可以得到一个非季节性 ARIMA 模型。ARIMA 是 AutoRegressive Integrated Moving Average 的简称,在这里Integrated指的是差分的逆过程。ARIMA模型的表示如下:
上式中 y′t 是差分序列(它可能经过多次差分)。右侧的“预测变量”包括 yt 的延迟值和延迟的误差。我们将这个模型称为ARIMA(p,d,q) 模型,参数含义如下:p=自回归模型阶数, d=差分阶数, q=移动平均模型阶数。很多模型其实都是ARIMA模型的特殊情况,
如果差分数据的自相关图和偏自相关图显示出如下特征,则他们可能来自于ARIMA(p,d,0)模型:
- 自相关系数呈现指数下降或者类似正弦型的波动;
- 偏自相关图中的延迟p中有明显突起,但延迟更大时不存在类似的突起。
如果差分数据的自相关图和偏自相关图数据显示出如下特征,则他们可能来自于ARIMA(0,d,q)模型:
- 偏自相关系数呈现指数下降或者类似正弦型的波动;
- 在自相关图中的延迟q中有明显突起,但延迟更大时不存在类似的突起。
使用 ARIMA 模型对非季节性时间序列进行拟合时,下列过程是较为通用的方法:
- 画出数据时序图并检查有无异常观测。
- 如果必要的话,对数据进行变换(如 Box-Cox 变换)来稳定方差。
- 如果数据非平稳,对数据进行差分直到数据平稳。
- 检查自相关图和偏自相关图:数据是否符合ARIMA(p,d,0)或者ARIMA(0,d,q)模型的特征?
- 尝试拟合你选择的模型,并使用AICc为标准来进行模型选择。
- 通过画出残差自相关图来检查你选择模型的残差,并且对残差进行一元混成检验(portmanteau test)。如果它们看起来不像白噪声,那么模型就需要修正。如果残差看起来类似白噪声,进行模型预测。
当数据存在较长季节性时,包含傅里叶项的动态回归模型通常会比本书中的其它模型的效果更好。例如,日度数据存在长度为365的季节性,周度数据存在长度为52的季节性。对于这样的时间序列,我们更倾向于谐波回归方法,其中季节性模式使用傅里叶项建模,短期时间序列由 ARMA 误差项处理。
有些时候,预测变量对待预测变量的影响不是简单而迅速的。例如,投放广告之后一段时间才会影响销售接受,而当月的销售收入会取决于过去几个月的广告支出。类似的,当工厂的安全政策的变化会立即减少工厂事故的发生,但随着时间的推移,工人会降低对新出安全政策的重视程度。在这些情况下,我们需要再引入预测变量的滞后项。
高频时间序列数据往往表现出更为复杂的季节模式。例如,日数据可能同时存在周季节模式和年季节模式。小时数据通常包含三种类型的季节性:日季节模式、周季节模式和年季节模式。即使是周数据也经常会因存在周期为 365.25/7≈52.179 的年季节模式而导致预测困难。这种多季节模式在记录的高频数据中越来越常见。例如,呼叫中心的呼叫次数、每日住院人数、自动取款机的现金提取金额、用电用水量以及网站访问量等数据中都可能存在多季节模式。日数据及日以下数据进行预测都比较困难。当时间序列太长,以至于一些较长的季节周期变得明显,此时就需要使用 STL ,动态谐波回归或者 TBATS。这些模型也只适用于常规季节性的时间序列。捕捉像复活节、农历新年这些移动事件的季节性是十分困难的。
提高预测精度的一个简单方法是在同一时间序列上使用几种不同的预测方法,并对预测结果进行平均。1969年, John Bates 和 Clive Granger 发表了一篇著名的论文《The combination of forecasts. Operational Research Quarterly》,表明组合预测方法往往能提高预测的准确性。20年后, Clemen在《A review and annotated bibliography with discussion》 中写道:结论是无异议的:组合多个预测方法可以提高预测准确性。在许多情况下,只需对不同预测方法的预测结果进行平均就可以显著提高预测精度。虽然已经有相当多的研究使用加权平均数,或其他更复杂的组合方法,但经证明使用简单平均是难以超越的。