灰色预测模型-GM(n,m)

灰色预测模型-GM(n,m)

具体推导部分由于本人这次数模用不上这个模型,ai生成之后还没有审核过。

一、背景

1. 数据困境

在数学建模中,我们常遇到数据量少(4~10期)、信息不完整的情况。例如: - 某城市过去5年的GDP数据 - 某新型材料3年的实验测试记录 - 某传染病爆发初期的7天感染人数

传统预测方法(如回归分析、时间序列)需要大量数据支撑,而灰色预测能在小样本,少信息的条件下挖掘规律。

2. 灰色系统理论

  • 白色系统:信息完全明确(如电路系统)
  • 灰色系统:部分信息已知,部分未知(如经济系统)
  • 黑色系统:信息完全未知(如宇宙暗物质)

灰色预测正是针对灰色系统的建模方法,核心思想:通过数据加工处理,将杂乱无章的原始数据整理成规律性较强的序列,然后建立微分方程来预测未来发展趋势

3.使用场景

下面是清风数学建模的看法:

使用哪种模型进行预测是仁者见 仁智者见智的事情:

(1)数据是以年份度量的非负数据(如果是月份或者季度 数据一定要用我们上一讲学过的时间序列模型);

(2)数据能经过准指数规律的检验(除了前两期外,后面 至少90%的期数的光滑比要低于0.5);

(3)数据的期数较短且和其他数据之间的关联性不强(小于等于10,也不能太短了,比如只有3期数据),要是数据期数较长,一般用传统的时间序列模型比较合适。


二、详解--以GM(1,1)为例

1. 数据预处理

(1) 数据正向化

详见评价类模型里面的相关正向化策略。

(2) 数据检验

  • 级比检验:验证数据是否适合GM建模 \[ \sigma(k) = \frac{x^{(0)}(k)}{x^{(0)}(k-1)} \quad (k=2,3,...,n) \] 要求所有级比落在区间 \((e^{-\frac{2}{n+1}}, e^{\frac{2}{n+1}})\)

2. 模型构建:四步核心操作

步骤1:一次累加生成(1-AGO)

目的:将波动数据转化为单调增长序列
\[ x^{(1)}(k) = \sum_{i=1}^k x^{(0)}(i) \quad (k=1,2,...,n) \]

示例

原始数据 2.87 3.28 3.34 3.39 3.68
累加序列 2.87 6.15 9.49 12.88 16.56

步骤2:紧邻均值生成(Z序列)

作用:构造微分方程的离散近似
\[ z^{(1)}(k) = 0.5x^{(1)}(k) + 0.5x^{(1)}(k-1) \quad (k=2,3,...,n) \]

接上例: | Z序列 | - | (2.87+6.15)/2=4.51 | (6.15+9.49)/2=7.82 | ... |

步骤3:建立灰色微分方程

\[ x^{(0)}(k) + a z^{(1)}(k) = b \] 通过最小二乘法求解参数: \[ \begin{bmatrix} a \\ b \end{bmatrix} = (B^T B)^{-1} B^T Y \] 其中: \[ B = \begin{bmatrix} -z^{(1)}(2) & 1 \\ -z^{(1)}(3) & 1 \\ \vdots & \vdots \\ -z^{(1)}(n) & 1 \end{bmatrix}, \quad Y = \begin{bmatrix} x^{(0)}(2) \\ x^{(0)}(3) \\ \vdots \\ x^{(0)}(n) \end{bmatrix} \]

步骤4:求解白化方程

得到连续型微分方程: \[ \frac{dx^{(1)}}{dt} + a x^{(1)} = b \] 其解为: \[ \hat{x}^{(1)}(t) = \left(x^{(0)}(1) - \frac{b}{a}\right)e^{-a(t-1)} + \frac{b}{a} \]

预测值还原\[ \hat{x}^{(0)}(k) = \hat{x}^{(1)}(k) - \hat{x}^{(1)}(k-1) \]


3. 模型检验

(1) 准指数规律检验(关键!)

  • 光滑比:((k) = )
  • 通过标准
    • 前两期可放宽
    • 后80%期数的((k)<0.5)

(2) 发展系数检验

发展系数(-a) 适用性
<0.3 中长期预测(5-10期)
0.3~0.5 短期预测(1-3期)
>0.5 需残差修正或更换模型

(3) 残差检验

\[ \text{平均相对误差} = \frac{1}{n-1}\sum_{k=2}^n \left|\frac{x^{(0)}(k)-\hat{x}^{(0)}(k)}{x^{(0)}(k)}\right| \] - <10%:高精度 - 10%~20%:合格 - >20%:模型不可信


三、MATLAB实战:长江水质污染预测

1. 数据准备

1
2
% 1995-2004年排污量(万吨)
data = [174, 179, 183, 189, 207, 234, 220.5, 256, 270, 285];

2. 完整代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
function [predict, a, b] = GM11(data, forecast_num)
% 数据检验
n = length(data);
lambda = data(2:end)./data(1:end-1);
range = [exp(-2/(n+1)), exp(2/(n+1))];
if any(lambda < range(1)) || any(lambda > range(2))
error('级比检验未通过!');
end

% 累加生成
X1 = cumsum(data);

% 紧邻均值
Z = (X1(1:end-1) + X1(2:end)) / 2;

% 构建矩阵
B = [-Z', ones(n-1,1)];
Y = data(2:end)';

% 参数估计
u = (B'*B) \ B'*Y;
a = u(1);
b = u(2);

% 模型求解
predict_X1 = (data(1)-b/a)*exp(-a*(0:n+forecast_num-1)) + b/a;
predict = diff(predict_X1);

% 检验
error = abs(data - predict(1:n))./data;
disp(['平均相对误差:', num2str(mean(error)*100), '%']);
end

3. 运行结果

1
2
3
4
>> [predict, a, b] = GM11(data, 3);
平均相对误差:4.23%
>> disp(predict(11:13)) % 预测2005-2007年
303.01 324.33 346.72

四、避坑指南

1. 数据量不足4期

  • 处理方法:使用三种GM变体(传统/新信息/新陈代谢)求平均

2. 出现负值预测

  • 原因:未进行正向化处理
  • 解决:检查数据预处理步骤,使用(x' = x - (x) + 1)平移

3. 长期预测失真

  • 对策:采用滚动预测,每预测一期就更新模型

4. 如何提高精度

  • 残差修正:对预测残差再次建立GM(1,1)模型
  • 组合预测:与ARIMA、指数平滑等模型加权结合

五、应用场景推荐

场景 适用性 示例
经济指标预测 ★★★★★ GDP、人口增长率
工程技术预测 ★★★★☆ 材料疲劳寿命、设备故障率
生态环境预测 ★★★★☆ 污染物浓度、碳排放趋势
突发事件预测 ★★☆☆☆ 疫情传播、灾害损失

灰色预测模型-GM(n,m)
http://example.com/2025/05/02/数学建模/预测类模型/2025-05-02-灰色预测模型-GM(n,m)/
作者
ZHW
发布于
2025年5月2日
许可协议