在时间序列预测任务中,波动性(Volatility)是模型性能稳定性的“头号杀手”。无论是金融市场的价格预测、电商平台的销量预估,还是工业设备的故障预警,预测结果的剧烈波动不仅会降低决策的可信度,更可能导致在实际应用中产生严重的误判。传统的单一模型预测,往往难以在捕捉复杂时序模式的同时,保持预测轨迹的平滑与稳定。本文将深入探讨一种名为 Forking-Sequences 的集成策略,特别是其多时域预测集成方法,如何通过巧妙的架构设计,有效“熨平”预测波动,提升模型的鲁棒性与实用性。无论你是数据科学家、算法工程师,还是对时序预测感兴趣的研究者,本文将从原理到实践,为你完整拆解这套降低波动性的技术方案。

1. 理解预测波动性的根源与挑战

在深入技术细节之前,我们首先要明确:预测波动性从何而来,它又带来了哪些具体挑战?

1.1 波动性的定义与表现

在时间序列预测的上下文中,波动性并非指数据本身的方差,而是指 模型在连续时间步上的预测输出表现出非预期的、剧烈的跳跃或不稳定性 。例如,一个销量预测模型,昨天预测明天销量为1000件,今天预测明天销量却变成了1500件,而实际的市场需求并未发生如此剧烈的变化。这种预测值在短时间内的巨大差异,就是波动性的典型表现。

1.2 波动性的主要成因

  1. 模型过拟合与噪声敏感 :模型过度学习了训练数据中的随机噪声或短期异常点(如促销、断货),导致其对输入数据的微小变化反应过度。
  2. 单一模型的结构局限性 :无论是RNN、LSTM还是Transformer,单一模型结构在捕捉长期依赖和短期模式上可能存在盲区,当序列模式发生变化时,预测容易失准。
  3. 预测误差的累积与传播 :在自回归的多步预测中,当前步的预测误差会作为输入的一部分影响下一步的预测,导致误差在时间维度上被放大和传播,形成波动。
  4. 数据的不确定性 :真实世界的数据生成过程本身具有不确定性,模型试图拟合这种不确定性时,可能产生不稳定的预测输出。

1.3 波动性带来的实际问题

  • 决策困难 :业务方无法信任一个“上蹿下跳”的预测结果来做库存、排产或投资决策。
  • 评估失真 :使用MAE、RMSE等点估计误差指标评估模型时,一个平均误差小但波动大的模型,可能比一个平均误差稍大但稳定的模型带来更差的业务体验。
  • 系统损耗 :基于波动预测进行的频繁调整(如自动调价、资源调度)会导致系统不必要的磨损和成本增加。

因此,降低预测波动性,追求稳定、可靠的预测输出,是提升时序预测模型落地价值的关键一环。

2. Forking-Sequences 核心思想回顾与多时域集成引入

在系列(一)中,我们介绍了Forking-Sequences的基本思想: 在同一个训练批次中,从一条长序列的不同时间点“分叉”(Fork),生成多个具有不同起点但预测目标一致的训练样本 。这种方法极大地扩充了训练数据,让模型学习到在不同历史背景下预测同一未来时段的能力,从而提升了泛化性。

而 多时域预测集成 ,是在此思想上的进阶。其核心在于: 训练多个专注于不同预测时域(Forecasting Horizon)的专家模型,并在推理时将它们对同一未来的预测进行智能融合。

2.1 从单一时域到多时域

传统方法通常使用一个模型预测所有未来步(如未来7天)。但模型可能擅长预测明天(短期),却不擅长预测下周同日(长期)。多时域集成的思路是:

  • 短期专家 :专门训练来预测未来第1-3天。
  • 中期专家 :专门训练来预测未来第4-7天。
  • 长期专家 :专门训练来预测未来第8-14天及更远。

每个“专家”都是一个独立的预测模型,但共享相似的基础架构(如都是LSTM或Transformer)。

2.2 集成如何降低波动性:方差减少理论

从集成学习的角度看,多时域集成本质上是 一种模型平均(Model Averaging) 。根据集成学习理论,模型的泛化误差可以分解为偏差(Bias)、方差(Variance)和噪声(Noise)。其中, 方差 衡量了模型对于训练数据微小变化的敏感度,正是预测波动性的主要来源。

当我们将多个独立训练的专家模型的预测进行平均或加权平均时,只要这些模型的误差是不完全相关的,集成后的预测结果的方差就会小于单个模型的方差。用公式简单表示:

Var(平均预测) ≈ (1/N) * Var(单个预测) + (1 - 1/N) * Cov(预测间协方差)

如果专家模型之间的预测误差相关性较低(Cov较小),那么集成的方差将显著降低。多时域专家模型因为专注于不同的预测目标,其学到的模式和产生的误差往往具有一定的独立性,从而满足了降低方差的条件。

3. 环境准备与核心工具

在开始实战之前,我们需要搭建实验环境。本文以Python为核心,使用PyTorch作为深度学习框架。

3.1 环境与版本说明

建议使用Python 3.8+版本。以下是通过 conda 创建环境的示例:

# 创建并激活环境
conda create -n ts_forecast python=3.9
conda activate ts_forecast

# 安装核心依赖
pip install torch==1.13.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu  # 根据CUDA版本调整
pip install numpy pandas matplotlib scikit-learn
pip install pytorch-forecasting  # 一个优秀的时序预测库,可选,用于数据工具

关键依赖说明 :

  • PyTorch :构建和训练神经网络模型。
  • NumPy/Pandas :数据处理和操作。
  • Matplotlib :结果可视化。
  • Scikit-learn :用于数据标准化和评估指标。
  • pytorch-forecasting :非必须,但提供了丰富的数据集工具和基准模型,能加速开发。

3.2 项目结构规划

一个清晰的项目结构有助于管理多模型实验。

forking_sequences_project/
│
├── data/
│   ├── raw/               # 存放原始数据
│   ├── processed/         # 存放处理后的数据
│   └── dataloader.py      # 数据加载与Forking-Sequences样本生成器
│
├── models/
│   ├── base_model.py      # 基础模型定义(如LSTM/Transformer)
│   ├── expert_short.py    # 短期专家模型
│   ├── expert_medium.py   # 中期专家模型
│   └── expert_long.py     # 长期专家模型
│
├── training/
│   ├── trainer.py         # 通用的训练循环
│   └── config.yaml        # 训练超参数配置
│
├── ensemble/
│   └── integrator.py      # 多专家预测集成器
│
├── utils/
│   ├── metrics.py         # 评估指标计算
│   └── visualization.py   # 绘图工具
│
├── experiments/           # 不同实验的脚本和结果
└── main.py               # 主程序入口

4. 实战:构建多时域预测集成系统

我们将以一个公开的电力负荷数据集为例,预测未来14天的每日负荷。目标是构建短期(1-3天)、中期(4-7天)、长期(8-14天)三个专家模型,并集成它们的预测。

4.1 数据准备与Forking-Sequences样本生成

首先,实现一个能够生成Forking-Sequences训练样本的数据加载器。

# file: data/dataloader.py
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader

class ForkingSequenceDataset(Dataset):
    """
    生成Forking-Sequences训练样本的数据集。
    每条样本:从长序列中随机一个历史起点,截取一段历史窗口,预测一段固定的未来窗口。
    通过改变历史起点,为同一个未来窗口生成多个训练样本。
    """
    def __init__(self, series, history_len=56, forecast_len=14, num_forks=5, stride=1):
        """
        Args:
            series: 完整的时间序列,形状为 [total_timesteps, features]
            history_len: 历史窗口长度
            forecast_len: 预测窗口长度
            num_forks: 为每个预测窗口生成的分叉样本数
            stride: 滑动窗口的步长(用于控制样本密度)
        """
        self.series = series.astype(np.float32)
        self.history_len = history_len
        self.forecast_len = forecast_len
        self.num_forks = num_forks
        self.stride = stride
        self.total_len = len(series)

        # 计算所有可能的有效样本索引
        self.samples = []
        # 预测窗口的结束点不能超过序列总长
        for forecast_end in range(history_len + forecast_len, self.total_len, stride):
            # 为这个预测窗口生成num_forks个不同的历史起点
            for _ in range(num_forks):
                # 随机选择一个历史起点,确保能截取足够长的历史
                history_start_max = forecast_end - forecast_len - history_len
                if history_start_max < 0:
                    continue
                history_start = np.random.randint(0, history_start_max + 1)
                history_end = history_start + history_len
                target_start = forecast_end - forecast_len
                target_end = forecast_end

                self.samples.append({
                    'history_start': history_start,
                    'history_end': history_end,
                    'target_start': target_start,
                    'target_end': target_end
                })

    def __len__(self):
        return len(self.samples)

    def __getitem__(self, idx):
        sample_info = self.samples[idx]
        hs, he = sample_info['history_start'], sample_info['history_end']
        ts, te = sample_info['target_start'], sample_info['target_end']

        history = self.series[hs:he]  # [history_len, features]
        target = self.series[ts:te]   # [forecast_len, features] 通常只取目标变量列

        # 转换为PyTorch张量
        history_tensor = torch.from_numpy(history)
        target_tensor = torch.from_numpy(target[:, 0])  # 假设第一列是我们要预测的目标

        return history_tensor, target_tensor

# 示例:创建针对不同预测时域的数据集
def create_expert_datasets(series, expert_horizons):
    """
    expert_horizons: 字典,例如 {
        'short': (history_len=56, forecast_len=3, forecast_offset=0),
        'medium': (56, 4, 3), # 预测第4-7天,所以offset=3
        'long': (56, 7, 7)    # 预测第8-14天,offset=7
    }
    注意:这里简化处理,实际需要根据offset调整target的截取位置。
    """
    datasets = {}
    for name, (hist_len, fcst_len, offset) in expert_horizons.items():
        # 需要对原始序列进行偏移,以对齐不同专家的预测起点
        # 更通用的做法是在数据加载器中处理offset,这里为简化说明逻辑
        dataset = ForkingSequenceDataset(series, history_len=hist_len, forecast_len=fcst_len)
        datasets[name] = dataset
    return datasets

4.2 构建基础预测模型

我们以一个简单的LSTM模型作为所有专家模型的基础架构。

# file: models/base_model.py
import torch.nn as nn

class TimeSeriesLSTM(nn.Module):
    """一个基础的LSTM时序预测模型"""
    def __init__(self, input_size, hidden_size, num_layers, output_size, dropout=0.2):
        super(TimeSeriesLSTM, self).__init__()
        self.hidden_size = hidden_size
        self.num_layers = num_layers

        self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True, dropout=dropout if num_layers>1 else 0)
        self.fc = nn.Linear(hidden_size, output_size)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x):
        # x shape: (batch_size, seq_len, input_size)
        lstm_out, _ = self.lstm(x)  # lstm_out shape: (batch_size, seq_len, hidden_size)
        # 我们只取最后一个时间步的输出用于预测未来多个步
        last_time_step = lstm_out[:, -1, :] # (batch_size, hidden_size)
        last_time_step = self.dropout(last_time_step)
        output = self.fc(last_time_step)    # (batch_size, output_size)
        # 注意:这里output_size应等于forecast_len
        # 更复杂的结构可以使用Seq2Seq或直接输出多步
        return output.unsqueeze(-1)  # 变为 (batch_size, output_size, 1),方便后续处理

# 定义不同专家模型(本质上配置不同)
class ShortTermExpert(TimeSeriesLSTM):
    def __init__(self, input_size, hidden_size=128):
        super().__init__(input_size, hidden_size, num_layers=2, output_size=3) # 预测3步

class MediumTermExpert(TimeSeriesLSTM):
    def __init__(self, input_size, hidden_size=128):
        super().__init__(input_size, hidden_size, num_layers=2, output_size=4) # 预测4步

class LongTermExpert(TimeSeriesLSTM):
    def __init__(self, input_size, hidden_size=128):
        super().__init__(input_size, hidden_size, num_layers=2, output_size=7) # 预测7步

4.3 训练各专家模型

分别训练三个专家模型。训练过程是标准的PyTorch训练循环。

# file: training/trainer.py
import torch
import torch.optim as optim
from torch.utils.data import DataLoader

def train_expert(model, train_loader, val_loader, epochs=50, lr=0.001, device='cpu'):
    model.to(device)
    criterion = nn.MSELoss()  # 回归任务使用均方误差损失
    optimizer = optim.Adam(model.parameters(), lr=lr)
    scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min', patience=5)

    best_val_loss = float('inf')
    for epoch in range(epochs):
        # 训练阶段
        model.train()
        train_loss = 0.0
        for batch_x, batch_y in train_loader:
            batch_x, batch_y = batch_x.to(device), batch_y.to(device)
            optimizer.zero_grad()
            outputs = model(batch_x)
            loss = criterion(outputs.squeeze(), batch_y) # 调整维度匹配
            loss.backward()
            optimizer.step()
            train_loss += loss.item() * batch_x.size(0)

        avg_train_loss = train_loss / len(train_loader.dataset)

        # 验证阶段
        model.eval()
        val_loss = 0.0
        with torch.no_grad():
            for batch_x, batch_y in val_loader:
                batch_x, batch_y = batch_x.to(device), batch_y.to(device)
                outputs = model(batch_x)
                loss = criterion(outputs.squeeze(), batch_y)
                val_loss += loss.item() * batch_x.size(0)

        avg_val_loss = val_loss / len(val_loader.dataset)
        scheduler.step(avg_val_loss)

        # 保存最佳模型
        if avg_val_loss < best_val_loss:
            best_val_loss = avg_val_loss
            torch.save(model.state_dict(), f'best_{model.__class__.__name__}.pth')

        if (epoch+1) % 10 == 0:
            print(f'Epoch [{epoch+1}/{epochs}], Train Loss: {avg_train_loss:.4f}, Val Loss: {avg_val_loss:.4f}')

    print(f'Training finished. Best Val Loss: {best_val_loss:.4f}')
    return model

4.4 多专家预测集成器

这是降低波动性的核心。集成策略可以是简单的平均,也可以是根据验证集性能分配的加权平均,甚至是可以学习的元模型(Stacking)。

# file: ensemble/integrator.py
import numpy as np
import torch

class MultiHorizonEnsemble:
    """多时域专家模型集成器"""
    def __init__(self, expert_models, expert_horizons, integration_method='weighted_average'):
        """
        Args:
            expert_models: 字典,键为专家名,值为加载好权重的模型实例。
            expert_horizons: 字典,定义每个专家的预测范围,例如:
                {'short': (0, 3), 'medium': (3, 7), 'long': (7, 14)}
                表示short预测第0-2步,medium预测第3-6步,long预测第7-13步。
            integration_method: 集成方法,可选 'simple_average', 'weighted_average', 'median'。
        """
        self.experts = expert_models
        self.horizons = expert_horizons
        self.method = integration_method
        # 可以基于验证集性能计算权重
        self.weights = {'short': 0.4, 'medium': 0.35, 'long': 0.25}  # 示例权重

    def predict(self, history_seq):
        """
        Args:
            history_seq: 历史序列,形状 [batch_size, history_len, features]
        Returns:
            integrated_forecast: 集成后的预测,形状 [batch_size, total_forecast_horizon]
        """
        predictions = {}
        device = next(iter(self.experts.values())).parameters().__next__().device

        with torch.no_grad():
            history_tensor = torch.from_numpy(history_seq).float().to(device)
            for name, model in self.experts.items():
                model.eval()
                pred = model(history_tensor)  # 形状 [batch_size, expert_horizon, 1]
                predictions[name] = pred.squeeze(-1).cpu().numpy()  # [batch_size, expert_horizon]

        # 集成
        total_horizon = max(end for _, end in self.horizons.values())
        batch_size = history_seq.shape[0]
        integrated = np.zeros((batch_size, total_horizon))

        if self.method == 'simple_average':
            # 对于重叠区域进行平均
            for name, pred in predictions.items():
                start, end = self.horizons[name]
                integrated[:, start:end] = pred
            # 假设有重叠,对每个位置求平均(需要记录覆盖次数)
            # 这里简化,假设专家预测范围不重叠
        elif self.method == 'weighted_average':
            for name, pred in predictions.items():
                start, end = self.horizons[name]
                integrated[:, start:end] = pred * self.weights[name]
        elif self.method == 'median':
            # 将各专家预测收集起来,按时间步取中位数
            all_preds = []
            for name, pred in predictions.items():
                start, end = self.horizons[name]
                temp = np.full((batch_size, total_horizon), np.nan)
                temp[:, start:end] = pred
                all_preds.append(temp)
            # 沿着专家维度堆叠并取中位数
            stacked = np.stack(all_preds, axis=2) # [batch, horizon, num_experts]
            integrated = np.nanmedian(stacked, axis=2)

        return integrated

    def calculate_weights_from_val_loss(self, val_loss_dict):
        """根据验证集损失动态计算权重(损失越小,权重越大)"""
        # 使用softmax转换,使权重和为1
        losses = np.array([val_loss_dict[name] for name in self.experts.keys()])
        # 将损失取倒数(损失小则倒数大),然后softmax
        inv_losses = 1.0 / (losses + 1e-8)  # 避免除零
        softmax_weights = np.exp(inv_losses) / np.sum(np.exp(inv_losses))
        self.weights = dict(zip(self.experts.keys(), softmax_weights))
        print(f"Updated ensemble weights: {self.weights}")

5. 波动性分析与效果验证

如何量化评估集成方法对波动性的降低效果?

5.1 波动性量化指标

除了传统的MAE、RMSE,我们引入两个针对波动性的指标:

  1. 预测轨迹标准差(Prediction Trajectory Std) :在测试集上,模型对同一时间点(如未来第t天)的多次预测(来自不同测试样本)的标准差。平均值可以反映模型预测的整体波动水平。
  2. 连续预测差异均值(Mean Absolute Consecutive Difference, MACD) :计算模型在连续时间步上预测值的绝对差异的平均值。对于单条预测序列 y_pred = [y1, y2, ..., yT] , MACD = mean(|y_{t+1} - y_t|) 。这个值越小,说明预测轨迹越平滑。

5.2 对比实验设计

  1. 基准模型 :一个单一的LSTM模型,直接预测未来14天。
  2. Forking-Sequences单模型 :使用Forking-Sequences数据增强训练的单模型。
  3. 多时域集成模型 :本文实现的三个专家模型集成。

在同一个测试集上运行这三个模型,并计算它们的MAE、RMSE以及上述的 MACD 指标。

5.3 结果可视化

绘制预测曲线对比图是直观感受波动性降低的最佳方式。

# file: utils/visualization.py
import matplotlib.pyplot as plt

def plot_forecast_comparison(actual, pred_baseline, pred_forking, pred_ensemble, timesteps):
    """
    绘制真实值、基准模型预测、Forking单模型预测、集成模型预测的对比图。
    """
    plt.figure(figsize=(14, 6))
    plt.plot(timesteps, actual, 'k-', linewidth=2, label='Actual', alpha=0.8)
    plt.plot(timesteps, pred_baseline, 'r--', label='Baseline (Single Model)', alpha=0.7)
    plt.plot(timesteps, pred_forking, 'b:', label='Forking-Seq (Single)', alpha=0.7)
    plt.plot(timesteps, pred_ensemble, 'g-', label='Multi-Horizon Ensemble', linewidth=1.5, alpha=0.9)

    plt.fill_between(timesteps, pred_ensemble - np.std(pred_ensemble), pred_ensemble + np.std(pred_ensemble),
                     color='green', alpha=0.2, label='Ensemble ±1 Std')
    plt.xlabel('Future Time Steps')
    plt.ylabel('Value')
    plt.title('Forecast Comparison: Smoothness Analysis')
    plt.legend()
    plt.grid(True, linestyle='--', alpha=0.5)
    plt.tight_layout()
    plt.show()

# 计算并打印波动性指标
def print_volatility_metrics(predictions_dict, actual):
    """
    predictions_dict: {'Baseline': pred1, 'Forking': pred2, 'Ensemble': pred3}
    """
    print("="*50)
    print("Volatility Metrics Comparison")
    print("="*50)
    for name, pred in predictions_dict.items():
        mae = np.mean(np.abs(pred - actual))
        rmse = np.sqrt(np.mean((pred - actual)**2))
        # 计算MACD (假设pred是一维数组)
        macd = np.mean(np.abs(np.diff(pred)))
        print(f"{name:20s} | MAE: {mae:7.4f} | RMSE: {rmse:7.4f} | MACD: {macd:7.4f}")
    print("="*50)
    print("Note: Lower MACD indicates smoother (less volatile) predictions.")

预期结果 :在多轮实验后,通常可以观察到,多时域集成模型的 MACD 值显著低于基准单模型,同时其MAE和RMSE也可能有竞争力甚至更优。预测曲线图会显示,集成模型的预测轨迹更加平滑,更贴近真实数据的趋势,而基准模型的预测则可能出现更多“锯齿状”的跳动。

6. 常见问题与排查思路

在实现和应用多时域集成方法时,你可能会遇到以下问题:

问题现象 可能原因 排查与解决思路
集成后预测性能反而下降 1. 专家模型本身性能太差。
2. 集成权重设置不合理(如给性能差的模型过高权重)。
3. 各专家预测范围重叠或间隙处理不当。
1. 首先确保每个专家模型在各自验证集上独立表现良好。
2. 尝试不同的集成方法:简单平均、加权平均(按验证损失赋权)、中位数法。
3. 检查 expert_horizons 定义,确保覆盖完整且无冲突。对于重叠区,可以尝试取平均;对于间隙,需要用某个专家外推或插值。
训练时损失震荡剧烈 1. 学习率设置过高。
2. 批次内样本差异过大(Forking-Sequences导致)。
3. 梯度爆炸。
1. 使用学习率调度器(如ReduceLROnPlateau),并尝试更小的初始学习率。
2. 确保数据已标准化/归一化。检查Forking序列的起点是否过于随机,可适当减小 num_forks 。
3. 添加梯度裁剪( torch.nn.utils.clip_grad_norm_ )。
长期专家模型训练困难 预测步长( forecast_len )过长,远超模型能力。 1. 增加模型容量(如更多LSTM层、更大隐藏层)。
2. 使用Seq2Seq结构(带注意力机制)替代直接多步输出。
3. 考虑使用分层的预测策略,或用其他模型(如ARIMA)辅助长期趋势预测。
推理速度慢 需要运行多个专家模型进行推理。 1. 模型轻量化,减少参数量。
2. 使用ONNX Runtime或TensorRT进行模型优化和加速。
3. 在资源允许的情况下进行批量推理。对于实时性要求不高的场景,此开销通常可接受。
如何处理多变量预测? 基础示例只预测单变量。 修改模型输出层, output_size = forecast_len * num_target_variables ,并在损失函数和集成器中正确处理多变量维度。或者为每个重要变量训练独立的专家模型组。

7. 最佳实践与工程建议

将多时域预测集成应用于生产环境时,需考虑以下工程实践:

  1. 专家模型的独立性 :

    • 数据独立性 :虽然都源自同一数据集,但可以通过为不同专家使用不同的数据采样策略、数据增强方式来进一步去相关,增强集成效果。
    • 模型结构多样性 :不必所有专家都是LSTM。可以混合使用LSTM、GRU、Transformer甚至简单的线性模型。多样性是集成学习成功的关键。
  2. 动态权重调整 :

    • 不要固定权重。可以定期(如每周)在最新的验证集上重新计算各专家模型的性能,并动态更新集成权重。这能让集成系统适应数据分布的变化。
  3. 不确定性量化 :

    • 集成本身提供了一种简单的不确定性估计。例如,可以计算各专家预测的标准差或分位数,作为预测区间的参考。将“预测值±波动范围”输出给下游业务,能增加决策的可靠性。
  4. 流水线与自动化 :

    • 将整个流程(数据预处理、各专家训练、权重计算、集成预测) pipeline 化。使用像Airflow或Prefect这样的调度工具,实现定期自动化的模型重训和部署。
  5. 监控与告警 :

    • 监控每个专家模型的预测性能(如在线MAE)以及集成最终输出的波动性指标(MACD)。当某个专家性能持续下降或整体波动性异常升高时,触发告警,提示需要检查数据或模型。
  6. 与领域知识结合 :

    • 专家时域的划分不应是机械的(如固定1-3,4-7天)。应该结合业务周期。例如,零售预测中,可以设立“工作日专家”、“周末专家”、“促销期专家”。让领域知识指导专家的设计,能极大提升集成的效果。

通过本文的拆解,我们从波动性的根源出发,深入探讨了Forking-Sequences多时域预测集成降低波动性的原理,并提供了从数据准备、模型构建、训练集成到评估分析的完整实战路径。这种方法的核心优势在于,它通过“分而治之”和“集体决策”的思想,将复杂的全局预测任务分解为多个更易处理的子任务,并利用模型平均来抑制单一模型的不稳定输出。在实际项目中,你可以以此为蓝本,根据具体业务数据的特点,灵活调整专家数量、预测时域、模型结构和集成策略,从而构建出更加强大、稳定的时序预测系统。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐