首页
/ 2大突破:BasicTS如何用选择性学习解决时间序列预测难题?

2大突破:BasicTS如何用选择性学习解决时间序列预测难题?

2026-04-15 08:34:46作者:廉彬冶Miranda

时间序列预测一直面临过拟合和异常值干扰的双重挑战。传统模型在处理复杂时序数据时,往往像海绵一样吸收所有信息,导致在噪声数据上"学偏"。BasicTS 1.0版本推出的Selective Learning技术,通过智能筛选训练数据,让模型学会"取舍",在多个权威数据集上实现15-20%的性能提升。

时间序列预测的核心痛点

在现实场景中,时间序列数据往往包含大量噪声和异常值。比如电力负荷预测中可能出现突发停电记录,交通流数据会受到交通事故的干扰。这些异常数据会严重影响模型的学习效果,就像学生在学习时被错误答案误导。

传统解决方案存在明显局限:

  • 固定阈值过滤:无法适应数据分布变化,容易误删有效信息
  • 简单平均处理:会模糊数据特征,降低预测精度
  • 后处理修正:滞后性强,无法实时响应异常模式

Selective Learning的突破性创新

Selective Learning技术通过动态双掩码机制,让模型像经验丰富的老师一样,能够辨别数据中的"有效知识"和"干扰信息"。这一技术已集成到src/basicts/runners/callback/selective_learning.py模块中,支持即插即用。

双掩码智能筛选机制

该技术的核心在于同时运用两种互补的筛选策略:

不确定性掩码:通过计算预测残差的熵值来判断模型对样本的把握程度。就像学生做选择题时,对不确定的题目会标记跳过。当设置r_u=0.2时,模型会自动过滤掉20%最不确定的样本。

异常掩码:利用预训练的估计模型作为"参考标准",识别明显偏离正常模式的数据点。如同质检员通过标准样本比对来发现残次品,r_a=0.1参数可过滤10%的异常样本。

核心实现逻辑

下面是选择性学习的核心代码逻辑,展示了双掩码如何协同工作:

# 双掩码协同筛选机制
if self.r_u is not None:
    # 计算残差熵值,识别高不确定性样本
    res_entropy = self._compute_entropy(self.history_residual)
    # 保留80%低不确定性样本(当r_u=0.2时)
    thresholds = torch.quantile(res_entropy, 1 - self.r_u, dim=0, keepdim=True)
    self.uncertainty_mask = res_entropy < thresholds

if self.r_a is not None:
    # 使用预训练估计模型检测异常
    with torch.no_grad():
        est_foward_return = runner._forward(self.estimation_model, data, step=0)
    # 计算偏离程度,过滤异常值
    residual_lb = torch.abs(est_foward_return["prediction"] - forward_return["targets"])
    dist = residual - residual_lb
    thresholds = torch.quantile(dist, self.r_a, dim=1, keepdim=True)
    ano_mask = dist > thresholds

实测性能提升验证

在公开数据集上的对比实验表明,Selective Learning技术能够显著提升模型性能。特别是在处理含噪声较多的真实世界数据时,优势更加明显。

长时序预测任务表现

在Electricity和Weather数据集上,采用Selective Learning的模型在WAPE指标上相对基线模型提升了15-20%,同时保持了计算效率。这意味着模型能够更精准地捕捉长期趋势,减少异常波动带来的干扰。

短时预测效率优化

在交通流预测任务中,集成Selective Learning的模型在参数规模仅为0.12M的情况下,MAE指标达到2.88,推理速度保持在7.50帧/秒,实现了精度与效率的双重优化。

快速集成使用指南

基础配置步骤

要在BasicTS中使用Selective Learning功能,只需三步即可完成集成:

  1. 导入回调模块
from basicts.runners.callback.selective_learning import SelectiveLearning
  1. 配置参数
# 初始化选择性学习回调
callback = SelectiveLearning(
    r_u=0.2,  # 不确定性掩码比例,保留80%低不确定性样本
    r_a=0.1,  # 异常掩码比例,过滤10%异常样本
    estimator=SomePretrainedModel,  # 预训练估计模型类
    estimator_config=estimator_config,  # 估计模型配置
    ckpt_path="path/to/estimator/ckpt"  # 估计模型 checkpoint 路径
)
  1. 添加到训练流程
# 将回调添加到runner
runner.add_callback(callback)

参数调优技巧

  • r_u参数:数据噪声较多时建议设为0.2-0.3,干净数据可设为0.1
  • r_a参数:异常值比例高的场景可提高至0.15,平稳数据建议0.05
  • 估计模型:优先选择在同类数据上预训练的简单模型,如线性回归或轻量级神经网络

未来展望与行动指南

Selective Learning技术为时间序列预测提供了一种通用的性能优化方案,不仅适用于预测任务,还可扩展到时间序列分类、填补等场景。未来版本将进一步优化动态阈值调整策略,并探索与注意力机制的融合。

立即体验Selective Learning带来的性能提升:

git clone https://gitcode.com/gh_mirrors/v41/v4

通过智能筛选数据,让你的时间序列预测模型更专注于有效信息,性能更上一层楼!📈

登录后查看全文
热门项目推荐
相关项目推荐