[!TIP]
[2025년 5월 업데이트] 🎉 저희 서베이 논문 Deep Learning for Multivariate Time Series Imputation: A Survey가 IJCAI 2025에 채택되었습니다!
저희는 시계열(time series)을 위한 최첨단 딥러닝(deep-learning) 기반 보간(imputation) 방법론의 문헌을 포괄적으로 검토하고, 불확실성(uncertainty)과 모델 아키텍처(model architecture)를 기반으로 새로운 분류 체계를 제시하며, 여러 도구 키트(toolkits)들을 체계적으로 비교하고 이 분야의 과제와 미래 방향에 대해 논의했습니다.
[2024년 6월 업데이트] 😎 최초의 포괄적인 시계열 보간 벤치마크 논문인 TSI-Bench: Benchmarking Time Series Imputation이 공개되었습니다.
코드는 리포지토리 Awesome_Imputation에서 오픈 소스로 이용 가능합니다.
약 35,000개의 실험을 통해 28가지 보간 방법론, 3가지 결측 패턴(점(points), 시퀀스(sequences), 블록(blocks)), 다양한 결측률, 그리고 8가지 실제 데이터셋에 대한 포괄적인 벤치마킹 연구를 제공합니다.
[2024년 5월 업데이트] 🔥 저희는 SAITS 임베딩 및 학습 전략을 iTransformer, FiLM, FreTS, Crossformer, PatchTST, DLinear, ETSformer, FEDformer, Informer, Autoformer, Non-stationary Transformer, Pyraformer, Reformer, SCINet, RevIN, Koopa, MICN, TiDE, 그리고 StemGNN에 적용하여 <a href="https://github.com/WenjieDu/PyPOTS"><img src="https://pypots.com/figs/pypots_logos/PyPOTS/logo_FFBG.svg" width="26px" align="center"/> PyPOTS</a>에서 시계열 보간 작업에 적용할 수 있도록 했습니다.
<p align="center">
<a id="SAITS" href="#SAITS">
<img src="https://pypots.com/figs/pypots_logos/SAITS/banner.jpg" alt="SAITS Title" title="SAITS Title" width="80%"/>
</a>
</p>
<p align="center">
<img src="https://img.shields.io/badge/Python-v3-E97040?logo=python&logoColor=white" />
<img alt="powered by PyTorch" src="https://img.shields.io/badge/PyTorch-%E2%9D%A4%EF%B8%8F-F8C6B5?logo=pytorch&logoColor=white">
<a href="https://github.com/WenjieDu/SAITS/blob/main/LICENSE">
<img src="https://img.shields.io/badge/License-MIT-3C7699?logo=opensourceinitiative&logoColor=white" />
</a>
<a href="https://doi.org/10.1016/j.eswa.2023.119619">
<img src="https://img.shields.io/badge/ESWA-published-75C1C4?logo=elsevier&color=FF6C00" />
</a>
<a href="https://scholar.google.com/citations?view_op=view_citation&hl=en&user=j9qvUg0AAAAJ&citation_for_view=j9qvUg0AAAAJ:Y0pCki6q_DkC" title="Paper citation number from Google Scholar">
<img src="https://pypots.com/figs/citation_badges/saits.svg" />
</a>
<a href="https://webofscience.clarivate.cn/wos/woscc/full-record/WOS:000943170100001?SID=USW2EC0D82x89d30RifxLVxJpho5Y" title="This is a Highly Cited Paper recognized by ESI">
<img src="https://pypots.com/figs/citation_badges/ESI_highly_cited_paper.svg" />
</a>
</p>
‼️참고: 이 문서는 <ins>많은 일반적인 질문을 해결하는 데 도움을 줄 수 있으므로,</ins> 코드를 실행하기 전에 읽어보시기 바랍니다.
공식 코드 저장소는 논문 SAITS: Self-Attention-based Imputation for Time Series (arXiv 프리프린트는 여기)에 대한 것입니다. 이 논문은 저널 *Expert Systems with Applications (ESWA)*에 게재되었습니다. [2022 IF 8.665, CiteScore 12.2, JCR-Q1, CAS-Q1, CCF-C]. ESWA에 대해 들어본 적이 없을 수도 있지만, 이 저널은 2016년 인공지능 분야 최고 논문으로 Google Scholar에서 1위를 차지했으며(정보 출처), 현재도 Google Scholar 지표에 따르면 최고 AI 저널입니다(현재 순위 목록은 여기 참고).
SAITS는 일반적인 시계열(time series) 보간(imputation) 알고리즘에 재귀적 설계 없이 순수 자가 주의(self-attention)를 적용한 최초의 연구입니다. 기본적으로 이는 시계열 보간을 위한 검증된 프레임워크로 간주할 수 있으며, 저희는 SAITS 프레임워크에 적응하여 PyPOTS에 2️⃣0️⃣개 이상의 예측 모델을 통합했습니다. 더 일반적으로는 순서(sequence) 보간에 사용할 수 있습니다. 게다가, 여기에 있는 코드는 MIT 라이선스 하에 오픈 소스입니다. 따라서 연구 목적이나 도메인 응용을 위해 SAITS 코드를 수정하여 사용하셔도 좋습니다. 물론, 특정 시나리오나 데이터 입력의 경우 모델 구조나 손실 함수(loss functions)를 약간 수정해야 할 수도 있습니다. 그리고 이것은 논문에서 SAITS를 인용한 과학적 연구 목록 중 불완전한 목록입니다.
🤗 작업에 도움이 되었다면 논문에서 SAITS를 인용해 주세요.
유용하다고 생각하시면 이 저장소에 별표🌟를 눌러 다른 사람들이 SAITS를 알 수 있도록 도와주세요. 이는 저희 오픈소스 연구에 정말 큰 힘이 됩니다. 감사합니다!
참고로, 부분적으로 관측된 시계열 데이터셋을 쉽게 모델링할 수 있는 PyPOTS도 좋아하실 거예요.
[!중요]
<a href='https://github.com/WenjieDu/PyPOTS'><img src='https://pypots.com/figs/pypots_logos/PyPOTS/logo_FFBG.svg' width='130' align='right' /></a>
📣 주목해 주세요:
SAITS는 이제 POTS(Partially-Observed Time Series) 데이터 마이닝을 위한 Python 툴박스인 PyPOTS에서 사용할 수 있습니다. PhysioNet-2012 데이터셋에 SAITS를 학습하여 결측치를 채우는 예시가 아래에 나와 있습니다. PyPOTS로 정말 쉽습니다! 😉
<details open>
<summary><b>👉 예시를 보려면 여기를 클릭하세요 👀</b></summary>
import numpy as np
from sklearn.preprocessing import StandardScaler
from pygrinder import mcar, calc_missing_rate
...
<p align="center">
<a href="https://pypots.com/ecosystem/">
<img src="https://pypots.com/figs/pypots_logos/Ecosystem/PyPOTS_Ecosystem_Pipeline.png" width="95%"/>
</a>
<br>
<b> ☕️ PyPOTS의 세계에 오신 것을 환영합니다. 즐기시고 재미있게 사용하세요!</b>
</p>
</details>
❖ 동기 및 성능
⦿ 동기(Motivation): SAITS는 주로 RNN 기반 결측치 채우기 모델의 단점(느린 속도, 메모리 제약, 누적 오차)을 극복하고 부분적으로 관측된 시계열에서 최첨단(SOTA) 수준의 결측치 채우기 정확도를 얻도록 개발되었습니다.
⦿ 성능 (Performance): SAITS는 MAE(mean absolute error)에서 BRITS보다 12% ∼ 38% 우수하며, 학습 속도는 2.0 ∼ 2.6배 빠릅니다.
더 나아가, SAITS는 더 효율적인 모델 구조를 가지면서도 (비교 가능한 성능을 얻기 위해 SAITS는 Transformer의 15% ∼ 30% 파라미터만 필요함) MAE에서 Transformer(저희 공동 최적화 접근 방식으로 학습됨)보다 2% ∼ 19% 우수합니다.
다른 SOTA (State-of-the-Art) 자체 주의 임퓨테이션 모델인 NRTSI와 비교했을 때, SAITS는 평균 제곱 오차(mean squared error)가 7% ∼ 39% 더 작으며 (<ins>16개 사례 중 9개 이상에서 20% 초과</ins>), 실질적으로 훨씬 적은 파라미터와 임퓨테이션 시간이 필요합니다.
SAITS의 성능에 대한 자세한 내용은 저희 전체 논문을 참조해 주십시오.
❖ 방법론 개요 그래픽 설명 (Brief Graphical Illustration of Our Methodology)
여기서는 저희 방법의 두 가지 주요 구성 요소, 즉 공동 최적화 학습 접근 방식과 SAITS 구조만을 보여드립니다.
자세한 설명 및 이해를 위해서는 이 저장소의 전체 논문 Paper_SAITS.pdf 또는 arXiv을 읽어주십시오.
<div align="center">
<img src="https://raw.githubusercontent.com/WenjieDu/SAITS/main/figs/Training%20approach.svg?sanitize=true" alt="Training approach" title="Training approach" width="800"/>
<b>그림 1: 학습 접근 방식 (Fig. 1: Training approach)</b>
<img src="https://raw.githubusercontent.com/WenjieDu/SAITS/main/figs/SAITS%20arch.svg?sanitize=true" alt="SAITS architecture" title="SAITS architecture" width="600"/>
<b>그림 2: SAITS 구조 (Fig. 2: SAITS structure)</b>
</div>
❖ SAITS 인용 (Citing SAITS)
만약 SAITS가 귀하의 작업에 도움이 된다면, 아래와 같이 저희 논문을 인용해 주시고,
⭐️ 이 저장소를 스타(star) 해주시며, 필요할 것 같은 다른 분들께 추천해 주시면 감사하겠습니다. 🤗 감사합니다!
@article{du2023saits,
title = {{SAITS: Self-Attention-based Imputation for Time Series}},
journal = {Expert Systems with Applications},
...
or
Wenjie Du, David Cote, and Yan Liu.
SAITS: Self-Attention-based Imputation for Time Series.
Expert Systems with Applications, 219:119619, 2023.
😎 시간 계열(time-series) 보간(imputation)에 대한 당사의 최신 설문조사 및 벤치마킹 연구도 귀하의 작업에 유용할 수 있습니다:
@article{wang2025survey,
title={Deep Learning for Multivariate Time Series Imputation: A Survey},
author={Jun Wang and Wenjie Du and Yiyuan Yang and Linglong Qian and Wei Cao and Keli Zhang and Wenjia Wang and Yuxuan Liang and Qingsong Wen},
...
@article{du2024tsibench,
title={TSI-Bench: Benchmarking Time Series Imputation},
author={Wenjie Du and Jun Wang and Linglong Qian and Yiyuan Yang and Fanxing Liu and Zepu Wang and Zina Ibrahim and Haoxin Liu and Zhiyuan Zhao and Yingjie Zhou and Wenjia Wang and Kaize Ding and Yuxuan Liang and B. Aditya Prakash and Qingsong Wen},
...
🔥 연구에서 PyPOTS를 사용하는 경우, 다음 논문도 인용해 주십시오:
@article{du2023pypots,
title={{PyPOTS: a Python toolbox for data mining on Partially-Observed Time Series}},
author={Wenjie Du},
...
or
Wenjie Du.
PyPOTS: a Python toolbox for data mining on Partially-Observed Time Series.
arXiv, abs/2305.18811, 2023.
❖ Repository 구조
SAITS의 구현은 modeling 디렉토리에 있습니다.
모델 구성(configurations)은 configs 디렉토리에서 제공하며, 데이터셋 링크 및 전처리 스크립트는 dataset_generating_scripts 디렉토리에 있습니다.
디렉토리 NNI_tuning에는 하이퍼파라미터 검색 설정(hyper-parameter searching configurations)이 포함되어 있습니다.
❖ 개발 환경 (Development Environment)
저희 개발 환경의 모든 의존성(dependencies)은 파일 conda_env_dependencies.yml에 나열되어 있습니다.
conda env create -f conda_env_dependencies.yml 명령어를 사용하면 사용할 수 있는 Python 환경을 빠르게 생성할 수 있습니다.
❖ 데이터셋 (Datasets)
데이터셋 다운로드 및 생성을 위해서는 디렉토리 dataset_generating_scripts의 스크립트를 확인해 주십시오.
❖ 빠른 실행 (Quick Run)
먼저 필요한 데이터셋을 생성해야 합니다. 이를 위해 디렉토리 dataset_generating_scripts의 생성 스크립트를 확인해 주십시오.
데이터 생성이 완료된 후, 모델을 학습하고 테스트할 수 있습니다. 예를 들면,
# 로그와 결과를 저장할 디렉토리를 생성합니다.
mkdir NIPS_results
...
❗️개인 컴퓨터에서는 데이터셋 경로 및 저장 디렉토리가 다를 수 있으니, 설정 파일에서 확인해 주십시오.
❖ 감사의 말씀 (Acknowledgments)
Ciena, Mitacs, 그리고 NSERC(캐나다 자연과학 및 공학 연구 위원회)에 자금 지원에 감사드립니다. 본 논문의 품질 향상에 도움을 준 모든 리뷰어분들께 감사드립니다. 컴퓨팅 리소스를 제공해 주신 Ciena에도 감사합니다.
이 작업에 관심을 가져주신 모든 분들께 감사드립니다.
✨Stars/forks/issues/PRs는 모두 환영합니다!
<details open>
<summary><b><i>👏 Stargazers 및 Forkers 보기: </i></b></summary>
Stargazers repo roster for @WenjieDu/SAITS
Forkers repo roster for @WenjieDu/SAITS
</details>
❖ 마지막으로 (Last but Not Least)
추가 질문이 있거나 협업에 관심이 있으시면, 제 GitHub 프로필을 확인해 보시고 언제든지 연락 주십시오 😃.