Machine Learning

Labels sospechosos: detección por confianza cruzada (estilo cleanlab)

Las predicciones out-of-fold dan la probabilidad que el modelo asigna al label observado: las filas donde esta confianza es ínfima son candidatas a estar mal etiquetadas, ordenadas para revisión humana.

Requisitos

scikit-learn, pandas, numpy

Python
import numpy as np
import pandas as pd
from sklearn.model_selection import cross_val_predict, StratifiedKFold

cv = StratifiedKFold(5, shuffle=True, random_state=42)
oof = cross_val_predict(pipe, X, y, cv=cv,
                        method="predict_proba", n_jobs=-1)

# confiance accordée par le modèle au label OBSERVÉ
conf_label = oof[np.arange(len(y)), y.values]
seuil = float(np.quantile(conf_label, 0.02))   # 2 % les moins crédibles
masque = conf_label <= seuil

suspects = pd.DataFrame({
    "label_observe": y.values[masque],
    "proba_label": conf_label[masque],
    "proba_classe_1": oof[masque, 1],
}, index=y.index[masque])

print(f"{int(masque.sum())} labels suspects détectés (seuil {seuil:.3f})")
print(suspects.sort_values("proba_label").head(5).round(3).to_string())

Resultado

168 labels suspects détectés (seuil 0.094)
      label_observe  proba_label  proba_classe_1
3812              0        0.012           0.988
9047              1        0.019           0.019
1266              0        0.024           0.976
5530              1        0.031           0.031
7012              0        0.038           0.962

Revue manuelle des 20 premiers : 14 étaient effectivement mal
étiquetés (70 % de précision du détecteur). Après correction et
refit : AUC 0.871 -> 0.884 — le plus gros gain du trimestre,
sans toucher au modèle.
Qualité des labelscleanlabOut-of-foldNettoyage

Snippets relacionados

Volver al Data Lab