灰色预测DGM(1,1)模型是灰色系统理论中最基础也最实用的预测模型之一。我第一次接触这个模型是在2013年参与一个电力负荷预测项目时,当时需要处理的数据量少、信息不完整,传统统计方法效果不佳,而DGM(1,1)却给出了令人惊喜的预测精度。这个模型特别适合处理"小样本、贫信息"的不确定性系统,通过数据生成和微分方程建模,能够从有限数据中挖掘潜在规律。
DGM(1,1)中的两个"1"分别代表一阶微分方程和一个变量,其核心思想是通过累加生成序列(AGO)将原始随机数据转化为规律性更强的序列,然后建立微分方程模型进行预测,最后通过累减生成(IAGO)还原预测结果。这种"生成变换+微分方程+逆变换"的建模机制,使得模型对数据分布要求低,且计算量适中,特别适合工程现场的快速预测需求。
关键提示:DGM(1,1)的预测精度与数据的光滑比密切相关,当原始序列的光滑比小于0.5时,模型预测效果最佳。建议建模前先用公式ρ(k)=x⁽⁰⁾(k)/∑x⁽⁰⁾(i)(i=1到k-1)计算序列光滑比。
原始非负序列X⁽⁰⁾=(x⁽⁰⁾(1),x⁽⁰⁾(2),...,x⁽⁰⁾(n))经过一次累加生成(1-AGO)得到新序列X⁽¹⁾:
x⁽¹⁾(k)=∑x⁽⁰⁾(i)(i=1到k),k=1,2,...,n
这个步骤相当于对数据进行"积分"处理,能有效弱化随机性。我在处理某风机故障率数据时发现,原始序列变异系数为0.68,经过一次累加后降至0.21,序列平稳性显著提升。
对X⁽¹⁾建立白化微分方程:
dx⁽¹⁾/dt + ax⁽¹⁾ = b
其中a为发展系数,b为灰色作用量。通过最小二乘法估计参数:
[â,b̂]ᵀ=(BᵀB)⁻¹BᵀY
其中B和Y矩阵构造如下:
B = [ -z⁽¹⁾(2) 1
-z⁽¹⁾(3) 1
...
-z⁽¹⁾(n) 1 ]
Y = [ x⁽⁰⁾(2), x⁽⁰⁾(3), ..., x⁽⁰⁾(n) ]ᵀ
z⁽¹⁾(k)为背景值,通常取均值生成:z⁽¹⁾(k)=0.5x⁽¹⁾(k)+0.5x⁽¹⁾(k-1)
解微分方程得到时间响应函数:
x̂⁽¹⁾(k+1)=(x⁽⁰⁾(1)-b/a)e⁻ᵃᵏ + b/a
然后通过累减还原得到预测值:
x̂⁽⁰⁾(k+1)=x̂⁽¹⁾(k+1)-x̂⁽¹⁾(k)
在实际项目中,我发现当|a|>0.3时,建议采用改进的背景值构造方法,如将权重系数从0.5调整为自适应参数,可提升长期预测精度约15%。
python复制import numpy as np
class DGM11:
def __init__(self, data):
self.original = np.array(data)
self.n = len(data)
def fit(self):
# 1-AGO
self.ago = np.cumsum(self.original)
# 构造B,Y矩阵
B = np.zeros((self.n-1, 2))
Y = np.zeros((self.n-1, 1))
for i in range(1, self.n):
B[i-1, 0] = -0.5*(self.ago[i] + self.ago[i-1])
B[i-1, 1] = 1
Y[i-1, 0] = self.original[i]
# 参数估计
BTB_inv = np.linalg.inv(np.dot(B.T, B))
self.a, self.b = np.dot(BTB_inv, np.dot(B.T, Y)).flatten()
# 计算拟合值
self.fit_values = [self.original[0]]
for k in range(1, self.n):
x1_k = (self.original[0] - self.b/self.a)*np.exp(-self.a*k) + self.b/self.a
x1_k_1 = (self.original[0] - self.b/self.a)*np.exp(-self.a*(k-1)) + self.b/self.a
self.fit_values.append(x1_k - x1_k_1)
return self
def predict(self, steps):
predictions = []
for k in range(self.n, self.n + steps):
x1_k = (self.original[0] - self.b/self.a)*np.exp(-self.a*k) + self.b/self.a
x1_k_1 = (self.original[0] - self.b/self.a)*np.exp(-self.a*(k-1)) + self.b/self.a
predictions.append(x1_k - x1_k_1)
return predictions
发展系数a:
灰色作用量b:
初始条件x⁽⁰⁾(1):
| 检验指标 | 计算公式 | 合格标准 | 工程意义 |
|---|---|---|---|
| 平均相对误差 | Δₐᵥ=1/n∑ | ε(k) | |
| 后验差比值 | C=S₂/S₁ | <0.35 | 预测稳定性 |
| 小误差概率 | P=P{ | ε(k)-ε̄ | <0.6745S₁} |
| 关联度 | γ=1/n∑ξ(k) | >0.6 | 曲线相似度 |
其中:
振荡序列处理:
异常值影响:
长期预测漂移:
某变电站日负荷数据(单位:MW):
[120, 135, 148, 160, 175]
建模过程:
实战技巧:当数据呈指数增长时,先取对数再建模可提升精度20%以上。
滚动轴承振动加速度数据(单位:m/s²):
[0.12,0.15,0.18,0.23,0.29,0.37]
预测步骤:
改进方案: