作者:張張張張
github地址:https://github.com/zhanghekai
【转载请注明出处,谢谢!】
灰色预测是用灰色模型GM(1,1)来进行定量分析的,通常分为以下几类:
(1) 灰色时间序列预测。用等时距观测到的反映预测对象特征的一系列数量(如产量、销量、人口数量、存款数量、利率等)构造灰色预测模型,预测未来某一时刻的特征量,或者达到某特征量的时间。
(2) 畸变预测(灾变预测)。通过模型预测异常值出现的时刻,预测异常值什么时候出现在特定时区内。
(3) 波形预测,或称为拓扑预测,它是通过灰色模型预测事物未来变动的轨迹。
(4) 系统预测,对系统行为特征指标建立一族相互关联的灰色预测理论模型,在预测系统整体变化的同时,预测系统各个环节的变化。
灰色模型预测流程
\qquad 给定观测数据列 x ( 0 ) = { x 1 ( 0 ) , x 2 ( 0 ) , ⋯   , x n ( 0 ) } x^{(0)}=\{x_1^{(0)},x_2^{(0)},\cdots,x_n^{(0)}\} x(0)={x1(0),x2(0),⋯,xn(0)}一般采用 x ( 0 ) x^{(0)} x(0)的级比 λ k ( 0 ) \lambda^{(0)}_k λk(0)的大小与所属区间来判断。
\qquad 级比定义: λ k ( 0 ) = x k − 1 ( 0 ) x k ( 0 ) , k = 2 , 3 , ⋯   , n \lambda^{(0)}_k=\frac{x^{(0)}_{k-1}}{x^{(0)}_k},\quad k=2,3,\cdots,n λk(0)=xk(0)xk−1(0),k=2,3,⋯,n
\qquad 若满足 λ k ( 0 ) ∈ ( e − 2 n + 1 , e 2 n + 1 ) \lambda^{(0)}_k\in (e^{-\frac{2}{n+1}},e^{\frac{2}{n+1}}) λk(0)∈(e−n+12,en+12),则认为 x ( 0 ) x^{(0)} x(0)是可作为 G M ( 1 , 1 ) GM(1,1) GM(1,1)建模的。如果原始序列不满足,需要对原始序列做必要的变换处理,使其落入可容覆盖内。即取适当的常数 C C C,做平移变换:
y ( 0 ) = x i ( 0 ) + C , i = 1 , 2 , ⋯   , n y^{(0)}=x^{(0)}_i+C,\quad i=1,2,\cdots,n y(0)=xi(0)+C,i=1,2,⋯,n
\qquad 使序列 y ( 0 ) = ( y 1 ( 0 ) , y 2 ( 0 ) , ⋯   , y n ( 0 ) ) y^{(0)}=(y^{(0)}_1,y^{(0)}_2,\cdots,y^{(0)}_n) y(0)=(y1(0),y2(0),⋯,yn(0))的级比 λ y ( k ) = y k − 1 ( 0 ) y ( k ) \lambda_y^{(k)}=\frac{y^{(0)}_{k-1}}{y^{(k)}} λy(k)=y(k)yk−1(0)落入上述区间范围。
\qquad 设原始序列为 x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , ⋯   , x n ( 0 ) ) x^{(0)}=(x^{(0)}_1,x^{(0)}_2,\cdots,x^{(0)}_n) x(0)=(x1(0),x2(0),⋯,xn(0)),令: x k ( 1 ) = ∑ i = 1 k x i ( 0 ) , k = 1 , 2 , ⋯   , n x^{(1)}_k=\sum_{i=1}^{k}x^{(0)}_i,\quad k=1,2,\cdots ,n xk(1)=i=1∑kxi(0),k=1,2,⋯,n有: x ( 1 ) = ( x 1 ( 1 ) , x 2 ( 1 ) , ⋯   , x n ( 1 ) ) x^{(1)}=(x^{(1)}_1,x^{(1)}_2,\cdots,x^{(1)}_n) x(1)=(x1(1),x2(1),⋯,xn(1)),称所得到的新数列 x ( 1 ) x^{(1)} x(1)为数列 x ( 0 ) x^{(0)} x(0)的1次累加生成的数列。
\qquad 通过累加数列得到的新数列,可以通过累减生成还原出原始数列,设原始数列 x ( 1 ) = ( x 1 ( 1 ) , x 2 ( 1 ) , ⋯   , x n ( 1 ) ) x^{(1)}=(x^{(1)}_1,x^{(1)}_2,\cdots,x^{(1)}_n) x(1)=(x1(1),x2(1),⋯,xn(1)),令:
x k ( 0 ) = ( x k ( 1 ) − x k − 1 ( 1 ) ) , k = 2 , 3 , ⋯ n x^{(0)}_k=(x^{(1)}_k-x^{(1)}_{k-1}),\quad k=2,3,\cdots n xk(0)=(xk(1)−xk−1(1)),k=2,3,⋯n称所得到的数列 x ( 0 ) x^{(0)} x(0)为 x ( 1 ) x^{(1)} x(1)的1次累减生成数列。
\qquad 令 z ( 1 ) z^{(1)} z(1)为 x ( 1 ) x^{(1)} x(1)的紧邻均值生成序列:
z ( 1 ) = ( z 2 ( 1 ) , z 3 ( 1 ) , ⋯   , z n ( 1 ) ) z^{(1)}=(z^{(1)}_2,z^{(1)}_3,\cdots,z^{(1)}_n) z(1)=(z2(1),z3(1),⋯,zn(1))其中,
z k ( 1 ) = α x k ( 1 ) + ( 1 − α ) x k − 1 ( 1 ) , k = 2 , 3 , ⋯   , n z^{(1)}_k=\alpha x^{(1)}_k+(1-\alpha)x^{(1)}_{k-1},\quad k=2,3,\cdots,n zk(1)=αxk(1)+(1−α)xk−1(1),k=2,3,⋯,n α \alpha α称为生成系数,当 α = 0.5 \alpha = 0.5 α=0.5时,则称该数列为均值生成数,也称为等权邻值生成数。
d k = x k ( 0 ) = x k ( 1 ) − x k − 1 ( 1 ) d_k=x^{(0)}_k=x^{(1)}_k-x^{(1)}_{k-1} dk=xk(0)=xk(1)−xk−1(1) 于是GM(1,1)的灰微分方程模型为:
d k + a z k ( 1 ) = b 或 x k ( 0 ) + a z k ( 1 ) = b ( 1 ) d_k+a z^{(1)}_k = b \quad或 \quad x^{(0)}_k+a z^{(1)}_k = b\qquad\qquad\qquad(1) dk+azk(1)=b或xk(0)+azk(1)=b(1)
其中, x k ( 0 ) x^{(0)}_k xk(0)称为灰导数, α \alpha α称为发展系数, z k ( 1 ) z^{(1)}_k zk(1)称为白化背景值, b b b称为灰作用量。将时刻 k = 2 , 3 , ⋯   , n k=2,3,\cdots,n k=2,3,⋯,n代入上式,有:
{ x 2 ( 0 ) + a z 2 ( 1 ) = b x 3 ( 0 ) + a z 3 ( 1 ) = b ⋯ x n ( 0 ) + a z n ( 1 ) = b \begin{cases}x^{(0)}_2+a z^{(1)}_2=b\\ x^{(0)}_3+a z^{(1)}_3=b\\ \qquad\quad\cdots\\ x^{(0)}_n+a z^{(1)}_n=b \end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧x2(0)+az2(1)=bx3(0)+az3(1)=b⋯xn(0)+azn(1)=b
引入矩阵向量记号:
μ = [ a b ] , Y = [ x 2 ( 0 ) x 3 ( 0 ) ⋮ x n ( 0 ) ] , B = [ − z 2 ( 1 ) 1 − z 3 ( 1 ) 1 ⋮ − z n ( 1 ) 1 ] \mu=\begin{bmatrix}a\\b\end{bmatrix} ,Y=\begin{bmatrix}x^{(0)}_2\\x^{(0)}_3\\ \vdots\\x^{(0)}_n\end{bmatrix},B=\begin{bmatrix}-z^{(1)}_2\quad 1\\-z^{(1)}_3\quad 1\\\vdots\\-z^{(1)}_n\quad 1 \end{bmatrix} μ=[ab],Y=⎣⎢⎢⎢⎢⎡x2(0)x3(0)⋮xn(0)⎦⎥⎥⎥⎥⎤,B=⎣⎢⎢⎢⎢⎡−z2(1)1−z3(1)1⋮−zn(1)1⎦⎥⎥⎥⎥⎤
于是GM(1,1)模型可以表示为 Y = B μ Y=B\mu Y=Bμ
那么现在的问题就是求 a a a和 b b b的值,可以用最小二乘法求它们的估计值为:
μ = [ a b ] = ( B T B ) − 1 B T Y \mu=\begin{bmatrix}a\\b\end{bmatrix}=(B^TB)^{-1}B^TY μ=[ab]=(BTB)−1BTY
\qquad 对于 G M ( 1 , 1 ) GM(1,1) GM(1,1)的灰微分方程。如果将时刻 k = 2 , 3 , ⋯   , n k=2,3,\cdots,n k=2,3,⋯,n视为连续变量 t t t,则之前的 x ( 1 ) x^(1) x(1)视为时间 t t t函数,于是灰导数 x ( 0 ) x^{(0)} x(0)变为连续函数的导数 d x t ( 1 ) d t \frac{dx^{(1)}_t}{dt} dtdxt(1),白化背景值 z k ( 1 ) z^{(1)}_k zk(1)对应于导数 x t ( 1 ) x^{(1)}_t xt(1)。于是GM(1,1)的灰微分方程对应于的白微分方程为:
d x t ( 1 ) d t + a x t ( 1 ) = b ( 2 ) \frac{dx^{(1)}_t}{dt}+ax^{(1)}_t=b\qquad\qquad\qquad(2) dtdxt(1)+axt(1)=b(2)
解为:
x t ( 1 ) = ( x 1 ( 0 ) − b a ) e − a ( t − 1 ) + b a x^{(1)}_t=(x^{(0)}_1-\frac{b}{a})e^{-a(t-1)}+\frac{b}{a} xt(1)=(x1(0)−ab)e−a(t−1)+ab
注1:以往的文献中并没有对这种从离散形式到连续形式的直接跳跃做出解释。
于是得到预测值:
x ^ k + 1 ( 1 ) = ( x 1 ( 0 ) − b a ) e − a k + b a , k = 1 , 2 , ⋯   , n − 1 \hat{x}^{(1)}_{k+1}=(x^{(0)}_1-\frac{b}{a})e^{-ak}+\frac{b}{a},\qquad k=1,2,\cdots,n-1 x^k+1(1)=(x1(0)−ab)e−ak+ab,k=1,2,⋯,n−1从而得到相应的预测值: x ^ k + 1 ( 0 ) = x ^ k + 1 ( 1 ) − x ^ k ( 1 ) , k = 1 , 2 , ⋯   , n − 1 \hat{x}^{(0)}_{k+1}=\hat{x}^{(1)}_{k+1}-\hat{x}^{(1)}_k,\qquad k=1,2,\cdots,n-1 x^k+1(0)=x^k+1(1)−x^k(1),k=1,2,⋯,n−1
注2:原始序列数据不一定要全部使用,相应建立的模型也会不同,即a和b不同。
注3:原始序列数据必须要等时间间隔、不间断。
ξ k = x k ( 0 ) − x ^ k ( 0 ) x k ( 0 ) , k = 1 , 2 , ⋯   , n \xi_k=\frac{x^{(0)}_k-\hat{x}^{(0)}_k}{x^{(0)}_k},\qquad k=1,2,\cdots,n ξk=xk(0)xk(0)−x^k(0),k=1,2,⋯,n如果对所有的 ∣ ξ k ∣ < 0.1 |\xi_k|<0.1 ∣ξk∣<0.1,则认为达到较高的要求;
如果对所有的 ∣ ξ k ∣ < 0.2 |\xi_k|<0.2 ∣ξk∣<0.2,则认为达到一般的要求。
根据前面计算出来的级比 λ k \lambda_k λk和发展系数 a a a,计算相应的级比偏差:
ρ k = 1 − 1 − 0.5 a 1 + 0.5 a λ k \rho_k=1-\frac{1-0.5a}{1+0.5a}\lambda_k ρk=1−1+0.5a1−0.5aλk若 ∣ ρ k ∣ < 0.1 |\rho_k|<0.1 ∣ρk∣<0.1,则认为达到较高要求;
若 ∣ ρ k ∣ < 0.2 |\rho_k|<0.2 ∣ρk∣<0.2,则认为达到一般要求;
北方某城市1986~1992年道路交通噪声平均声级数据见表1,为近年来交通噪声数据【dB(A)】
序号年份 | eq L |
---|---|
1986 | 71.1 |
1987 | 72.4 |
1988 | 72.4 |
1989 | 72.1 |
1990 | 71.4 |
1991 | 72.0 |
1992 | 71.6 |
第一步:级比检验
\quad 建立交通噪声平均声级数据时间序列: x ( 0 ) = ( x 1 ( 0 ) , x 2 ( 0 ) , ⋯   , x 7 ( 0 ) ) = ( 71.1 , 72.4 , 72.4 , 72.1 , 71.4 , 72.0 , 71.6 ) x^{(0)}=(x^{(0)}_1,x^{(0)}_2,\cdots,x^{(0)}_7)=(71.1,72.4,72.4,72.1,71.4,72.0,71.6) x(0)=(x1(0),x2(0),⋯,x7(0))=(71.1,72.4,72.4,72.1,71.4,72.0,71.6)
\quad (1)求级比 λ k \lambda_k λk: λ k = x k − 1 ( 0 ) x k ( 0 ) \lambda_k=\frac{x^{(0)}_{k-1}}{x^{(0)}_k} λk=xk(0)xk−1(0)
λ = ( λ 2 , λ 3 , ⋯   , λ 7 ) = ( 0.982 , 1 , 1.0042 , 1.0098 , 0.9917 , 1.0056 ) \lambda=(\lambda_2,\lambda_3,\cdots,\lambda_7)=(0.982,1,1.0042,1.0098,0.9917,1.0056) λ=(λ2,λ3,⋯,λ7)=(0.982,1,1.0042,1.0098,0.9917,1.0056)
\quad (2)级比判断: λ k ( 0 ) ∈ ( e − 2 n + 1 , e 2 n + 1 ) \lambda^{(0)}_k\in (e^{-\frac{2}{n+1}},e^{\frac{2}{n+1}}) λk(0)∈(e−n+12,en+12)
由于所有的 λ k ∈ [ 0.982 , 1.0098 ] , k = 2 , 3 , ⋯   , 7 \lambda_k\in[0.982,1.0098],k=2,3,\cdots,7 λk∈[0.982,1.0098],k=2,3,⋯,7则可以用 x ( 0 ) x^{(0)} x(0)进行GM(1,1)建模。
第二步:GM(1,1)建模
\quad (1)对原始数据 x ( 0 ) x^{(0)} x(0)作一次累加
x ( 1 ) = ( 71.1 , 143.5 , 215.9 , 288 , 359.4 , 431.4 , 503 ) x^{(1)}=(71.1,143.5,215.9,288,359.4,431.4,503) x(1)=(71.1,143.5,215.9,288,359.4,431.4,503)
\quad (2)构造数据矩阵B及数据向量Y
B = [ − 1 2 ( x 1 ( 1 ) + x 2 ( 1 ) ) 1 − 1 2 ( x 2 ( 1 ) + x 3 ( 1 ) ) 1 ⋮ − 1 2 ( x 6 ( 1 ) + x 7 ( 1 ) ) 1 ] , Y = [ x 2 ( 0 ) x 3 ( 0 ) ⋮ x 7 ( 0 ) ] B=\begin{bmatrix}-\frac{1}{2}(x^{(1)}_1+x^{(1)}_2)\qquad 1\\[1ex]-\frac{1}{2}(x^{(1)}_2+x^{(1)}_3)\qquad 1\\[1ex]\vdots\\[1ex]-\frac{1}{2}(x^{(1)}_6+x^{(1)}_7)\qquad 1\end{bmatrix},\quad Y=\begin{bmatrix}x^{(0)}_2\\[1ex]x^{(0)}_3\\[1ex]\vdots\\[1ex] x^{(0)}_7\end{bmatrix} B=⎣⎢⎢⎢⎢⎢⎢⎡−21(x1(1)+x2(1))1−21(x2(1)+x3(1))1⋮−21(x6(1)+x7(1))1⎦⎥⎥⎥⎥⎥⎥⎤,Y=⎣⎢⎢⎢⎢⎢⎢⎡x2(0)x3(0)⋮x7(0)⎦⎥⎥⎥⎥⎥⎥⎤
\quad (3)计算 μ \mu μ
μ = [ a b ] = ( B T B ) − 1 B T Y = [ 0.0023 72.6573 ] \mu=\begin{bmatrix}a\\b\end{bmatrix}=(B^TB)^{-1}B^TY=\begin{bmatrix}0.0023\\72.6573\end{bmatrix} μ=[ab]=(BTB)−1BTY=[0.002372.6573]
\quad (4)建立模型
d x ( 1 ) d t + 0.0023 x ( 1 ) = 72.6573 \frac{dx^{(1)}}{dt}+0.0023x^{(1)}=72.6573 dtdx(1)+0.0023x(1)=72.6573
\quad\qquad 求解得
x ^ k + 1 ( 1 ) = ( x 1 ( 0 ) − b a ) e − a k + b a = − 30929 e − 0.0023 k + 31000 \hat{x}^{(1)}_{k+1}=(x^{(0)}_1-\frac{b}{a})e^{-ak}+\frac{b}{a}=-30929e^{-0.0023k}+31000 x^k+1(1)=(x1(0)−ab)e−ak+ab=−30929e−0.0023k+31000
\quad (5)求生成数列值 x ^ k + 1 ( 1 ) \hat{x}^{(1)}_{k+1} x^k+1(1)及模型还原值 x ^ k + 1 ( 0 ) \hat{x}^{(0)}_{k+1} x^k+1(0),令: k = 1 , 2 , ⋯ , 6 k=1,2,\cdots ,6 k=1,2,⋯,6,由上面的时间响应函数可算得 x ^ ( 1 ) \hat{x}^{(1)} x^(1),其中取 x ^ 1 ( 1 ) = x ^ 1 ( 0 ) = x 1 ( 0 ) = 71.1 \hat{x}^{(1)}_1=\hat{x}^{(0)}_1=x^{(0)}_1=71.1 x^1(1)=x^1(0)=x1(0)=71.1由 x ^ k ( 0 ) = x ^ k ( 1 ) − x ^ k − 1 ( 1 ) \hat{x}^{(0)}_k=\hat{x}^{(1)}_k-\hat{x}^{(1)}_{k-1} x^k(0)=x^k(1)−x^k−1(1),取 k = 2 , 3 , ⋯   , 7 k=2,3,\cdots,7 k=2,3,⋯,7,得
x ^ ( 0 ) = ( x ^ 1 ( 0 ) , x ^ 2 ( 0 ) , ⋯ , x ^ 7 ( 0 ) ) = ( 71.1 , 72.4 , 72.2 , 72.1 , 71.9 , 71.7 , 71.6 ) \hat{x}^{(0)}=(\hat{x}^{(0)}_1,\hat{x}^{(0)}_2,\cdots,\hat{x}^{(0)}_7)=(71.1,72.4,72.2,72.1,71.9,71.7,71.6) x^(0)=(x^1(0),x^2(0),⋯,x^7(0))=(71.1,72.4,72.2,72.1,71.9,71.7,71.6)
第三步:模型检验
\quad 模型的各种检验指标的计算结果如下表:
年份 | 原始值 | 模型值 | 残差 | 相对误差 | 级比偏差 |
---|---|---|---|---|---|
1986 | 71.1 | 71.1 | |||
1987 | 72.4 | 72.4 | -0.0057 | 0.01% | 0.0023 |
1988 | 72.4 | 72.2 | 0.1638 | 0.23% | 0.0203 |
1989 | 72.1 | 72.1 | 0.0329 | 0.05% | -0018 |
1990 | 71.4 | 71.9 | -0.4984 | 0.7% | -0.0074 |
1991 | 72.0 | 71.7 | 0.2699 | 0.37% | 0.0107 |
1992 | 71.6 | 71.6 | 0.0378 | 0.05% | -0.0032 |
\quad 经验证,该模型的精度较高,可进行预测和预报。