Skip to main content

tsanomaly

A Python library for autonomous, explainable, real-time anomaly detection on time-series metrics.

CI PyPI Python versions License

pip install tsanomaly

Why tsanomaly

  • Zero configuration - seasonality, model choice, and the expected-range "envelope" are learned per metric.
  • Calibrated - envelope coverage is enforced by adaptive conformal inference; tail rarity comes from extreme value theory, not Gaussian assumptions.
  • Comparable scores - magnitude × duration × persistence, judged against the metric's own history: a 90 means the same rarity on any metric.
  • Regime-aware - a permanent level shift becomes one "new normal" finding and a re-anchored baseline, not endless alerts.
  • Incidents - concurrent anomalies group into one finding, ordered by who moved first: the root-cause hint.
  • Real-time - O(1) streaming updates, out-of-order tolerance, alert lifecycle with pluggable sinks, stall detection, checkpoint/restore.
  • Explainable - every anomaly carries its expected range, score breakdown, provenance, and a counterfactual.

Quickstart

import pandas as pd
import tsanomaly as tsa

# any long frame with metric / timestamp / value columns
history = pd.read_csv("payments.csv", parse_dates=["ts"])

det = tsa.Detector.auto()
det.fit(history)                      # learn normal, per metric
result = det.detect(new_data)         # scored, explained anomalies

print(result.summary())
for anomaly in result.alerts(min_score=70):
    print(anomaly.explain().to_text())

Output (NYC taxi ridership around the January 2015 blizzard):

learned seasonality: day (strength 0.67), week (strength 0.84)

`nyc.taxi.passengers` dropped to 7076 (expected 18060 to 25606)
    for 33.0 h starting 2014-11-27 05:30 UTC - score 100.   # Thanksgiving
`nyc.taxi.passengers` spiked to 23848 (expected 15488 to 19792)
    for 6.0 h starting 2015-01-18 09:30 UTC - score 100.    # MLK weekend
`nyc.taxi.passengers` dropped to 570 (expected 15629 to 22110)
    for 39.0 h starting 2015-01-26 11:30 UTC - score 100.   # blizzard travel ban
quickstart: NYC taxi ridership with detected anomalies

Examples

CNC mill vibration with the two Bosch-labeled bad cycles flagged

Documentation

  • Usage guide - data formats, batch & streaming APIs, configuration, persistence, incidents, events, feedback, evaluation utilities.
  • Architecture - the full pipeline.
  • Examples

How it works

the tsanomaly pipeline

For more details, refer to docs/architecture.md.

Acknowledgements

The autonomous per-metric architecture is inspired by ideas in Anodot's published patents, implemented here with different, modern mechanisms - see the acknowledgements in docs/architecture.md.

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tsanomaly-0.2.1.tar.gz (70.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tsanomaly-0.2.1-py3-none-any.whl (74.2 kB view details)

Uploaded Python 3

File details

Details for the file tsanomaly-0.2.1.tar.gz.

File metadata

  • Download URL: tsanomaly-0.2.1.tar.gz
  • Upload date:
  • Size: 70.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tsanomaly-0.2.1.tar.gz
Algorithm Hash digest
SHA256 1a2190120647ecbf5ec265a96db323a8356f70d351799caaa7ab23131f8dcb54
MD5 3441c2a44bc5a64812519d918b76c217
BLAKE2b-256 b0a42d6ff8d59c3c1b641965cd770b745a5b264ddc356830c2f12012f50b00b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsanomaly-0.2.1.tar.gz:

Publisher: release.yml on visakhunnikrishnan/tsanomaly

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tsanomaly-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: tsanomaly-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 74.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for tsanomaly-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d3845234efae9eb0ef4f219fa8178498ceff757ca640b2f005306db004468c00
MD5 07bdff02a4245753fcac0f9ced6d42c9
BLAKE2b-256 33d8881a4ce8165f91ca0b08331997da53c3085a75abb05758bac25390ac9a38

See more details on using hashes here.

Provenance

The following attestation bundles were made for tsanomaly-0.2.1-py3-none-any.whl:

Publisher: release.yml on visakhunnikrishnan/tsanomaly

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.4.1

2 files

0.4.0

2 files

0.3.1

2 files

0.3.0

2 files

This release

0.2.1 This release

2 files

0.2.0

2 files

0.1.1

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page