PyPOTS
PyPOTS:让深度学习模型原生处理含缺失值的时间序列数据,无需人工填充预处理,内置 30+ SOT
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
PyPOTS:让深度学习模型原生处理含缺失值的时间序列数据,无需人工填充预处理,内置 30+ SOT
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
在工业制造车间里,传感器每时每刻都在产生数据——温度、压力、振动、电流。然而现实远比理想骨感:传感器故障导致某几个时刻数据缺失,设备停机维护留下大片空白,采样频率不一致让不同来源的数据根本"说不上话"。这就是"部分观测时间序列"(Partially-Oversed Time Series,简称 POTS)——在真实世界中,完整数据才是稀缺品。
处理这种"不完整数据",传统做法是"先补全再分析":先用简单均值填充缺失值,再丢进标准机器学习模型。然而填充本身带来的误差会在下游任务中不断放大,导致最终预测结果严重偏离现实。PyPOTS(Python Toolbox for Machine Learning on Partially-Observed Time Series) 正是为解决这一根本矛盾而生——它让模型在训练和推理阶段都能原生处理缺失值,无需人工预处理。
PyPOTS 由新加坡南洋理工大学(NTU)研究者 Wenjie Du(杜文杰) 创建并持续维护,作者同时发表了多篇时间序列缺失值填充(Imputation)和预测相关顶会论文。PyPOTS 项目自 2022 年公开以来迅速获得学界认可,目前 GitHub Star 数已突破 2017,成为时间序列领域最具影响力的缺失数据处理开源库之一。
该项目被 PyTorch 官方生态景观(PyTorch Ecosystem Landscape)收录,表明其代码质量和工程化水平得到主流框架认可。项目核心定位是 "面向现实世界数据的机器学习工具箱",与学术界常见的"理想数据集"导向形成鲜明对比。
如果把时间序列分析模型比作一个人,那么传统模型就像一个"截肢患者"——必须先安装好"假肢"(完整数据)才能行走;而 PyPOTS 的模型是"智能义肢"——它能直接感知并适应缺失的部分,自己学会如何补偿空缺。这不仅避免了填充误差,还让模型真正学到了数据的内在规律。
PyPOTS 提供六大时间序列分析任务,每类任务都内置多个 SOTA(State-of-the-Art)深度学习模型:
1. 缺失值填充(Imputation)——最核心功能。内置 30+ 神经网络模型,包括 Transformer 架构(Autoformer、Fedformer、InceptionTime)、RNN 系列(GRU-D、BRITS)、以及最新的大模型增强方案(GPT4TS、TimesNet)。填充过程直接作为训练目标联合优化,不是事后补救。
2. 分类(Classification)——对带有缺失值的时间序列进行类别判断,适用于医疗监护(心电图分类)、工业故障诊断等场景。
3. 聚类(Clustering)——无需完整数据即可发现时间序列的内在模式和分组结构。
4. 预测(Forecasting)——基于历史(含缺失)数据预测未来趋势,直接处理不规则采样和缺失。
5. 异常检测(Anomaly Detection)——识别时间序列中的异常点,无需先做数据填充。
6. 表示学习(Representation)——学习时间序列的低维嵌入表示,为下游任务提供特征。
所有任务共享统一的训练/推理接口(BaseModel),降低了多任务切换的学习成本。
PyPOTS 代码库约 4700KB,主包 pypots/ 包含以下核心模块:
| 模块 | 职责 |
|---|---|
base.py | 抽象基类 BaseModel,定义统一的 fit() / predict() 接口,支持 GPU 多卡并行训练、AMP 混合精度、TensorBoard 日志 |
data/ | 数据集抽象层,支持 TorchDataset,内置缺失值生成器 |
nn/ | 神经网络模块目录,包含 50+ 模型实现(见下方详述) |
imputation/ | 填充任务封装 |
classification/ | 分类任务封装 |
clustering/ | 聚类任务封装 |
forecasting/ | 预测任务封装 |
anomaly_detection/ | 异常检测封装 |
utils/ | 工具函数(日志、文件、通用) |
timeseries_ai/ | 时间序列基础模型(TimesNet、TiDE 等通用架构) |
nn/modules/ 下包含的模型(按架构分类):
训练框架:使用 Optuna 进行超参数自动搜索(pypots.optim),支持贝叶斯优化调参。
数据依赖:PyGrinder(杜文杰开发的缺失值仿真库)用于生成模拟缺失数据,BenchPOTS 用于公平评测基准对比。
pip install pypots
依赖包括 PyTorch、NumPy、SciPy、Pandas、Matplotlib、scikit-learn、HuggingFace Transformers 等。最低 Python 3.9。
提供 conda_env.yml,可一键创建完整环境:
conda env create -f requirements/conda_env.yml
docker pull nvidia/cuda:12.1.0-cudnn8-devel-ubuntu22.04
# 然后参考 docker/Dockerfile_linux 构建
Dockerfile 基于 NVIDIA CUDA 12.1 基础镜像,自动从源码克隆 PyPOTS 并安装 PyTorch 环境。
PyPOTS 是纯 Python 库,无图形界面,学习门槛主要集中在:
典型使用流程(以 Imputation 为例):
from pypots.imputation import SAITS # 或 BRITs, Transformer 等
from pypots.data import DatasetForImputation
# 加载含缺失值的数据(直接传入原始数据,PyPOTS 会识别 NaN)
dataset = DatasetForImputation(raw_data)
model = SAITS(n_steps=..., n_features=...)
model.fit(dataset) # 训练时直接处理 NaN
imputed = model.predict(dataset) # 返回填充后数据
这意味着:在数据进入模型之前,你不需要做任何填充或删除操作,PyPOTS 原生理解 NaN。
真实世界的时间序列数据几乎必然存在缺失——这是传感器故障、网络延迟、人工录入错误等现实因素的必然结果。PyPOTS 的出现填补了"从缺失数据到可用模型"这一关键环节的工具链空白,让研究者和工程师不用再为数据质量焦虑。
从学术影响力看,PyPOTS 的 benchmark 评测覆盖了 30+ 模型,提供了公平的对比基准,推动了该领域的可复现研究。从工程价值看,它将前沿研究论文中的模型工程化为可用 API,大幅降低了应用门槛。
如果你正在处理传感器数据、医疗时间序列、金融数据、或者任何存在缺失值的时间序列数据,PyPOTS 是目前最专业、最全面的开源解决方案。