2 Star 5 Fork 6

allen / math-book

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
预测:方法与实战.md 34.17 KB
一键复制 编辑 原始数据 按行查看 历史
allen 提交于 2020-08-01 15:31 . 增加 用傅里叶项来捕捉季节性

数据说明

  • a10.csv: 澳大利亚降糖药物的销量
  • ausbeer.csv: 各年季度数据
  • melsyd.csv: 墨尔本 - 悉尼 经济舱乘客客流量
  • visnights.csv: 城市间的数据
  • elec.csv: 澳大利亚用电量
  • uschange.csv:美国的消费支出
  • marathon.csv:波士顿马拉松的获胜时间
  • elecequip.csv:电气设备新订单数
  • oil.csv:沙特石油产量
  • ausair.csv:澳大利亚航空公司年度客运量
  • austourists.csv:澳大利亚国际游客过夜的天数
  • hyndsight.csv:blog浏览量
  • euretail.csv:欧洲季度零售贸易额
  • elecdaily.csv:澳大利亚维多利亚州每日耗电量:耗电量,工作日,当日最高温度
  • auscafe.csv:澳大利亚人口外出就餐支出

入门

  • 可预测性取决于以下因素
    • 我们对它的影响因素了解程度
    • 有多少数据可用
    • 预测是否会影响我们试图预测的事物:预测股市/汇率涨跌,预测的结果会对事物本省产生影响,很可能是舆论而非预测结果产生
  • 定量预测条件
    • 关于过去的数字化信息是可用的
    • 有理由假设过去的一些模式会在未来延续下去

时间序列图形

  • 季节性与周期性
    • 当数据的波动是无规律时,表示序列存在周期性
    • 如果波动的频率不变并且与固定长度的时间段有关,表示序列存在季节性
    • 一般而言,周期的长度较长,并且周期的波动幅度也更大
  • 分析变量之间关系时,不仅要看相关系数值,而且要关注生成的图形:同样的相关系数,图形并不一定一样(线性,曲线,散点等)
  • 散点图矩阵查看所有变量之间的关系,检测异常值
  • 自相关系数(ACF):测量时间序列滞后值之间的线性关系
    • 计算公式:$\rho(t, s) = \frac{r(t, s)}{\sqrt{D(X_t) \times D(X_s)}} = E[(X_t - \mu_t) \times (X_s - \mu_s)] \Rightarrow r_k = \frac{\sum_{t=k+1}^T((y_t - \bar{y}) \times (y_{t-k} - \bar{y}))}{\sum_{t=1}^T(y_t - \bar{y})^2}$
    • 判断
      • 当数据具有趋势性时:短期滞后的自相关值较大。时序的ACF一般是正值,随着滞后阶数的增加而缓慢下降
      • 当数据具有季节性时:自相关值在滞后阶数与季节周期相同时(或者在季节周期的倍数)较大
      • 当数据同时具有上述特征时:会出现组合效应
  • 白噪音

预测值的工具集

  • 数据调整
    • 日历调整:每个月/季度包含的天数不同
    • 人口调整:调整为人均(每人/每千人/每百万人),而非所有人
    • 通胀调整:价格调整到同一年。消费品的价格指数为CPI
    • 数学变换:对数变换,幂变换等
      • Box-cox变换:当$\lambda = 0$时,$w_t = log(y_t)$,否则,$w_t = \frac{y^{\lambda}_t - 1}{\lambda}$
        • 逆变换:当$\lambda = 0$时,$y_t = e^{w_t}$,否则,$y_t = (\lambda \times w_t + 1)^{1/\lambda}$
        • 对该该变换,选取最佳$\lambda$来进行模型拟合,选择最佳$\lambda$的R代码:BoxCox.lambda(elec)
      • 幂变换特点
        • 如果出现部分$y_t \le 0$,除非给所有观测值加上一个常数,否则不可进行幂变换
        • 选择一个简单的$\lambda$值会让解释更容易
        • 预测结果对$\lambda$值相对不敏感
        • 很多情况下不需要进行变换
        • 有时变换对于预测结果影响不大,但是对预测区间有很大的影响
  • 关于残差,一个好的预测方法产生的残差具有如下特征
    • 不相关--必须
    • 均值为零--必须
    • 方差是常数--非必须
    • 满足正态分布--非必须
  • 复合自相关检验
    • Box-Pierce检验
      • 公式:$Q = T \times \sum_{k=1}^h{r^2_k}$
      • 参数
        • $h$:能够考虑到的最大滞后项个数
        • $T$:观测值数量
      • 建议
        • 非周期数据集,建议取$h = 10$
        • 周期数据集,建议取$h = 2 \times m$,其中$m$为周期
        • $h$值过大,检验的效果就不够理想。若$h \gt \frac{T}{5}$,则$h = \frac{T}{5}$
    • Ljung-Box检验
      • 公式:$Q = T \times (T + 2) \times \sum_{k=1}^h{\frac{r^2_k}{T - k}}$
      • 说明
        • 若$Q$值较大,说明自相关函数并不来自于白噪音序列
        • 若一个自相关函数确实来自于白噪音序列,则上述两个检验的$Q$均服从自由度为$h - K$的$\chi^2$分布,其中$K$为模型中参数的个数,若$Q$是从原始数据中计算出来的(而非模型中的残差),则$K=0$
      • R
        • Box.test(elec, lag = 3, fitdf = 0, type = "Lj")
        • checkresiduals(fc) # 检验残差是否是白噪音,且服从正态分布
  • 评估预测精度:误差:$e_t = y_t - \hat{y_t}$
    • 尺度效应误差
      • MAE(平均绝对误差:预测分布的中位数): $\frac{\sum_{t=1}^T{\mid e_t \mid}}{T}$
      • RMSE(均方根误差:预测分布的均值):$\sqrt{\frac{\sum_{t=1}^T{e^2_t}}{T}}$
    • 百分比误差:$p_t = 100 \times \frac{e_t}{y_t}$
      • 特点
        • 无单位
        • 常用来比较不同数据集之间的预测性能
      • 方法
        • MAPE(均方绝对百分比误差):$\frac{\sum_{t=1}^T{\mid p_t \mid}}{T}$
          • 缺点:分母观测值$y_t = 0$,或$y_t \to 0$
        • sMAPE(对称MAPE):$200 \times \sum_{t=1}^T(\frac{\mid y_t - \hat{y_t} \mid}{y_t + \hat{y_t}}) / T$
          • 缺点:分母同样有可能$\to 0$

判断预测:定性预测

  • 要点
    • 重要的专业知识
    • 更及时的最新信息
  • 主要原则
    • 清晰简洁地设置预测任务:设置预测难度和表述预测任务时需要谨慎
    • 实施系统化的方法
    • 记录和证明
    • 系统评估预测
    • 隔离预测值和用户(不影响)

时间序列回归模型

  • 核心思路:假设预测时序数据($y$)与其它时序($x$)之间存在线性关系:广告费与销量等
  • 线性模型
    • 简单线性回归
    • 多元线性回归
      • $Y = W \cdot X$
      • 分解机制
  • 模型评估
    • 残差满足条件:R的checkresiduals()
      • 均值为零
      • 相关性为零(当模型中没有截距项时,零相关假设不一定成立)
    • 方法
      • 绘制残差图以检查模型的假设是否满足
        • 残差自相关函数(ACF)图
        • Breusch-Godfrey 检验(LM (拉格朗日乘数)检验)
          • 条件:专门用于回归模型的残差检验
          • 目的:用于检验残差自相关
          • 结果:假如p值小于一个特定值(例如0.05),则表明残差中存在显著的自相关性
      • 残差直方图:检查残差是否服从正态分布也是很有必要的
      • 关系图
        • 预测变量(而不是预测值)与残差的关系图:查看每个预测变量与残差的散点图($x=\hat{y}, y=y - \hat{y}$),若这些散点图呈现的有规律,则该关系可能是非线性的,需要修改模型
        • 拟合值与残差的关系图:预测值/拟合值与残差的散点图没有明显关系,否则可能存在“异方差性”。若出现异方差性,可能需要对预测变量做对数平方根变换
  • 异常点和强影响点
    • 异常点:与绝大多数数据相差甚远
    • 强影响点:对模型的参数估计有重大影响的观测点。通常情况下,强影响点在$x$方向也是极端的异常值
    • 异常值处理
      • 直接全部删除不可取
      • 如果确定是异常值,须对其进行研究并分析其异常的可能原因
      • 删除/保留是个艰难的决定,特别是异常值(对模型)有影响力时
      • 虚拟变量:异常值,虚拟变量取1,否则取0。虚拟变量表示特殊事件:运动会,节假日等
  • 伪回归
    • 高$R^2$和高残差自相关共存
    • 伪回归模型似乎可以给出合理的短期预测,但在长期时间中,伪回归是无效的
  • 干预变量:可能对被预测变量产生影响的干预因素。如:竞争对手的活动,广告支出,政策等
    • 当干预因素的影响仅持续一个时期时,用“尖峰”变量来描述,方法同处理离群点,构建一个虚拟变量:干预期值为1,其它时候为0
    • 干预因素影响长久。若干预因素导致水平偏移(即序列值从干预后点突然永久改变),则用“阶梯”变量:干预前值为0,干预后为1
    • 长远影响是斜率的变化。需采取分段处理,由于干预前后斜率的不同,故模型非线性
  • 几组变量
    • 交易日:每个月的交易日数不同。对于月度或季度数据,bizdays()函数可以计算出每个时期内的交易日数。
    • 分布滞后:常情况下,把广告支出作为解释变量会十分有效。但是,广告效应往往会具有滞后性。使用变量:$x_m = m$个月前的广告支出。一般情况下,系数随着滞后阶数的增加而减少
    • 复活节:easter()函数可以计算复活节所代表的虚拟变量
    • 傅里叶级数fourier()(谐波回归):对于季节性虚拟变量,尤其是长季节周期,通常可以采用傅里叶级数。
      • 原理:一定频率的一系列正弦和余弦项可以逼近任何周期函数
      • 应用:把傅里叶级数用于季节模式
      • 当序列的季节周期为$m$时,其傅里叶级数的前6项为:
        • $x_{1, t} = \sin(\frac{2 \times \pi \times t}{m})$
        • $x_{2, t} = \cos(\frac{2 \times \pi \times t}{m})$
        • $x_{3, t} = \sin(\frac{4 \times \pi \times t}{m})$
        • $x_{4, t} = \cos(\frac{4 \times \pi \times t}{m})$
        • $x_{5, t} = \sin(\frac{6 \times \pi \times t}{m})$
        • $x_{6, t} = \cos(\frac{6 \times \pi \times t}{m})$
      • 一般经验
        • 当采用傅里叶级数时,尤其当$m$值很大时,通过可以用较少的预测变量得到与采用虚拟变量相同的预测结果
        • 如:周度数据中,$m \approx 52$,这对周度数据非常有效。
        • 对于短季节周期数据(如季度),使用傅里叶级数相对于季节性虚拟变量几乎没什么优势
  • 特征选择/预测变量的筛选
    • 【常见不推荐】画出被预测变量和特定的预测变量之间的关系图,若不能看出明显的相关关系,则删除
      • 问题
        • 独立,未考虑其它变量
        • 散点图并不总能正确反映两个变量间的关系
    • 【无效】对所有预测变量进行多元线性回归,并删除所有$p \gt 0.05$ 的所有变量
      • 问题:统计显著性并不总能表示预测变量的预测价值(靠对业务的理解)
    • 方法
      • CV(交叉检验):越小越好。
        • 公式:$CV = MSE(e_i)$
        • 参数:
          • $e_i$:第$i$个误差
          • $MSE = \frac{SSE}{T} = \frac{\sum_{i=1}^T{w_i \times (y_i - \hat{y_i})^2}}{T}$
      • AIC(赤池信息准则):越小越好。
        • 公式:$AIC = T \times log{\frac{SSE}{T}} + 2 \times (k + 2) = T \times log{MSE} + 2 \times (k + 2)$
        • 参数
          • $T$:观测点/样本数量
          • $k$:预测变量/特征数量
          • $SSE$:$SSE = T \times MSE = \sum_{i=1}^T{w_i \times (y_i - \hat{y_i})^2}$
      • AICc(修改的AIC):越小越好
        • 公式:$AIC_c = AIC + \frac{2 \times (k + 2) \times (k +3)}{T - k - 3}$
        • 参数:同上
      • BIC(施瓦茨的贝叶斯信息准则):越小越好
        • 公式:$BIC = T \times \log{\frac{SSE}{T}} + (k + 2) \times \log(T) = T \times \log{MSE} + (k + 2) \times \log(T)$
        • 参数:
      • $R^2$:越大越好。$R^2$并不能准确的反应模型的优劣($R^2$没有考虑到自由度的影响:在模型中增加任意一个变量,都会导致$R^2$增大)
        • 采用调整的可决系数$\hat{R^2}$(调整的$R^2$)的值最大的模型作为最优模型
          • 公式:$\hat{R^2} = 1 - (1 - R^2) \times \frac{T - 1}{T - k - 1} \in (-\infty, 1]$,接近1的,注意overfit
          • 参数
            • $T$:观测点/样本的个数
            • $k$:预测变量/特征的个数
        • 应用场景:倾向于选择具有很多预测变量的模型,因此它并不适用于预测
      • 建议:使用 AICc 、 AIC 或 CV 准则的其中一个,因为他们都是以预测数据为目标。当$T$足够大时,它们会选择出相同的模型
    • 特征选择/预测变量的筛选(最佳回归子集):将备选特征用排列组合的形式来选取特征构建模型,然后对模型进行评估(例如选取AICc),将所有的模型及所含特征以及模型得分列出来后,选取最佳的模型即可 输入图片说明
  • 逐步回归
    • 背景:若全部的特征个数为40个,此时有$2^{40}$个备选模型,不可能全部列出来
    • 方法
      • 向后逐步回归法
        • 用全部特征进行建模
        • 每次删除一个特征。如果模型精度有改进,则保留修改后的模型
        • 迭代直至模型精度不再提升
      • 前向逐步回归:与后向相反
      • 前后向混合过程
    • 说明:上述方法对于特征选择的过程是有效的,但是对于研究特征对于被预测变量的影响(p值),该方法无效
  • 滞后预测:$y_{t+h} = \beta_0 + \beta_1 \times x_{1, t} + \cdots + \beta_k \times x_{k, t} + \varepsilon_{t+h}, t \in \mathbb{N}$
  • 预测区间/点估计的置信区间
    • 95%(1.96)的置信区间:
      • Python
      • $[\hat{y} - 1.96 \times \sigma_e / \sqrt{1 + \frac{1}{T}+ \frac{(x-\bar{x})^2}{(T-1) \times s_x^2}}, \hat{y} + 1.96 \times \sigma_e / \sqrt{1 + \frac{1}{T}+ \frac{(x-\bar{x})^2}{(T-1) \times s_x^2}}]$
      • $[\mu - 1.96 \times \frac{\sigma}{\sqrt{T}}, \mu + 1.96 \times \frac{\sigma}{\sqrt{T}}]$
      • 参数
        • $T$:样本数
        • $s_x$:样本标准差
        • $\sigma_e = \sqrt{\frac{1}{T - k - 1} \times \sum_{t=1}^Te^2_t}$:回归标准误
    • 80%(1.28)的置信区间:上式1.96替换为1.28
      • $[\mu - 1.28 \times \frac{\sigma}{\sqrt{T}}, \mu + 1.28 \times \frac{\sigma}{\sqrt{T}}]$
  • 非线性变换:通过自变量和因变量的转换后,模型表现方式为线性的
    • 双对数模型:$\log(y) = a + b \times \log(x) + \varepsilon$
    • $n$次方模型:$y^2 = a + b \times x^3 + \varepsilon$
    • 分段函数
  • 相关关系与因果关系
    • 相关性只能说明两个变量之间有比较同步的情况发生,并不能说明两者之间有因果关系,也不能说明一个变量的变化会导致另一个变量的变化(例如:冰激凌销售量与溺水次数,它们可能通过第三个变量(温度)导致)
    • 因果关系对建模有好处:为了预测溺水次数,剔除冰激凌的销量,增加温度和游客数量(造成冰激凌销售量增加的原因)
  • 混淆变量:预测销售额时,竞争者活动(广告量)与经济健康状况(GDP)两个变量之间相关,但并不能完全将这两个变量分离开来
  • 多重共线性:模型存在多重共线性时,回归系数的统计检验不可靠

时间序列分解

  • 当季节性波动的幅度或者趋势周期项的波动不随时间序列水平的变化而变化,那么加法模型是最为合适的
  • 当季节项或趋势周期项的变化与时间序列的水平成比例时,则乘法模型更为合适(经济时间序列中常用)
    • 替代方案:对数据进行变换,直到时间序列随时间的波动趋于稳定,在用加法模型。典型:取对数
  • 时间序列分解
    • 加法分解
      • 计算趋势周期项$\hat{T_t}$
        • 若$m$为偶数,用$2 \times m$-MA来计算趋势周期项
        • 若$m$为奇数,用$m$-MA来计算趋势周期项
      • 计算去趋势序列:$y_t - \hat{T_t}$
      • 季节项$\hat{S_t}$:简单平均那个季度的去趋势值
        • 季节项调整:季节项之和为0
      • 残差项:时间序列减去估计的季节项和趋势-周期项求得的。$\hat{R_t} = y_t - \hat{T_t} - \hat{S_t}$
    • 乘法分解
      • 计算趋势周期项$\hat{T_t}$:同上
      • 计算去趋势序列:$\frac{y_t}{\hat{T_t}}$
      • 季节项$\hat{S_t}$:同上
      • 残差项:$\hat{R_t} = \frac{y_t}{\hat{T_t} \times \hat{S_t}}$
  • 经典时间序列分解的问题
    • 无法估计趋势-周期项的最前面几个和最后几个的观测值(空了),由此会使得相应的时期没有残差项的估值
    • 对趋势-周期项的估计倾向于过度平滑数据中的快速上升/下降
    • 无法捕捉某些季节项随时间变化而变化(用电高峰由冬季转为了夏季)
    • 有时候,时间序列中一些时期的值可能异乎寻常地与众不同
  • 几种分解法
    • X11分解法:分解季度月度数据
    • SEATS(Seasonal Extraction in ARIMA Time Series)分解法:仅能分析季度数据和月度数据
    • STL(Seasonal and Trend decomposition using Loess)分解法
      • 特点
        • 通用,robust
        • Loess是一种估算非线性关系的方法
      • 优势
        • 与SEATS和X-11不同的是,STL可以处理任何类型的季节性,不仅仅是月度数据和季度数据
        • 季节项可以随时间变化而变换,并且变化的速率可以由用户掌控
          • 趋势-周期项的平滑程度也可以由用户掌控
          • 可以不受离群点干扰(例如,用户可以指定一个稳健的分解)
      • 劣势
        • 不能自动地处理交易日或是其他有变动的日子
        • 仅提供了处理加法分解的方式。
          • 乘法分解
            • 取对数转为加法
            • Box-Cox变换可得加分分解和乘法分解
              • $\lambda = 0$:乘法分解
              • $\lambda = 1$:加法分解
  • 趋势强度测定
    • 对于趋势性很强的数据,经季节调整后的数据应该比残差项的变动幅度大,即$\frac{\text{Var}(R_t)}{\text{Var}(T_t + R_t)}$会相对较小。其中$R_t$表示分解残差项,$T_t$趋势项,$S_t$季节项
      • 趋势强度:$F_T = \text{max}(0, 1 - \frac{\text{Var}(R_t)}{\text{Var}(T_t + R_t)})$
  • 季节强度测定:季节强度:$F_S = \text{max}(0, 1 - \frac{\text{Var}(R_t)}{\text{Var}(S_t + R_t)})$
  • 结论
    • 当强度$F \to 0$时,趋势性/季节性不显著,几乎没有
    • 当强度$F \to 1$时,趋势性/季节性很明显
  • 分解法预测
    • 加法分解:$\hat{y_t} = \hat{S_t} + \hat{A_t}$,其中经季节调整后为$\hat{A_t} = \hat{T_t} + \hat{R_t}$
    • 乘法分解:$\hat{y_t} = \frac{\hat{S_t}}{\hat{A_t}}$,其中经季节调整后为$\hat{A_t} = \frac{\hat{T_t}}{\hat{R_t}}$
      • 预测季节性$S_t$采用朴素季节法:用最后一年的季节项的估计来预测
      • 用任意非季节性预测方法来预测季节调整后的分量
        • 随机游走法
        • 三次指数平滑法(Holt-Winters法)
        • 非季节性的ARIMA模型

指数平滑

  • 几种指数平滑方法

    • SES(简单指数平滑/单指数模型)

      • 适用场景:预测没有明显趋势或季节因素的数据
      • 预测
        • 朴素预测法:最后一个观测值作为下一期的预测值
        • 平均预测法:样本均值不变,故预测值均为样本均值
        • 加权平均:$n$次平滑:$\hat{Y_t} = \alpha \times y_t + (1 - \alpha) \times \hat{Y_t}$
        • 分量:包含一个预测方程和该方法中包含的每个分类部分的平滑方程
          • 简单指数平滑分量形式
            • 公式
              • 预测方程:$\hat{y_{t+h|t} = l_t}$
              • 平滑/水平方程:$l_t = \alpha \times y_t + (1 - \alpha) \times l_{t-1}$
        • 平面预测:简单指数平滑,所有的预测值均等于最后一个样本值。只有时间序列没有趋势或季节性分量时,这些预测才适用
      • 优化
        • SSE(最小化残差平方和)
    • Holt趋势法

      • 场景:拟合的是有水平项和趋势项的时序
      • 方法
        • Holt的线性趋势法
          • 公式
            • 预测方程:$\hat{y_{t+h|t}} = l_t + h \times b_t$
            • 水平方程:$l_t = \alpha \times y_t + (1 - \alpha) \times (l_{t-1} + b_{t-1})$
            • 趋势方程:$b_t = \beta^{*} \times (l_t - l_{t-1}) + (1 - \beta^{*}) \times b_{t-1}$
          • 参数
            • $l_t$:$t$时刻该时序的水平估计值
            • $\alpha$:水平平滑参数
            • $b_t$:$t$时刻该时序的趋势/斜率估计值
            • $\beta^{*}$:趋势平滑参数
        • Holt阻尼趋势方法:Holt线性方法容易过度预测,尤其是更长远的预测。该方法引入阻尼系数:$\phi \in (0, 1)$
          • 公式
            • 预测方程:$\hat{y_{t+h|t}} = l_t + \sum_{i=1}^h(\phi^i) \times b_t$
            • 水平方程:$l_t = \alpha \times y_t + (1 - \alpha) \times (l_{t-1} + \phi \times b_{t-1})$
            • 趋势方程:$b_t = \beta^{*} \times (l_t - l_{t-1}) + (1 - \beta^{*}) \times \phi \times b_{t-1}$
          • 参数:同上
          • 公式说明
            • $\phi = 1$,则同霍尔特的线性趋势法
            • $\phi$平缓了趋势,使其在将来某个时间接近一个常数
            • 对于任意的$\phi \in (0, 1)$,随着$h \to \infty$,预测值收敛到$l_T + \phi \times \frac{b_T}{1 - \phi}$。意味着:短期预测值有一定的趋势,而长期预测值则稳定
            • 实际上,$\phi \in [0.8, 0.98]$
    • Holt-Winters季节性方法

      • 场景:拟合的是有水平项、趋势项以及季节效应的时序
      • 方法
        • 加法模型
          • 条件:季节变化在该时序中大致保持不变
          • 公式
            • 预测:$\hat{y_{t+h|t}} = l_t + h \times b_t + s_{t-m+h}$
            • 水平:$l_t = \alpha \times (y_t - s_{t-m}) + (1 - \alpha) \times (l_{t-1} + b_{t-1})$
            • 趋势:$b_t = \beta^{*} \times (l_t - l_{t-1}) + (1 - \beta^{*}) \times b_{t-1}$
            • 季节:$s_t = \gamma \times (y_t - l_{t-1} - b_{t-1}) + (1 - \gamma) \times s_{t-m}$
          • 参数
            • $m$:季节频率:季度:$m = 4$;月度:$m = 12$
            • $k = \text{int}(\frac{h - 1}{m})$
            • 季节性调整观察值(减去季节):$y_t - s_{t-m}$
            • 非季节性预测值(水平+趋势的预测值):$l_{t-1} + b_{t-1}$
        • 乘法模型
          • 条件:季节变化与时序的水平成比例变化
          • 公式
            • 预测:$\hat{y_{t+h|t}} = (l_t + h \times b_t) \times s_{t-m+h}$
            • 水平:$l_t = \alpha \times \frac{y_t}{s_{t-m}} + (1 - \alpha) \times (l_{t-1} + b_{t-1})$
            • 趋势:$b_t = \beta^{*} \times (l_t - l_{t-1}) + (1 - \beta^{*}) \times b_{t-1}$
            • 季节:$s_t = \gamma \times \frac{y_t}{l_{t-1} + b_{t-1}} + (1 - \gamma) \times s_{t-m}$
          • 参数:同上
        • 阻尼Holt-Winters
    • 分类:可按趋势(T)和季节(S)分量进行自组合,如:(A,M)是具有加性和乘性季节性方法;(A_d,N)是具有衰减趋势且没有季节性的方法等 输入图片说明
      输入图片说明

  • 指数平滑状态空间模型

    • 对于每种方法,都存在两种模型:加性误差,乘性误差。使用相同的平滑参数,点估计相同,但区间估计不同
    • 状态空间模型标记为:ETS(-, -, -),分别代表(误差,趋势,季节)
    • 几种方法
      • ETS(A, N, N):具有加性误差的简单指数平滑
        • 观测方程:$y_t = l_{t-1} + \varepsilon_t$
        • 状态/转换方程:$l_t = l_{t-1} + \alpha \times \varepsilon_t$
        • 参数:
          • $l_t$:$t$时刻的预测值
          • $\varepsilon_t \sim N(0, \sigma^2)$
      • ETS(M, N, N):具有乘性误差的简单指数平滑
        • 观测方程:$y_t = l_{t-1} \times (1 + \varepsilon_t)$
        • 状态/转换方程:$l_t = l_{t-1} \times (1 + \alpha \times \varepsilon_t)$
      • ETS(A, A, N):具有加性误差的Holt线性方法
        • 观测方程:$y_t = l_{t-1} + b_{t-1} + \varepsilon_t$
        • 状态/转换方程:$l_t = l_{t-1} + b_{t-1} + \alpha \times \varepsilon_t)$
        • $b_t = b_{t-1} + \beta \times \varepsilon_t$,其中$\beta = \alpha \times \beta^{*}$
      • ETS(M, A, N):具有乘性误差的Holt线性方法
        • 观测方程:$y_t = (l_{t-1} + b_{t-1}) \times (1 + \varepsilon_t)$
        • 状态/转换方程:$l_t = (l_{t-1} + b_{t-1}) \times (1 + \alpha \times \varepsilon_t)$
        • $b_t = b_{t-1} + \beta \times (l_{t-1} + b_{t-1}) \times \varepsilon_t$,其中$\beta$同上 输入图片说明
  • 模型估计和选择

    • ETS模型估计
      • 参数估计的几种方法
        • 最小化误差平方和
        • 最大化似然函数
      • 参数估计的选择
        • 加性误差模型:两个结果相同
        • 乘性误差模型:结果不同
      • 参数限制
        • $\alpha, \beta^{*}, \gamma^{*} \in (0, 1)$
        • $\beta = \alpha \times \beta^{*} \Rightarrow \beta \in (0, \alpha)$
        • $\gamma = (1 - \alpha) \times \gamma^{*} \Rightarrow \gamma \in (0, 1 - \alpha)$
    • 模型选择
      • $\text{AIC} = -2 \times \log(L) + 2 \times k$
        • 参数
          • $L$:模型的似然函数
          • $k$:已估计的参数个数和初始状态的总和(包括残差的方差)
      • 针对小样本偏差修正的AIC:$\text{AICc} = \text{AIC} + \frac{k \times (k + 1)}{T - K -1}$
      • $\text{BIC} = \text{AIC} + k \times [\log(T) - 2]$
      • 模型选择原则
        • 通常不考虑上式计算分母可能接近为零的模型(ETS(A, N, M),ETS(A, A, M),ETS(A, $A_d$, M),)
        • 值为严格正数时,带有乘性误差的模型很有用。故若时间序列不是严格为正,那么乘性误差模型将不被考虑
        • 值包含零或负值时,模型在数值上并不稳定

ARIMA模型

  • ARIMA模型旨在描绘数据的自回归性(autocorrelations)
    • 平稳:不随观测时间的变化而变化(如:白噪音
      • 要点
        • 如果一个循环变化的时间序列没有趋势和季节性,那么它仍然是平稳的
        • 长期来看不存在可预测的特征
        • 差分,使得非平稳序列变平稳
          • 方法
            • 一阶/二阶差分
            • 季节差分
          • 白噪音检验: Ljung-Box 检验:Box.test(diff(series), type="Ljung-Box"")
          • ADF(单位根)检验:针对平稳性的统计假设检验被用于判断是否需要差分方法来让数据更平稳
            • 现象:方法有很多,基于不同的假设,可能会产生相互矛盾的结果
            • 方法
              • KPSS(Kwiatkowski-Phillips-Schmidt-Shin)检验。原假设:数据是平稳的。当 test-statistic 小于阈值(例如:0.05)时,否定原假设,即需要进行差分
              • adfuller(Augmented Dickey-Fuller)检验
                • 原假设:数据是不平稳的。统计值 小于 1% 的水平,则可以极显著的拒绝原假设,认为数据平稳
                • 条件:只适合AR(P)模型。且对方差齐性效果好,对异方差性效果不佳。异方差可用PP检验
        • ACF图识别
          • 平稳时间序列:自相关系数(ACF)会快速的下降到接近 0 的水平
          • 非平稳时间序列:自相关系数会下降的比较缓慢
    • 平稳是自回归模型ARMA的必要条件
    • 非平稳序列考虑使用ARIMA模型(I:差分)
  • 随机游走模型:差分序列是白噪声
    • 由于未来变化不可以预测,随机模型的预测值为上一次的观测值,即:朴素(naive)预测
    • 由于在金融市场会出现明显的上升/下降趋势,故调整为:$y_t - y_{t-1} = c + \varepsilon_t$,其中,$c$为差分均值,$c$的方向代表中随机游走的方向
  • 延迟算子:$B = \frac{y_t}{y_{t-1}}$。当延迟算子$B$用于$y_t$时,意味着将时间反向回溯一个单位
    • 差分的表示
      • 一阶差分:$y'_t = (1 - B) \times y_t$
      • 二阶差分:$y''_t = (1 - B)^2 \times y_t$
  • 自回归模型:用预测变量的历史值来回归
    • $p$阶自回归模型(AR(p)模型):$y_t = c + \phi_1 \times y_{t-1} + \cdots + \phi_p \times y_{t-p} + \varepsilon_t$
  • 移动平均模型:用历史预测误差来回归
    • $q$阶移动平均模型(MA(q)):$y_t = c + \varepsilon_t + \theta_1 \times \varepsilon_{t-1} + \cdots + \theta_q \times \varepsilon_{t-q}$
  • 非季节性ARIMA(AutoRegressive Integrated Moving Average)模型:结合差分、自回归和移动平均模型
    • 公式(ARIMA(p, d, q)模型):$y'_t = c + \phi_1 \times y'_{t-1} + \cdots + \phi_p \times y'_{t-p} + \theta_1 \times \varepsilon_{t-1} + \cdots + \theta_q \times \varepsilon_{t-q} + \varepsilon_t$

    • 参数

      • $y'_t$:差分序列(可能多次差分)
      • $p$:自回归模型阶数
      • $d$:差分阶数
      • $q$:移动平均模型阶数
      • R:auto.arima()自动完成上述$p, d, q$参数设置
      • 关于参数的几种情况说明
        • $c = 0, d = 0$,长期预测为$0$
        • $c = 0, d = 1$,长期预测为非零常数
        • $c = 0, d = 2$,长期预测为直线
        • $c \neq 0, d = 0$,长期预测为均值
        • $c \neq 0, d = 1$,长期预测为直线
        • $c \neq 0, d = 2$,长期预测为存在一个二次的趋势
        • $d$越大,预测区间将会增加的更快。当$d = 0$时,长期预测的标准差与历史数据的标准差相同,故预测区间不变
    • ARIMA特例

      • ARIMA(0, 0, 0):白噪音
      • ARIMA(0, 1, 0) with no constant:随机游走
      • ARIMA(0, 1, 0) with a constant:带漂移的随机游走
      • ARIMA($p$, 0, 0):自回归模型
      • ARIMA(0, 0, $q$):移动平均模型
    • 建模过程

      • 详细
        • 画出时序图并检查有无异常观测
        • 如有必要,对数据进行变换(如Box-Cox变换)来稳定方差
        • 如数据非平稳,对数据进行差分直到数据平稳
        • 检查自相关图(acf)和偏自相关图(pacf):数据是否符合ARIMA($p, d, 0$)或者ARIMA($0, d, q$)模型特征
        • 尝试拟合选择的模型,并使用消息准则来进行模型选择
        • 通过画出残差自相关图(acf)来检查模型的残差,并对残差进行一元混成检验:若非白噪音,则模型欠拟合;否则适用
      • 概括
        • 画图数据检查:异常点
        • 数据预处理
          • 方差稳定
          • 数据平稳
        • 模型选择
          • acf和pacf图查看数据符合模型
          • 通过stattools.arma_order_select_ic来做参数选择
          • 不同参数的模型,使用消息准则来进行模型选择
        • 模型拟合
          • 残差是否白噪音:是:ok;否:欠拟合
  • 季节性ARIMA(AutoRegressive Integrated Moving Average)模型
    • ARIMA$(p, d, q)(P, D, Q)_m$:前半部分为非季节部分,后半部分为季节部分
    • 自相关图(acf)/偏自相关图(pacf)
      • 对于一个ARIMA(0,0,0)(0,0,1)_12模型(m = 12)($(p,d,q) (P,D,Q,m)$)
        • acf图中延迟期数为 12 上有一个明显突起,但是没有其他明显的突起
        • pacf图中季节性延迟(即当延迟为12,24,36,…)上出现指数性的衰减
      • 对于一个ARIMA(0,0,0)(1,0,0)_12模型
        • acf图中季节性延迟上出现指数型衰减
        • pacf图中延迟为 12 上的一个明显突起

动态回归模型

  • 增加了对模型有影响的外部因素:如:假期、竞争对手活动、法律法规变化等
  • 动态谐波回归
    • 当数据存在较长季节性时,包含傅里叶项的动态回归模型通过效果很好。如:日数据存在长度为365的季节性,周数据存在长度为52的季节性
      • ets()函数限制最大的季节性周期为24
      • Arima()auto.arima()允许的季节周期达到$m = 350$,然而,季节性周期超过200时易导致内存不足,且高阶的几阶差分意义并不大
    • 基于以上,考虑谐波回归方法,其中季节性模式使用傅里叶项建模,短期时序由ARMA误差项处理
      • 优势
        • 允许任何长度的季节性
        • 对于具有一个以上的季节性周期数据,可以包括不同频率的傅里叶项
        • 对于较小的$K$值,季节性模式是平滑的(通过增加$K$来处理更多的波动的季节性)
        • 通过简单的ARMA误差可处理短期动态
      • 缺点
        • 假定季节性是固定的

预测分层/分组时间序列

高级预测方法

实际预测问题

Python
1
https://gitee.com/xiwanggit/book-math.git
git@gitee.com:xiwanggit/book-math.git
xiwanggit
book-math
math-book
master

搜索帮助