feat(ml): initialise le pipeline d'entrainement LightGBM (ADR 0005)
ML / Lint, typage et tests (push) Successful in 2m2s
ML / Lint, typage et tests (push) Successful in 2m2s
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
"""Metriques de regression partagees entre le modele et la baseline."""
|
||||
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from sklearn.metrics import mean_absolute_error, root_mean_squared_error
|
||||
|
||||
|
||||
def regression_metrics(y_true: pd.Series, y_pred: pd.Series) -> dict[str, float]:
|
||||
"""MAE, RMSE et MAPE (en %), sur les paires non nulles des deux series."""
|
||||
valides = y_true.notna() & y_pred.notna()
|
||||
reel = y_true[valides]
|
||||
predit = y_pred[valides]
|
||||
|
||||
# MAPE diverge a consommation nulle : les mesures a zero (site a l'arret) sont exclues de ce
|
||||
# seul ratio, pas des autres metriques.
|
||||
non_nul = reel != 0
|
||||
mape = float(np.mean(np.abs((reel[non_nul] - predit[non_nul]) / reel[non_nul])) * 100)
|
||||
|
||||
return {
|
||||
"mae": float(mean_absolute_error(reel, predit)),
|
||||
"rmse": float(root_mean_squared_error(reel, predit)),
|
||||
"mape": mape,
|
||||
"n_observations": int(valides.sum()),
|
||||
}
|
||||
Reference in New Issue
Block a user