当前位置: 首页 > news >正文

Facebook 开源多季节性时间序列数据预测工具:Prophet 乘性季节性 Multiplicative Seasonality

文中内容仅限技术学习与代码实践参考,市场存在不确定性,技术分析需谨慎验证,不构成任何投资建议。

Facebook Prophet
Prophet 是一种基于加法模型的时间序列数据预测程序,在该模型中,非线性趋势与年、周、日季节性以及节假日效应相匹配。它最适用于具有强烈季节效应和多季历史数据的时间序列。先知对缺失数据和趋势变化具有很强的鲁棒性,通常能很好地处理异常值。

Prophet 是 Facebook 核心数据科学团队发布的开源软件。

用 Python 安装

Prophet 位于 PyPI 上,因此可以使用 pip 进行安装。

python -m pip install prophet
  • 从 v0.6 起,不再支持 Python 2。
  • 自 v1.0 起,PyPI 上的软件包名称为 “prophet”;v1.0 之前为 “fbprophet”。
  • 从 v1.1 起,支持的 Python 最低版本为 3.7。

也可以通过 conda-forge 安装。

conda install -c conda-forge prophet

乘性季节性

默认情况下,Prophet 使用加性季节性进行拟合,即季节效应被加到趋势上得到预测值。下面这个航空旅客数量的时间序列就是一个加性季节性不奏效的例子:

# R
df <- read.csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_air_passengers.csv')
m <- prophet(df)
future <- make_future_dataframe(m, 50, freq = 'm')
forecast <- predict(m, future)
plot(m, forecast)
# Python
df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_air_passengers.csv')
m = Prophet()
m.fit(df)
future = m.make_future_dataframe(50, freq='MS')
forecast = m.predict(future)
fig = m.plot(forecast)

img

这个时间序列有明显的年度周期,但预测中的季节性在时间序列起始部分过大,而在末尾部分过小。在这个时间序列中,季节性不是一个恒定的加性因子(如 Prophet 所假设的那样),而是随趋势一起增长。这就是乘性季节性。

Prophet 可以通过在输入参数中设置 seasonality_mode='multiplicative' 来建模乘性季节性:

# R
m <- prophet(df, seasonality.mode = 'multiplicative')
forecast <- predict(m, future)
plot(m, forecast)
# Python
m = Prophet(seasonality_mode='multiplicative')
m.fit(df)
forecast = m.predict(future)
fig = m.plot(forecast)

img

此时,组件图会将季节性显示为趋势的百分比:

# R
prophet_plot_components(m, forecast)
# Python
fig = m.plot_components(forecast)

img

当设置 seasonality_mode='multiplicative' 时,节假日效应也将被建模为乘性。任何添加的季节性或额外回归变量默认都会使用 seasonality_mode 所设置的值,但可通过在添加季节性或回归变量时指定 mode='additive'mode='multiplicative' 来覆盖。

例如,以下代码块将内置季节性设为乘性,但包含一个加性的季度季节性以及一个加性回归变量:

# R
m <- prophet(seasonality.mode = 'multiplicative')
m <- add_seasonality(m, 'quarterly', period = 91.25, fourier.order = 8, mode = 'additive')
m <- add_regressor(m, 'regressor', mode = 'additive')
# Python
m = Prophet(seasonality_mode='multiplicative')
m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
m.add_regressor('regressor', mode='additive')

加性和乘性的额外回归变量将在组件图中分别显示在不同的面板上。然而,混合使用加性和乘性季节性的情况相当少见,因此通常只有在有明确理由预期会出现这种情况时才会使用。

风险提示与免责声明
本文内容基于公开信息研究整理,不构成任何形式的投资建议。历史表现不应作为未来收益保证,市场存在不可预见的波动风险。投资者需结合自身财务状况及风险承受能力独立决策,并自行承担交易结果。作者及发布方不对任何依据本文操作导致的损失承担法律责任。市场有风险,投资须谨慎。

http://www.dtcms.com/a/290635.html

相关文章:

  • JS实现矩阵左右旋转90度
  • uniapp app pdf.js报错:Uncaught SyntaxError:Unexpected token ‘{‘
  • 5道挑战题writup
  • 单体VS微服务:如何选择最适合的架构?
  • 人工智能之数学基础:事件间的关系
  • Leetcode力扣解题记录--第189题(巧思数组翻转)
  • 【MySQL】Linux配置MySQL Windows远程连接
  • 客流分析核心算法 trajectory_event_analyzer数据结构
  • Python-数据库概念-pymysql-元编程-SQLAlchemy-学习笔记
  • QT6 源,七章对话框与多窗体(5) 文件对话框 QFileDialog 篇二:源码带注释
  • 【React】npm install报错npm : 无法加载文件 D:\APP\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • 玩转Rocky Linux 9 部署Redis指南
  • WPF实现加载初始页面后跳转到主界面并销毁初始页面资源
  • 在 WPF 启动界面中心加载 GIF 动图
  • 人工智能真的能编程吗?研究勾勒出自主软件工程的障碍
  • Next.js 知识点
  • 【c++】leetcode438 找到字符串中所有字母异位词
  • GC9112低压单通道全桥驱动器芯片解析:小封装大能量
  • uniapp扫描二维码反色处理
  • 苍穹外卖DAY10
  • 阿里云监控及运维常见问题
  • MetaGPT源码剖析(一):MetaGPT框架下的多智能体协作项目——software_company.py
  • 安科瑞:能源微电网助力工业园区“绿色”发展
  • 数字孪生赋能智慧能源电力传输管理新模式
  • 光伏电站气象监测系统:为清洁能源高效发电保驾护航
  • Android 单编 framework 相关产物输出介绍
  • 如何在FastAPI中整合GraphQL的复杂度与限流?
  • jps用法整理
  • CSS的content属性妙用指南
  • 深度解析 HTML `loading` 属性:优化网页性能的秘密武器