projet_MLops_part2 / tests /unit /test_monitoring_stats.py
github-actions
Deploy to HF
0f82473
Raw
History Blame Contribute Delete
2.42 kB
import pandas as pd
import pytest
from src.utils.monitoring_stats import compute_metrics, build_histogram, THRESHOLD
def make_logs(n=5, inference_ms=50.0):
return pd.DataFrame({
"sk_id_curr": list(range(1, n + 1)),
"inference_time_ms": [inference_ms] * n,
})
def make_predictions(sk_ids, proba_values):
return pd.DataFrame({
"sk_id_curr": sk_ids,
"proba_class_1": proba_values,
})
# --- compute_metrics ---
def test_compute_metrics_taux_defaut_zero():
logs = make_logs()
preds = make_predictions([1, 2, 3, 4, 5], [0.01, 0.02, 0.03, 0.04, 0.05])
result = compute_metrics(logs, preds)
assert result["taux_defaut"] == 0.0
def test_compute_metrics_taux_defaut_cent_pour_cent():
logs = make_logs()
preds = make_predictions([1, 2, 3, 4, 5], [0.5, 0.6, 0.7, 0.8, 0.9])
result = compute_metrics(logs, preds)
assert result["taux_defaut"] == 100.0
def test_compute_metrics_score_moyen():
logs = make_logs()
preds = make_predictions([1, 2, 3, 4, 5], [0.1, 0.2, 0.3, 0.4, 0.5])
result = compute_metrics(logs, preds)
assert abs(result["score_moyen"] - 0.3) < 1e-9
def test_compute_metrics_temps_moyen():
logs = make_logs(inference_ms=75.0)
preds = make_predictions([1, 2, 3, 4, 5], [0.1] * 5)
result = compute_metrics(logs, preds)
assert result["temps_moyen"] == 75.0
def test_compute_metrics_retourne_zero_si_pas_de_jointure():
logs = make_logs()
preds = make_predictions([99, 100], [0.5, 0.6]) # different sk_id_curr
result = compute_metrics(logs, preds)
assert result["n_clients"] == 0
# --- build_histogram ---
def test_build_histogram_retourne_une_figure():
import plotly.graph_objects as go
preds = make_predictions([1, 2, 3], [0.05, 0.15, 0.5])
fig = build_histogram(preds)
assert isinstance(fig, go.Figure)
def test_build_histogram_contient_deux_traces():
preds = make_predictions([1, 2, 3], [0.05, 0.15, 0.5])
fig = build_histogram(preds)
# one trace per Risque category (Remboursé and Défaut)
assert len(fig.data) == 2
def test_compute_metrics_retourne_zeros_si_logs_vide():
logs = pd.DataFrame(columns=["sk_id_curr", "inference_time_ms"])
preds = make_predictions([1, 2, 3], [0.5, 0.6, 0.7])
result = compute_metrics(logs, preds)
assert result == {"taux_defaut": 0.0, "score_moyen": 0.0, "temps_moyen": 0.0, "n_clients": 0}