Chapter 3 The Forecaster's Toolbox
3.1 简单预测法:
1. Average Methond 平均法:预测未来值等于历史值的平均值
meanf(y,h)
# y contains the time series
# h is the forecast horizon
2. Naive Method 傻瓜法:预测未来值等于最后一个样本【对经济、金融时间序列适用】,也称作random walk forecasts
naive(y,h)
rwf(y,h)#####y为时间序列,h为预测周期
【补充小知识:ARIMA模型】
ARIMA模型(英语:Autoregressive Integrated Moving Average model),差分整合移动平均自回归模型,又称整合移动平均自回归模型(移动也可称作滑动),是时间序列预测分析方法之一。ARIMA(p,d,q)中,AR是“自回归”,p为自回归项数;MA为“滑动平均”,q为滑动平均项数,d为使之成为平稳序列所做的差分次数(阶数)。“差分”一词虽未出现在ARIMA的英文名称中,却是关键步骤。https://baike.baidu.com/item/ARIMA%E6%A8%A1%E5%9E%8B/10611682?fr=aladdin
3. Seasonal naive method 季节性傻瓜法:适用于强季节性数据,取同上一年同季节的最后一个观测值。
snaive(y,h)
4. Drift method 趋势|漂流法:在傻瓜法的基础上增加一个变量使预测值随着时间变化增加或减少,变量值为历史变量的平均值。
rwf(y,h,drift=TRUE)
例子:
a. 应用前三种方法看季节性啤酒产量的预测数据
beer2<-window(ausbeer,start=1992,end=c(2007,4))
autoplot(beer2)+
autolayer(meanf(beer2,h=11),series = "Mean", PI=FALSE)+
autolayer(naive(beer2,h=11),series = "Naive", PI=FALSE)+
autolayer(snaive(beer2,h=11),series = "Seasonal Naive", PI=FALSE)+
ggtitle("Forecasts for quarterly beer production")+
xlab("Year")+ylab("Megalitres")+
guides(colour=guide_legend(tittle="Forecst"))
b. 非季节性方式预测谷歌每日收盘股价
autoplot(goog200)+
autolayer(meanf(goog200,h=40),series="Mean",PI=FALSE)+
autolayer(rwf(goog200,h=40),series = "Naive",PI=FALSE)+ autolayer(rwf(goog200,drift=TRUE,h=40),series = "Drift",PI=FALSE)+
ggtitle("Google stock (daily ending 6 Dec 2013)")+
xlab("Day")+ylab("Closing Price (US$)")+
guides(colour=guide_legend(title="Forecast"))
这些简单的办法通常是被作为benchmarks而非实际选择的方式。
3.2 Transformation and adjustments 转换和调整
通过调整历史数据可以简化预测工作。以下有四种数据调整方式:
Calendar adjustments 日历调整
>monthdays() 可以计算每个月或季度的天数
dframe<-cbind(Monthly=milk,DailyAverage=milk/monthdays(milk))
autoplot(dframe,facet=TRUE)
+ xlab("Years")+ylab("Pounds")
+ ggtitle("Milk production per cow")
Population adjustments 人数调整
对任何受人数影响的数据都可以调整为人均值(per-capita data)。例如考虑某地医疗资源的变化情况,可以看每千人床位数的变化,如此可以看是否是真的资源增长还是仅由于当地总人口增加。
Inflation adjustments 通货膨胀调整
受金钱影响的数据最好在建模前进行调整。例如平均新房费用会由于过去几十年的通货膨胀而增长。为了做此调整需用到price index(物价指数)————参考cpi
Mathematical transformations 数学转换
当数据呈现出序列级上升或下降的变化时,则需要进行数学转换。
1. 取对数
2. 幂变换(power transformation):平方根|立方根
3. Box-cox transformation
选定转换方式后,完成对模型数据的预测,需要即将预测结果在反向转换为真实数据。反向box-cox转换公式:
幂变换的特点:
1. 原始变量需大于0,若小于0则应对所有变量加一个常数使得yt大于0。
2. 选择简单的λ值,便于理解
3. 预测结果与λ的值相关性较小
4. 通常不需要转换,转换后对预测结果影响不大,但对于预测区间有较大影响
Bias adjustments 偏值调整
通过数学转化预测后反转的预测值不是预测分布的均值,通常是中位数。(例如,当需要将不同地区的销售预测值加总预估整个国家的预估值时,只能用均值加总而不能用中位数加总)。对于box-cox转换,均值的反转公式为
中位数和均值间的差异即为bias(偏差值),当需要用均值而非中位数时,我们说某一时点的预估值已经进行过偏值调整。
3.3 Residual Diagnostics 残值诊断
Fitted values 拟合值
Residuals 残值
对于大多数时间序列模型,残值是实际值与拟合值之间的差值,可用来检测模型是否足够抓住了数据的信息。好的预测模型的残值有以下两个特点:1. 残值不相关【不相关证明残值中还有应该用于预估的信息,解决方式见chapter9】;2. 均值为0【不为0证明预估值时有偏差的,如偏差值为m,则解决方案是对所有预估值加偏差值m】;3. 有连续变量;4. 符合正态分布。
Portmanteau tests for autocorrelation 自相关检验
1. Box-Pierce test
2. Ljung-Box test
checkresiduals()可用于检测残值情况
3.4 Evaluating forecast accuracy 评估预测准确性
通常在选择模型时会预留出两组,分为实验组(test)和训练组(training),训练组(training)是用来预估预测方法的准确性。通常实验组的大小是总样本的20%。理想状态下,实验组应该至少覆盖所预估的最远时段,但仍需注意:1. 能很好的拟合训练集的模型并不一定能很好的做预测;2. 最佳组合的模型应该满足包含足够的变量;3. 过度拟合模型和未能判别系统性pattern一样失败。
Functions to subset a time series 分组时间序列的函数
1. window(),可以用于提取部分时间序列
2. subset(),可以通过索引去选择分组
3.head()| tail(),可以取前几个或后几个观测值
Forecast errors 预估偏差
预估偏差指预估值与实际值之间的差值。,其中训练集(training data)数据为,测试集(test data)数据为。
预估偏差和残值的差异:1.残值是基于训练集计算的,而预估偏差是基于测试集计算的;2. 残值是基于一步测算(one-step forecast)的,而预估偏差则是涉及到多步预估(multi-step forecasts)
Scale-dependent errors 规模性偏差
最常用的两个规模性检验是基于绝对偏差或平方偏差:
1. MAE(Mean absolute error)平均绝对偏差=
,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。
2. RMSE(Root mean squared error)均方根偏差=
,范围[0,+∞),当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。
通常比较一个单一时间序列预估方式或同单位下的几个时间序列,会选择用MAE。降低MAE的方法可预估中位数,降低RMSE则可预估平均值。
Percentage errors 百分比偏差
,不需考虑单位,因而常被用于比较不同数据集中的预测表现。常用的方式是:
MAPE(Mean absolute percentage error)平均绝对百分比误差=
,范围[0,+∞),MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。
可以看到,MAPE跟MAE很像,就是多了个分母,注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!
由于其对负偏差的惩罚更高,因而又引入了:
sMAPE(symmetric MAPE)对称平均绝对百分比误差=
注意点:当真实值有数据等于0,而预测值也等于0时,存在分母0除问题,该公式不可用!
Scaled errors 比例偏差
用于比较不同单位的不同序列的预估效果。
·非季节性时间序列,一个通用的方式是运用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).
Time series cross-validation 时间序列交叉验证
tsCV()可以用来做时间序列交叉验证
【参考天元大神的小笔记:R语言时间序列分析(七):模型准确度估计 - 知乎】
3.5 Prediction Intervals 预测区间
预测区间的通用公式:
是h-step预估值的正态分布的预计值,c的对应关系是:
###R中forecast包里常用函数: