马尔可夫链 · 深度手册
分类:预测类 | 难度:★★☆ 进阶 | 编号:
markov
一、这是什么(一句话用途)
状态转移概率已知的动态预测(排名 / 占有率)
二、核心思想
马尔可夫链描述的是"无后效性"的随机过程:系统下一时刻处于什么状态,只取决于当前状态,与更早的历史无关("记忆只有一步")。一旦知道状态间的一步转移概率矩阵,就能预测任意 步后的状态分布,甚至求出长期不变的"稳态分布"。在市占率演化、网页排名(PageRank 本质就是马尔可夫链)、排队系统中有大量应用。
三、数学原理与推导
设状态空间 ,一步转移概率矩阵 , 且每行 。 步转移矩阵 。
分布演化:若第 期分布为行向量 ,则
稳态分布 满足不动点方程(与初始无关,若链不可约、非周期):
即 配合归一化,解线性方程组得稳态占比。还可计算首次到达时间、吸收概率等。
四、建模 / 求解步骤
- 定义状态空间
- 统计转移频数 → 概率矩阵 P
- 初始分布 π0
- 迭代 π_{n+1}=π_n·P
- 收敛得稳态
五、关键公式速查
π_{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 双版本示例与可下载练手数据集。