FairnessMeasures.compute_metrics¶
- FairnessMeasures.compute_metrics(predictions, X_fair, target=None, fair_feat=None, return_prop_true=True, **kwargs)¶
Calcola le metriche di fairness basandosi sulle metriche di fairness impostate sui gruppi di fairness specificati.
Questo metodo supporta sia modelli supervisionati che non supervisionati.
Il metodo esegue il calcolo delle metriche di fairness per ciascun gruppo di fairness specificato e può restituire le proporzioni di 1 nel contesto di classificazione binaria.
- Parameters:
predictions (np.array/pd.Series) – Le previsioni (o le etichette di cluster) generate dal modello.
X_fair (pd.DataFrame/pd.Series) – Il dataset da analizzare per le metriche di fairness, contenente le feature che determinano i gruppi di fairness.
target (np.array/pd.Series, opzionale) – La colonna target per il modello supervisionato. Necessaria solo se approach_type è “supervised”. Default: None.
fair_feat (str/list, opzionale) – Le feature da analizzare per il calcolo delle metriche di fairness. Se fornita una lista di liste di feature vengono analizzate tutte le combinazioni possibili dei valori di quelle feature per il calcolo delle metriche. Se non fornito, tutte le feature di X_fair vengono analizzate. Default: None.
return_prop_true (bool, opzionale) – Se True, la funzione restituirà anche la proporzione di etichette di target che sono uguali a 1 in ciascun gruppo di fairness in un contesto di classificazione binaria. Default: True.
**kwargs (dict, opzionale) – Altri parametri opzionali da passare alla funzione, che possono includere le configurazioni personalizzate per il calcolo delle metriche.
- Returns:
Un dizionario contenente le metriche di fairness calcolate per ciascun gruppo di fairness. Ogni chiave è una metrica, e ogni valore è un altro dizionario che contiene le performance per ciascun gruppo.
- Return type:
dict
Note
Il dizionario ritornato dal metodo contiene per ogni gruppo di fairness, oltre al valore della metrica, anche la percentuale di campioni appartenenti al gruppo rispetto al numero totale di campioni.
Se return_prop_true è True il dizionario ritornato conterrà anche la percentuale di 1 (veri positivi) all’interno del gruppo in un contesto di classificazione binaria.
Dati utilizzati per gli esempi
>>> df_esempio
feature_num feature_cat target_clf pred_clf target_reg pred_reg 0 2 B 0 0 7.652628 -1.427613 1 3 A 1 0 17.712800 3.589763 2 4 C 0 0 17.682912 32.339399 3 5 B 0 0 22.671351 20.413588 4 6 A 0 1 31.209811 31.885093 5 7 C 1 0 25.433599 11.186117 6 8 D 0 1 31.375411 25.931584 7 9 E 0 1 42.188562 43.297788 8 10 C 0 1 44.935844 33.425909 9 11 A 1 0 56.571237 60.328217 Esempio 1: Utilizzo con Classificazione
>>> from model_monitoring.fairness_measures import FairnessMeasures >>> prova_clf = FairnessMeasures(approach_type="supervised", model_type="classification") >>> fair_dict_clf = prova_clf.compute_metrics( ... df_esempio.pred_clf, ... df_esempio, ... target=df_esempio.target_clf, ... fair_feat=['feature_cat'] ... ) >>> fair_dict_clf {'statistical_parity_difference': {'feature_cat': {'B': [-0.5, 0.2, 0.0], 'A': [-0.09523809523809523, 0.3, 0.6666666666666666], 'C': [-0.09523809523809523, 0.3, 0.3333333333333333], 'D': [0.6666666666666667, 0.1, 0.0], 'E': [0.6666666666666667, 0.1, 0.0]}}, 'disparate_impact_ratio': {'feature_cat': {'B': [0.0, 0.2, 0.0], 'A': [0.7777777777777778, 0.3, 0.6666666666666666], 'C': [0.7777777777777778, 0.3, 0.3333333333333333], 'D': [3.0, 0.1, 0.0], 'E': [3.0, 0.1, 0.0]}}, 'predictive_parity_difference': {'feature_cat': {'B': [0.0, 0.2, 0.0], 'A': [0.0, 0.3, 0.6666666666666666], 'C': [0.0, 0.3, 0.3333333333333333], 'D': [0.0, 0.1, 0.0], 'E': [0.0, 0.1, 0.0]}}, 'equal_opportunity_difference': {'feature_cat': {'B': [0.0, 0.2, 0.0], 'A': [0.0, 0.3, 0.6666666666666666], 'C': [0.0, 0.3, 0.3333333333333333], 'D': [0.0, 0.1, 0.0], 'E': [0.0, 0.1, 0.0]}}, 'average_odds_difference': {'feature_cat': {'B': [-0.4, 0.2, 0.0], 'A': [0.25, 0.3, 0.6666666666666666], 'C': [-0.04999999999999999, 0.3, 0.3333333333333333], 'D': [0.25, 0.1, 0.0], 'E': [0.25, 0.1, 0.0]}}}
Esempio 2: Utilizzo con Regressione
>>> from model_monitoring.fairness_measures import FairnessMeasures >>> prova_reg = FairnessMeasures(approach_type="supervised", model_type="regression") >>> fair_dict_reg = prova_reg.compute_metrics( ... df_esempio.pred_reg, ... df_esempio, ... target=df_esempio.target_reg, ... fair_feat=['feature_cat'] ... ) >>> fair_dict_reg {'ddre_independence': {'feature_cat': {'B': [1.105141780859906, 0.2], 'A': [1.0305683337638512, 0.3], 'C': [1.0001623180326842, 0.3], 'D': [0.9999460741465931, 0.1], 'E': [1.0262780528726796, 0.1]}}, 'ddre_separation': {'feature_cat': {'B': [0.9314966649516162, 0.2], 'A': [0.9962910535987769, 0.3], 'C': [0.9999808022130929, 0.3], 'D': [1.0007959938045, 0.1], 'E': [0.9474475048436408, 0.1]}}, 'ddre_sufficiency': {'feature_cat': {'B': [0.9319339519285806, 0.2], 'A': [0.998310923429683, 0.3], 'C': [0.9999865564552243, 0.3], 'D': [1.0004274343644692, 0.1], 'E': [0.9516507505311746, 0.1]}}}