TP3 Parties 2-4 : API REST FastAPI (health, predict, batch, erreurs 404)
This commit is contained in:
66
lab/serving/features.py
Normal file
66
lab/serving/features.py
Normal file
@@ -0,0 +1,66 @@
|
||||
"""Recuperation des features de prediction.
|
||||
|
||||
Dans un systeme reel, ces valeurs proviendraient d'un feature store / d'une base
|
||||
alimentee par le pipeline de calcul de features (lags, moyennes glissantes) sur
|
||||
l'historique de consommation. On separe volontairement cette etape du calcul de la
|
||||
prediction : la source des features peut changer sans toucher au modele.
|
||||
|
||||
Ici on SIMULE cette recuperation par un simple dictionnaire Python, comme demande
|
||||
par l'enonce. Les valeurs sont des observations reelles (derniere ligne connue de
|
||||
quelques clients dans data/test.parquet).
|
||||
"""
|
||||
|
||||
from .. import constants
|
||||
|
||||
|
||||
class UnknownClientError(KeyError):
|
||||
"""Aucune feature disponible pour ce client (identifiant inconnu)."""
|
||||
|
||||
|
||||
# feature store simule : client_id -> {feature: valeur}
|
||||
FEATURE_STORE: dict[str, dict[str, float]] = {
|
||||
"MT_124": {
|
||||
"lag_1d": 107.656,
|
||||
"lag_7d": 25.120,
|
||||
"lag_30d": 70.574,
|
||||
"lag_365d": 25.120,
|
||||
"rolling_mean_7d": 65.870,
|
||||
"rolling_mean_30d": 71.310,
|
||||
},
|
||||
"MT_156": {
|
||||
"lag_1d": 13.149,
|
||||
"lag_7d": 13.929,
|
||||
"lag_30d": 21.577,
|
||||
"lag_365d": 8.935,
|
||||
"rolling_mean_7d": 16.648,
|
||||
"rolling_mean_30d": 19.720,
|
||||
},
|
||||
"MT_158": {
|
||||
"lag_1d": 30.739,
|
||||
"lag_7d": 16.608,
|
||||
"lag_30d": 34.094,
|
||||
"lag_365d": 6.574,
|
||||
"rolling_mean_7d": 19.067,
|
||||
"rolling_mean_30d": 21.486,
|
||||
},
|
||||
"MT_159": {
|
||||
"lag_1d": 23.305,
|
||||
"lag_7d": 24.741,
|
||||
"lag_30d": 21.386,
|
||||
"lag_365d": 5.333,
|
||||
"rolling_mean_7d": 11.707,
|
||||
"rolling_mean_30d": 13.619,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
def get_features(client_id: str) -> dict[str, float]:
|
||||
"""Renvoyer les features du client, ordonnees comme a l'entrainement du modele.
|
||||
|
||||
Leve UnknownClientError si le client est inconnu.
|
||||
"""
|
||||
if client_id not in FEATURE_STORE:
|
||||
raise UnknownClientError(client_id)
|
||||
raw = FEATURE_STORE[client_id]
|
||||
# On respecte l'ordre des colonnes attendu par le modele (SERVING_FEATURES).
|
||||
return {feature: raw[feature] for feature in constants.SERVING_FEATURES}
|
||||
Reference in New Issue
Block a user