Coursera Learner working on a presentation with Coursera logo and
Coursera Learner working on a presentation with Coursera logo and

Quando interpretate l’output dei dati predittivi, assicuratevi di eseguire ogni passo con attenzione. Per soddisfare gli utenti, è necessario fornire intuizioni facili da capire. Potete farlo migliorando il processo del vostro modello. Va bene concentrarsi su modelli semplici piuttosto che su quelli complessi. Per esempio, i modelli lineari vi aiuteranno con una facile interpretazione. Tuttavia, con una quantità eccessiva di dati, l’uso di modelli complessi comporta numerosi vantaggi. Con un modello di questo tipo, potete portare il vostro trade-off in prima linea per un output accurato e interpretabile. È possibile scegliere tra numerosi metodi diversi per risolvere problemi complessi. Tuttavia, queste soluzioni non implicano come questi metodi si relazionano tra loro. Inoltre, non ci sono dati a sostegno del perché un metodo sia migliore dell’altro.
La costruzione di SHAP trae ispirazione dal precedente quadro unificato. Questo nuovo approccio al quadro SHAP utilizza i valori Shapely. Di seguito, puoi capire la definizione di SHAP e come puoi implementare il concetto con il pacchetto Python.

Cos’è SHAP?

Shapley Additive exPlanations o SHAP è un approccio usato nella teoria dei giochi. Con SHAP, puoi spiegare l’output del tuo modello di apprendimento automatico. Questo modello collega la spiegazione locale dell’allocazione ottimale del credito con l’aiuto dei valori Shapely. Questo approccio è molto efficace con la teoria dei giochi.

Come si possono calcolare i valori Shapely

SHAP è un valore di contributo marginale medio tra tutte le combinazioni della caratteristica che sono possibili. Di seguito, discuteremo come SHAP o Shapely Additive exPlanations stia diventando una tecnica popolare nel machine learning. Possiamo capire il concetto con il seguente esempio:
Possiamo considerare i punti che una squadra segna in ogni partita di una stagione. Supponiamo di voler trovare il punteggio medio del giocatore A e il suo contributo come punteggio di squadra in una partita. Per questo, abbiamo bisogno di trovare il contributo del giocatore A nella partnership del giocatore B e del giocatore C.

NOTA

Mentre si esegue l’esperimento, è necessario assicurarsi delle seguenti condizioni sulle partite:

  1. Prima di eseguire l’esperimento, è necessario assumere che la prova dei giocatori sia già completa
  2. È inoltre necessario assumere che ogni giocatore possa esibirsi in almeno una partita in modo da poter basare il risultato su dati rilevanti.
  3. Ci dovrebbe essere una partita in cui un giocatore non è disponibile mentre gli altri due sono disponibili.
  4. Qui sotto troverete solo un esempio. Potete prendere qualsiasi metrica in base alla classifica del torneo. Qui sotto troverete i punti totali come metrica:
    Passo 1: Quando il giocatore A non sta giocando, ma i giocatori B e C stanno giocando in una combinazione.
    In questa condizione, dobbiamo prendere la media dei punti delle partite. È necessario ricordare che il giocatore A non sta giocando, quindi la media includerà solo i punteggi del giocatore B, e C. Si può anche prendere un singolo campione casuale per trovare la risposta. In questo esempio, si assumerà un punteggio totale medio pari a 60 punti.
    Fase 2: Quando il giocatore C non sta giocando ma i giocatori A e B stanno giocando in una combinazione.
    Ora considereremo la media dei giocatori A e B, mentre il giocatore C non gioca. Supponiamo che il punteggio totale della squadra sia di 90 punti.
    Poiché tutti i giocatori si sono esibiti in una qualsiasi delle partite, possiamo ora trovare i punti totali del giocatore A sottraendo 85 a 65. La risposta sarebbe 30 punti. Si può anche eseguire l’esperimento calcolando la media dell’esperimento più volte e trovando la differenza.

Implementazione dei codici

Per prima cosa, è necessario importare tutte le librerie necessarie con l’aiuto dei seguenti codici:
importa pandas come pd
importare numpy come np
importare shap
da sklearn.model_selection importare train_test_split
da sklearn.metrics importare mean_squared_error

da sklearn.linear_model importare LinearRegression
da sklearn.tree importare DecisionTreeRegressor
da sklearn.ensemble importare RandomForestRegressor
da xgboost.sklearn importare XGBRegressor
da sklearn.preprocessing importa OneHotEncoder, LabelEncoder
da sklearn importare albero

importare matplotlib.pyplot come plt
%matplotlib inline
importare avvertimenti
warnings.filterwarnings(‘ignore’)

Pre-elaborare i dati dopo la lettura

Il seguente esempio riguarda il settore immobiliare. Tuttavia, è possibile utilizzare qualsiasi set di dati per trovare l’output con questo metodo. Questo è solo un esempio, quindi l’imputazione e la pre-elaborazione non sono importanti. Ma quando si tratta di un test originale, è necessario seguire la procedura completa:

Leggere i dati

data = pd.read_csv(‘data.csv’)# Rimuovere le caratteristiche con alti valori nulli
data.drop([‘PoolQC’, ‘MiscFeature’, ‘Fence’, ‘FireplaceQu’,
‘LotFrontage’], inplace=True, axis=1)# Elimina i valori nulli
data.dropna(inplace=True)# Prepara X e Y
X = pd.get_dummies(data)
X.drop([‘SalePrice’], inplace=True, axis=1)
y = data[‘SalePrice’]

Adattare il modello

In questo passo è necessario adattare il modello con il set di dati:
model = XGBRegressor(n_estimators=1000, max_depth=10, learning_rate=0.001)# Adatta il modello
model.fit(X, y)

Caratteristiche importanti dei valori Shap

Ora è necessario utilizzare la libreria SHAP. Questa è la libreria più potente disponibile. Controllate le trame che offrono.

  • Per prima cosa, devi avviare un codice di visualizzazione JS nella tua libreria.

caricare il codice di visualizzazione JS nel notebook

shap.initjs()

  • Ora puoi spiegare la predizione del tuo modello.
  • Puoi iniziare raccogliendo i valori di SHAP e lo spiegatore
    shap_values.
    explainer = shap.TreeExplainer(modello)
    shap_values = explainer.shap_values(X)

Tracciare i risultati

Forzare il plottaggio
i = 5
shap.force_plot(explainer.expected_value, shap_values[i], features=X.iloc[i], feature_names=X.columns)

Conclusione

Con l’aiuto della spiegazione di cui sopra, è possibile visualizzare le caratteristiche che contribuiscono a trovare l’output del vostro modello e spingere il valore di base. Il valore base è l’output medio del modello che riceviamo con l’aiuto dei dati di allenamento.