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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb8b624eabe51ec3fe30dcc7532b6789799e18426f73ffc3c68ed0ead638cf27
|
|
| MD5 |
c8c6f265f88faabbe8f885b81b6a9f7f
|
|
| BLAKE2b-256 |
1fafaf5a1ccb54257431d7a2790612e18f14331b9b9ba5a45dad29f54b8fb18d
|
File details
Details for the file chrono_correlator-0.6.0-py3-none-any.whl.
File metadata
- Download URL: chrono_correlator-0.6.0-py3-none-any.whl
- Upload date:
- Size: 17.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1c39fe2d9eb6f5f8b995c1078b7931122f8f05b70791ddcc4c057b4590c710c
|
|
| MD5 |
dbaeb18b5623ff48f45ebf474897bd57
|
|
| BLAKE2b-256 |
89799a2eecc7195dc7e69bc5489989459a9efee5681981884e4a17ebff6ed3cc
|