Data and databases · Edition No. 3 · 28 Aug 2026

blue-yonder/tsfresh

A Python library that extracts hundreds of statistical descriptions from time-ordered data and keeps only the ones related to your target.

← Data and databasesRead the whole edition →
tsfresh: descriptions of time-ordered data. Calculates hundreds of statistics, then keeps the useful ones.

9.3k stars · MIT · v0.21.2 (2026-05-31) · Track this in Rising ↗

Extracts 700+ statistical features from price windows and filters them by significance — indicators without inventing them.

Verified25 Oct 2026

Radar check

What we found when we opened it. Every bar is one fact, with its date.

Alive50

Last code pushed 6 Jul 2026, 3 months before this check.

Releases70

Latest release v0.21.2 on 31 May 2026.

Maturity100

Public since October 2016, about 10 years.

Adoption80

9,480 stars and 1,297 forks.

Activity0

0 commits and 0 new issues in the last 90 days.

Community100

103 contributors. No pull requests merged in 90 days; changes go in directly.

Security40

No security policy file says how to report a problem. No published security advisories.

Licence MIT: permissive: use it for anything, keep the noticeSetup effort 2 of 5Payoff 4 of 5
How the bars are scored
  • Alive. Days since the last code push: a week or less 100, a month 90, three months 70, six months 50, a year 30, eighteen months 15, older 0.
  • Releases. Age of the latest GitHub release, on a similar scale; no bar when the project publishes no releases.
  • Maturity. Age of the project: eight years 100, five 90, three 70, two 55, one 40, six months 25, younger 10.
  • Adoption. Stars on a log scale: 100,000 stars is 100, 10,000 is 80, 1,000 is 60, 100 is 40.
  • Activity. Commits in the last 90 days: 300 or more 100, 100 85, 30 65, 10 45, any 25.
  • Community. People who have contributed: 100 or more 100, 30 80, 10 60, 5 40, 2 25, one 10.
  • Security. A published security policy 80, none 40; published advisories are listed, not scored.

Checked by Repo Radar on 25 Oct 2026 from the repository on GitHub. Covered in Edition 3.

▶Repo detailsthe review · specs · pros & cons · install

What it does

You give it a table of measurements in time order, grouped by whatever each series belongs to. It calculates hundreds of descriptions of each series, which its README calls "100s of features" without naming a total: peak counts, averages and maxima, autocorrelations, entropy and a time-reversal symmetry statistic are among the examples it gives. It then runs a selection step, which is the part that matters. Each description is tested for how much it explains the thing you are predicting, as a classification or a regression, using a statistical test with a correction for the fact that hundreds of tests are being run at once. The output is an ordinary table that fits straight into the usual machine-learning tools, and the project is built to work alongside them. Custom calculations can be added. It can run on one machine or spread across a cluster. What it does not do is state its own limits: the README lists no memory or size guidance and no minimum Python version for the main package, and gives an explicit version requirement only for one optional backwards-compatible extra.

Why it matters

Who it suits. Anyone with time-ordered measurements and a question about what comes next, who has been hand-picking the descriptions to feed a model. Hand-picking means you test the twenty ideas you happened to think of, so the result depends on the ideas rather than on the data. This inverts that: cut the history into windows, label each by what happened next, calculate everything, and let the test say which properties carry information. Skip it if you have one short series, because there is nothing for the selection step to be confident about.

Verdict. Worth an afternoon, and the selection step is the reason rather than the extraction. Three warnings. The full calculation set over millions of rows will exhaust a small machine, so start with the minimal set the documentation describes and widen it only when you know what you are paying for. Whatever survives is a statistical relationship and not a guarantee, so test it against reality before you believe it. And many of the descriptions it produces cannot be explained in words, which makes trusting a model built on them harder than trusting one built from three numbers you chose. The project is stable rather than busy: release 0.21.2 on 31 May 2026, code on 6 July 2026, 579 commits and 58 open issues, with a 2018 paper behind the method. If you want the same automation over ordinary tables rather than time, alteryx/featuretools is the equivalent.

Stars9.3k
LicenceMIT
Latestv0.21.2 (2026-05-31)checked 7 Sep 2026
Written inJupyter Notebook
NeedsDocker and Python 3
RunsLocally, on your own machine
Summary (Key Points)from the README
Key features
  • Automatic extraction: Extracts 100s of features from time series, including counts of peaks, average or maximal values, and the time reversal symmetry statistic.
  • Built-in relevance filter: Evaluates how much each feature explains the target in regression or classification tasks, using hypothesis tests with a multiple test procedure.
  • Controlled irrelevant features: The filtering process mathematically controls the percentage of irrelevant extracted features.
  • Broad data scope: Time series are interpreted in the broadest sense, so any sampled data or event sequence can be characterised.
  • Variable-length samples: Each series is projected into a well-defined feature space, which allows samples of different lengths and applications with missing data.
  • Library compatibility: Works with sklearn, pandas and numpy.
  • Extensibility: Users can easily add their own favourite features.
  • Testing and documentation: The README states that the package is field tested and unit tested, and that it has comprehensive Read-The-Docs documentation.
Ways to install
Platform or methodWhat it needsEffort
Local machineA Python environment with numpy, pandas and sklearnNot stated in README
ClusterA cluster environment capable of running the packageNot stated in README
Docker imageA Docker setup to run the provided imageNot stated in README
Important
  • Matrix profile features: Reproducing or updating features computed with the matrixprofile calculators requires a Python 3.8 environment.
  • Filter scope: The filtering procedure is described for regression and classification tasks only.
  • Most features may be irrelevant: The README notes that most extracted features will not be useful for a given machine learning task, so the filtering step is needed.
  • Missing details: The README gives no hardware, version or installation requirements.

Written by an AI model from the project’s README; not part of the review, and it can be wrong.

Setup effort
2 / 5
Payoff
4 / 5
Good
  • MIT, so nothing stops it being used inside commercial software.
  • The selection step is the point: it is choosing descriptions, not just producing them.
  • The output is an ordinary table that drops into the usual tools, and it can run across a cluster when one machine is not enough.
Watch for
  • The full calculation set over a long history will exhaust a small machine, and the README gives no guidance on size.
  • Many produced descriptions are effectively unexplainable, which makes a model built on them harder to trust.
  • The README gives no install command and no minimum Python version for the main package, so the documentation site is unavoidable.
Works well with

Feed those into a strategy and judge it in backtesting.py.

Install
python3 -m venv venv
source venv/bin/activate
pip install tsfresh
Screenshots
blue-yonder/tsfresh: GitHub preview cardblue-yonder/tsfresh: Screenshot 1

On Stack Radar: Data & Research › Data Enrichment & Collection › Data Enrichment.

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.