PyFlux 库功能详解
PyFlux 是一个专为 概率时间序列分析 设计的 Python 库,它将现代统计模型与贝叶斯推断框架相结合,提供了从数据预处理到模型诊断的完整工作流程。以下是该库所有核心功能的系统性介绍。
一、核心设计理念
PyFlux 的设计基于三个支柱: - 贝叶斯优先:默认使用 MCMC 等贝叶斯方法进行参数估计,提供完整的后验分布而非点估计 - 状态空间统一:多数模型可表示为状态空间形式,统一处理观测方程和状态方程 - 模块化架构:模型构建、参数估计、预测和诊断相互独立,可灵活组合
二、支持的模型体系(Model Families)
1. ARIMA 族模型
pf.ARIMA(data, ar=2, ma=1, integ=1) # ARIMA(2,1,1)
- 功能:自回归积分滑动平均模型,处理非平稳序列
- 变体:支持 SARIMA(季节性 ARIMA)和 ARIMAX(含外生变量)
- 特点:可指定创新项分布(正态、t 分布等)
2. GARCH 族波动率模型
pf.GARCH(data, p=1, q=1, dist='t') # GARCH(1,1) with Student-t
- 功能:建模条件异方差,适用于金融时间序列
- 变体:EGARCH、GARCH-in-Mean、Leverage GARCH
- 优势:直接预测波动率,支持厚尾分布
3. 向量自回归(VAR)
pf.VAR(data, lags=2) # 2阶滞后VAR模型
- 功能:多变量时间序列建模,捕捉变量间动态关系
- 扩展:支持 VARMAX(含外生变量)和结构 VAR
- 应用:宏观经济冲击分析、格兰杰因果检验
4. 动态线性模型(DLM)/状态空间模型
pf.LinearStateSpaceForm(k_states=1) # 线性高斯状态空间
- 核心:用户自定义观测矩阵 Z_t 和转移矩阵 T_t
- 类型:局部水平模型、局部趋势模型、季节分解模型
- 滤波:内置卡尔曼滤波和平滑算法
5. 隐马尔可夫模型(HMM)
pf.HMM(data, k_regimes=2) # 两状态HMM
- 功能:检测时序结构突变和未观测状态
- 算法:前向-后向算法和维特比算法
- 应用:市场状态识别、异常行为检测
6. 贝叶斯结构时间序列(BST)
pf.BSTS(data) # 结构时间序列
- 特点:自动分解趋势、季节性和回归效应
- 方法:使用 spike-and-slab 先验进行变量选择
- 适用:营销组合建模、政策影响评估
7. 随机波动率(Stochastic Volatility)
pf.SV(data) # 随机波动率模型
- 优势:波动率本身作为隐状态变量演化
- 对比:比 GARCH 更灵活,能捕捉长期记忆性
- 推断:必须使用贝叶斯 MCMC
8. 动态因子模型(DFM)
pf.DFM(data, k_factors=2) # 两因子动态因子模型
- 功能:从高维数据中提取少量潜在因子
- 应用:宏观经济指标降维、资产定价模型
9. 自回归条件持续时间(ACD)
- 场景:不规则间隔交易数据(高频金融)
- 特点:直接对持续时间建模,而非收益率
三、参数估计引擎
PyFlux 提供四种估计方法,调用方式统一为 model.fit(method=...):
| 方法 | 适用场景 | 特点 |
|---|---|---|
| MLE (最大似然估计) | 大样本、经典推断 | 速度快,提供标准误 |
| MAP (最大后验估计) | 需要引入先验知识 | 点估计,比 MLE 更稳定 |
| MCMC (马尔可夫链蒙特卡洛) | 贝叶斯推断、复杂后验 | 默认方法,提供完整后验样本 |
| VI (变分推断) | 大规模数据、快速近似 | 比 MCMC 快,牺牲一定精度 |
关键特性: - 自动调参:内置 NUTS、HMC 等高级采样器 - 收敛诊断:自动计算 R-hat、有效样本量等 - 先验定制:支持用户自定义参数先验分布
四、预测与不确定性量化
预测功能
forecast = model.predict(h=10, intervals=True)
- 步长:支持任意步长预测(
h参数) - 类型:点预测、区间预测、完整预测分布
- 在线更新:可增量更新模型而不必重新训练
不确定性处理
- 预测区间:自动计算置信区间/可信区间
- 预测密度:返回完整概率分布对象
- 回测:内置滚动窗口预测验证功能
五、模型诊断与评估工具
1. 残差分析
model.plot_resid() # 残差时序图、ACF 图
residuals = model.results.resid # 获取残差数组
2. 信息准则
- 自动计算 AIC、BIC、HQIC
- 适用于模型比较和选择
3. 后验诊断(贝叶斯模型)
model.plot_z() # 状态变量轨迹图
model.plot_fit() # 拟合 vs 观测对比
4. 收敛诊断
- 轨迹图(trace plot)
- 自相关图(autocorrelation plot)
- 后验分布直方图
六、数据处理与预处理
1. 数据格式支持
- 输入:pandas DataFrame/Series、NumPy 数组、CSV 文件
- 时间索引:自动识别 DatetimeIndex,支持不规则时间戳
- 缺失值:内置插值和状态空间处理机制
2. 转换工具
returns = pf.to_returns(prices) # 价格转收益率
levels = pf.to_levels(returns) # 收益率转价格
3. 特征工程
- 滞后项生成:自动创建滞后变量
- 季节项:支持虚拟变量和傅里叶项
- 外生变量:所有模型均可加入 X 矩阵
七、可视化系统
PyFlux 提供一键式绘图功能,所有模型均继承以下方法:
| 方法 | 功能 |
|---|---|
model.plot_fit() |
拟合值 vs 观测值 |
model.plot_predict(h=20) |
预测路径与区间 |
model.plot_resid() |
残差诊断四联图 |
model.plot_z() |
状态变量可视化 |
model.plot_diagnostics() |
贝叶斯诊断面板 |
风格:基于 Matplotlib,支持 seaborn 样式定制
八、高级功能
1. 概率编程集成
- 底层基于 PyMC3/Stan,可直接访问张量操作
- 支持自定义似然函数和先验分布
2. 模型组合与集成
- 贝叶斯模型平均(BMA)
- stacking 多模型预测
- 在线模型权重更新
3. 变分推断加速
- ADVI 算法用于大规模数据
- 提供
fit(method='BBVI')选项
4. 高维数据处理
- 动态因子模型降维
- 支持稀疏 VAR(Lasso 先验)
九、与其他库的对比优势
| 库 | 优势 | PyFlux 相对优势 |
|---|---|---|
| statsmodels | 经典统计检验完善 | 贝叶斯推断、状态空间更灵活 |
| ** Prophet ** | 自动化季节分解 | 支持波动率、VAR 等复杂模型 |
| ** TensorFlow Probability ** | 深度学习集成 | 更简洁的 API、开箱即用 |
| ** PyMC3 ** | 通用概率编程 | 预建时间序列模型、无需手写采样器 |
** 总结优势 : - ** 模型灵活性:可自定义状态空间 - 贝叶斯框架:不确定性量化更严谨 - 接口简洁:比 PyMC3 更易上手
十、应用场景与最佳实践
1. 金融领域
- 波动率预测:GARCH + 随机波动率
- 资产配置:动态因子模型 + VAR
- 风险价值:通过后验模拟计算 VaR
2. 运营与物联网
- 异常检测:HMM 识别设备状态
- 需求预测:BSTS 处理促销和季节性
- 高频数据:ACD 模型处理事件驱动数据
3. 宏观经济
- 政策分析:结构 VAR 脉冲响应
- 领先指标:动态因子提取摘要统计
- 预测组合:贝叶斯模型平均
十一、使用限制与注意事项
- 性能瓶颈:MCMC 在大数据上较慢,建议先用 VI 或 MLE
- 内存占用:后验样本存储开销大,长序列需切片处理
- 模型选择:信息准则对贝叶斯模型仅供参考,需结合后验预测检查
- 先验敏感性:弱信息先验可能导致不收敛,需领域知识调整
- 依赖管理:需单独安装 Stan,Windows 用户可能遇到编译问题
十二、快速入门示例
import pyflux as pf
import pandas as pd
# 1. 加载数据
data = pd.read_csv('sales.csv', parse_dates=['date'], index_col='date')
ts = data['sales']
# 2. 构建模型
model = pf.BSTS(ts, trend=True, seasonal=12) # 月度季节数据
# 3. 贝叶斯估计
res = model.fit(method='MCMC', iterations=5000)
# 4. 诊断
model.plot_diagnostics()
# 5. 预测
forecast = model.predict(h=6, intervals=True)
model.plot_predict(h=12, past_values=24)
总结:PyFlux 的核心价值在于将前沿的概率时间序列模型封装为生产级工具,其最大特色是贝叶斯推断与状态空间的深度融合,特别适合需要不确定性量化和结构解释的专业分析场景。