25 lines
914 B
Python
25 lines
914 B
Python
"""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()),
|
|
}
|