SAITS
SAITS 是一款基于 PyTorch 开发的开源深度学习模型,专为高效处理多变量时间序列数据中的缺失值而设计。在物联网传感器、金融分析及医疗监测等场景中,数据因设备故障或传输错误出现中断是常见难题,传统插补方法往往难以捕捉复杂的时间依赖关系。SAITS 通过引入纯粹的自注意力机制(Self-Attention),摒弃了传统的递归结构,能够直接从全局视角理解数据特征,从而精准地填补包含 NaN 缺失值的时序数据。
作为该领域的标杆性成果,SAITS 不仅推理速度快,更在多项基准测试中达到了业界领先(SOTA)的精度。其核心亮点在于创新的“双重注意力”架构与联合训练策略,使其能同时关注时间步之间的关联以及不同变量间的相互作用。此外,相关团队还将 SAITS 的核心嵌入与训练技巧迁移至 iTransformer、PatchTST 等多种主流架构中,进一步验证了其技术的通用性与有效性。
这款工具非常适合人工智能研究人员、数据科学家及后端开发者使用。无论是需要复现前沿算法的学术探索者,还是致力于构建高可靠性数据管道的工程人员,都能利用 SAITS 轻松解决数据不完整带来的分析障碍,为后续的预测与决策提供高质量的数据基础。
使用场景
某智慧工厂的数据团队正在处理来自数百台传感器的实时监测数据,试图预测设备故障,但原始数据中因网络波动存在大量缺失值(NaN)。
没有 SAITS 时
- 简单填充导致失真:团队被迫使用均值或线性插值填补空缺,完全忽略了传感器数据间复杂的非线性关联,导致异常模式被抹平。
- 多变量关系断裂:传统方法难以同时利用温度、振动、压力等多个相关变量的信息,无法通过其他正常传感器的数据来推断缺失值。
- 模型训练效果差:由于输入数据质量低,下游的故障预测模型准确率大幅下滑,频繁出现误报或漏报,工程师不得不花费大量时间人工清洗数据。
- 长序列依赖丢失:面对长时间跨度的数据块缺失,基于递归的传统深度学习模型计算缓慢且容易遗忘早期的关键状态信息。
使用 SAITS 后
- 自注意力精准重构:SAITS 利用纯自注意力机制,自动捕捉时间步之间的全局依赖关系,即使面对大块连续缺失,也能基于上下文生成高保真的填补值。
- 多变量协同推理:模型充分利用了多变量间的内在联系,例如通过正常的电流读数精准推导出缺失的扭矩数据,显著提升了数据完整性。
- 下游任务性能飞跃:经过 SAITS 修复的数据集直接用于训练,使故障预测模型的 F1 分数提升了 15%,大幅减少了不必要的停机维护检查。
- 高效并行处理:得益于非递归的架构设计,SAITS 在处理长达数月的历史数据时速度极快,将原本需要数小时的数据预处理流程缩短至分钟级。
SAITS 通过深度自注意力机制将残缺的工业时序数据转化为高质量资产,让企业能够直接从“脏数据”中挖掘出可靠的决策洞察。
运行环境要求
- 未说明
未说明 (基于 PyTorch,通常支持 CUDA 加速,但 README 未明确具体型号或版本要求)
未说明

快速开始
[!TIP] [2025年5月更新] 🎉 我们的综述论文《用于多变量时间序列插补的深度学习:综述》(Deep Learning for Multivariate Time Series Imputation: A Survey)已被IJCAI 2025接收! 我们全面回顾了当前最先进的基于深度学习的时间序列插补方法的相关文献,提出了一个基于不确定性与模型架构的新分类体系,系统性地比较了多个工具包,并探讨了该领域的挑战与未来发展方向。
[2024年6月更新] 😎 第一篇全面的时间序列插补基准研究论文 《TSI-Bench:时间序列插补基准测试》(TSI-Bench: Benchmarking Time Series Imputation)现已公开发布。 代码已在仓库Awesome_Imputation中开源。 通过近35,000次实验,我们对28种插补方法、3种缺失模式(点缺失、序列缺失、块缺失)、不同缺失率以及8个真实世界数据集进行了全面的基准测试。
[2024年5月更新] 🔥 我们将SAITS的嵌入和训练策略应用于
PyPOTS中的iTransformer、FiLM、FreTS、Crossformer、PatchTST、DLinear、ETSformer、FEDformer、 Informer、Autoformer、Non-stationary Transformer、Pyraformer、Reformer、SCINet、RevIN、Koopa、MICN、TiDE以及StemGNN,使它们能够适用于时间序列插补任务。
‼️温馨提示:本文档可以帮助您解答许多常见问题,请在运行代码之前仔细阅读。
官方代码库对应的是论文《SAITS:基于自注意力机制的时间序列插补》(SAITS: Self-Attention-based Imputation for Time Series),该论文已被期刊*Expert Systems with Applications (ESWA)*接受 [2022年影响因子8.665,CiteScore 12.2,JCR-Q1,CAS-Q1,CCF-C]。您可能从未听说过ESWA, 但它曾在2016年被Google Scholar评为人工智能领域顶级出版物中的第一名 (信息来源),并且至今仍是Google Scholar排名首位的人工智能期刊 (当前排名列表,供您参考)。
SAITS是首个在算法中完全采用自注意力机制、而不使用任何递归设计的通用时间序列插补工作。 基本上,您可以将其视为一个经过验证的时间序列插补框架,就像我们通过适配SAITS框架,将超过2️⃣0️⃣种预测模型集成到PyPOTS中一样。 更广泛地说,它也可以用于序列插补。此外,这里的代码以MIT许可证开源。 因此,欢迎您根据自己的研究目的和领域应用修改SAITS代码。 当然,在特定场景或数据输入下,可能需要对模型结构或损失函数进行一些调整。 以下是一份不完全清单,展示了科学界在论文中引用SAITS的情况。
🤗 如果SAITS对您的工作有所帮助,请在您的出版物中引用SAITS。
如果您认为它有用,请为本仓库点亮星标🌟,以便更多人注意到SAITS。
这对我们的开源研究意义重大。感谢您的支持!
顺带一提,您可能也会喜欢
PyPOTS
,它可以轻松处理您那些部分观测的时间序列数据集。
SAITS现已集成到PYPOTS中,这是一个用于处理部分观测时间序列(POTS)的数据挖掘Python工具箱。 下面展示了使用SAITS对PhysioNet-2012数据集进行插补的示例。借助PYPOTS,一切都变得轻而易举!😉
👉 点击此处查看示例 👀
import numpy as np
from sklearn.preprocessing import StandardScaler
from pygrinder import mcar, calc_missing_rate
from benchpots.datasets import preprocess_physionet2012
data = preprocess_physionet2012(subset='set-a',rate=0.1) # 我们的生态系统库会自动下载并解压数据集
train_X, val_X, test_X = data["train_X"], data["val_X"], data["test_X"]
print(train_X.shape) # (n_samples, n_steps, n_features)
print(val_X.shape) # 训练集和验证集的样本数不同,但它们具有相同的序列长度(n_steps)和特征维度(n_features)
print(f"训练集中有{calc_missing_rate(train_X):.1%}的值缺失")
train_set = {"X": train_X} # 在训练集中,只需将不完整的时序数据放入即可
val_set = {
"X": val_X,
"X_ori": data["val_X_ori"], # 在验证集中,我们需要真实标签来进行评估和选择最佳模型检查点
}
test_set = {"X": test_X} # 在测试集中,只提供待填补的不完整时序数据
test_X_ori = data["test_X_ori"] # test_X_ori 包含用于评估的真实标签
indicating_mask = np.isnan(test_X) ^ np.isnan(test_X_ori) # mask 标记了 X 中缺失但 X_ori 中未缺失的值,即真实标签所在的位置
from pypots.imputation import SAITS # 导入你想要使用的模型
from pypots.nn.functional import calc_mae
saits = SAITS(n_steps=train_X.shape[1], n_features=train_X.shape[2], n_layers=2, d_model=256, n_heads=4, d_k=64, d_v=64, d_ffn=128, dropout=0.1, epochs=5)
saits.fit(train_set, val_set) # 在数据集上训练模型
imputation = saits.impute(test_set) # 填补原本缺失以及人为添加的缺失值
mae = calc_mae(imputation, np.nan_to_num(test_X_ori), indicating_mask) # 在真实标签(人为添加的缺失值)上计算平均绝对误差
saits.save("save_it_here/saits_physionet2012.pypots") # 保存模型以备将来使用
saits.load("save_it_here/saits_physionet2012.pypots") # 加载已序列化的模型文件,以便后续填补或训练
❖ 动机与性能
⦿ 动机: SAITS 主要是为了克服基于 RNN 的填补模型的缺点(速度慢、内存限制和误差累积),并在部分观测的时序数据上达到最先进的填补准确度而开发的。
⦿ 性能: SAITS 在 MAE(平均绝对误差)方面比 BRITS 高出 12% ∼ 38%,并且训练速度提高了 2.0 ∼ 2.6 倍。此外,SAITS 还比采用联合优化方法训练的 Transformer 在 MAE 上高出 2% ∼ 19%,同时其模型结构更加高效(为了达到相当的性能,SAITS 所需的参数仅为 Transformer 的 15% ∼ 30%)。与另一个 SOTA 自注意力填补模型 NRTSI 相比,SAITS 的均方误差小了 7% ∼ 39%(其中九个案例中的误差减少超过 20%),而且在实际应用中所需的参数更少,填补时间也更短。有关 SAITS 性能的更多详细信息,请参阅我们的 完整论文。
❖ 方法论简图说明
这里仅展示我们方法的两个主要组成部分:联合优化训练方法和 SAITS 结构。详细的描述和解释,请阅读本仓库中的完整论文 Paper_SAITS.pdf 或者 arXiv 上的版本。
图1:训练方法
图2:SAITS 结构
❖ 引用 SAITS
如果您发现 SAITS 对您的工作有所帮助,请按照以下方式引用我们的论文,⭐️给这个仓库加星,并推荐给可能需要它的人。🤗 谢谢!
@article{du2023saits,
title = {{SAITS: Self-Attention-based Imputation for Time Series}},
journal = {Expert Systems with Applications},
volume = {219},
pages = {119619},
year = {2023},
issn = {0957-4174},
doi = {10.1016/j.eswa.2023.119619},
url = {https://arxiv.org/abs/2202.08516},
author = {Wenjie Du and David Cote and Yan Liu},
}
或者
Wenjie Du, David Cote 和 Yan Liu. SAITS: 基于自注意力机制的时间序列填补。 Expert Systems with Applications, 第219卷,第119619页,2023年。
😎 我们关于时间序列填补的最新综述和基准研究也可能对您的工作有所帮助:
@article{wang2025survey,
title={Deep Learning for Multivariate Time Series Imputation: A Survey},
author={Jun Wang 和 Wenjie Du 和 Yiyuan Yang 和 Linglong Qian 和 Wei Cao 和 Keli Zhang 和 Wenjia Wang 和 Yuxuan Liang 和 Qingsong Wen},
booktitle = {第34届国际人工智能联合会议(IJCAI)论文集},
year={2025}
}
@article{du2024tsibench,
title={TSI-Bench: Benchmarking Time Series Imputation},
author={Wenjie Du 和 Jun Wang 和 Linglong Qian 和 Yiyuan Yang 和 Fanxing Liu 和 Zepu Wang 和 Zina Ibrahim 和 Haoxin Liu 和 Zhiyuan Zhao 和 Yingjie Zhou 和 Wenjia Wang 和 Kaize Ding 和 Yuxuan Liang 和 B. Aditya Prakash 和 Qingsong Wen},
journal={arXiv 预印本 arXiv:2406.12747},
year={2024}
}
🔥 如果您在研究中使用了 PyPOTS,请也引用以下论文:
@article{du2023pypots,
title={{PyPOTS: a Python toolbox for data mining on Partially-Observed Time Series}},
author={Wenjie Du},
journal={arXiv 预印本 arXiv:2305.18811},
year={2023},
}
或者
Wenjie Du. PyPOTS: 一个用于挖掘部分观测时间序列数据的 Python 工具箱。 arXiv,编号 2305.18811,2023年。
❖ 仓库结构
SAITS 的实现位于目录 modeling 中。我们在目录 configs 中提供了模型配置,在目录 dataset_generating_scripts 中提供了数据集链接和预处理脚本。目录 NNI_tuning 则包含超参数搜索的配置。
❖ 开发环境
我们的开发环境的所有依赖项都列在文件 conda_env_dependencies.yml 中。
您可以通过 Anaconda 命令 conda env create -f conda_env_dependencies.yml 快速创建一个可用的 Python 环境。
❖ 数据集
有关数据集的下载和生成,请查看目录 dataset_generating_scripts 中的脚本。
❖ 快速运行
首先生成您需要的数据集。为此,请查看目录 dataset_generating_scripts 中的生成脚本。
数据生成完成后,您可以训练并测试您的模型,例如:
# 创建一个目录来保存日志和结果
mkdir NIPS_results
# 训练模型
nohup python run_models.py \
--config_path configs/PhysioNet2012_SAITS_best.ini \
> NIPS_results/PhysioNet2012_SAITS_best.out &
# 在训练过程中,您可以运行以下命令查看训练日志:
less NIPS_results/PhysioNet2012_SAITS_best.out
# 训练结束后,选择最佳模型,并在配置文件中修改用于测试的模型路径,然后运行以下命令进行模型测试:
python run_models.py \
--config_path configs/PhysioNet2012_SAITS_best.ini \
--test_mode
❗️请注意,数据集路径和保存目录在不同电脑上可能会有所不同,请务必在配置文件中确认这些路径。
❖ 致谢
感谢 Ciena、Mitacs 以及加拿大自然科学与工程研究委员会(NSERC)提供的资金支持。 感谢所有审稿人对本文质量提升的帮助。 感谢 Ciena 提供的计算资源。 同时也感谢各位对本工作的关注。
✨ 欢迎点赞、叉项目、提交问题和拉取请求!
❖ 最后但同样重要的是
如果您有任何其他问题或有意合作, 请查看我的 GitHub 个人主页 WenjieDu,并随时与我联系 😃。
常见问题
相似工具推荐
openclaw
OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
gemini-cli
gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。
markitdown
MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

