Skip to main content

A lightweight evaluation toolkit for time-series anomaly detection

Project description

tadmetric

Lightweight evaluation metrics for time-series anomaly detection.

tadmetric helps you evaluate anomaly scores or binary predictions with a small, simple API. The primary workflow is centered on evaluator(...), where you ask for a metric result or the best threshold directly.

Installation

pip install tadmetric

Why tadmetric?

  • Minimal input: use y_true with either y_pred or y_score
  • Practical TSAD metrics in one place
  • Fast threshold search for best F1
  • Easy high-level API for benchmarking multiple metrics at once
  • Extensible metric registry for adding new custom metrics

Quick start

Discover the API quickly

import tadmetric as tm

print(tm.api_overview())
e = tm.evaluator(y_true, y_score)
pre, rec, f1 = e.point_adjusted(thr=0.3)
pre_k, rec_k, f1_k = e.point_adjusted(k=30)
print(e.best(metric="composite").threshold)
print(tm.available_metrics())
print([spec.asdict() for spec in tm.describe_metrics()])

Evaluate with a reusable evaluator

from tadmetric import evaluator

e = evaluator(y_true, y_score)

point_pre, point_rec, point_f1 = e.point_wise(thr=0.5)
pa_pre, pa_rec, pa_f1 = e.point_adjusted(thr=0.3)
pa_default_pre, pa_default_rec, pa_default_f1 = e.point_adjusted()
comp_pre, comp_rec, comp_f1 = e.composite()
best = e.best(metric="composite")

print(best.threshold)
print(best.f1)
print(best.evaluation["composite"].asdict())
print((pa_pre, pa_rec, pa_f1))

e.reevaluate(other_y_true, other_y_score)

Public evaluator metrics are:

  • point_wise
  • point_adjusted with k=50 by default
  • composite

Included metrics

Core precision / recall / F1

  • Point-wise: point_precision, point_recall, point_f1
  • Point-adjusted: point_adjusted_precision, point_adjusted_recall, point_adjusted_f1
  • Point-adjusted %K: point_adjusted_k_precision, point_adjusted_k_recall, point_adjusted_k_f1
  • Composite: composite_precision, composite_recall, composite_f1
  • Event-wise: event_precision, event_recall, event_f1

Delay-aware metrics

  • time_to_detect
  • mean_time_to_detect
  • median_time_to_detect
  • missed_detection_rate

Thresholding and utilities

  • threshold_by_quantile
  • threshold_by_topk
  • threshold_by_best_f1
  • search_best_f1_threshold
  • apply_hysteresis
  • binary_to_intervals
  • intervals_to_binary
  • merge_intervals
  • scores_to_binary

Curve-based metrics

  • precision_recall_curve
  • roc_curve
  • auc_pr
  • auc_roc

High-level API

For most workflows, these are the main entry points:

  • evaluator
  • e.point_wise(thr=...)
  • e.point_adjusted(thr=..., k=50)
  • e.composite(thr=...)
  • e.best(metric=...)
  • evaluate
  • evaluate_scores
  • available_metrics
  • describe_metrics
  • api_overview
  • register_metric

Metric semantics

  • Point-wise metrics treat each timestamp independently.
  • Event-wise metrics treat each contiguous anomaly region as one event.
  • Point-adjusted metrics credit an event if it is detected at least once.
  • Point-adjusted %K metrics credit an event when at least K% of the event is detected.
  • Composite metrics use time-wise precision and event-based recall.
  • Interval semantics are half-open: [start, end).
  • Event matching defaults to overlap > 0.
  • Zero division returns 0.0 by default.

Development

pip install -e .[dev]
pytest

Build

python -m build --no-isolation
python -m twine check dist/*

Project details


Download files

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

Source Distribution

tadmetric-0.1.3.tar.gz (14.8 kB view details)

Uploaded Source

Built Distribution

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

tadmetric-0.1.3-py3-none-any.whl (16.3 kB view details)

Uploaded Python 3

File details

Details for the file tadmetric-0.1.3.tar.gz.

File metadata

  • Download URL: tadmetric-0.1.3.tar.gz
  • Upload date:
  • Size: 14.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for tadmetric-0.1.3.tar.gz
Algorithm Hash digest
SHA256 c4d4327e5dcb40c80d4491fac7251f88840b530112bb770a8d1a3a4fcf915fb0
MD5 93f4d7e30f759056d89ce966d1e8ad08
BLAKE2b-256 b89ba7c76f56feac61e7fb1c5be54bee5b4175f52124f1818695910572ea466d

See more details on using hashes here.

File details

Details for the file tadmetric-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: tadmetric-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 16.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.19

File hashes

Hashes for tadmetric-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 14a11c74d6bbd72015408936067ca40817df9e0109fb7a5d1988624c362759f7
MD5 ca22ac5bde8ee334219aaeebff753313
BLAKE2b-256 f887418a8c9848b759f49641dc2504f35b5ff44a53f6733a2421f15240254617

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page