默认情况下,Prophet 拟合加性季节性,这意味着季节性的影响会添加到趋势中以获得预测。以下航空旅客数量的时间序列就是一个加性季节性不起作用的例子
1
2
3
4
5
6
| # 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)
|
1
2
3
4
5
6
7
| # 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)
|

这个时间序列有一个清晰的年度周期,但预测中的季节性在时间序列开始时过大,而在结束时过小。在这个时间序列中,季节性不是 Prophet 假设的恒定的加性因子,而是随着趋势增长。这就是乘法季节性。
Prophet 可以通过在输入参数中设置 seasonality_mode='multiplicative'
来建模乘法季节性
1
2
3
4
| # R
m <- prophet(df, seasonality.mode = 'multiplicative')
forecast <- predict(m, future)
plot(m, forecast)
|
1
2
3
4
5
| # Python
m = Prophet(seasonality_mode='multiplicative')
m.fit(df)
forecast = m.predict(future)
fig = m.plot(forecast)
|

成分图现在将显示季节性作为趋势的百分比
1
2
| # R
prophet_plot_components(m, forecast)
|
1
2
| # Python
fig = m.plot_components(forecast)
|

使用 seasonality_mode='multiplicative'
,假日效应也将被建模为乘法的。 任何添加的季节性或额外回归量都将默认使用设置的任何 seasonality_mode
,但可以通过在添加季节性或回归量时指定 mode='additive'
或 mode='multiplicative'
作为参数来覆盖。
例如,此代码块将内置季节性设置为乘法的,但包含一个加性季度季节性和一个加性回归量
1
2
3
4
| # 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')
|
1
2
3
4
| # Python
m = Prophet(seasonality_mode='multiplicative')
m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
m.add_regressor('regressor', mode='additive')
|
加性和乘法额外回归量将显示在成分图上的单独面板中。 但是,请注意,混合使用加性和乘法季节性是不太可能的,因此通常只有在有理由期望是这种情况时才使用它。
在 GitHub 上编辑