前言
本文隶属于专栏《机器学习数学通关指南》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!
本专栏目录结构和参考文献请见《机器学习数学通关指南》
ima 知识库
知识库广场搜索:
知识库 | 创建人 |
---|---|
机器学习 | @Shockang |
机器学习数学基础 | @Shockang |
深度学习 | @Shockang |
正文
📊 平稳随机过程的数学基础
在机器学习和时间序列分析中,平稳性(Stationarity)是一个核心概念,它决定了我们如何处理和分析连续变化的数据。平稳性描述的是随机过程的统计特性在时间上的不变性,具体分为严平稳和宽平稳两种类型。
1️⃣ 严平稳(Strictly Stationary Process)🔒
数学定义:
若随机过程
X
(
t
)
,
t
∈
T
X(t), t \in T
X(t),t∈T 满足:对于任意正整数
n
n
n、任意时间点
t
1
,
t
2
,
…
,
t
n
∈
T
t_1, t_2, \ldots, t_n \in T
t1,t2,…,tn∈T 及任意时间平移
τ
\tau
τ,其
n
n
n 维随机变量
(
X
(
t
1
)
,
X
(
t
2
)
,
…
,
X
(
t
n
)
)
(X(t_1), X(t_2), \ldots, X(t_n))
(X(t1),X(t2),…,X(tn))
和
(
X
(
t
1
+
τ
)
,
X
(
t
2
+
τ
)
,
…
,
X
(
t
n
+
τ
)
)
(X(t_1+\tau), X(t_2+\tau), \ldots, X(t_n+\tau))
(X(t1+τ),X(t2+τ),…,X(tn+τ))
具有完全相同的分布函数,则称该过程为严平稳过程。
核心特征:
- 💯 所有统计特性(任意有限维分布)在时间平移下严格保持不变
- 🔄 任意维度的联合概率分布只取决于时间间隔,而非具体时间点
- 🌐 参数集 T T T 需满足平移条件(如 T = ( − ∞ , + ∞ ) T=(-\infty,+\infty) T=(−∞,+∞) 或满足平移要求的离散集合)
2️⃣ 宽平稳(Weakly Stationary Process)🔓
数学定义:
对于二阶矩过程
{
X
(
t
)
,
t
∈
T
}
\{X(t), t \in T\}
{X(t),t∈T},若满足以下条件:
-
均值恒定:
E [ X ( t ) ] = μ X E[X(t)] = \mu_X E[X(t)]=μX (与时间 t t t 无关的常数) -
自相关函数仅依赖时间差:
E [ X ( t ) X ( t + τ ) ] = R X ( τ ) E[X(t)X(t+\tau)] = R_X(\tau) E[X(t)X(t+τ)]=RX(τ) (仅与 τ \tau τ 有关,与具体时间 t t t 无关)
则称该过程为宽平稳过程(又称弱平稳或广义平稳)。
扩展概念:
当考虑两个过程
X
(
t
)
X(t)
X(t) 和
Y
(
t
)
Y(t)
Y(t) 时,若它们的互相关函数
R
X
Y
(
t
,
t
+
τ
)
=
E
[
X
(
t
)
Y
(
t
+
τ
)
]
=
R
X
Y
(
τ
)
R_{XY}(t, t+\tau) = E[X(t)Y(t+\tau)] = R_{XY}(\tau)
RXY(t,t+τ)=E[X(t)Y(t+τ)]=RXY(τ)
仅依赖
τ
\tau
τ,称两过程是联合平稳。
🔍 关键区别与联系
特性 | 严平稳 | 宽平稳 |
---|---|---|
约束条件 | 所有统计特性不随时间变化 | 仅约束一阶矩(均值)和二阶矩(自相关) |
验证难度 | 极高(需知道所有有限维分布) | 相对容易(只需验证均值和自协方差) |
实际应用 | 理论意义大于实践 | 广泛应用于实际分析中 |
互相关系 | 严平稳+有限二阶矩 → 宽平稳 | 宽平稳不一定严平稳 |
特殊情况 | 正态过程中,宽平稳等价于严平稳 | - |
⚖️ 平稳性判定的数学表示
严平稳是要求任意
n
n
n 阶矩都满足时间平移不变性:
E
[
X
n
(
t
)
]
=
E
[
X
n
(
t
+
τ
)
]
E[X^n(t)] = E[X^n(t+\tau)]
E[Xn(t)]=E[Xn(t+τ)]
宽平稳仅要求:
- 一阶矩: E [ X ( t ) ] = μ E[X(t)] = \mu E[X(t)]=μ
- 二阶矩: C o v ( X ( t ) , X ( t + τ ) ) = γ ( τ ) Cov(X(t), X(t+\tau)) = \gamma(\tau) Cov(X(t),X(t+τ))=γ(τ)
🛠️ 实际应用中的重要性
1. 时间序列分析与预测 📈
- ARIMA模型:依赖于数据的平稳性假设,非平稳数据需要通过差分等手段转换为平稳序列
- 平稳性检验:ADF检验、KPSS检验等统计方法用于验证时间序列的平稳性
- 季节性调整:移除数据中的周期性模式以达到平稳要求
# 平稳性检验示例代码
from statsmodels.tsa.stattools import adfuller
def check_stationarity(time_series):
result = adfuller(time_series)
print(f'ADF统计量: {result[0]}')
print(f'p值: {result[1]}')
print(f'临界值:')
for key, value in result[4].items():
print(f'\t{key}: {value}')
# 判断是否平稳
if result[1] <= 0.05:
print("数据是平稳的")
else:
print("数据不是平稳的")
2. 信号处理与频谱分析 🔊
-
功率谱密度:宽平稳过程的自相关函数与功率谱密度通过维纳-辛钦公式(Wiener-Khinchin theorem)联系:
S X ( f ) = ∫ − ∞ ∞ R X ( τ ) e − j 2 π f τ d τ S_X(f) = \int_{-\infty}^{\infty} R_X(\tau) e^{-j2\pi f\tau} d\tau SX(f)=∫−∞∞RX(τ)e−j2πfτdτ -
频谱估计:平稳假设使得我们可以通过有限样本估计信号的功率谱
3. 机器学习中的应用 🤖
- 特征工程:将非平稳时间序列转换为平稳特征,提高预测精度
- 神经网络输入:RNN和LSTM等模型在处理平稳数据时通常表现更好
- 异常检测:基于平稳性偏离程度的异常点识别
# 将非平稳时序转换为平稳序列
def make_stationary(series):
# 方法1:差分法
differenced = series.diff().dropna()
# 方法2:对数变换(对处理异方差有效)
log_transform = np.log(series)
# 方法3:移动平均去趋势
rolling_mean = series.rolling(window=12).mean()
detrended = series - rolling_mean
return differenced, log_transform, detrended
🧠 平稳性的直观理解
平稳过程可以直观理解为:
- 🌊 波浪的起伏可能不同,但整体"统计特性"保持不变
- 📱 信号的噪音特性不随时间改变
- 📊 数据的分布特性保持稳定,没有明显的上升或下降趋势
- 🔄 过程的均值、方差等统计量在任何时间窗口内基本一致
📝 典型非平稳案例与处理方法
-
趋势性非平稳:数据存在明显的上升或下降趋势
- 处理方法:差分、去趋势
-
季节性非平稳:数据具有周期性模式
- 处理方法:季节性差分、季节调整
-
异方差非平稳:方差随时间变化
- 处理方法:对数变换、Box-Cox变换
-
结构性变化:数据特性在某时间点发生突变
- 处理方法:分段建模、引入虚拟变量
🔮 总结与进阶思考
平稳性是时间序列分析的基石,但在实际应用中需注意:
- ⚠️ 完全平稳在实际中几乎不存在,我们追求的是"足够平稳"
- 🔄 深度学习模型(如LSTM)对非平稳性有一定程度的容忍,但预处理仍然重要
- 🌐 多变量时间序列中,联合平稳性比单变量更复杂
- 🧪 平稳性检验结果应结合可视化分析,避免机械应用
希望这篇文章能帮助你更好地理解机器学习和时间序列分析中的平稳性概念!如有问题,欢迎在评论区讨论。