混合方法
混合方法是指结合多种时序预测模型的优势,通过集成或级联的方式获得比单一模型更好的预测效果。这种方法可以弥补各类模型的不足,提高预测稳定性和准确度。
组合预测方法
线性组合
最简单的混合方法是对多个模型结果进行加权平均:
# 三个基础模型的预测结果
arima_pred = arima_model.forecast(steps=30)
xgb_pred = xgb_model.predict(X_test)
lstm_pred = lstm_model.predict(X_test_seq)
# 加权平均
weights = [0.3, 0.4, 0.3] # 权重需根据各模型表现调整
ensemble_pred = (
weights[0] * arima_pred +
weights[1] * xgb_pred +
weights[2] * lstm_pred
)
基于学习的组合
使用元学习模型学习最优组合权重:
# 构建元特征:基模型预测结果
meta_features = np.column_stack([arima_pred, xgb_pred, lstm_pred])
# 训练元模型
meta_model = Ridge(alpha=1.0)
meta_model.fit(meta_features[:train_size], y_true[:train_size])
# 预测
meta_pred = meta_model.predict(meta_features[train_size:])
分治预测策略
趋势-季节性分解预测
将时间序列分解为不同组件,分别建模后再组合:
from statsmodels.tsa.seasonal import STL
# 分解时间序列
stl = STL(data, seasonal=13).fit()
trend = stl.trend
seasonal = stl.seasonal
residual = stl.resid
# 分别建模
# 1. 趋势组件用简单模型
trend_model = LinearRegression()
trend_model.fit(np.arange(len(trend)).reshape(-1, 1), trend)
# 2. 季节性组件固定重复
future_seasonal = np.tile(
seasonal[-seasonal_period:],
(horizon // seasonal_period) + 1
)[:horizon]
# 3. 残差用复杂模型
residual_model = XGBRegressor()
residual_model.fit(X_residual, residual)
# 组合预测
trend_pred = trend_model.predict(np.arange(len(trend), len(trend)+horizon).reshape(-1, 1))
residual_pred = residual_model.predict(X_residual_future)
final_pred = trend_pred + future_seasonal + residual_pred
Prophet + 机器学习残差学习
使用Prophet建模主要趋势和季节性,再用机器学习建模残差:
from prophet import Prophet
# Prophet建模
m = Prophet(
yearly_seasonality=True,
weekly_seasonality=True,
daily_seasonality=False
)
m.add_country_holidays(country_name='CN')
m.fit(df[['ds', 'y']])
forecast = m.predict(future)
# 计算残差
df['residual'] = df['y'] - forecast.loc[:len(df)-1, 'yhat']
# 用XGBoost建模残差
residual_model = XGBRegressor()
residual_model.fit(X_residual, df['residual'])
# 预测残差并与Prophet预测组合
residual_pred = residual_model.predict(X_residual_future)
final_pred = forecast.loc[len(df):, 'yhat'].values + residual_pred
多尺度预测融合
针对不同预测时长使用不同模型,然后融合结果:
# 短期预测 (如1-7天) 使用ARIMA
short_pred = arima_model.forecast(steps=7)
# 中期预测 (如8-30天) 使用XGBoost
mid_pred = xgb_model.predict(X_test_mid)
# 长期预测 (如31-90天) 使用Prophet
long_pred = prophet_model.predict(future_long)['yhat'].values
# 组合不同时间尺度的预测
combined_pred = np.concatenate([short_pred, mid_pred, long_pred])
优缺点与适用场景
优点
- 提高预测稳定性,减少异常预测风险
- 结合多种模型优势,弥补单一模型缺陷
- 可适应复杂数据的多种模式
- 可提高预测准确度
缺点
- 模型复杂度增加,训练和维护成本高
- 需要更多计算资源
- 可能引入额外超参数,增加调优难度
适用场景
- 高价值业务决策场景(如大额预算分配)
- 多模式时间序列(如既有季节性又有趋势变化)
- 需要同时兼顾短期和长期预测的场景
- 稳定性要求高的场景
与其他模块的关系
混合方法通常建立在其他模型基础之上,结合了时序分析-传统统计模型、时序分析-机器学习模型和时序分析-深度学习模型的优势。在实际应用中,需要通过时序分析-评估指标与误差分析确定最优混合策略。混合方法对于时序分析-特征构建与变量增强的依赖取决于所使用的基础模型。在复杂的时序分析-应用场景中,混合方法往往能提供更稳定和准确的预测结果。