MCM520 ← 资料站首页 马尔可夫链 · 深度手册 打开交互阅读器 →

马尔可夫链 · 深度手册

分类:预测类 | 难度:★★☆ 进阶 | 编号:markov

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

状态转移概率已知的动态预测(排名 / 占有率)

二、核心思想

马尔可夫链描述的是"无后效性"的随机过程:系统下一时刻处于什么状态,只取决于当前状态,与更早的历史无关("记忆只有一步")。一旦知道状态间的一步转移概率矩阵,就能预测任意 nn 步后的状态分布,甚至求出长期不变的"稳态分布"。在市占率演化、网页排名(PageRank 本质就是马尔可夫链)、排队系统中有大量应用。

三、数学原理与推导

设状态空间 S={1,…,N}S=\{1,\dots,N\},一步转移概率矩阵 P=(pij)P=(p_{ij}),pij≥0p_{ij}\ge0 且每行 ∑jpij=1\sum_j p_{ij}=1。nn 步转移矩阵 P(n)=PnP^{(n)}=P^n。

分布演化:若第 tt 期分布为行向量 πt\pi_t,则

πt+1=πtP \pi_{t+1}=\pi_t P

稳态分布 π\pi 满足不动点方程(与初始无关,若链不可约、非周期):

π=πP,∑iπi=1 \pi=\pi P,\qquad \sum_i\pi_i=1

即 (PT−I)π=0(P^T-I)\pi=0 配合归一化,解线性方程组得稳态占比。还可计算首次到达时间、吸收概率等。

四、建模 / 求解步骤

  1. 定义状态空间
  2. 统计转移频数 → 概率矩阵 P
  3. 初始分布 π0
  4. 迭代 π_{n+1}=π_n·P
  5. 收敛得稳态

五、关键公式速查

π_{k+1}=π_k · P;稳态 π=π·P

六、典型示例

品牌占有率随用户转移 → 预测下季份额。

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

场景:用户 状态 活跃/沉睡/流失,一步转移矩阵:

       活跃 沉睡 流失
活跃  0.7  0.2  0.1
沉睡  0.3  0.5  0.2
流失  0.1  0.1  0.8

初始 (0.6,0.3,0.1)。

两步后:(0.55, 0.27, 0.18);稳态 ≈(0.41, 0.23, 0.36)。

结论:流失稳态达 36%,需加强唤醒。

七、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","markov.csv"))
states = ["A","B","C"]
idx = {s:i for i,s in enumerate(states)}
n = len(states); P = np.zeros((n,n))
seq = df["state"].map(idx).to_numpy()
for i,j in zip(seq[:-1], seq[1:]):
    P[i,j] += 1
P = P/P.sum(1, keepdims=True)
pi = np.array([1,0,0]); 
for _ in range(20): pi = pi@P
print("转移矩阵:\n", np.round(P,3))
print("稳态分布:", np.round(pi,3))

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

八、MATLAB 实现示例

%% 马尔可夫链示例(MATLAB/Octave)
df = readtable('..\datasets\markov.csv');
seq = categorical(df.state, {'A','B','C'});
s = double(seq); n=3; P=zeros(n);
for k=1:length(s)-1, P(s(k),s(k+1))=P(s(k),s(k+1))+1; end
P = P./sum(P,2);
pi=[1,0,0];
for i=1:20, pi=pi*P; end
disp(P); disp(pi);

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

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

60 步状态序列(A/B/C 三态)。用于统计一步转移矩阵、迭代求稳态分布。

  • 字段:step, state
  • 行数:60 行
  • 下载:markov.csv

十、常见误区与避坑清单

  • 需'无后效性'假设
  • 转移矩阵每行和为 1
  • 初值影响短期

十一、结果怎么解读

稳态分布即长期占比。

十二、常与谁搭配

与蒙特卡洛结合做仿真。

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

把 马尔可夫链 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

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

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

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

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

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

  • 中文模板:针对<问题>,本文采用 马尔可夫链 进行状态转移概率已知的动态预测(排名 / 占有率)。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt 马尔可夫链 to 状态转移概率已知的动态预测(排名 / 占有率). Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

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

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

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

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

Given the strong temporal dependence and periodic fluctuation of daily load, we employ 马尔可夫链 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 双版本示例与可下载练手数据集。