layout: true --- class: inverse, center, middle background-image: url(figures/titlepage16-9.png) background-size: cover <br> # 商业预测 ## 第四讲:ARIMA 模型及应用 <img src="figures/qr.png" width="150px"/> #### 康雁飞 | 北航经管学院 | 2020年秋 --- # 核心思路 ARIMA模型旨在描绘数据的自回归性(autocorrelations)。 --- class: inverse, center, middle # 平稳性和差分 --- # 平稳性和差分 - 平稳的时间序列的性质不随观测时间的变化而变化。 - 因此具有趋势或季节性的时间序列是平稳时间序列吗? - 它们是平稳序列吗? <img src="BF-L4-arima_files/figure-html/stationary-1.png" style="display: block; margin: auto;" /> --- # 差分 - 我们注意到(a)中谷歌股价数并不平稳,但(b)中谷歌股价每天的变化量则是平稳的。这向我们展示了一种让非平稳时间序列变平稳的方法——计算相邻观测值之间的差值,这种方法被称为**差分**。 - 差分则可以通过去除时间序列中的一些变化特征来平稳化它的均值,并因此消除(或减小)时间序列的趋势和季节性。 - 有时差分后的数据仍然不平稳,所以可能需要再一次对数据进行差分来得到一个平稳的序列。 --- # 季节性差分 季节性差分是对一个观测值和相对应的前一年的观测值之间进行差分。因此有: `$$y_t' = y_t - y_{t-m},$$` 其中 `\(m=\)` 一年中的季节数量。 --- # 季节性差分 .pull-left[ ```r cbind("销售量 ($百万)" = a10, "每月销量对数" = log(a10), "每年销量变化对数" = diff(log(a10),12)) %>% autoplot(facets=TRUE) + xlab("年份") + ylab("") + ggtitle("抗糖尿病药剂销量")+ theme(plot.title = element_text(hjust = 0.5)) ``` ] .pull-right[ <img src="BF-L4-arima_files/figure-html/sdiff-out-1.png" style="display: block; margin: auto;" /> ] --- class: inverse, center, middle # 自回归模型 --- # 自回归模型 - 在多元线性回归模型中,我们通过对多个预测变量的线性组合预测了目标变量。 - 在自回归模型中,我们则是基于目标变量历史数据的组合对目标变量进行预测。 - 一个 `\(p\)` 阶的自回归模型可以表示如下: `$$y_{t} = c + \phi_{1}y_{t-1} + \phi_{2}y_{t-2} + \dots + \phi_{p}y_{t-p} + \varepsilon_{t},$$` 这里的 `\(\varepsilon_t\)` 是白噪声。这就相当于将预测变量替换为*目标变量的历史值*的多元回归。我们将这个模型称为 **AR( `\(p\)` ) 模型**—— `\(p\)` 阶自回归模型。 --- # 自回归模型 - 自回归模型在处理拥有复杂特征的时间序列上十分灵活。 - 在自回归模型中,系数 `\(\phi_1,\dots,\phi_p\)` 的变化将使得时间序列拥有不同的特征。 - 而误差项 `\(\varepsilon_t\)`的方差则只会改变序列的数值范围,而不会改变它的特征。 <img src="BF-L4-arima_files/figure-html/arp-1.png" style="display: block; margin: auto;" /> --- class: inverse, center, middle # 移动平均模型 --- # 移动平均模型 - 不同于使用预测变量的历史值来进行回归,移动平均模型(moving average model)使用历史预测误差来建立一个类似回归的模型。 `$$y_{t} = c + \varepsilon_t + \theta_{1}\varepsilon_{t-1} + \theta_{2}\varepsilon_{t-2} + \dots + \theta_{q}\varepsilon_{t-q},$$` - 上式中的 `\(\varepsilon_t\)` 是白噪声。 - 我们将这个模型称之为 MA(q) 模型。 --- # 移动平均模型示例 - `\(y_t\)` 的每一个值都可以被认为是一个历史预测误差的加权移动平均值. - 改变 `\(\theta_1,\dots,\theta_q\)` 这些系数将会使数据显示出不同的时间序列特征。 - 和自回归模型一样,误差项 `\(\varepsilon_t\)` 的方差之后改变序列的数值范围,而不会改变它的特征。 <img src="BF-L4-arima_files/figure-html/maq-1.png" style="display: block; margin: auto;" /> --- class: inverse, center, middle # 非季节性ARIMA模型 --- # ARIMA - 当我们将差分和自回归模型以及移动平均模型结合起来的时候,我们可以得到一个非季节性 ARIMA 模型。 - ARIMA 是 AutoRegressive Integrated Moving Averaging 的简称。 - ARIMA模型的表示如下: `$$y^{'}_{t} = c + \phi_{1}y^{'}_{t-1} + \cdots + \phi_{p}y^{'}_{t-p} + \theta_{1}\varepsilon_{t-1} + \cdots + \theta_{q}\varepsilon_{t-q} + \varepsilon_{t},$$` 上式中 `\(y^{'}_{t}\)`是差分序列(它可能经过多次差分)。右侧的“预测变量”包括 `\(y_{t}\)`的延迟值和延迟的误差。我们将这个模型称为 **ARIMA(p,d,q) 模型**。 --- # ARIMA 中的参数定义 | | | |--:|:----------------| | p|自回归模型阶数 | | d|差分阶数 | | q|移动平均模型阶数 | --- # 例:美国消费支出 下图显示的是美国消费支出季度占比的变化情况。尽管这是一个季度时间序列,该数据并没有显示出季节性的特征,因此我们使用非季节性ARIMA模型来进行拟合。 <div class="figure" style="text-align: center"> <img src="BF-L4-arima_files/figure-html/usconsumption-1.png" alt="美国消费支出的季度占比变化数据." /> <p class="caption">美国消费支出的季度占比变化数据.</p> </div> --- # 自动选择模型 ```r fit <- auto.arima(uschange[,"Consumption"], seasonal = FALSE) ``` 这是一个ARIMA(1,0,3)模型: `$$y_{t}=c+0.589 y_{t-1}-0.353 \varepsilon_{t-1}+0.0846 \varepsilon_{t-2}+0.174 \varepsilon_{t-3}+\varepsilon_{t}.$$` --- # 预测 ```r fit %>% forecast(h=10) %>% autoplot(include=80) ``` <div class="figure" style="text-align: center"> <img src="BF-L4-arima_files/figure-html/usconsumptionf-1.png" alt="美国消费支出季度变化百分比预测" /> <p class="caption">美国消费支出季度变化百分比预测</p> </div> --- class: inverse, center, middle # 季节性ARIMA模型 --- # SARIMA 季节性的ARIMA模型在我们之前讨论的ARIMA模型多项式中引入了季节性的项。 --- # 例: 欧洲季度零售贸易额 ```r autoplot(euretail) + ylab("零售指数") + xlab("年份") ``` <div class="figure" style="text-align: center"> <img src="BF-L4-arima_files/figure-html/euretail1-1.png" alt="欧元区(17国)季度零售贸易指数,1996--2011,包括批发和零售以及机动车修理。" /> <p class="caption">欧元区(17国)季度零售贸易指数,1996--2011,包括批发和零售以及机动车修理。</p> </div> --- # 拟合SARIMA ```r fit.eurotail <- auto.arima(euretail) fit.eurotail ``` ``` ## Series: euretail ## ARIMA(0,1,3)(0,1,1)[4] ## ## Coefficients: ## ma1 ma2 ma3 sma1 ## 0.2630 0.3694 0.4200 -0.6636 ## s.e. 0.1237 0.1255 0.1294 0.1545 ## ## sigma^2 estimated as 0.156: log likelihood=-28.63 ## AIC=67.26 AICc=68.39 BIC=77.65 ``` --- # 预测 ```r fit.eurotail %>% forecast() %>% autoplot() ``` <img src="BF-L4-arima_files/figure-html/unnamed-chunk-1-1.png" style="display: block; margin: auto;" /> --- # 检验 ```r fit.eurotail %>% residuals() %>% ggtsdisplay() ``` <img src="BF-L4-arima_files/figure-html/unnamed-chunk-2-1.png" style="display: block; margin: auto;" /> --- # 实验4 考虑美国每年被谋杀女性数量(每十万人)(数据集 `wmurders`)。 使用 `auto.arima()` 函数建模并对未来三年进行预测,你得到什么样的结论?