67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
"""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}
|