Project Icon

pydlm

基于Python的贝叶斯时间序列建模库

pydlm是一个Python时间序列建模库,基于贝叶斯动态线性模型。它提供了快速的模型拟合和推断,包含趋势、季节性和动态回归等灵活组件。支持前向过滤、后向平滑和长期预测,并具有简洁的API。pydlm适用于构建复杂时间序列模型,进行数据分析和预测。

PyDLM wwrechard 覆盖率状态

欢迎使用pydlm,这是一个灵活的Python时间序列建模库。该库基于贝叶斯动态线性模型(Harrison和West,1999),并针对快速模型拟合和推断进行了优化。

更新

  • 当前GitHub版本的更新:

    • 修复了coveralls,使所有PR合并都会报告覆盖率变化。
    • 使用sphinx更新了pydlm.github.io的文档。在类参考中公开了更完整的API。
    • 简化了longSeason组件的实现,并将longSeasonautoReg变为无状态。
    • dlmAccessModule添加了测试,并修复了一些测试未被coveralls运行的问题。
  • PyPI上发布了0.1.1.13版本。

    • 将所有不必要的print()迁移到默认的Python日志操作,如logging.infologging.warninglogging.critical
    • 用户现在可以设置模型日志级别以抑制模型运行期间不必要的信息。
    • 仅打印警告信息的示例:
        ...
        my_model.setLoggingLevel('WARNING')
        my_model.fit()
    
    • 通过pip-compilerequirements.txt更新了包版本管理。

安装

你可以通过pypi获取软件包(当前版本0.1.1.11):

  $ pip install pydlm

你也可以从github获取最新版本:

  $ git clone git@github.com:wwrechard/pydlm.git pydlm
  $ cd pydlm
  $ pip install pip-tools
  $ pip install -r requirements.txt
  $ pip install -e . --no-deps

pydlm依赖以下模块:

  • numpy(核心功能)
  • matplotlib(绘图结果)
  • Sphinx(生成文档)
  • unittest(测试)

谷歌数据科学博文示例

我们使用谷歌数据科学博文中的示例来展示如何使用pydlm分析真实世界数据。代码和数据位于examples/unemployment_insurance/...目录下。数据集包含2004-2012年期间每周初次申请失业保险的数量,可从R包bsts(一个流行的R时间序列建模包)获取。原始数据如下所示(左图)

我们可以看到数据中存在强烈的年度模式和一些局部趋势。

一个简单模型

遵循谷歌的博文,我们首先构建一个仅包含局部线性趋势和季节性组件的简单模型。
from pydlm import dlm, trend, seasonality
# 线性趋势
linear_trend = trend(degree=1, discount=0.95, name='linear_trend', w=10)
# 季节性
seasonal52 = seasonality(period=52, discount=0.99, name='seasonal52', w=10)
# 构建简单dlm
simple_dlm = dlm(time_series) + linear_trend + seasonal52

在实际代码中,时间序列数据存储在变量time_series中。degree=1表示趋势是线性的(2表示二次),period=52表示季节性周期为52。由于季节性通常更稳定,我们将其折扣因子设为0.99。对于局部线性趋势,我们使用0.95以允许一些灵活性。w=10是对每个组件方差的先验猜测,数字越大表示不确定性越高。关于这些参数的实际含义,请参阅用户手册。构建模型后,我们可以拟合模型并绘制结果(如上图右图所示)

# 拟合模型
simple_dlm.fit()
# 绘制拟合结果
simple_dlm.turnOff('data points')
simple_dlm.plot()

蓝色曲线是前向滤波结果,绿色曲线是一天ahead预测,红色曲线是后向平滑结果。曲线周围的浅色区域是置信区间(你可能需要放大才能看到)。一天ahead预测显示这个简单模型在某种程度上捕捉到了时间序列的特征,但在第280周左右(2008-2009年之间)的危机高峰期失去准确性。一天ahead均方预测误差为0.173,可以通过以下调用获得:

simple_dlm.getMSE()

我们可以将时间序列分解为其各个组成部分:

# 绘制每个组件(将时间序列归因于每个组件)
simple_dlm.turnOff('predict plot')
simple_dlm.turnOff('filtered plot')
simple_dlm.plot('linear_trend')
simple_dlm.plot('seasonal52')

时间序列的大部分形状归因于局部线性趋势,而强烈的季节性模式也很容易观察到。为了进一步验证性能,我们使用这个简单模型进行长期预测。具体来说,我们使用前351周的数据预测接下来的200周,以及前251周的数据预测接下来的200周。我们将预测结果叠加在真实数据上。
# 绘制使用前351周数据预测接下来200周的结果
simple_dlm.plotPredictN(date=350, N=200)
# 绘制使用前251周数据预测接下来200周的结果
simple_dlm.plotPredictN(date=250, N=200)

从图中我们可以看到,在2008-2009年左右(第280周)的危机高峰之后,简单模型能够准确预测接下来的200周(左图),前提是给定前351周的数据。然而,如果预测开始于第280周之前,模型就无法捕捉到接近高峰时的变化(右图)。

动态线性回归

现在我们利用数据文件中的额外变量构建一个更复杂的模型。这些额外变量在实际代码中存储在`features`变量中。要构建动态线性回归模型,我们只需添加一个新组件:
# 构建动态回归模型
from pydlm import dynamic
regressor10 = dynamic(features=features, discount=1.0, name='regressor10', w=10)
drm = dlm(time_series) + linear_trend + seasonal52 + regressor10
drm.fit()
drm.getMSE()

# 绘制拟合结果
drm.turnOff('data points')
drm.plot()

dynamic是用于建模动态变化预测因子的组件,它接受features作为参数。上述代码绘制了拟合结果(左上图)。

一天ahead预测的结果比简单模型要好得多,特别是在危机高峰附近。平均预测误差为0.099,比简单模型提高了100%。同样,我们也将时间序列分解为三个组成部分:

drm.turnOff('predict plot')
drm.turnOff('filtered plot')
drm.plot('linear_trend')
drm.plot('seasonal52')
drm.plot('regressor10')

这次,时间序列的形状主要归因于回归器,而线性趋势看起来更加线性。如果我们再次进行长期预测,即使用前301周的数据预测接下来的150周,以及使用前251周的数据预测接下来的200周:

drm.plotPredictN(date=300, N=150)
drm.plotPredictN(date=250, N=200)

与简单模型相比,结果看起来好多了。

文档

详细文档请参考PyDLM,特别注意用户手册部分。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号