数学建模与数据分析中的灰色预测

灰色预测
对既含有已知确定信息,又含有不确定信息的系统进行预测

(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=1kx(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)(k1) 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)111

     
    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)=baz(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)(k1)=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)(k1)=k1kdtdx(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)(k1)k1kx(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^]ea^(t1)+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^]ea^m+a^b^  (m=1,2,,n1)
     
  • 通过作差解出对原始值的预测
    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=(1ea^)[x(0)(1)a^b^]ea^m  (m=1,2,,n1)

⭐️ 进行预测只需要在 n n n 的后面取 m m m 的值就可以了。

5. 指数规律的检验

⚠️ 注意灰色预测只对指数趋势的数据有较好的预测结果。

扫描二维码关注公众号,回复: 12477068 查看本文章
  • 定义序列 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)(k1)x(1)(k)=1+x(1)(k1)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)(k1)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 ba<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=n11k=2nϵ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)(k1)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)=11+0.5a^10.5a^σ(k)1
    η ‾ = ∑ k = 2 n η ( k ) n − 1 \overline{\eta}=\frac{\displaystyle\sum_{k=2}^n\eta(k)}{n-1} η=n1k=2nη(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
  • 数据的期数较短,如果数据的期数很长可以考虑使用时间序列模型。

(4) 预测题目的技巧

猜你喜欢

转载自blog.csdn.net/weixin_44618906/article/details/104239424