正在加载中...

展开本页目录
算法教程GreyMarkov-灰色 Markov 修正

GreyMarkov-灰色 Markov 修正

No.111 · 在线教程

GreyMarkov-灰色 Markov 修正 的真实核心主要位于:

GreyMarkov-灰色 Markov 修正

1. 方法概述

GreyMarkov-灰色 Markov 修正 的真实核心主要位于:

  • core/calculator.py

从当前源码看,这个模块不是单独的 Markov 预测,也不是单独的 GM(1,1),而是分成两层:

  1. 先用 GM(1,1) 给出基准拟合与预测;
  2. 再对“实际值 / GM 拟合值”的比值序列建立状态转移矩阵;
  3. 用状态中心的期望比值对 GM 结果做 Markov 修正。

因此它的核心思想是:用灰色模型负责主趋势,用 Markov 负责波动修正。

2. GM(1,1) 基准层

2.1 AGO 与背景值

设原始序列为

$$ x^{(0)}=\big(x^{(0)}(1),x^{(0)}(2),\ldots,x^{(0)}(n)\big) \tag{1} $$

代码先做一次 AGO:

$$ x^{(1)}(k)=\sum_{t=1}^{k}x^{(0)}(t) \tag{2} $$

并用参数 gm_alpha 构造背景值:

$$ z^{(1)}(k)=\alpha x^{(1)}(k)+(1-\alpha)x^{(1)}(k-1), \qquad k=2,\ldots,n \tag{3} $$

2.2 GM(1,1) 参数估计

回归矩阵为

$$ B= \begin{bmatrix} -z^{(1)}(2) & 1\\ \vdots & \vdots\\ -z^{(1)}(n) & 1 \end{bmatrix}, \qquad Y= \begin{bmatrix} x^{(0)}(2)\\ \vdots\\ x^{(0)}(n) \end{bmatrix} \tag{4} $$

估计得到 \((a,b)\) 后,基准 GM 拟合序列记为 \(\hat x_{GM}^{(0)}(k)\)。

3. Markov 修正层

3.1 比值序列

代码不是直接对残差建链,而是对“实际 / 拟合”的比值建状态:

$$ r_k=\frac{x^{(0)}(k)}{\hat x_{GM}^{(0)}(k)} \tag{5} $$

3.2 状态划分

项目支持两种分箱方式:

  1. equal
  2. quantile

将比值序列划分为 \(m\) 个状态区间:

$$ S_1,S_2,\ldots,S_m \tag{6} $$

每个状态的中心值为

$$ c_i=\frac{\text{edge}_{i-1}+\text{edge}_i}{2} \tag{7} $$

3.3 状态转移矩阵

然后统计一步转移概率:

$$ P=(p_{ij})_{m\times m}, \qquad p_{ij}=P(S_{t+1}=S_j\mid S_t=S_i) \tag{8} $$

这就是导出里的 TransitionMatrix / MarkovMatrix

4. 拟合修正与未来预测

4.1 历史拟合修正

若启用 Markov 修正,则对每一时刻根据前一状态的转移概率向量求期望比值:

$$ \mathbb{E}(r_t\mid S_{t-1})=\sum_{j=1}^{m}p_{s_{t-1},j}c_j \tag{9} $$

再修正 GM 拟合值:

$$ \hat x_{MK}^{(0)}(t)=\hat x_{GM}^{(0)}(t)\cdot \mathbb{E}(r_t\mid S_{t-1}) \tag{10} $$

4.2 未来预测修正

未来预测时,代码从最后一个历史状态出发,迭代传播状态概率,再取中心期望:

$$ \pi_{t+h}=\pi_{t+h-1}P \tag{11} $$

$$ \mathbb{E}(r_{t+h})=\pi_{t+h}\cdot c \tag{12} $$

最终预测值为

$$ \hat x_{MK}^{(0)}(t+h)=\hat x_{GM}^{(0)}(t+h)\cdot \mathbb{E}(r_{t+h}) \tag{13} $$

5. 误差诊断

代码同时对 GM 拟合残差和 Markov 修正后残差计算后验差比、小误差概率与级比检验。其中级比检验使用

$$ \lambda(k)=\frac{x^{(0)}(k-1)}{x^{(0)}(k)} \tag{14} $$

并和区间

$$ \left[e^{-2/(n+1)},\ e^{2/(n+1)}\right] \tag{15} $$

进行比较。

6. 输出结果与论文应用

6.1 Excel 工作表

当前项目会导出:

  • Parameters
  • RawData
  • Processed
  • AGO
  • B
  • Y
  • Z
  • Fitted
  • Residuals
  • Forecast
  • Diagnostics
  • MarkovMatrix
  • TransitionMatrix
  • StateEdges
  • StateCenters
  • StateBounds
  • StateSeries
  • LevelRatio
  • Charts

6.2 论文可直接使用的表述

可以写成:

  • 首先采用 GM(1,1) 描述序列主趋势;
  • 再对实际值与 GM 拟合值之比构造状态序列;
  • 根据状态转移矩阵估计未来状态期望比值;
  • 最终用该期望比值修正 GM 预测结果。

7. 实现说明与注意事项

7.1 修正对象是“比值”,不是“加性残差”

这是本模块最关键的工程口径。它不是

$$ \hat x=\hat x_{GM}+e \tag{16} $$

而是乘性修正

$$ \hat x=\hat x_{GM}\times \text{期望比值} \tag{17} $$

7.2 use_markov=False 时可退化为纯 GM(1,1)

代码保留了开关,意味着用户可以直接比较“是否使用 Markov 修正”对结果的影响。

7.3 状态划分方式会显著影响结果

equalquantile 会生成不同的状态边界,进而改变转移矩阵与未来修正系数。因此论文中若使用该模块,建议把状态划分方式写清楚。

8. 论文写作建议

论文中建议把该模型写成“GM(1,1) 趋势预测 + Markov 状态修正”的两阶段方法。结果部分最好分别给出 GM 基础拟合结果和 Markov 修正后结果,并列展示 TransitionMatrix、状态区间表以及最终预测曲线。若要论证修正有效性,可以把修正前后的 \(C\)、\(P\) 或 RMSE 放到同一张比较表中。

9. 单篇终审补充

9.1 图题与表题对齐建议

这一模块的真实导出比普通灰色预测更完整,论文终稿建议直接按软件工作簿中的实际 sheet 名来写表题。当前实现会输出:

  • Parameters
  • RawData
  • Processed
  • AGO
  • B
  • Y
  • Z
  • Fitted
  • Residuals
  • Forecast
  • Diagnostics
  • MarkovMatrix
  • TransitionMatrix
  • StateEdges
  • StateCenters
  • StateBounds
  • StateSeries
  • LevelRatio
  • Charts

其中建议把 Forecast 作为主预测表,把 TransitionMatrixStateBoundsStateSeries 作为 Markov 修正链路的证据表。需要注意的是,程序同时写出 MarkovMatrixTransitionMatrix 两个等价页名,它们用于兼容不同口径,论文中保留一个名称即可,但应以你最终引用的结果工作簿为准。

图方面,当前实现的真实文件名是结果目录 charts/ 子目录下的:

  • forecast_curve.png
  • residuals.png

因此图题建议写为“Grey-Markov 拟合与预测曲线图”“Grey-Markov 残差图”,不要写成不存在的 series.png 或“状态转移图”,因为程序当前并没有单独输出状态转移可视化图片。

9.2 终审说明

这篇文档最容易在论文里写错两件事。第一,Markov 修正对象是“实际值与 GM 拟合值的比值序列”,因此 StateSeries 里记录的是比值与状态,而不是残差状态;第二,Processed 页只是为了兼容导出规范而生成的汇总页,它把 AGO、拟合值和残差信息拼接到一个总览表里,并不意味着理论上存在一个独立的“预处理变换矩阵”。

另外,当前 repro 脚本会把原始输入复制到结果目录下的 repro_inputs/,并以相对路径再次执行,因此论文或报告里若写“软件支持复现实验”,最好明确成“结果目录包含 repro_inputs/repro_*.py 和重建输出文件”。不要写成“仅保留公式与参数即可完全重建”,因为真实软件复现实跑依赖该目录中的输入副本。

9.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法3/灰色系统与模糊理论/GreyMarkov-灰色 Markov 修正,本次采用的代表性结果目录为 具体的算法3/灰色系统与模糊理论/GreyMarkov-灰色 Markov 修正/results/GreyMarkov-灰色 Markov 修正分析结果_20260329_171545

该目录里同时存在一份主结果工作簿和一份 repro 再生产物工作簿:

  • GreyMarkov结果_20260329_171545.xlsx
  • GreyMarkov_repro_output_20260329_171545.xlsx

两者实测工作表一致,均包含:

  • Parameters
  • RawData
  • Processed
  • AGO
  • B
  • Y
  • Z
  • Fitted
  • Residuals
  • Forecast
  • Diagnostics
  • MarkovMatrix
  • TransitionMatrix
  • StateEdges
  • StateCenters
  • StateBounds
  • StateSeries
  • LevelRatio
  • Charts

因此这篇文档必须把主结果与 repro 输出拆开描述。当前目录真实图文件位于 charts/ 子目录:

  • charts/forecast_curve.png
  • charts/residuals.png

复现实物方面,该目录实际包含:

  • repro_inputs/greymarkov_ui_input.csv
  • repro_inputs/greymarkov_ui_input_1774775745.csv
  • repro_inputs/greymarkov_ui_input_1774775745_20260329_171546.csv
  • repro_20260329_171545.py
  • repro_20260329_171546.py

这里需要如实说明一个真实现象:该目录已经同时保留了较新的相对路径候选文件和旧的绝对路径遗留口径。repro_20260329_171545.pySRC_CANDIDATES 中仍残留一条 pytest 临时绝对路径候选,而 repro_20260329_171546.pyPARAMS['file_path'] 里也仍保留了一条指向结果目录内部旧副本的绝对路径字符串。与此同时,这两个脚本的首选 SRC_CANDIDATES 又已经指向 repro_inputs/...。因此这一篇不能美化成“目录已完全纯相对路径化”,更准确的口径应是“当前目录以 repro_inputs/... 为主,但仍保留部分旧绝对路径兼容遗留”。

8. 软件实现核查补充(2026-07)

  • 当前主结果目录应写作 具体的算法3/灰色系统与模糊理论/GreyMarkov-灰色 Markov 修正/results/GreyMarkov-灰色 Markov 修正分析结果_20260329_171545
  • 正文应围绕 RawDataProcessedFittedForecastTransitionMatrixStateBoundsStateSeriesMarkovMatrixCharts 来写。
  • 图证应对应 forecast_curve.pngresiduals.png,并把 GM 主预测和 Markov 状态修正分开说明。
  • 复现脚本应按 repro_20260329_171545.py / repro_20260329_171546.py + repro_inputs/... 的口径说明,且要如实保留旧绝对路径兼容遗留。