新版本ProPhet时间序列预测1:模型解释和安装和初步使用

安装

安装1.0版本之后:
区别: 1.0版本叫prophet <1.0版本叫fbprophet
1.0以下版本安装

pip安装

备注(不建议pip安装 如果安装报错解决如下):
pip install pystan报错先安装以下在安装pystan
Cython
convertdate
lunarcalendar
holidays
tqdm
pytan

pip install fbprophet报错 先安装以下
pandas
convertdate
lunarcalendar
holidays

其中0.7版本的pfprophet需要指定numpy版本小于1.24, pandas需要支持append方法的旧版本
pip install numpy==1.23.5
pip install pandas==1.0.3

conda安装

1.0 以下安装

conda install pystan
conda install -c conda-forge fbprophet
conda install plotly  # 不安装的话可视化会报错

1.0 以上安装

conda install -c conda-forge prophet
conda install plotly  # 不安装的话可视化会报错

Prophet

Prophet原理图Prophet的大致原理如下,它将一个时间序列看成是三部分的组合:趋势,季节和假日和其他

Prophet对缺失值友好,但对异常值敏感。异常值可设置成None,防止影响模型的拟合。
模型默认线性趋势,但如果数据按照log方式增长的,可调节为growth=”logistic”逻辑回归模型。
当我们预先知道某天会影响数据的整体走势,可以提前将此天设置成转折点(changepoint)。
在设定周期性时,模型默认按照年、星期、天设定,月和小时如需要自行设定。
针对节假日,可通过holiday来进行调节,针对不同的假期,可调整不同的前后窗口期,例如:春节7日

Prophet参数及默认值介绍:
def __init__(
            self,
            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.80,
            uncertainty_samples=1000,
            stan_backend=None
    ):

• growth:趋势函数设置,默认线性“linear”,可选非线性“logistic”。
• changepoints:选择突变点,默认自动选择“None”。 传时间即可 如:["2023-4-15"]
• n_changepoints:突变点个数,默认“25个”。如果changepoints指定,则这个参数就废弃了;如果changepoints没指定,
则会从输入的历史数据前80%中自动选取25个突变点。
• changepoint_range:突变点数据范围,默认“80%”。同样,如果changepoints指定,则这个参数就废弃了。
• changepoint_prior_scale: 调节“changepoints”发现强度,默认“0.05”。值越大对历史数据拟合程度越强,但会增加过拟合的风险。
• yearly_seasonality: 数据是否有年季节性,默认“自动检测”。
• weekly_seasonality: 数据是否有周季节性,默认“自动检测”。
• daily_seasonality: 数据是否有天季节性,默认“自动检测”。
• holidays:指定节假日,默认“None”,支持手动输入指定节假日。以DataFrame格式输入,涵盖:必须列【holiday(string)、ds(date)】、
可选列【lower_window(int)、upper_window(int),指定影响的前后窗口期】。
• seasonality_mode: 季节性效应模式,默认加法模式“additive”,可选“multiplicative”乘法模式。
• seasonality_prior_scale: 调节季节性效应模式强度,默认“10”。值越大,季节性对模型影响越大。
• holidays_prior_scale: 调节节假日模式强度,默认“10”。值越大,节假日对模型影响越大。

模型使用

读取数据将数据处理为ds和y两列
import os
import numpy as np
import pandas as pd
from prophet import Prophet
from prophet.plot import add_changepoints_to_plot
import plotly.express as px
from prophet.plot import plot_plotly, plot_components_plotly, plot_cross_validation_metric


data = pd.read_csv("1_features.csv")
# prophet 时间列叫ds 目标值叫y
data = data.rename(columns={"ts": "ds", "data": "y"})[["ds", "y"]]
看下数据的分布
fig = px.line(data, x="ds", y="y")
fig.show()

在这里插入图片描述

模型训练
# model = Prophet(changepoints=['2022/11/24', '2023/2/25'], yearly_seasonality=True, weekly_seasonality=True, daily_seasonality=True)
model = Prophet()
# 采用中国的假期模式
model.add_country_holidays(country_name="CN")
model.fit(data)
预测
# 模型预测输出预测值、预测上限、预测下限等字段。
future = model.make_future_dataframe(periods=3, include_history=False)
forecast = model.predict(future)
print(forecast)
可视化预测结果
## 1.0 版本之前可视化
# fig1 = model.plot(forecast)
# # fig1.savefig('temp1.png')
# 突变点可视化
# add_changepoints_to_plot(fig1.gca(), model, forecast)
# fig1.show()


# 1.0版本之后可视化预测结果
fig = plot_plotly(model, forecast, trend=True)
# 显示突变点
# fig = plot_plotly(model, forecast, trend=True, changepoints=True)
fig.show()

在这里插入图片描述

在这里插入图片描述

可视化趋势、假期、每周、季节性、年度季节性的回归图
# 可视化趋势、假期、每周、季节性、年度季节性的回归图
fig = plot_components_plotly(model, forecast)
fig.show()

在这里插入图片描述

1.0之前模型保存
# 模型保存
with open('prophet_model.json', 'w') as md:
    json.dump(model_to_json(model), md)

# 模型读取
with open('prophet_model.json', 'r') as md:
    model = model_from_json(json.load(md))
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Prophet时间序***时间序列预测。该模型适用于各种具有特殊特征的预测问题,并且在检测时间序列趋势变化点、处理季节性、节假日以及突发事件方面具有较好的拟合效果。 Prophet模型的优点包括: 1. 灵活性:Prophet模型能够适应各种具有潜在特殊特征的时间序列数据,包括非线性趋势、季节性和节假日效应等。 2. 可解释性:该模型提供了对时间序列趋势变化点的检测,使用户能够更好地理解数据的变化规律。 3. 简单易用:Prophet模型使用相对简单,用户不需要对时间序列分析有深入的专业知识。 4. 开源框架:该模型是开源的,意味着用户可以免费使用并进行自定义修改。 然而,Prophet模型也存在一些局限性: 1. 无法进行滚动预测:Prophet模型的训练和预测是分开进行的,如果要更新模型,就需要重新进行训练,无法实现滚动预测的功能。 2. 模型表达能力相对简单:Prophet模型的表达能力相对简单,对于复杂的模式可能无法进行准确的学习,导致模型在训练时可能存在拟合不足的问题。 3. 长时间预测不可靠:由于Prophet模型的简化表达能力,其在进行长时间预测时可能会出现不可靠的情况。 综上所述,Prophet时间序列模型具有灵活性、可解释性和简单易用的优点,但也存在无法进行滚动预测、模型表达能力相对简单和长时间预测不可靠的局限性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BRYTLEVSON

打赏的都是天使,创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值