灰色预测
对既含有已知确定信息,又含有不确定信息的系统进行预测
文章目录
(1) 灰色系统
- 对原始数据进行生成处理,生成有较强规律的数据序列。
- 根据原始数据和生成的数据,建立微分方程。
- 使用建立的微分方程进行预测。
(2) GM(1,1) 模型
1. 简介
- 原始数据为离散的非负数据列。
- 通过累加生成削弱随机性的较有规律的离散数据列。
- 建立微分方程后,通过相邻项的作差得到原始数据列的估计值。
- GM(1,1) 第一个 1 1 1 表示微分方程是一阶的,第二个 1 1 1 表示微分方程只有一个变量。
2. 转化成灰色微分方程
- 最初的非负数据列: x ( 0 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 2 ) , … , x ( 0 ) ( n ) ) x^{(0)}=(x^{(0)}(1),x^{(0)}(2),\dots,x^{(0)}(n)) x(0)=(x(0)(1),x(0)(2),…,x(0)(n))
- 对其进行一次累加得到新的生成数据列:
x ( 1 ) = ( x ( 1 ) ( 1 ) , x ( 1 ) ( 2 ) , … , x ( 1 ) ( n ) ) x^{(1)}=(x^{(1)}(1),x^{(1)}(2),\dots,x^{(1)}(n)) x(1)=(x(1)(1),x(1)(2),…,x(1)(n))
其中 x ( 1 ) ( k ) = ∑ i = 1 k x ( 0 ) ( i ) x^{(1)}(k)=\displaystyle\sum_{i=1}^kx^{(0)}(i) x(1)(k)=i=1∑kx(0)(i) ( k = 1 , 2 , … , n ) (k=1,2,\dots,n) (k=1,2,…,n) - 求出对应的紧邻均值生成数列:
z ( 1 ) = ( z ( 1 ) ( 1 ) , z ( 1 ) ( 2 ) , … , z ( 1 ) ( n ) ) z^{(1)}=(z^{(1)}(1),z^{(1)}(2),\dots,z^{(1)}(n)) z(1)=(z(1)(1),z(1)(2),…,z(1)(n))
其中 z ( 1 ) ( k ) = θ x ( 1 ) ( k ) + ( 1 − θ ) x ( 1 ) ( k − 1 ) z^{(1)}(k)=\theta x^{(1)}(k)+(1-\theta)x^{(1)}(k-1) z(1)(k)=θx(1)(k)+(1−θ)x(1)(k−1) k = 2 , 3 , … , n k=2,3,\dots,n k=2,3,…,n 且 θ = 0.5 \theta=0.5 θ=0.5 相当于是对两个相邻值做平均。
-
写出模型的基本形式:
x ( 0 ) ( k ) + a z ( 1 ) ( k ) = b k = ( 2 , 3 , … , n ) x^{(0)}(k)+az^{(1)}(k)=b~~~~k=(2,3,\dots,n) x(0)(k)+az(1)(k)=b k=(2,3,…,n)
b b b 表示灰作用量, − a -a −a 表示发展系数。 -
转化成矩阵形式:
u = [ a b ] Y = [ x ( 0 ) ( 2 ) x ( 0 ) ( 3 ) ⋮ x ( 0 ) ( n ) ] [ − z ( 1 ) ( 2 ) 1 − z ( 1 ) ( 3 ) 1 ⋮ ⋮ − z ( 1 ) ( n ) 1 ] u=\left[ \begin{matrix} a\\b \end{matrix} \right] ~~Y= \left[ \begin{matrix} x^{(0)}(2)\\ x^{(0)}(3)\\ \vdots \\ x^{(0)}(n) \end{matrix} \right] \left[ \begin{matrix} -z^{(1)}(2)& 1\\ -z^{(1)}(3)& 1\\ \vdots &\vdots \\ -z^{(1)}(n)&1 \end{matrix} \right] u=[ab] Y=⎣⎢⎢⎢⎡x(0)(2)x(0)(3)⋮x(0)(n)⎦⎥⎥⎥⎤⎣⎢⎢⎢⎡−z(1)(2)−z(1)(3)⋮−z(1)(n)11⋮1⎦⎥⎥⎥⎤
Y = B u Y=Bu Y=Bu -
使用最小二乘法得到参数 a , b a,b a,b 的估计值:
u ^ = [ a ^ b ^ ] = ( B T B ) − 1 B T Y \hat{u}=\left[ \begin{matrix} \hat{a}\\\hat{b} \end{matrix} \right]=(B^TB)^{-1}B^TY u^=[a^b^]=(BTB)−1BTY
⚠️ 注意这里 B T B B^TB BTB 必须要可逆,也就是 B B B 不发生列向量的相关,不存在完全共线性。
⭐️实际上就是类比 x ( 0 ) ( k ) = b − a z ( 1 ) ( k ) ↔ y = m x + b x^{(0)}(k)=b-az^{(1)}(k)\leftrightarrow y=mx+b x(0)(k)=b−az(1)(k)↔y=mx+b 进行回归,求出系数 m m m 和 b b b。
3. 建立对应的白化方程
- 根据之前的最小二乘法估计出的 a ^ \hat{a} a^ 与 b ^ \hat{b} b^ 得到方程 x ( 0 ) ( k ) = − a ^ z ( 1 ) ( k ) + b ^ ↔ x ( 1 ) ( k ) − x ( 1 ) ( k − 1 ) = − a ^ z ( 1 ) ( k ) + b ^ x^{(0)}(k)=-\hat{a}z^{(1)}(k)+\hat{b}\leftrightarrow x^{(1)}(k)-x^{(1)}(k-1)=-\hat{a}z^{(1)}(k)+\hat{b} x(0)(k)=−a^z(1)(k)+b^↔x(1)(k)−x(1)(k−1)=−a^z(1)(k)+b^
- 使用定积分进行转化 x ( 1 ) ( k ) − x ( 1 ) ( k − 1 ) = ∫ k − 1 k d x ( 1 ) ( t ) d t d t x^{(1)}(k)-x^{(1)}(k-1)=\int_{k-1}^k\frac{dx^{(1)}(t)}{dt}dt x(1)(k)−x(1)(k−1)=∫k−1kdtdx(1)(t)dt
z ( 1 ) ( k ) = x ( 1 ) ( k ) + x ( 1 ) ( k − 1 ) 2 ≈ ∫ k − 1 k x ( 1 ) ( t ) d t z^{(1)}(k)=\frac{x^{(1)}(k)+x^{(1)}(k-1)}{2}\approx\int_{k-1}^kx^{(1)}(t)dt z(1)(k)=2x(1)(k)+x(1)(k−1)≈∫k−1kx(1)(t)dt - 代入以上两个式子可以将灰色微分方程转化成为白化方程
d x ( 1 ) ( t ) d t = − a ^ x ( 1 ) ( t ) + b ^ \frac{dx^{(1)}(t)}{dt}=-\hat{a}x^{(1)}(t)+\hat{b} dtdx(1)(t)=−a^x(1)(t)+b^
4. 由白化方程解出结果
- 取初始值 x ^ ( 1 ) ( t ) ∣ t = 1 = x ( 0 ) ( 1 ) \hat{x}^{(1)}(t)|_{t=1}=x^{(0)}(1) x^(1)(t)∣t=1=x(0)(1)
- 得到对应解 x ^ ( 1 ) ( t ) = [ x ( 0 ) ( 1 ) − b ^ a ^ ] e − a ^ ( t − 1 ) + b ^ a ^ \hat{x}^{(1)}(t)=[x^{(0)}(1)-\dfrac{\hat{b}}{\hat{a}}]e^{-\hat{a}(t-1)}+\dfrac{\hat{b}}{\hat{a}} x^(1)(t)=[x(0)(1)−a^b^]e−a^(t−1)+a^b^ ,也就是 x ^ ( 1 ) ( m + 1 ) = [ x ( 0 ) ( 1 ) − b ^ a ^ ] e − a ^ m + b ^ a ^ ( m = 1 , 2 , … , n − 1 ) \hat{x}^{(1)}(m+1)=[x^{(0)}(1)-\dfrac{\hat{b}}{\hat{a}}]e^{-\hat{a}m}+\dfrac{\hat{b}}{\hat{a}}~~(m=1,2,\dots,n-1) x^(1)(m+1)=[x(0)(1)−a^b^]e−a^m+a^b^ (m=1,2,…,n−1)
- 通过作差解出对原始值的预测
x ^ ( 0 ) ( m + 1 ) = x ^ ( 1 ) ( m + 1 ) − x ^ ( 1 ) m = ( 1 − e a ^ ) [ x ( 0 ) ( 1 ) − b ^ a ^ ] e − a ^ m ( m = 1 , 2 , … , n − 1 ) \hat{x}^{(0)}(m+1)=\hat{x}^{(1)}(m+1)-\hat{x}^{(1)}m=(1-e^{\hat{a}})[x^{(0)}(1)-\dfrac{\hat{b}}{\hat{a}}]e^{-\hat{a}m}~~(m=1,2,\dots,n-1) x^(0)(m+1)=x^(1)(m+1)−x^(1)m=(1−ea^)[x(0)(1)−a^b^]e−a^m (m=1,2,…,n−1)
⭐️ 进行预测只需要在 n n n 的后面取 m m m 的值就可以了。
5. 指数规律的检验
⚠️ 注意灰色预测只对指数趋势的数据有较好的预测结果。
- 定义序列 x ( 1 ) x^{(1)} x(1) 的级比 σ ( k ) = x ( 1 ) ( k ) x ( 1 ) ( k − 1 ) = 1 + x ( 0 ) ( k ) x ( 1 ) ( k − 1 ) \sigma(k)=\frac{x^{(1)}(k)}{x^{(1)}(k-1)}=1+\frac{x^{(0)}(k)}{x^{(1)}(k-1)} σ(k)=x(1)(k−1)x(1)(k)=1+x(1)(k−1)x(0)(k)
- 定义序列 x ( 0 ) x^{(0)} x(0) 的光滑比 ρ ( k ) = x ( 0 ) ( k ) x ( 1 ) ( k − 1 ) \rho(k)=\frac{x^{(0)}(k)}{x^{(1)}(k-1)} ρ(k)=x(1)(k−1)x(0)(k)
- 准指数规律要求对 ∀ k , σ ( k ) ∈ [ a , b ] \forall k,~~\sigma(k)\in[a,b] ∀k, σ(k)∈[a,b] 并且 b − a < 0.5 b-a<0.5 b−a<0.5,由于当 k k k 很大时, ρ ( k ) \rho(k) ρ(k) 接近于 0 0 0,因此要求 ρ ( k ) ∈ ( 0 , 0.5 ) \rho(k)\in(0,0.5) ρ(k)∈(0,0.5) 即可。
- 实际建模中,要计算 ρ ( k ) ∈ ( 0 , 0.5 ) \rho(k)\in(0,0.5) ρ(k)∈(0,0.5) 的占比,占比越高越好,并且一般 ρ ( 2 ) \rho(2) ρ(2) 和 ρ ( 3 ) \rho(3) ρ(3) 可能不符合要求,因此更关心后面的期数。
6. 模型的评价
⚠️ 要在预测其它的数据前进行。
① ① ① 残差检验
- 绝对残差: ϵ ( k ) = x ( 0 ) ( k ) − x ^ ( 0 ) ( k ) ( k = 2 , 3 , … , n ) \epsilon(k)=x^{(0)}(k)-\hat{x}^{(0)}(k)~(k=2,3,\dots,n) ϵ(k)=x(0)(k)−x^(0)(k) (k=2,3,…,n)
- 相对残差: ϵ r ( k ) = ∣ x ( 0 ) ( k ) − x ^ ( 0 ) ( k ) ∣ x ( 0 ) ( k ) × 100 % ( k = 2 , 3 , … , n ) \epsilon_r(k)=\dfrac{|x^{(0)}(k)-\hat{x}^{(0)}(k)|}{x^{(0)}(k)}\times100\%~(k=2,3,\dots,n) ϵr(k)=x(0)(k)∣x(0)(k)−x^(0)(k)∣×100% (k=2,3,…,n)
- 平均相对残差: ϵ ‾ r = 1 n − 1 ∑ k = 2 n ϵ r ( k ) \overline{\epsilon}_r=\frac{1}{n-1}\sum_{k=2}^n\epsilon_r(k) ϵr=n−11k=2∑nϵr(k)
ϵ ‾ r < 20 % \overline{\epsilon}_r<20\% ϵr<20% 达到一般要求
ϵ ‾ r < 10 % \overline{\epsilon}_r<10\% ϵr<10% 拟合效果比较好
② ② ② 级比偏差检验
- 计算原始数据的级比 σ ( k ) = x ( 0 ) ( k ) x ( 0 ) ( k − 1 ) ( k = 2 , 3 , … , n ) \sigma(k)=\frac{x^{(0)}(k)}{x^{(0)}(k-1)}~(k=2,3,\dots,n) σ(k)=x(0)(k−1)x(0)(k) (k=2,3,…,n)
- 根据预测的发展系数 − a ^ -\hat{a} −a^ 求出级比偏差
η ( k ) = ∣ 1 − 1 − 0.5 a ^ 1 + 0.5 a ^ 1 σ ( k ) ∣ \eta(k)=|1-\frac{1-0.5\hat{a}}{1+0.5\hat{a}}\frac{1}{\sigma(k)}| η(k)=∣1−1+0.5a^1−0.5a^σ(k)1∣
η ‾ = ∑ k = 2 n η ( k ) n − 1 \overline{\eta}=\frac{\displaystyle\sum_{k=2}^n\eta(k)}{n-1} η=n−1k=2∑nη(k)
η ‾ < 20 % \overline{\eta}<20\% η<20% 达到一般要求
η ‾ < 10 % \overline{\eta}<10\% η<10% 拟合效果比较好
7. 模型的拓展
原始数据序列为 x ( 0 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 2 ) , … , x ( 0 ) ( n ) ) x^{(0)}=(x^{(0)}(1),x^{(0)}(2),\dots,x^{(0)}(n)) x(0)=(x(0)(1),x(0)(2),…,x(0)(n))
① ① ① 新信息模型
- 使用原始数据序列预测出 x ( 0 ) ( n + 1 ) x^{(0)}(n+1) x(0)(n+1)。
- 将预测出的数再加入到原始序列中进行下一次预测 x ( 0 ) = ( x ( 0 ) ( 1 ) , x ( 0 ) ( 2 ) , … , x ( 0 ) ( n ) , x ( 0 ) ( n + 1 ) ) x^{(0)}=(x^{(0)} (1),x^{(0)}(2),\dots,x^{(0)}(n),x^{(0)}(n+1)) x(0)=(x(0)(1),x(0)(2),…,x(0)(n),x(0)(n+1))
⚠️ 一定要注意,下一次预测取值取的期数还是 n n n 。
② ② ② 新陈代谢模型 ✔️ 一般预测效果最好
- 使用原始数据序列预测出 x ( 0 ) ( n + 1 ) x^{(0)}(n+1) x(0)(n+1)。
- 将预测出的数再加入到原始序列中,并去掉第一个值之后再进行下一次预测 x ( 0 ) = ( x ( 0 ) ( 2 ) , … , x ( 0 ) ( n ) , x ( 0 ) ( n + 1 ) ) x^{(0)}=(x^{(0)}(2),\dots,x^{(0)}(n),x^{(0)}(n+1)) x(0)=(x(0)(2),…,x(0)(n),x(0)(n+1))
⚠️ 一定要注意,下一次预测取值取的期数还是 n n n 。 - 随着系统的发展,老数据的信息的意义将逐步降低,在不断补充新数据的同时去掉老数据可以使模型更加优化。
(3) 使用的注意事项
- 数据以年份为度量的非负数据 (如果以月份或季度作为度量可以考虑使用时间序列模型)。
- 数据成指数趋势,能经过指数规律检验,除前两期外至少 90 % 90\% 90% 低于 0.5 0.5 0.5。
- 数据的期数较短,如果数据的期数很长可以考虑使用时间序列模型。