hiyouga/hiyouga-blog-project

时间序列模型

Closed this issue · 0 comments

还没学过数理统计的课程,看这些知识是真的吃力,不写点东西的话完全看不下去><,下面开始正文:

时间序列即按时间顺序排列的、随时间变化且相互关联的数据序列。
分析时间序列的方法构成数据分析的一个重要领域,即时间序列分析。

§0 时间序列分类:

  1. 按研究对象的多少:一元时间序列、多元时间序列
  2. 按时间的连续性:离散时间序列、连续时间序列
  3. 按序列的统计特性:平稳时间序列、非平稳时间序列
    • 如果一个时间序列的概率分布与时间\(t\)无关,则称该序列为严格的(狭义的)平稳时间序列。

    • 如果序列的一、二阶矩存在,而且对任意时刻\(t\)满足:

      1. 均值为常数
      2. 协方差为时间间隔\(\tau\)的函数

      则称该序列为宽平稳时间序列,也叫广义平稳时间序列。我们以后所研究的时间序列主要是宽平稳时间序列。

  4. 按序列的分布规律:高斯型时间序列、非高斯型时间序列

§1 时间序列分析方法概述:
时间序列预测技术就是通过对预测目标自身时间序列的处理,来研究其变化趋势的。
一个时间序列往往是以下几类变化形式的叠加或耦合。

  1. 长期趋势变动。
    它是指时间序列朝着一定的方向持续上升或下降,或停留在某一水平上的倾向,它反映了客观事物的主要变化趋势。
  2. 季节变动。
  3. 循环变动。
    通常是指周期为一年以上,由非季节因素引起的涨落起伏波形相似的波动。
  4. 不规则变动。通常它分为突然变动和随机变动。

通常用\(T_t\)表示长期趋势项,\(S_t\)表示季节变动趋势项, \(C_t\)表示循环变动趋势项,\(R_t\)表示随机干扰项。常见的时间序列模型有以下几种类型:

  1. 加法模型:\(y_t = T_t + S_t + C_t + R_t\)
  2. 乘法模型:\(y_t = T_t · S_t · C_t · R_t\)
  3. 混合模型:\(y_t = T_t · S_t + R_t\) 或 \(y_t = S_t + T_t · C_t · R_t\)

其中\(y_t\)是观测目标的观测记录,\(E(R_t) = 0, E(R_t^2) = \sigma^2\)
如果在预测时间范围以内,无突然变动且随机变动的方差\(\sigma^2\)较小,并且有理由认为过去和现在的演变趋势将继续发展到未来时,可用一些经验方法进行预测。

§2 移动平均法
移动平均法是根据时间序列资料逐渐推移,依次计算包含一定项数的时序平均数, 以反映长期趋势的方法。当时间序列的数值由于受周期变动和不规则变动的影响,起伏较大,不易显示出发展趋势时,可用移动平均法,消除这些因素的影响,分析、预测序列的长期趋势。
移动平均法有简单移动平均法,加权移动平均法,趋势移动平均法等等。

2.1 简单移动平均法
设观测序列为\(y_1,\cdots, y_T\),取移动平均的项数\(N<T\)。一次简单移动平均值计算公式为:
$$\begin{align}
M_t^{(1)}
& = \frac1N(y_t + y_{t-1} + \cdots + y_{t-N+1})\\
& = \frac1N(y_{t-1} + \cdots + y_{t-N}) + \frac1N(y_t - y_{t-N})\\
& = M_{t-1}^{(1)} + \frac1N(y_t - y_{t-N}) \tag1
\end{align}$$
当预测目标的基本趋势是在某一水平上下波动时,可用一次简单移动平均方法建立预测模型:
$$\hat{y}_{t+1} = M_t^{(1)} = \frac1N(y_t + \cdots + y_{t-N+1}, t = N, N+1, \cdots, T\tag2$$
其预测标准误差为:
$$S = \sqrt{\frac{\sum_{t=N+1}^T(\hat{y}_t - y_t)^2}{T-N}} \tag3$$

最近\(N\)期序列值的平均值作为未来各期的预测结果。一般\(N\)取值范围:\(5\leq N\leq200\)。当历史序列的基本趋势变化不大且序列中随机变动成分较多时,\(N\)的取值应较大一些。否则\(N\)的取值应小一些。在有确定的季节变动周期的资料中,移动平均的项数应取周期长度。选择最佳\(N\)值的一个有效方法是,比较若干模型的预测误差。预测标准误差最小者为好。

例1:某企业1月~11月份的销售收入时间序列如表1所示。试用一次简单滑动平均法预测第12月份的销售收入。
表1 企业销售收入

月份\(t\) 1 2 3 4 5 6
销售收入\(y_t\) 533.8 574.6 606.9 649.8 705.1 772.0
月份\(t\) 7 8 9 10 11
销售收入\(y_t\) 816.4 892.7 963.9 1015.1 1102.7

解:分别取\(N=4, N=5\)的预测公式:
$$\hat{y}_{t+1} = \frac{y_t + y_{t-1} + y_{t-2} + y_{t-3}}4, t = 4, 5, \cdots, 11$$
$$\hat{y}_{t+1} = \frac{y_t + y_{t-1} + y_{t-2} + y_{t-3} + y_{t-4}}5, t = 5, \cdots, 11$$
当\(N=4\)时,预测值\(\hat{y}_{12}^{(1)}=993.6\),预测的标准误差为
$$S_1 = \sqrt{\frac{\sum_{t=5}^{11}(\hat{y}_t^{(1)} - y_t)^2}{11-4}} = 150.5$$
当\(N=5\)时,预测值\(\hat{y}_{12}^{(2)}=958.2\),预测的标准误差为
$$S_1 = \sqrt{\frac{\sum_{t=6}^{11}(\hat{y}_t^{(2)} - y_t)^2}{11-5}} = 182.4$$
计算结果表面,\(N=4\)时,预测的标准误差较小,所以选取\(N=4\)。预测第12月份的销售收入为993.6。

计算的MATLAB程序如下:

clc, clear
y = [533.8, 574.6, 606.9, 649.8, 705.1, 772.0, 816.4, 892.7, 963.9, 1015.1, 1102.7];
m = length(y);
n = [4,5];
%n为移动平均的项数
for i = 1:length(n)
    %由于n的取值不同,yhat的长度不一致,下面使用了细胞数组
    for j = 1:m-n(i)+1
        yhat{i}(j) = sum(y(j:j+n(i)-1)) / n(i);
    end
    y12(i) = yhat{i}(end);
    s(i) = sqrt(mean((y(n(i)+1:m)-yhat{i}(1:end-1)).^2));
end
y12, s

Output:

y12 = 993.6000 958.1600
s = 150.5121 182.3851

简单移动平均法只适合做近期预测,而且是预测目标的发展趋势变化不大的情况。如果目标的发展趋势存在其它的变化,采用简单移动平均法就会产生较大的预测偏差和滞后。

参考文档:
时间序列模型.pdf