Logiciel

Fournissez des lignes. Obtenez un prédicteur.

Estimator est une bibliothèque Python qui transforme vos tables de données en mémoire en modèles prédictifs calibrés, déterministes, de type dict-in/dict-out — sans réglage manuel de pipeline, sélection de modèle ou sérialisation de fichiers.

Spécifications clés

  • ✓ API à trois méthodes (init, evaluate, info)
  • ✓ Six familles de modèles, un seul budget de temps
  • ✓ Déterministe sous graine et empreinte de données fixes
  • ✓ Bibliothèque entièrement en mémoire, sans service requis

Une prédiction sécurisée et calibrée pour l'ingénierie appliquée

Estimator est une bibliothèque Python open-source et légère de régression tabulaire et de calibration de probabilités de Bernoulli (actuellement en version 0.16.0, avec son code source disponible sur GitHub) conçue pour optimiser le processus de création de prédicteurs hautement fiables. Au lieu de contraindre l'utilisateur à sélectionner manuellement les paramètres des modèles ou à écrire un pipeline de prétraitement, la bibliothèque profile automatiquement les lignes entrantes, sélectionne les fonctions de perte appropriées et entraîne six familles de modèles distinctes sous un budget de temps d'exécution partagé. En exécutant en parallèle des modèles linéaires, des forêts aléatoires, XGBoost, TabPFN v2, des processus gaussiens et des régressions symboliques, elle identifie le modèle unique le plus performant ou un ensemble pondéré de manière égale, persistant les résultats directement via un adaptateur de stockage injecté.

Conçue explicitement pour les développeurs Python et les praticiens du machine learning qui disposent déjà de données tabulaires en mémoire (généralement récupérées depuis une base de données ou un service en amont), Estimator donne la priorité à la correction, au déterminisme et à l'incertitude calibrée plutôt qu'aux heuristiques de classement. En utilisant une graine fixe et une empreinte numérique des données plutôt que des horodatages, elle garantit des prédictions entièrement reproductibles et gère automatiquement les décisions de rechargement par rapport au réapprentissage. La bibliothèque s'exécute entièrement en mémoire, ne dépend d'aucun état global ni couche de service, et s'intègre dans des environnements de production en quelques minutes.

Principes clés

  • API à trois méthodes : Toute la surface publique est définie par Estimator.init, evaluate et info. L'intégration se mesure en minutes, pas en jours.
  • Six familles, un seul budget : Fait le pont de manière transparente entre les modèles linéaires, les forêts aléatoires, XGBoost, TabPFN v2, les processus gaussiens et la régression symbolique via un protocole unifié.
  • Évaluation honnête et intervalles calibrés : Utilise une séparation stricte et sans fuite de type 70/15/15 pour les grands jeux de données ($n \geq 50$), et une validation croisée « leave-one-out » (LOO-CV) pour les très petits volumes (4 à 49 lignes), renvoyant des intervalles d'incertitude conformes de premier ordre.
  • Déterminisme et empreinte numérique : Les mêmes données, graines et configurations produisent des sorties identiques au bit près. La persistance est déléguée via un contrat simple d'adaptateur à trois méthodes (get/put/exists).

Exemple d'intégration minimal

Le fragment ci-dessous illustre le contrat public minimal dict-in/dict-out en action :

from cognitive_estimator import Estimator, Config

# 1. Initialiser l'estimateur avec un adaptateur de stockage injecté
config = Config(target_column="price", wall_clock_seconds=30)
estimator = Estimator.init(
    config=config,
    seed=42,
    storage_adapter=my_custom_db_adapter
)

# 2. Entraîner et évaluer les modèles sur votre liste de dictionnaires en mémoire
metrics = estimator.evaluate(rows=[
    {"feature_1": 1.2, "feature_2": "A", "price": 100.5},
    {"feature_1": 2.4, "feature_2": "B", "price": 150.2},
    # ... d'autres dictionnaires en mémoire
])

# 3. Obtenir des prédictions avec des intervalles d'incertitude calibrés
prediction = estimator.predict(row={"feature_1": 1.8, "feature_2": "A"})
print(f"Prédiction moyenne : {prediction.values}")
print(f"Intervalle calibré : [{prediction.lower_bound}, {prediction.upper_bound}]")