
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.
Radar check
What we found when we opened it. Every bar is one fact, with its date.
Last code pushed 6 Jul 2026, 3 months before this check.
Latest release v0.21.2 on 31 May 2026.
Public since October 2016, about 10 years.
9,480 stars and 1,297 forks.
0 commits and 0 new issues in the last 90 days.
103 contributors. No pull requests merged in 90 days; changes go in directly.
No security policy file says how to report a problem. No published security advisories.
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.
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 method | What it needs | Effort |
|---|---|---|
| Local machine | A Python environment with numpy, pandas and sklearn | Not stated in README |
| Cluster | A cluster environment capable of running the package | Not stated in README |
| Docker image | A Docker setup to run the provided image | Not 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.
- 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.
- 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.
Feed those into a strategy and judge it in backtesting.py.
python3 -m venv venv source venv/bin/activate pip install tsfresh

