人工智能--时间序列--基于Prophet单因子预测

背景

时间序列过程当中时间数据维度不足以支持多因子预测的情况下,如何构建具有一定鲁棒性和可靠性的模型来时间对序列的规律性预测?

基本原理

Prophet 的基本原理是将时间序列分解成趋势项、季节项和假日项,并在此基础上使用加法模型进行预测。具体地,假设时间序列 y(t) 由以下三个部分组成:

  • 趋势项 g(t):描述时间序列的长期趋势,通常采用带有自动回归项和季节项的分段线性模型来拟合。
  • 季节项 s(t):描述时间序列的周期性变化,通常采用傅里叶级数来拟合。
  • 假日项 h(t):描述时间序列中的异常事件(如节假日、促销等),通常采用自定义二进制变量来表示。
    将趋势项、季节项和假日项相加,得到时间序列的预测值:
    y(t) = g(t) + s(t) + h(t) + ε(t)
    其中,ε(t) 是误差项,通常假定为正态分布。

核心参数

Prophet是一个基于加性模型和非线性趋势的时间序列预测库。在使用Prophet进行预测时,需要设置一些参数来控制模型的行为。以下是Prophet中常用的一些参数:

growth:确定时间序列的增长趋势,可以选择线性或非线性。默认是线性趋势。

seasonality_mode:控制季节性组件的建模方式,可以选择加性或乘性。默认是加性。

changepoint_prior_scale:控制变化点的灵敏度。较高的值表示模型更容易适应变化,但也可能导致过度拟合。changepoint参数设置的越大,模型越灵活地应对近期趋势

seasonality_prior_scale:控制季节性组件的灵敏度。较高的值表示模型更容易适应季节性,但也可能导致过度拟合。

holidays_prior_scale:控制假期效果的灵敏度。较高的值表示模型更容易适应假期效果,但也可能导致过度拟合。

interval_width:置信区间宽度,表示预测的精度。默认为0.8,即80%置信区间。

n_changepoints:用于确定变化点的数量。默认是25。

seasonality:控制季节性的周期。可以是一个整数表示周期的天数,也可以是一个字符串表示“年”、“季度”、“月”、“周”、“日”、“小时”、“分钟”或“秒”。默认是每年。

holidays:假期日期的数据框,需要包含“holiday”和“ds”两列。默认为空。

weekly_seasonality:控制周季节性的建模方式,可以是“auto”、“True”、“False”或一个整数。默认是“auto”,表示在数据中自动检测周季节性。

daily_seasonality:控制每日季节性的建模方式,可以是“auto”、“True”、“False”或一个整数。默认是“auto”,表示在数据中自动检测每日季节性。

yearly_seasonality:控制年季节性的建模方式,可以是“auto”、“True”、“False”或一个整数。默认是“auto”,表示在数据中自动检测年季节性。

seasonality_prior_mode:控制季节性先验的建模方式。可以选择“auto”、“additive”或“multiplicative”。默认是“auto”。

uncertainty_samples:控制不确定性估计的样本数量。默认是1000。

以上参数是使用Prophet进行时间序列预测时常用的一些参数,根据实际需求可以适当调整这些参数来得到更好的预测结果。

代码

import pandas as pd
from prophet import Prophet
from prophet.plot import plot_plotly, plot_components_plotly

df = pd.read_csv('https://raw.githubusercontent.com/facebook/prophet/main/examples/example_wp_log_peyton_manning.csv')

m = Prophet()
m.fit(df)
future = m.make_future_dataframe(periods=365)
forecast = m.predict(future)

# 可视化部分
fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)

plot_plotly(m, forecast)
plot_components_plotly(m, forecast)

参考资料

参数调整1
prophet专栏
电商销售预测demo
基本说明
参数说明

prophet官网
prophet论文原文pdf
prophet模型仓库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值