2大突破:BasicTS如何用选择性学习解决时间序列预测难题?
时间序列预测一直面临过拟合和异常值干扰的双重挑战。传统模型在处理复杂时序数据时,往往像海绵一样吸收所有信息,导致在噪声数据上"学偏"。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功能,只需三步即可完成集成:
- 导入回调模块
from basicts.runners.callback.selective_learning import SelectiveLearning
- 配置参数
# 初始化选择性学习回调
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 路径
)
- 添加到训练流程
# 将回调添加到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
通过智能筛选数据,让你的时间序列预测模型更专注于有效信息,性能更上一层楼!📈
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0138- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
MiniCPM-V-4.6这是 MiniCPM-V 系列有史以来效率与性能平衡最佳的模型。它以仅 1.3B 的参数规模,实现了性能与效率的双重突破,在全球同尺寸模型中登顶,全面超越了阿里 Qwen3.5-0.8B 与谷歌 Gemma4-E2B-it。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
MusicFreeDesktop插件化、定制化、无广告的免费音乐播放器TypeScript00