Library / SDK
WenjieDu/PyPOTS avatar
WenjieDu/PyPOTS

PyPOTS: A Toolkit for Neural Networks on Partially-Observed Time Series

A Python toolkit/library for reality-centric machine/deep learning & data mining on partially-observed time series, with 50+ SOTA neural network models for scientific analysis tasks (imputation, classification, clustering, forecasting, anomaly detection, cleaning) on incomplete industrial irregularly-sampled multivariate TS with NaN missing values

2,060 stars191 forksPythonBSD-3-Clause

At a glance

What is it?
PyPOTS collects more than 50 neural network models behind one API for imputation, classification, clustering, forecasting and anomaly detection on multivariate time series that contain NaN values. The useful part is the uniform interface; the part to check before adopting is which models genuinely accept missing input and which only appear to.
Who is it for?
Adopt PyPOTS if your data is multivariate, irregularly sampled and already sitting in NumPy arrays or PyTorch tensors, and you want to compare imputation or classification models behind one API instead of reimplementing each paper. Do not adopt it if you need a streaming or online detector, or if you expect every model in the table to accept NaNs directly.
Can I use it commercially?
Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The gap PyPOTS claims to fill

The README states the motivation plainly: sensors fail, communication drops, hardware malfunctions, so missing values are common in real time series. The project calls this partially-observed time series, abbreviated POTS, and argues that machine learning on POTS lacks a dedicated toolkit. That is the gap it is built around. The intended users are engineers and researchers who already have a modeling problem and do not want to spend their time on the missing parts of their data. The scope is multivariate time series with NaN missing values, which is a narrower claim than general time series tooling. If your series are complete, or univariate, or you only need classical statistical baselines, the framing here does not apply to you and the library's main value proposition does not either. The README does not describe a data format beyond that, so the practical question of how your records become arrays is left to the user and to the documentation site.

Five tasks, one model table, and a marker that matters

PyPOTS covers imputation, classification, clustering, forecasting and anomaly detection on multivariate partially-observed time series. The README presents a table sorted by year in which a check mark indicates that an algorithm is available for a given task, and each check mark links to a code example. That table is the core of the project: it is a coverage map, not a benchmark. The most important detail in it is the wrench marker. Models whose name carries that marker, and the README names Transformer, iTransformer and Informer as examples, were not originally proposed for POTS data in their papers and cannot directly accept time series with missing values as input. To make them usable, the project applies an embedding strategy and a training approach it calls ORT plus MIT, the same combination used in the SAITS paper. This is a real distinction and it changes how you evaluate a model. A wrench model is not a drop-in imputer; it is a general architecture wrapped so that it can be trained on incomplete data. The README also notes that models will continue to be updated to handle tasks not currently supported, which is an admission that the table has holes today.

Installation and the dependency constraints behind it

The README links installation instructions to docs.pypots.com under a page whose anchor is about reasons for version limitations on dependencies. The Python badge states v3.8 and above. Beyond that, the material does not give a pip or conda command, so treat the docs page as the source of truth rather than copying a command from a blog post. Two distribution channels are visible: a conda-forge package named pypots and a PyPI package also named pypots, each with a downloads badge. The dependency constraints are worth reading before you pin anything, because the docs page exists specifically to explain them. This is the kind of project where the version of PyTorch you already have in a shared environment can force a choice between upgrading the environment and staying on an older PyPOTS release. The README does not resolve that for you.

Hyperparameter tuning moved from NNI to Optuna at v2

Since v0.2, the README states, neural network models in PyPOTS have had hyperparameter optimization support through Microsoft NNI, and that arrangement lasted until v2.0. In v2, the functionality was reimplemented on the Optuna framework. For anyone upgrading across that boundary, this is a breaking change in the tuning path, not a cosmetic one. The README points to the author's Awesome_Imputation repository for an example of how to configure and tune hyperparameters, which is a signal that tuning configuration is not documented inside this repository itself. If hyperparameter search is part of your workflow, the practical consequence is that you should read the Optuna-based path in the docs before assuming old NNI configuration still applies. Nothing in the supplied material describes the new API surface, so the migration cost cannot be estimated from the README alone.

The wrench marker is the limitation to plan around

The README's own note about wrench-marked models is the clearest limitation in the material. Transformer, iTransformer and Informer are named as architectures that cannot take missing values directly. They need the embedding strategy and the ORT plus MIT training approach borrowed from SAITS. This means the phrase 50+ models can be read two ways. As a count of architectures available for time series work, it is accurate. As a count of models you can point at a NaN-filled array and train, it is not, and the README does not give a number for the second category. There is a second constraint implied by the release history: v1.3 added TKAN, v1.4 was a bug fix, v1.5 is titled HELIX. Models arrive between minor releases, so a task you need may be supported for one architecture and not another, and the table is the only place that is recorded. Finally, the README frames everything around multivariate series. If your problem is univariate, or your missingness is informative rather than incidental, the toolkit's assumptions may not match your data.

Where a general forecasting library differs

A library such as PyTorch Forecasting targets panel and multivariate forecasting on largely complete series and expects you to handle gaps before training. PyPOTS inverts that: the missing values are part of the input contract, and imputation is a first-class task alongside forecasting and classification. The difference shows up in what you get for free. In a general forecasting library you would typically impute first, then train, and the imputation step is your responsibility. Here, imputation models are shipped in the same table as the forecasting models, and the wrench-marked architectures come with a stated training approach for incomplete input. The cost of that focus is breadth. PyPOTS is not a general-purpose time series library, and if your series are complete, the missing-value machinery is overhead you are carrying without using. The honest comparison is not which library is better but whether missingness is central to your problem or incidental to it.

Licence, releases and what maintenance looks like

PyPOTS is BSD-3-Clause, a permissive licence that generally allows commercial and closed-source use with attribution and without a copyleft obligation on your own code. That is a statement about the licence text, not legal advice, and if you are embedding the library in a product you should have your own counsel read it. Maintenance signals visible in the material: the repository is not archived, the last push is dated 2026-09-10, and the release cadence over a five-month window shows v1.3 in March 2026, v1.4 in April as a bug fix, and v1.5 in May under the name HELIX. That pattern suggests active development with a mix of feature releases and fixes. The README also references a Contributor Covenant 2.1 code of conduct and a Ruff code style, and badges point to SonarCloud maintainability and Coveralls coverage on a branch named full_test. Those are process indicators, not evidence of correctness. The upgrade cost you should budget for is the v2 tuning migration and the dependency version constraints the docs page describes.

Editorial conclusion

Adopt PyPOTS if your data is multivariate, irregularly sampled and already sitting in NumPy arrays or PyTorch tensors, and you want to compare imputation or classification models behind one API instead of reimplementing each paper. Do not adopt it if you need a streaming or online detector, or if you expect every model in the table to accept NaNs directly. Before committing, pick one model with the wrench marker and one without, and check in the docs whether it takes missing values as input or requires an embedding and training strategy such as ORT plus MIT from the SAITS paper.

Official sources

  1. License: BSD-3-Clause
  2. Project website
  3. README
  4. Releases
  5. WenjieDu/PyPOTS on GitHub
Community notes

Community notes