时间序列预测:从 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%。