MCM520 ← 资料站首页 灰色预测 GM(1,1) · 深度手册 打开交互阅读器 →

灰色预测 GM(1,1) · 深度手册

分类:预测类 | 难度:★☆☆ 入门 | 编号:gm11

一、这是什么(一句话用途)

小样本(≥4)、单调序列的中短期预测

二、核心思想

GM(1,1) 是灰色系统理论的招牌模型。它的巧妙之处在于"累加生成"(Accumulating Generation Operator, AGO):把原本波动、不规则的原始序列做一次累加,得到一条单调、平滑得多的新序列,从而可以用一个简单的一阶灰微分方程去拟合。拟合完再"累减"(逆生成)还原回原尺度做预测。因为只用到一阶、单变量的线性关系,它对样本量要求极低(一般 4 个点即可),特别适合数据稀缺的中短期趋势预测。

三、数学原理与推导

原始序列 x(0)=(x(0)(1),…,x(0)(m))x^{(0)}=(x^{(0)}(1),\dots,x^{(0)}(m))。一次累加:

xk(1)=∑i=1kxi(0) x^{(1)}_k=\sum_{i=1}^k x^{(0)}_i

构造背景值(累加工均值)zk(1)=0.5(xk(1)+xk−1(1))z^{(1)}_k=0.5(x^{(1)}_k+x^{(1)}_{k-1}),k=2,…,mk=2,\dots,m。灰微分方程:

dx(1)dt+ax(1)=u \frac{dx^{(1)}}{dt}+a x^{(1)}=u

离散形式 xk(0)+azk(1)=ux^{(0)}_k+a z^{(1)}_k=u。最小二乘估计 [a,u]T=(BTB)−1BTY[a,u]^T=(B^T B)^{-1}B^T Y,其中

B=[−z2(1)1⋮⋮−zm(1)1],Y=[x2(0)⋮xm(0)] B=\begin{bmatrix}-z^{(1)}_2&1\\\vdots&\vdots\\-z^{(1)}_m&1\end{bmatrix},\qquad Y=\begin{bmatrix}x^{(0)}_2\\\vdots\\x^{(0)}_m\end{bmatrix}

时间响应(累加工况解):

x^k(1)=(x(0)(1)−ua)e−a(k−1)+ua \hat{x}^{(1)}_k=\left(x^{(0)}(1)-\frac{u}{a}\right)e^{-a(k-1)}+\frac{u}{a}

累减还原得预测值 x^k(0)=x^k(1)−x^k−1(1)\hat{x}^{(0)}_k=\hat{x}^{(1)}_k-\hat{x}^{(1)}_{k-1}。后验差比 C=S2/S1C=S_2/S_1 与小误差概率 pp 用于精度检验。

四、建模 / 求解步骤

  1. 原始序列 x0
  2. 一次累加得 x1
  3. 构造背景值
  4. 最小二乘求 a,u
  5. 累减还原得预测

五、关键公式速查

dx1/dt + a·x1 = u;预测 x0^(k+1)=(x0(1)−u/a)e^(−a k)+u/a

六、典型示例

某指标近 6 年值 → GM(1,1) → 预测未来 3 年。

完整算例(数字演示,照着算一遍)

场景:某产品前 5 年销量 (10,12,14,17,20) 万吨,预测第 6 年。

一次累加 AGO:(10,22,36,53,73)。灰微分方程参数 a=-0.18,u=9.2 → 时间响应 x^(1)(k+1)=(x0-u/a)e^{-ak}+u/a。

预测:第 6 年还原值 ≈ 23.4 万吨。

结论:GM(1,1) 适合小样本单调序列,本例拟合误差 <5%。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","gm11.csv"))
x0 = df["value"].to_numpy(dtype=float)
x1 = np.cumsum(x0)
z = 0.5*(x1[1:]+x1[:-1])
B = np.vstack([-z, np.ones_like(z)]).T
Y = x0[1:]
[a,u] = np.linalg.lstsq(B,Y,rcond=None)[0]
pred = lambda k: (x0[0]-u/a)*np.exp(-a*(k-1))+u/a
xhat = [pred(k) for k in range(1, len(x0)+4)]
print("参数 a=%.4f u=%.4f"%(a,u))
print("拟合+预测:", np.round(xhat,2))

配套文件:py_gm11.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% 灰色预测 GM(1,1) 示例(MATLAB/Octave)
df = readtable('..\datasets\gm11.csv');
x0 = table2array(df(:,2:end));
x1 = cumsum(x0); z = 0.5*(x1(2:end)+x1(1:end-1));
B = [-z, ones(length(z),1)];
Y = x0(2:end);
p = B\Y; a = p(1); u = p(2);
pred = @(k) (x0(1)-u/a)*exp(-a*(k-1))+u/a;
xhat = arrayfun(pred, 1:length(x0)+3);
disp(xhat)

配套文件:m_gm11.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

某指标 2014–2025 年共 12 期近似单调增长数据。用于 GM(1,1) 拟合与未来 3 期预测。

  • 字段:year, value
  • 行数:12 行
  • 下载:gm11.csv

十、常见误区与避坑清单

  • 数据 ≥ 4 且尽量单调
  • 非单调序列误差大
  • 只适合中短期

十一、结果怎么解读

a 为负且小 → 增长平稳;看后验差比检验精度。

十二、常与谁搭配

适用于数据少的灰色系统。

十三、论文写作技巧(怎么把它写进论文)

把 灰色预测 GM(1,1) 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

先说明你的数据具有时间 / 序列依赖,或需要由已知推断未知,因此采用预测类方法。交代输入特征与预测目标,并说明为何选 灰色预测 GM(1,1)(如非线性强、含季节性、小样本等),对比朴素法(如移动平均)点出优势。

2. 结果怎么写(图表与指标)

结果必须给「预测值 vs 真实值」对比曲线 + 误差指标表(MAE / RMSE / MAPE),最好附训练 / 验证分段。若有多个模型,用一张表横向对比误差,突出 灰色预测 GM(1,1) 更优。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 灰色预测 GM(1,1) 进行小样本(≥4)、单调序列的中短期预测。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 灰色预测 GM(1,1) to 小样本(≥4)、单调序列的中短期预测. Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

不可只报 R² 不看外推;时间序列要显式说明训练 / 测试切分方式,避免用未来信息泄漏(look-ahead bias)。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

由于日用电量具有明显的时间依赖与周期波动,本文采用 灰色预测 GM(1,1) 对未来 30 天负荷进行预测,以 RMSE=…、MAPE=… 的精度优于 ARIMA 基线,验证了模型对非线性趋势的捕捉能力。

Given the strong temporal dependence and periodic fluctuation of daily load, we employ 灰色预测 GM(1,1) to forecast the next 30 days, achieving RMSE=… and MAPE=… and outperforming the ARIMA baseline, which confirms its strength in capturing nonlinear trends.

十四、相关手册(延伸阅读)

(暂无直接关联手册,可前往手册库浏览其它算法)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。