ailab Service: vérification…
FR

ailab · v0.3.0

Une hirondelle ne fait pas le printemps.

ailab est un moteur open source de séries temporelles pour la surveillance des maladies infectieuses. Chaque prévision doit battre une référence saisonnière lors d’un rétro-test glissant ; sinon, la porte qualité explique pourquoi elle ne prévoit pas.

Vitrine statique · rien ne s’exécute en direct

Service: vérification…

Un moteur, trois usages

Bibliothèque Python

Stockage de séries, séries dérivées, prévisions, porte qualité et signaux d’alerte sous forme de fonctions simples. Une valeur absente reste NULL, jamais 0.

CLI et traitement par lots

ailab demo / forecast / gate / alert / export : à lancer périodiquement en CI pour publier du JSON et du Parquet statiques.

API Docker

FastAPI avec DuckDB embarqué, sans Postgres ni Redis. Utilisateur non-root, système de fichiers racine en lecture seule ; lecture seule tant qu’aucune clé n’est définie.

D’une série hebdomadaire à un signal fiable

Chaque série passe par les mêmes quatre étapes. Chacune laisse une conclusion et ses raisons, que l’on peut vérifier une à une.

  1. Mettre les données au propre

    Rangées par semaine, une valeur par semaine. Une semaine manquante reste manquante, jamais remplacée par 0 : « non déclaré » ne devient pas « aucun cas ».

  2. Porte qualité

    Un bilan avant toute prévision : l’historique est-il assez long, combien manque-t-il, y a-t-il un rythme saisonnier, et des prévisions faites dans le passé auraient-elles été justes ? La réponse est l’une de trois — prévoir, prévoir avec des limites, ne pas prévoir — toujours avec les raisons.

  3. Prévision

    Quelques méthodes courantes sont comparées à une règle simple (reprendre la même semaine l’an dernier) ; on garde celle qui se trompe le moins lors des essais, et si aucune ne bat la règle simple, pas de prévision. En plus de la courbe, on obtient la fourchette où la vraie valeur tombera le plus probablement.

  4. Semaines inhabituelles

    Signale les semaines nettement plus hautes que d’habitude. Cela veut seulement dire « inhabituel statistiquement » ; parler d’épidémie revient aux humains.

Méthodes : existant et sur mesure

Des bibliothèques éprouvées partout où elles existent ; du code sur mesure uniquement pour la logique de décision qu’aucune bibliothèque ne couvre.

BesoinBibliothèque existanteSur mesure (et pourquoi)
Modèles de prévisionstatsforecast : SeasonalNaive, Naive, MSTL+ETS, AutoTheta, validation croiséeAucun.
Intervalles de prévisionquantiles numpyEnviron 30 lignes de type conforme : réutilise les erreurs du rétro-test (sans nouveaux ajustements), par horizon, dans l’espace transformé, avec couverture en laissant une fenêtre de côté.
Porte qualitéstatsmodels (STL, ADF/KPSS, HAC), scipy (Levene)Seuils, logique de décision autorisée / limitée / refusée, codes de raison et messages en/zh/fr. Aucun outil ne répond à « faut-il prévoir cette série ? ».
AlertesGLM statsmodelsEARS C1–C3 et CUSUM tiennent en quelques dizaines de lignes ; le paquet R surveillance exigerait un runtime R, donc le score de type Farrington est une petite surcouche du GLM.
Séries dérivéessimpleeval, pandasListe blanche d’AST, inférence du type (comptage / comptage → proportion), sémantique des valeurs manquantes (x/0 est manquant) et lignée ; pas d’eval.
Stockage, API, CLIDuckDB, Parquet, FastAPI, pydantic, uvicorn, TyperMiddleware léger (identifiant de requête, taille maximale du corps) ; pas de clé par défaut : lecture seule sauf si vous en définissez une.

Fondements et limites

AffirmationImplémentation / testsLimites
Une prévision doit battre la référence saisonnière naïve en backtest glissant docs/MODEL_POLICY.md#decision-order-first-match-wins
tests/test_forecast_policy.py
tests/test_gate.py
Un backtest ne décrit que les saisons passées ; réévaluer après une rupture.
Historique trop court ou trop lacunaire → refus, avec codes de raison docs/MODEL_POLICY.md#reason-codes
tests/test_gate.py
Les seuils sont des valeurs par défaut configurables ; un refus signifie « ces données ne permettent pas de prévoir », pas que la série est inutile.
Une valeur manquante reste manquante, jamais 0 docs/SERIES_KINDS.md
tests/test_alignment.py
tests/test_derive_kinds.py
Les lacunes ≤ 2 semaines sont interpolées pour le modèle uniquement, et signalées dans model_input.
« Limité » distinct de « refusé » : horizon plus court, intervalles élargis docs/MODEL_POLICY.md#limited-mode
tests/test_gate.py
Le facteur d’élargissement est empirique, pas une garantie de calibration.

Démarrage rapide

L’image est publiée sur GHCR ; ou installez avec pip / uv et utilisez directement la CLI.

Docker (lecture seule, localhost)

docker run --rm -p 127.0.0.1:8000:8000 ghcr.io/cnalks/ailab:v0.3.0
# http://127.0.0.1:8000/docs  ·  /health

Python et CLI

pip install "git+https://github.com/CNalks/ailab@v0.3.0"   # Python 3.12
ailab demo --out out                  # offline batch: static JSON + Parquet
ailab gate us_ilinet_wili --lang fr   # allowed / limited / refused + reasons
ailab forecast us_ilinet_wili --h 8

Appeler l’API

curl -s http://127.0.0.1:8000/api/v1/series/us_ilinet_wili/gate
curl -s "http://127.0.0.1:8000/api/v1/series/us_ilinet_wili/forecast?horizon=8"

Le conteneur est en lecture seule par défaut (les écritures répondent 403 tant que AILAB_API_KEY n’est pas définie). Placez votre propre reverse proxy et une limitation de débit avant toute exposition.

Documentation

Licences et sources de données

Code

ailab est publié sous Apache-2.0, copyright © CNalks (https://github.com/CNalks). github.com/CNalks · Apache-2.0

Données

Les données ne sont pas couvertes par la licence du code ; les conditions propres à chaque source s’appliquent. Les valeurs d’origine sont inchangées ; prévisions, verdicts et alertes sont notre propre analyse dérivée et sont signalées comme telles.

CDC FluView / ILINet (national, weekly), via Delphi Epidata

US Centers for Disease Control and Prevention (CDC); API by Carnegie Mellon University Delphi Research Group

Attribution (texte original, tel que requis par le fournisseur)
Source: US CDC FluView (ILINet), retrieved through the Delphi Epidata API (Carnegie Mellon University).
Avertissement
Forecasts and alerts shown here are our own statistical analysis of public data. They are not CDC/HHS products, are not endorsed by CDC/HHS, and are not public-health advice. The original data are available free of charge from CDC.
Séries utilisées
États-Unis : ILI pondéré national (wILI, %) · États-Unis : consultations ambulatoires pour ILI

UKHSA data dashboard: influenza testing positivity by week (England)

UK Health Security Agency (UKHSA)

Attribution (texte original, tel que requis par le fournisseur)
Contains public sector information published by the UK Health Security Agency (UKHSA) and licensed under the Open Government Licence v3.0.
Avertissement
Forecasts and alerts shown here are our own statistical analysis of public data. They are not UKHSA products, are not endorsed by UKHSA and are not public-health advice.
Séries utilisées
Angleterre : positivité des tests grippe (%)

ECDC ERVISS: primary-care sentinel respiratory virus data (weekly), Respiratory_viruses_weekly_data

European Centre for Disease Prevention and Control (ECDC), based on data from reporting countries and/or WHO

Attribution (texte original, tel que requis par le fournisseur)
Dataset provided by ECDC based on data provided by public health authorities, scientific institutes or health care providers in the relevant reporting countries and/or by WHO. Weekly values are unchanged; analysis added by us.
Avertissement
Forecasts, quality gates and alerts shown here are our own statistical analysis (modified/derived material). They are not ECDC products and are not endorsed by ECDC.
Séries utilisées
UE/EEE : positivité grippe, réseau sentinelle (%) · Malte : détections de grippe, réseau sentinelle