混合方法

混合方法是指结合多种时序预测模型的优势,通过集成或级联的方式获得比单一模型更好的预测效果。这种方法可以弥补各类模型的不足,提高预测稳定性和准确度。

组合预测方法

线性组合

最简单的混合方法是对多个模型结果进行加权平均:

# 三个基础模型的预测结果
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])

优缺点与适用场景

优点

  • 提高预测稳定性,减少异常预测风险
  • 结合多种模型优势,弥补单一模型缺陷
  • 可适应复杂数据的多种模式
  • 可提高预测准确度

缺点

  • 模型复杂度增加,训练和维护成本高
  • 需要更多计算资源
  • 可能引入额外超参数,增加调优难度

适用场景

  • 高价值业务决策场景(如大额预算分配)
  • 多模式时间序列(如既有季节性又有趋势变化)
  • 需要同时兼顾短期和长期预测的场景
  • 稳定性要求高的场景

与其他模块的关系

混合方法通常建立在其他模型基础之上,结合了时序分析-传统统计模型时序分析-机器学习模型时序分析-深度学习模型的优势。在实际应用中,需要通过时序分析-评估指标与误差分析确定最优混合策略。混合方法对于时序分析-特征构建与变量增强的依赖取决于所使用的基础模型。在复杂的时序分析-应用场景中,混合方法往往能提供更稳定和准确的预测结果。