Prophet时间序列算法总结及python实现案例

embedded/2024/11/30 18:15:57/

目录

    • 一、prophet理论总结
    • 二、python导入模块方式
    • 三、python实现案例
      • 3.1帮助信息
      • 3.2 案例
    • 四、参考学习


一、prophet理论总结

prophet模型是facebook开源的一个时间序列预测算法。[1][2],该算法主要为处理具有周期性、趋势变化以及缺失值和异常值的时间序列数据而设计。适合处理日级别(‌或以上频率)‌的时间序列数据,‌设计考虑了业务场景中的时间序列特点,‌如季节性变化、‌假日效应和趋势变化。它的核心思想是将时间序列数据分解为趋势、季节性和假期效应三个部分。
Prophet能够自动检测数据中的趋势和季节性,‌并将它们组合在一起以获得预测值。‌它基于加法模型,‌将时间序列分解成趋势项、‌周期项、‌节假日项/特殊事件影响项以及残差项的组合,‌从而实现对时间序列的有效预测。此外,‌Prophet还提供了强大的可视化分析辅助工具,‌便于分析趋势、‌不同周期、‌不同节假日/特殊事件各自的贡献,‌使得模型解释性较强[^3]。

算法优点

  • 适用于具有季节性和趋势变化的时间序列。
  • 对缺失值和异常值具有较强的鲁棒性。
  • 模型易于使用,适合非专业用户。

算法缺点

  • 对于数据量很大的情况,计算可能会变得比较慢。
  • 对非平稳数据的处理较为简单,可能不足以处理复杂的非平稳特征。

应用场景

  • 适用于各种具有强季节性和趋势性的数据[^4]

Prophet模型既可以使用加法模型,也可以使用乘法模型
在这里插入图片描述

加法模型

  • y(t)=g(t)+s(s)+h(t)+e(t)
  • g(t)表示时间序列的趋势,用来拟合非周期性变化的。
  • s(t)用来表示时间序列的季节性。
  • h(t)表示时间序列的假期效应,节日等特殊原因等造成的变化。
  • e(t)为误差项,用他来表示随机无法预测的波动。

适用场景:通常情况下,加法模型适用于时间序列的趋势和季节性与数据规模无关的情况,例如气温和降雨量;

乘法模型

  • 在Prophet模型的乘法模型中,时间序列的预测值是趋势、季节性和假期效应的乘积
  • y(t)=g(t)∗s(t)∗h(t)∗e(t)

适用场景:用于时间序列的趋势和季节性与数据规模相关的情况,例如商品销售量和股票价格。

python_36">二、python导入模块方式

实际在程序导入该模块时,多次检查该模块已安装,但导入时总是提示如下错误[^6]:
ModuleNotFoundError: No module named ‘Prophet’
在这里插入图片描述

经过多次尝试和寻求解决方案,最终发现问题所在:
fbprophet 的命名空间可能会与其他库冲突。因此,fbprophet 在导入时通常使用:
from prophet import Prophet
而不是:
import fbprophet

正确的导入方式:

python">from prophet import Prophet

python_51">三、python实现案例

3.1帮助信息

通过pyhton的帮助,调用help(Prophet)查看如下帮助信息,有助于我们更好的了解python中,该函数具体有哪些参数以及相关参数的含义。

python">Prophet(growth='linear',changepoints=None,n_changepoints=25,changepoint_range=0.8,yearly_seasonality='auto',weekly_seasonality='auto',daily_seasonality='auto',holidays=None,seasonality_mode='additive',seasonality_prior_scale=10.0,holidays_prior_scale=10.0,changepoint_prior_scale=0.05,mcmc_samples=0,interval_width=0.8,uncertainty_samples=1000,stan_backend=None,scaling: str = 'absmax',holidays_mode=None,
)
Docstring:     
Prophet forecaster.Parameters
----------
growth: String 'linear', 'logistic' or 'flat' to specify a linear, logistic orflat trend.
changepoints: List of dates at which to include potential changepoints. Ifnot specified, potential changepoints are selected automatically.
n_changepoints: Number of potential changepoints to include. Not usedif input `changepoints` is supplied. If `changepoints` is not supplied,then n_changepoints potential changepoints are selected uniformly fromthe first `changepoint_range` proportion of the history.
changepoint_range: Proportion of history in which trend changepoints willbe estimated. Defaults to 0.8 for the first 80%. Not used if`changepoints` is specified.
yearly_seasonality: Fit yearly seasonality.Can be 'auto', True, False, or a number of Fourier terms to generate.
weekly_seasonality: Fit weekly seasonality.Can be 'auto', True, False, or a number of Fourier terms to generate.
daily_seasonality: Fit daily seasonality.Can be 'auto', True, False, or a number of Fourier terms to generate.
holidays: pd.DataFrame with columns holiday (string) and ds (date type)and optionally columns lower_window and upper_window which specify arange of days around the date to be included as holidays.lower_window=-2 will include 2 days prior to the date as holidays. Alsooptionally can have a column prior_scale specifying the prior scale forthat holiday.
seasonality_mode: 'additive' (default) or 'multiplicative'.
seasonality_prior_scale: Parameter modulating the strength of theseasonality model. Larger values allow the model to fit larger seasonalfluctuations, smaller values dampen the seasonality. Can be specifiedfor individual seasonalities using add_seasonality.
holidays_prior_scale: Parameter modulating the strength of the holidaycomponents model, unless overridden in the holidays input.
changepoint_prior_scale: Parameter modulating the flexibility of theautomatic changepoint selection. Large values will allow manychangepoints, small values will allow few changepoints.
mcmc_samples: Integer, if greater than 0, will do full Bayesian inferencewith the specified number of MCMC samples. If 0, will do MAPestimation.
interval_width: Float, width of the uncertainty intervals providedfor the forecast. If mcmc_samples=0, this will be only the uncertaintyin the trend using the MAP estimate of the extrapolated generativemodel. If mcmc.samples>0, this will be integrated over all modelparameters, which will include uncertainty in seasonality.
uncertainty_samples: Number of simulated draws used to estimateuncertainty intervals. Settings this value to 0 or False will disableuncertainty estimation and speed up the calculation.
stan_backend: str as defined in StanBackendEnum default: None - will try toiterate over all available backends and find the working one
holidays_mode: 'additive' or 'multiplicative'. Defaults to seasonality_mode.

3.2 案例

如下案例脚本,实际使用时,将数据处理成两列数据,模型整体的运行步骤和其他机器学习模型类似,需要注意的一点是:两列数据的名称必须是 ds 和 y 。因此实际处理完数据后,需要重命名列名称。

python">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from prophet import Prophet  # 使用 prophet 替代 fbprophet# 生成示例数据:带有季节性和趋势的时间序列
np.random.seed(1024)
dates = pd.date_range('2023-01-01', periods=365)
data = np.linspace(10, 50, 365) + 10 * np.sin(np.linspace(0, 10 * np.pi, 365)) + np.random.randn(365) * 5# 创建DataFrame
df = pd.DataFrame({'ds': dates, 'y': data})# 拟合Prophet模型
model = Prophet(yearly_seasonality=True)
model.fit(df)# 预测未来30天
future = model.make_future_dataframe(periods=30)
forecast = model.predict(future)# 可视化
fig = model.plot(forecast)
plt.title('Prophet Model Demo')
plt.xlabel('Date')
plt.ylabel('Value')
plt.show()

在这里插入图片描述


四、参考学习

[1]facebook官方文档
[2]github文档
[3] Prophet快速入门
[4]十大时间序列模型最强总结(六)Prophet
[5]时间序列模型Prophet使用详细讲解
[6]在win10系统安装fbprophet模块操作方式


http://www.ppmy.cn/embedded/141806.html

相关文章

高级java每日一道面试题-2024年11月25日-JVM篇-说说Java对象创建过程?

如果有遗漏,评论区告诉我进行补充 面试官: 说说Java对象创建过程? 我回答: 在Java高级面试中,Java对象的创建过程是一个常被提及的重要话题。以下是对Java对象创建过程的详细解析: 一、Java对象创建的基本步骤 检查类是否加载: 当需要创…

C++设计模式(模板模式)

一、介绍 1.动机 在软件构建过程中,对于某一项任务,它常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现。 如何…

爬虫技术全解析:从入门到精通

引言 在互联网时代,数据已成为最宝贵的资源之一。爬虫技术作为一种自动化获取网页数据的工具,被广泛应用于数据采集、信息聚合、市场分析等多个领域。本文将带你从零开始,全面了解爬虫技术,包括其基本原理、常用工具、编程实践以…

docker搭建nginx

一. 直接启动nginx镜像 1. 下载nginx镜像 docker pull nginx 2. 运行镜像 docker run -p 8080:80 --name web -d nginx 3. 网址查看 xx.xx.xx.xx:8080 二. 挂在文件启动nginx镜像 1. 拷贝docker文件到本地 docker cp web:/etc/nginx/nginx.conf /root/data/config/nginx…

Java图书管理系统(简易保姆级)

前面学习了这么多知识,为了巩固之前的知识,我们就要写一个图书管理系统来帮助大家复习,让大家的知识融会贯通~~~ 话不多说,直接开始今天的内容~ 首先呢,我们要有一个大体的思路: 实现效果思路有两种情况&a…

【VUE3】npm : 无法加载文件 D:\Program\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本。

npm : 无法加载文件 D:\Program\nodejs\npm.ps1。未对文件 D:\Program\nodejs\npm.ps1 进行数字签名。无法在当前系统上运行该脚本。有关运行脚本和设置执行策略的详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_ Execution_Policies。…

vue3中的组件通信

前言&#xff1a; vue3有两种setup写法&#xff0c;本文将用最简洁的代码例子针对主流的<script setup>写法对每一种用法进行说明 props 父传子defineEmits 子传父mitt 兄弟组件$attrs &#xff08;子组件拿父组件&#xff09;refs &#xff08;一般父组件拿子组件数据&a…

如何测试一个社交应用的私信功能?

功能测试 1.发送和接收测试 在网络正常的情况下&#xff0c;能否发送文字、图片、附件、表情、特殊字符等&#xff0c;对方是否能够收到&#xff0c;并且正常展示 2.消息排序 3.消息撤回和删除 是否能够正常撤回&#xff0c;撤回后&#xff0c;展示什么 是否能够删除本地聊天记…