Facebook Prophet 时间序列预测:乘法季节性模式详解
什么是季节性模式?
在时间序列分析中,季节性(Seasonality)是指数据呈现出的周期性变化规律。Facebook Prophet 作为一款强大的时间序列预测工具,默认使用**加法季节性(Additive Seasonality)**模式进行建模,即季节性效应被简单地加到趋势分量上。
加法季节性的局限性
加法季节性假设季节性波动的幅度在整个时间范围内保持不变。这在许多场景下是合理的,但当季节性效应与趋势水平相关时(即趋势增长时季节性波动幅度也随之增大),加法模型就会产生问题。
以航空乘客数据为例:
- 早期乘客数量较少时,季节性波动被过度放大
- 后期乘客数量增长后,季节性波动又显得不足
这是因为实际的季节性效应是与趋势水平成比例的,我们需要使用**乘法季节性(Multiplicative Seasonality)**模式。
乘法季节性模式
乘法季节性认为季节性效应是趋势的一个百分比变化,而非固定值。当趋势增长时,季节性波动的绝对值也随之增大,但相对幅度保持不变。
在 Prophet 中启用乘法季节性非常简单:
m = Prophet(seasonality_mode='multiplicative')
实际应用示例
让我们通过代码示例展示两种模式的差异:
import pandas as pd
from prophet import Prophet
# 加载航空乘客数据
df = pd.read_csv('example_air_passengers.csv')
# 加法模型(默认)
m_add = Prophet()
m_add.fit(df)
forecast_add = m_add.predict(future)
# 乘法模型
m_mul = Prophet(seasonality_mode='multiplicative')
m_mul.fit(df)
forecast_mul = m_mul.predict(future)
乘法模型的预测结果会显示季节性效应随趋势增长而适当放大,更符合实际情况。
成分分析
在乘法模式下,成分分析图会以百分比形式展示季节性效应:
fig = m.plot_components(forecast)
这将显示季节性分量占趋势的百分比变化,而非绝对值变化。
混合模式应用
Prophet 允许对不同的季节性分量和回归量使用不同的模式:
m = Prophet(seasonality_mode='multiplicative')
# 添加加法模式的季度季节性
m.add_seasonality('quarterly', period=91.25, fourier_order=8, mode='additive')
# 添加加法模式的额外回归量
m.add_regressor('regressor', mode='additive')
需要注意的是,混合使用加法和乘法模式需要谨慎,通常只在有明确理由相信不同分量确实遵循不同模式时才使用。
何时选择乘法季节性?
以下情况建议考虑乘法季节性:
- 数据呈现明显的指数增长趋势
- 季节性波动的绝对值随时间增长
- 数据的波动幅度与趋势水平相关
- 对数转换后的数据显示出更稳定的季节性模式
总结
乘法季节性模式是 Prophet 中处理与趋势相关的季节性变化的强大工具。通过正确选择季节性模式,可以显著提高时间序列预测的准确性。在实际应用中,建议通过交叉验证比较两种模式的表现,选择最适合数据的建模方式。
理解并正确应用乘法季节性模式,将使你的时间序列预测模型更加精准地捕捉数据中的复杂模式。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考