Padronanza dell’interpretabilità dei modelli uno sguardo completo ai grafici di dipendenza parziale

'Padronanza dell'interpretabilità dei modelli attraverso grafici di dipendenza parziale'

Iniziare il tuo viaggio nel mondo dell’IA interpretabile

Foto di David Pupăză su Unsplash

Sapere come interpretare il tuo modello è essenziale per capire se non sta facendo cose strane. Più conosci il tuo modello, meno probabilità ci sono che ti sorprenda il suo comportamento quando va in produzione.

Inoltre, più padroneggi il tuo modello, migliore sarai nel venderlo alla tua unità aziendale. La peggiore cosa che può accadere è che si rendano conto che in realtà non sei sicuro di ciò che stai loro vendendo.

Non ho mai sviluppato un modello in cui non mi è stato richiesto di spiegare come sono state fatte le previsioni date le variabili di input. Almeno, dichiarare all’azienda quali caratteristiche hanno contribuito positivamente o negativamente era essenziale.

Uno strumento che puoi utilizzare per capire come funziona il tuo modello è il Partial Dependence Plot (PDP), che esploreremo in questo articolo.

Cosa è il PDP

Il PDP è un metodo di interpretazione globale che si concentra nel mostrarti come i valori delle caratteristiche del tuo modello sono correlati all’output del tuo modello.

Non è un metodo per capire i tuoi dati, genera solo intuizioni per il tuo modello, quindi non si può inferire una relazione causale tra il target e le caratteristiche da questo metodo. Tuttavia, può consentirti di fare inferenze causali sul tuo modello.

Questo perché il metodo indaga il tuo modello, quindi puoi vedere esattamente cosa fa il modello quando la variabile caratteristica cambia.

Come funziona

Prima di tutto, il PDP ci consente di indagare solo una o due caratteristiche alla volta. In questo articolo, ci concentreremo sul caso di analisi di una singola caratteristica.

Dopo che il tuo modello è addestrato, generiamo un dataset di indagine. Questo dataset viene creato seguendo l’algoritmo:

  • Selezioniamo ogni valore unico per la caratteristica di interesse
  • Per ogni valore unico, facciamo una copia dell’intero dataset, impostando il valore della caratteristica a quel valore unico
  • Quindi, utilizziamo il nostro modello per fare le previsioni per questo nuovo dataset
  • Infine, facciamo la media delle previsioni del modello per ogni valore unico

Facciamo un esempio. Supponiamo di avere il seguente dataset:

Ora, se vogliamo applicare il PDP alla Caratteristica 0, ripeteremo il dataset per ogni valore unico della caratteristica, come ad esempio:

Quindi, dopo aver applicato il nostro modello, avremo qualcosa di simile a questo:

Quindi, calcoliamo l’output medio per ogni valore, ottenendo il seguente dataset:

Poi è solo una questione di tracciare questi dati con un grafico a linee.

Per i problemi di regressione, è semplice calcolare l’output medio per ogni valore della caratteristica. Per i metodi di classificazione, possiamo utilizzare la probabilità prevista per ogni classe e quindi calcolare la media di quei valori. In questo caso, avremo un PDP per ogni coppia di caratteristica e classe nel nostro dataset.

Interpretazione matematica

L’interpretazione del PDP è che stiamo marginalizzando una o due caratteristiche per valutarne l’effetto marginale sull’output previsto del modello. Questo è dato dalla formula:

Dove $f$ è il modello di apprendimento automatico, $x_S$ è l’insieme di caratteristiche che ci interessano analizzare e $x_C$ è l’insieme di altre caratteristiche su cui andremo a fare la media. La funzione sopra può essere calcolata utilizzando la seguente approssimazione:

Problemi con il PDP

Il PDP ha alcune limitazioni di cui dobbiamo essere consapevoli. Innanzitutto, poiché facciamo la media delle uscite per ogni valore delle caratteristiche, otterremo un grafico che passa per ogni valore nel dataset, anche se quel valore si verifica solo una volta.

A causa di ciò, potresti finire per vedere un comportamento per aree molto poco popolate del tuo dataset che potrebbe non essere rappresentativo di ciò che accadrebbe se quel valore fosse più frequente. Pertanto, è utile guardare sempre la distribuzione di una caratteristica quando si analizza il suo PDP per sapere quali valori sono più probabili che si verifichino.

Un altro problema si verifica quando si ha una caratteristica con valori che si annullano a vicenda. Ad esempio, se la tua caratteristica ha la seguente distribuzione:

Calcolando il PDP per questa caratteristica, otterremo qualcosa di simile a questo:

Si noti che l’impatto della caratteristica non è in alcun modo nullo, ma è nullo in media. Questo potrebbe indurti a credere erroneamente che la caratteristica sia inutile quando in realtà non lo è.

Un altro problema di questo approccio si verifica quando la caratteristica che stiamo analizzando è correlata alle caratteristiche su cui stiamo facendo la media. Questo perché se abbiamo caratteristiche correlate e costringiamo ogni valore del dataset ad avere ogni valore per la caratteristica di interesse, creeremo punti irrealistici.

Pensa a un dataset con la quantità di pioggia e la quantità di nuvole nel cielo. Quando facciamo la media dei valori per la quantità di pioggia, otterremo punti che indicano che c’è stata pioggia senza nuvole nel cielo, il che è un punto irrealizzabile.

Interpretazione del PDP

Vediamo come analizzare un grafico di dipendenza parziale. Guarda l’immagine qui sotto:

Nell’asse x, abbiamo i valori della caratteristica 0, nell’asse y abbiamo l’output medio del modello per ogni valore della caratteristica. Si noti che per valori inferiori a -0,10, il modello produce previsioni molto basse per il target, dopo di che le previsioni aumentano e poi iniziano a variare intorno a 150 finché il valore della caratteristica supera 0,09, momento in cui le previsioni iniziano a salire drasticamente.

Pertanto, possiamo dire che c’è una correlazione positiva tra la caratteristica e la previsione del target, tuttavia questa correlazione non è lineare.

Grafici ICE

I grafici ICE cercano di risolvere il problema dei valori delle caratteristiche che si annullano a vicenda. Fondamentalmente, in un grafico ICE, tracciamo ogni singola previsione che il modello ha fatto per ogni valore, non solo il valore medio.

Implementazione del PDP in Python

Implementiamo il PDP in Python. Per fare ciò, importeremo prima le librerie necessarie:

import numpy as npimport matplotlib.pyplot as pltfrom tqdm import tqdmfrom sklearn.datasets import load_diabetesfrom sklearn.ensemble import RandomForestRegressor

Utilizzeremo il dataset sul diabete da sklearn. La libreria tqdm verrà utilizzata per creare barre di avanzamento per i nostri cicli.

Ora, carichiamo il dataset e adattiamo un regressore ad albero casuale ad esso:

X, y = load_diabetes(return_X_y=True)rf = RandomForestRegressor().fit(X, y)

Ora, per ogni caratteristica nel nostro dataset, calcoleremo la previsione media del modello per il dataset con quella caratteristica fissata per quel valore:

features = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]features_averages = {}for feature in tqdm(features):    features_averages[feature] = ([], [])      # Per ogni valore unico nella caratteristica    for feature_val in np.unique(X[:, feature]):        features_averages[feature][0].append(feature_val)        # Rimuoviamo la caratteristica dal dataset        aux_X = np.delete(X, feature, axis=1)    # Aggiungiamo il valore della caratteristica per ogni riga del dataset        aux_X = np.hstack((aux_X, np.array([feature_val for i in range(aux_X.shape[0])])[:, None]))            # Calcoliamo la previsione media        features_averages[feature][1].append(np.mean(rf.predict(aux_X)))

Ora, tracciamo il PDP per ogni caratteristica:

for feature in features_averages:    plt.figure(figsize=(5,5))    values = features_averages[feature][0]    predictions = features_averages[feature][1]        plt.plot(values, predictions)    plt.xlabel(f'Caratteristica: {feature}')    plt.ylabel('Target')

Ad esempio, il grafico per la Caratteristica 3 è:

Conclusione

Ora hai un altro strumento nel tuo arsenale da utilizzare per migliorare il tuo lavoro e aiutare l’unità aziendale a capire cosa sta succedendo con quel modello black-box che stai mostrando loro.

Ma non lasciare che la teoria svanisca. Prendi un modello che stai sviluppando attualmente e applica la visualizzazione PDP ad esso. Capisci cosa sta facendo il modello e sii più preciso nella tua ipotesi.

Inoltre, questo non è l’unico metodo di interpretazione disponibile. In realtà, abbiamo altri metodi che funzionano meglio con le caratteristiche correlate. Resta sintonizzato per i miei prossimi post in cui verranno illustrati questi metodi.

Riferimenti

https://ethen8181.github.io/machine-learning/model_selection/partial_dependence/partial_dependence.html

https://scikit-learn.org/stable/modules/partial_dependence.html

https://christophm.github.io/interpretable-ml-book/pdp.html