时间序列预测:从 ARIMA 到 Prophet

时间序列预测:从 ARIMA 到 Prophet

时间序列预测在销售预测、容量规划和金融分析中有着广泛应用。从经典的 ARIMA 到现代的 Prophet 和 LSTM,不同方法各有优劣,选择合适的方法是关键。

ARIMA 模型需要先确定 p、d、q 参数:

示意图
示意图
from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.stattools import adfuller

# 平稳性检验
result = adfuller(df["value"])
print(f"ADF Statistic: {result[0]:.4f}")
print(f"p-value: {result[1]:.4f}")

# 差分阶数确定
if result[1] > 0.05:
    d = 1  # 需要一阶差分

# 拟合 ARIMA
model = ARIMA(df["value"], order=(2, 1, 2))
results = model.fit()
forecast = results.forecast(steps=30)

Facebook 的 Prophet 更适合业务场景,它自动处理趋势变化点和季节性:

from prophet import Prophet

df_prophet = df.rename(columns={"date": "ds", "value": "y"})
model = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=True,
    changepoint_prior_scale=0.05,
)
model.fit(df_prophet)
future = model.make_future_dataframe(periods=90)
forecast = model.predict(future)
fig = model.plot_components(forecast)

在我们的销售预测项目中,Prophet 在日粒度数据上表现最好(MAPE 8.2%),LSTM 在捕捉长期依赖方面有优势但训练成本高,ARIMA 在短期预测上依然稳健。实际生产中,我们采用了 Prophet + LSTM 的集成方案,加权平均后 MAPE 降到了 6.5%。