Skip to main content

Statistical correlation between time-series and discrete events with optional LLM narration

Project description

chrono-correlator

A generic statistical engine that correlates time-series data with discrete events using Mann-Whitney U, and narrates results with an LLM only when p < 0.05.

Install

# Core (statistics only — no LLM required)
pip install chrono-correlator

# With specific LLM provider
pip install chrono-correlator[groq]
pip install chrono-correlator[anthropic]
pip install chrono-correlator[ollama]      # local, no API key

# Everything
pip install chrono-correlator[all]

Quick start

from datetime import datetime, timedelta
from chrono_correlator import Event, Metric, evaluate, narrate

base = datetime(2024, 1, 1)

events = [
    Event(timestamp=base + timedelta(days=d), label="migraine")
    for d in [10, 20, 30]
]

timestamps = [base + timedelta(hours=h) for h in range(800)]
values = [55.0] * 800
for day in [10, 20, 30]:
    for h in range(48):
        idx = day * 24 - 48 + h
        if 0 <= idx < 800:
            values[idx] = 28.0

hrv = Metric(name="hrv", timestamps=timestamps, values=values)

# FDR correction enabled by default — reduces false positives with multiple metrics
report = evaluate(events, [hrv])
print(f"Level: {report.level}{report.active_signals}/{report.total_signals} signals")

if report.level != "green":
    report = narrate(report, provider="groq")
    print(report.narrative)

From a pandas DataFrame

import pandas as pd
from chrono_correlator import Metric

df = pd.read_csv("hrv_data.csv")   # columns: timestamp, value
hrv = Metric.from_dataframe(df, name="hrv", timestamp_col="timestamp", value_col="value")

Lag analysis

# Test if the signal appears 24h before the event instead of immediately before
report = evaluate(events, metrics, lag_hours=24)

Continuous monitoring (no events needed)

from chrono_correlator import monitor, loop

# Single evaluation at now()
report = monitor(metrics, narrate=False)

# Infinite loop — calls on_alert when level is yellow or red
def alert_handler(report):
    print(f"ALERT {report.level.upper()}: {report.narrative}")

loop(metrics_fn=lambda: metrics, interval_seconds=3600, on_alert=alert_handler)

Custom LLM provider

from chrono_correlator import BaseNarrator

class OllamaNarrator(BaseNarrator):
    def generate(self, prompt: str) -> str:
        # call your local model
        ...

report = OllamaNarrator().narrate(report)

How it works

  • Statistical core: For each metric, values in the pre-event window (default: 48 h before, configurable lag) are compared against a 28-day baseline using Mann-Whitney U. Effect size is computed as rank-biserial correlation.
  • Multiple comparison correction: When analysing several metrics simultaneously, FDR (Benjamini-Hochberg) correction is applied by default to control false positives. Bonferroni is also available.
  • Alert level: Corrected active signals (p < 0.05) are counted. 1–2 → green, 3–4 → yellow, 5–7 → red.
  • LLM narration: Only triggered on yellow or red. The model receives pre-calculated statistics and is constrained to one factual sentence per signal — no diagnosis, no causal inference.

Use cases

  • Health monitoring — correlate HRV, deep sleep, or skin temperature drops with migraine or crisis events.
  • Infrastructure — detect latency or error-rate anomalies preceding service outages.
  • IPTV / streaming — link buffering load spikes to subscriber disconnection events.
  • Energy consumption — associate power demand patterns with grid stress or equipment failures.

License

MIT — Raúl Gallardo (g3v3r)

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

chrono_correlator-0.6.0.tar.gz (14.9 kB view details)

Uploaded Source

Built Distribution

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

chrono_correlator-0.6.0-py3-none-any.whl (17.2 kB view details)

Uploaded Python 3

File details

Details for the file chrono_correlator-0.6.0.tar.gz.

File metadata

  • Download URL: chrono_correlator-0.6.0.tar.gz
  • Upload date:
  • Size: 14.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for chrono_correlator-0.6.0.tar.gz
Algorithm Hash digest
SHA256 bb8b624eabe51ec3fe30dcc7532b6789799e18426f73ffc3c68ed0ead638cf27
MD5 c8c6f265f88faabbe8f885b81b6a9f7f
BLAKE2b-256 1fafaf5a1ccb54257431d7a2790612e18f14331b9b9ba5a45dad29f54b8fb18d

See more details on using hashes here.

File details

Details for the file chrono_correlator-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for chrono_correlator-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e1c39fe2d9eb6f5f8b995c1078b7931122f8f05b70791ddcc4c057b4590c710c
MD5 dbaeb18b5623ff48f45ebf474897bd57
BLAKE2b-256 89799a2eecc7195dc7e69bc5489989459a9efee5681981884e4a17ebff6ed3cc

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