Forecasting:Principles and Practice 读书小笔记(二)

Python018

Forecasting:Principles and Practice 读书小笔记(二),第1张

1. Average Methond 平均法:预测未来值等于历史值的平均值

2. Naive Method 傻瓜法:预测未来值等于最后一个样本【对经济、金融时间序列适用】,也称作 random walk forecasts

【补充小知识:ARIMA模型

3. Seasonal naive method 季节性傻瓜法:适用于强季节性数据,取同上一年同季节的最后一个观测值。

4. Drift method 趋势|漂流法:在傻瓜法的基础上增加一个变量使预测值随着时间变化增加或减少,变量值为历史变量的平均值。

例子:

a. 应用前三种方法看季节性啤酒产量的预测数据

b. 非季节性方式预测谷歌每日收盘股价

这些简单的办法通常是被作为benchmarks而非实际选择的方式。

通过调整历史数据可以简化预测工作。以下有四种数据调整方式:

>monthdays() 可以计算每个月或季度的天数

对任何受人数影响的数据都可以调整为人均值(per-capita data)。例如考虑某地医疗资源的变化情况,可以看每千人床位数的变化,如此可以看是否是真的资源增长还是仅由于当地总人口增加。

受金钱影响的数据最好在建模前进行调整。例如平均新房费用会由于过去几十年的通货膨胀而增长。为了做此调整需用到price index(物价指数)————参考cpi

当数据呈现出序列级上升或下降的变化时,则需要进行数学转换。

1. 取对数

2. 幂变换(power transformation):平方根|立方根

3. Box-cox transformation 

选定转换方式后,完成对模型数据的预测,需要即将预测结果在反向转换为真实数据。反向box-cox转换公式:

幂变换的特点:

1. 原始变量需大于0,若小于0则应对所有变量加一个常数使得yt大于0。

2. 选择简单的λ值,便于理解

3. 预测结果与λ的值相关性较小

4. 通常不需要转换,转换后对预测结果影响不大,但对于预测区间有较大影响

通过数学转化预测后反转的预测值不是预测分布的均值,通常是中位数。(例如,当需要将不同地区的销售预测值加总预估整个国家的预估值时,只能用均值加总而不能用中位数加总)。对于box-cox转换,均值的反转公式为

中位数和均值间的差异即为bias(偏差值),当需要用均值而非中位数时,我们说某一时点的预估值已经进行过偏值调整。

对于大多数时间序列模型,残值是实际值与拟合值之间的差值,可用来检测模型是否足够抓住了数据的信息。好的预测模型的残值有以下两个特点:1. 残值不相关 【不相关证明残值中还有应该用于预估的信息,解决方式见chapter9】;2. 均值为0 【不为0证明预估值时有偏差的,如偏差值为m,则解决方案是对所有预估值加偏差值m】;3. 有连续变量;4. 符合正态分布。

1. Box-Pierce test

2. Ljung-Box test

checkresiduals()可用于检测残值情况

通常在选择模型时会预留出两组,分为实验组(test)和训练组(training),训练组(training)是用来预估预测方法的准确性。通常实验组的大小是总样本的20%。理想状态下,实验组应该至少覆盖所预估的最远时段,但仍需注意:1. 能很好的拟合训练集的模型并不一定能很好的做预测;2. 最佳组合的模型应该满足包含足够的变量;3. 过度拟合模型和未能判别系统性pattern一样失败。

1. window(),可以用于提取部分时间序列

2. subset(),可以通过索引去选择分组

3.head()| tail(),可以取前几个或后几个观测值

预估偏差指预估值与实际值之间的差值。 ,其中训练集(training data)数据为 ,测试集(test data)数据为 。

预估偏差和残值的差异:1.残值是基于训练集计算的,而预估偏差是基于测试集计算的;2. 残值是基于一步测算(one-step forecast)的,而预估偏差则是涉及到多步预估(multi-step forecasts)

最常用的两个规模性检验是基于绝对偏差或平方偏差:

1. MAE(Mean absolute error)平均绝对偏差=

,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

2. RMSE(Root mean squared error)均方根偏差=

,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

通常比较一个单一时间序列预估方式或同单位下的几个时间序列,会选择用MAE。降低MAE的方法可预估中位数,降低RMSE则可预估平均值。

,不需考虑单位,因而常被用于比较不同数据集中的预测表现。常用的方式是:

MAPE(Mean absolute percentage error)平均绝对百分比误差=

,范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。

可以看到,MAPE跟MAE很像,就是多了个分母,注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!

由于其对负偏差的惩罚更高,因而又引入了:

sMAPE(symmetric MAPE)对称平均绝对百分比误差=

注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!

用于比较不同单位的不同序列的预估效果。

·非季节性时间序列,一个通用的方式是运用naive forecast的方式定义一个比例偏差值: ,当qj小于1时,则该方法比基于训练集用naive forecast计算的值要更优,反之当qj大于1时则更差。

·季节性时间序列,是运用seasonal forecast的方式定义比例偏差:

MASE(Mean absolute scaled)=

【预估评价指标: 预测评价指标RMSE、MSE、MAE、MAPE、SMAPE_人工智能_藏知阁-CSDN博客 】

####example

accuracy() :Returns range of summary measures of the forecast accuracy. If x is provided, the function measures test set forecast accuracy based on x-f. If x is not provided, the function only produces training set accuracy measures of the forecasts based on f["x"]-fitted(f). All measures are defined and discussed in Hyndman and Koehler (2006).

tsCV()可以用来做时间序列交叉验证

【参考天元大神的小笔记: R语言时间序列分析(七):模型准确度估计 - 知乎 】

预测区间的通用公式:

是h-step预估值的正态分布的预计值,c的对应关系是:

###R中forecast包里常用函数: