Skip to main content

Leakage-safe, event-wise and affiliation-based evaluation for spacecraft-telemetry anomaly detection

Project description

telemeval

CI PyPI Python License DOI

Leakage-safe, event-wise and affiliation-based evaluation for spacecraft-telemetry anomaly detection.

Status: v0.1 — early release; the API may still change until v1.

Time-series anomaly-detection evaluation is notoriously easy to get wrong: point-adjusted F1 can rank random predictions above real detectors, and subtle protocol bugs (like scoring training-window events against test-window predictions) silently inflate or deflate results. The metrics the literature recommends instead — corrected event-wise F-beta and affiliation-based precision/recall — have not had a maintained, permissively-licensed, pip-installable home.

telemeval is that home:

  • A validated ingestion contract that raises typed, actionable errors instead of producing a number from a leaky or malformed evaluation — including a first-class train/test-window leakage guard.
  • Corrected event-wise precision / recall / F-beta with unambiguous, documented overlap semantics.
  • Affiliation-based precision / recall — the canonical reference implementation (Huet et al., KDD 2022, MIT) vendored, wrapped, tested, and maintained here.
  • ADTQC detection-timing quality (ESA-ADB) — scores when each event was first caught, not just whether; previously available only inside ESA-ADB's research fork.
  • Honest reports: deterministic JSON and Markdown output stamped with explicit scope caveats.
  • Telemetry-aware inputs: channel-keyed predictions (interval labels, binary masks, or continuous scores + threshold), an ESA-ADB-format loader, and a TimeEval-format reader.
  • scikit-learn-style metric wrappers so the metrics drop into existing scoring code.

Core dependencies: numpy and pandas. Nothing else.

Quick start

import pandas as pd
from telemeval import evaluate

labels = pd.DataFrame(
    {
        "ID": ["anomaly_1"],
        "Channel": ["channel_41"],
        "StartTime": ["2024-01-01T00:02:00"],
        "EndTime": ["2024-01-01T00:03:00"],
    }
)
timestamps = pd.date_range("2024-01-01", periods=6, freq="1min")
predictions = {
    "channel_41": pd.DataFrame({"Timestamp": timestamps, "Score": [0, 0, 1, 1, 0, 0]})
}

result = evaluate(labels, predictions, dataset="my-mission")
print(result.metrics["event_wise"]["event_wise_fbeta"])     # 1.0
print(result.metrics["affiliation"]["affiliation_fbeta"])   # 1.0
result.save(json_path="report.json", markdown_path="report.md")

See docs/usage.md for the leakage guard, continuous scores + threshold, ESA-ADB and TimeEval-format loaders, parquet input, sklearn-style wrappers, and the metric registry. See docs/related-work.md for an honest map of prior art and when to use which tool.

What telemeval is not

  • Not a detector library (see PyOD, aeon, darts).
  • Not a benchmark harness or dataset collection (see TimeEval, TSB-AD).
  • Not a serving/monitoring/MLOps stack.
  • Not affiliated with or endorsed by ESA; it does not redistribute the ESA Anomaly Dataset.

Prior art worth knowing: TSADmetrics (GPL-3.0, generic time-series AD metrics), TSB-AD (benchmark suite), Merlion (point-adjusted F1), aeon (range/VUS metrics). telemeval's niche is the permissive license, the telemetry-domain contract with leakage guards, and maintained affiliation metrics; where metrics overlap we aim to reproduce prior-art numbers.

License

Apache-2.0. Vendored affiliation reference implementation is MIT (retained; see NOTICE). Dataset licenses (e.g. ESA Anomaly Dataset, CC BY 3.0 IGO) are separate from this code and are never bundled.

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

telemeval-0.2.0.tar.gz (78.7 kB view details)

Uploaded Source

Built Distribution

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

telemeval-0.2.0-py3-none-any.whl (46.2 kB view details)

Uploaded Python 3

File details

Details for the file telemeval-0.2.0.tar.gz.

File metadata

  • Download URL: telemeval-0.2.0.tar.gz
  • Upload date:
  • Size: 78.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for telemeval-0.2.0.tar.gz
Algorithm Hash digest
SHA256 5e6fc5bc285e19ae1a66e8cb0ba7759d1f53799574fd78c55d1244be176a9263
MD5 54f2f3187a5ed9ef8947f75bf12f9182
BLAKE2b-256 4da57be25c03f31e4c9c10e7cec892e501e9fe68471d6744b04e70600da239d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for telemeval-0.2.0.tar.gz:

Publisher: release.yml on rosscyking1115/telemeval

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

File details

Details for the file telemeval-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: telemeval-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 46.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for telemeval-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 bb629fee1db1cddc5adb516c1d7103a7983a0ff3672ea07cdd35d04a1dfe7dc6
MD5 62c7db9256cee5821ee069c7f1a77f1e
BLAKE2b-256 f45260de1d7bd1ac29bb7ba7b7087a8c3ca09dc9b966a20b5336bafcaaa3d975

See more details on using hashes here.

Provenance

The following attestation bundles were made for telemeval-0.2.0-py3-none-any.whl:

Publisher: release.yml on rosscyking1115/telemeval

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

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