网问答>>【时间序列】详解Prophet模型以及代码示例
问题
已解决

【时间序列】详解Prophet模型以及代码示例

时间:2026-03-06 16:32:19
【时间序列】详解Prophet模型以及代码示例
最佳回答
Prophet模型详解及代码示例Prophet是Facebook开源的一款适用于时间序列预测的模型,其核心思想是通过分解时间序列为趋势、季节性和节假日因素,并允许用户灵活调整各部分参数。以下从模型结构、趋势项、季节性、节假日处理及代码实现展开详解。一、模型结构Prophet采用可分解的时间序列模型,公式为:趋势项(g(t)):表示非周期性变化,支持饱和增长和分段线性两种模式。季节项(s(t)):表示周期性变化(如周、年季节性),通过傅里叶级数建模。节假日项(h(t)):表示节假日或特殊事件的影响。误差项(ε?):假设服从正态分布,代表模型无法解释的随机波动。优点:灵活性:支持多周期季节性和自定义趋势假设。缺失值处理:无需插值,可直接处理不规则间隔数据。计算效率:拟合速度快,支持交互式调参。可解释性:参数直观,易于理解。二、趋势项建模Prophet提供两种趋势模型:饱和增长模型(Logistic)适用于有承载力限制的场景(如市场总规模):参数:承载力(C)、增长率(k)、偏移量(m)。动态调整:C和k可随时间变化,支持分段逻辑回归以处理趋势突变。分段线性模型适用于无承载力限制的线性增长:参数:增长率(k)、增长率变化量(δ)、偏移量(m)、连续性约束(γ)。突变点处理:通过以下参数控制趋势灵活性:n_changepoints:潜在突变点数量。changepoint_prior_scale:调整趋势灵活度(值越大,趋势越灵活)。changepoints:手动指定突变点位置。changepoint_range:突变点分布范围(默认前80%时间)。代码示例:import pandas as pdfrom fbprophet import Prophet# 读取数据df = pd.read_csv(examples/example_wp_log_R.csv)# 饱和增长模型(指定承载力)df[cap] = 8.5 # 设置承载力上限m = Prophet(growth=logistic)m.fit(df)# 分段线性模型(调整突变点灵活度)m = Prophet(changepoint_prior_scale=0.5)forecast = m.fit(df).predict(future)# 手动指定突变点m = Prophet(changepoints=[2014-01-01])forecast = m.fit(df).predict(future)# 可视化突变点from fbprophet.plot import add_changepoints_to_plotfig = m.plot(forecast)add_changepoints_to_plot(fig.gca(), m, forecast)三、季节性建模Prophet使用傅里叶级数拟合周期性模式:参数:周期(P)、傅里叶阶数(N)。默认值:年季节性(N=10)、周季节性(N=3)。正则化:通过seasonality_prior_scale控制季节性灵活度。代码示例:# 禁用周季节性,添加月季节性m = Prophet(seasonality_prior_scale=5, weekly_seasonality=False)m.add_seasonality(name=monthly, period=30.5, fourier_order=5)forecast = m.fit(df).predict(future)四、节假日建模节假日对时间序列影响显著,Prophet支持自定义节假日:参数:节假日日期(D?)、影响窗口(lower_window/upper_window)。正则化:通过holidays_prior_scale控制节假日影响强度。代码示例:# 定义节假日(季后赛和超级碗)playoffs = pd.DataFrame({ holiday: playoff, ds: pd.to_datetime([2008-01-13, 2009-01-03, 2010-01-16]), lower_window: 0, upper_window: 1,})superbowls = pd.DataFrame({ holiday: superbowl, ds: pd.to_datetime([2010-02-07, 2014-02-02]), lower_window: 0, upper_window: 1,})holidays = pd.concat((playoffs, superbowls))# 建模并预测m = Prophet(holidays=holidays)forecast = m.fit(df).predict(fu
时间:2026-03-06 16:32:23
本类最有帮助
Copyright © 2008-2013 www.wangwenda.com All rights reserved.冀ICP备12000710号-1
投诉邮箱: