Salta al contenuto
Note per Studenti Esercizio - Curva ROC e AUC di una foresta casuale e di un albero

Esercizio - Curva ROC e AUC di una foresta casuale e di un albero

Questa pagina non ha ancora la versione ripasso: qui sotto c'è il testo completo.

In questa pagina 5

Testo (simulazione d'esame, esercizi 5 e 7). Sul dataset Titanic (712 passeggeri senza valori mancanti, target Survived, divisione stratificata 80%/20%80\%/20\%, test di 143 passeggeri: 58 sopravvissuti e 85 non sopravvissuti):

  1. addestrare una foresta casuale con 100 alberi (campioni bootstrap e feature bagging), ottenere per ogni campione di test la confidenza (frazione di alberi che votano per la classe vincente) e trasformarla in punteggio per la classe 1;
  2. per soglie diverse calcolare TPR e FPR, tracciare la curva ROC e calcolare l'AUC;
  3. rendere probabilistico l'albero singolo (probabilità == frazione di campioni di classe 1 nella foglia) e ripetere ROC e AUC;
  4. confrontare i due modelli.

Teoria usata: Metriche di classificazioneIn classificazione binaria ogni previsione è vero positivo (TP), vero negativo (TN), falso positivo (FP, errore di tipo I) o falso negativo (FN, errore di tipo II). Da queste quattro quantità: accuracy $=\frac{TP+TN}{TP+TN+FP+FN}$, specificità $=\frac{TN}{TN+FP}$, precision $=\frac{TP}{TP+FP}$, recall $=\frac{TP}{TP+FN}$, e la loro media armonica $F_1=\frac{2PR}{P+R}$. Con dati sbilanciati l'accuracy inganna (un modello che predice sempre la classe maggioritaria ha 99%): si usano precision, recall, F1, ROC-AUC, la cross-validation stratificata e il riequilibrio con undersampling o oversampling (non SMOTE). Cambiando la soglia sulla probabilità si ottiene la curva ROC (TPR contro FPR) e l'area AUC. Approfondimento: non nel programma di Telecomunicazioni.Metriche di classificazione → (TPR, FPR, ROC, AUC); Metodi ensemble - bagging, random forest e boostingUn albero da solo ha varianza alta; un ensemble combina molti modelli deboli. Bagging: ogni albero è addestrato su un campione bootstrap (n estrazioni con rimpiazzo, circa il 63% di campioni distinti) e si vota o si fa la media: riduce la varianza, perché la media di $T$ stimatori con varianza $\sigma^2$ e correlazione $\rho$ ha varianza $\rho\sigma^2+(1-\rho)\sigma^2/T$. Random forest = bagging + a ogni split solo $\sqrt p$ feature casuali (alberi meno correlati); l'importanza di una feature è la somma delle riduzioni di Gini pesate sui nodi in cui è usata. Boosting: alberi in sequenza, ciascuno corregge gli errori dei precedenti, e si riduce il bias. Gradient boosting: $F\leftarrow F+\eta h$ con $h$ albero sui residui (gradiente negativo della perdita), $\eta$ piccolo; AdaBoost: stump e pesi sui campioni sbagliati; XGBoost: similarity score $\frac{(\sum r)^2}{N+\lambda}$, gain, potatura con $\gamma$, output $\frac{\sum r}{N+\lambda}$. Programma di Telecomunicazioni: Random Forests; boosting come approfondimento.Metodi ensemble - bagging, random forest e boosting → (bagging, confidenza del voto); Alberi di decisioneUn albero di decisione partiziona i dati con una sequenza di regole su una sola variabile alla volta (nodi interni = regole, foglie = predizioni: classe più frequente, oppure media del target in regressione). Si costruisce in modo ricorsivo scegliendo a ogni nodo la divisione che rende i figli più «puri»: con l'entropia $H=-\sum p_i\log_2p_i$ e il guadagno d'informazione $IG=H(S)-\sum\frac{|S_v|}{|S|}H(S_v)$ (ID3), oppure con l'indice di Gini $1-\sum p_i^2$ e soglie $x\le t$ su variabili numeriche (CART); in regressione con MSE o riduzione di varianza. Un albero pienamente sviluppato fa overfitting (varianza alta): si limita con la profondità massima (pre-potatura) o con la potatura a costo-complessità $R_\alpha(T)=R(T)+\alpha|T|$ (post-potatura). Pro: interpretabile, niente normalizzazione, predizione immediata; contro: varianza alta, da cui le foreste. Programma di Telecomunicazioni: Decision Trees e Random Forests.Alberi di decisione → (ID3, foglie).

1. Punteggio della foresta

predict_bagging restituisce la classe di maggioranza c^\hat c e la confidenza conf=voti per c^T\text{conf}=\frac{\text{voti per }\hat c}{T}. Il punteggio per la classe 11 è score={confc^=1,1−confc^=0,\text{score}=\begin{cases}\text{conf}&\hat c=1,\\1-\text{conf}&\hat c=0,\end{cases} cioè la frazione di alberi che votano per «sopravvissuto». Con 100 alberi lo score assume valori multipli di 0,010{,}01.

Esempio. Se 6262 alberi su 100100 dicono 00: classe 00, conf =0,62=0{,}62, score =0,38=0{,}38 (equivalente a 3838 voti per la classe 11).

2. ROC: dalla soglia a TPR e FPR

Per ogni soglia tt (da 00 a 11) si prevede positivo se score≥t\text{score}\ge t e si calcolano TPR=TPTP+FN=TP58,FPR=FPFP+TN=FP85.\text{TPR}=\frac{TP}{TP+FN}=\frac{TP}{58},\qquad\text{FPR}=\frac{FP}{FP+TN}=\frac{FP}{85}. Soglie alte ⇒\Rightarrow pochi positivi previsti (punto in basso a sinistra); soglie basse ⇒\Rightarrow molti (alto a destra). Per alcuni valori (foresta con 100 alberi):

soglia tt TPR FPR
0,80{,}8 0,5000{,}500 0,0240{,}024
0,50{,}5 0,6900{,}690 0,0940{,}094
0,20{,}2 0,8790{,}879 0,1880{,}188

Con t=0,5t=0{,}5: TP=0,690⋅58=40TP=0{,}690\cdot58=40, FP=0,094⋅85=8FP=0{,}094\cdot85=8: la foresta trova 4040 sopravvissuti su 5858 sbagliando su 88 non sopravvissuti su 8585.

AUC. L'area sotto la curva si calcola con la regola dei trapezi sui punti ordinati per FPR, oppure in modo esatto come probabilità che un positivo preso a caso abbia punteggio maggiore di un negativo preso a caso (con 12\tfrac12 per i pareggi). Per questa foresta AUC=0,918\text{AUC}=0{,}918 (con un'altra realizzazione casuale delle foreste: 0,9120{,}912 nel notebook ufficiale; la differenza è dovuta ai campioni bootstrap). L'AUC dice che, nel 92%92\% delle coppie (positivo, negativo), la foresta assegna un punteggio più alto al positivo.

3. L'albero singolo con probabilità

Per ottenere un punteggio da un solo albero ID3 si memorizza in ogni nodo la probabilità p^1=#campioni di classe 1#campioni\hat p_1=\frac{\#\text{campioni di classe 1}}{\#\text{campioni}} (del training) e si usa quella della foglia in cui cade il campione (se la foglia è vuota si usa la probabilità del genitore: la classe prevista è già quella del genitore). Un albero ha pochi punteggi distinti (qui 2323): la curva ROC è fatta di pochi gradini. Risultati sul test: accuracy 0,8250{,}825, AUC=0,865\text{AUC}=0{,}865.

soglia tt TPR FPR
0,80{,}8 0,6720{,}672 0,0710{,}071
0,50{,}5 0,7590{,}759 0,1060{,}106
0,20{,}2 0,8970{,}897 0,2240{,}224

(Il valore 0,8650{,}865 coincide con l'AUC esatta di scikit-learn nel notebook; l'integrazione per trapezi su una griglia di soglie dà 0,85550{,}8555: la differenza viene dalla discretizzazione.)

4. Confronto

La foresta ha AUC più alta (0,9180{,}918 contro 0,8650{,}865): con un punteggio più fine (101 livelli) e meno varianza ordina meglio i passeggeri. A parità di soglia 0,50{,}5 l'albero singolo ha accuracy più alta su questo test (0,8250{,}825 contro 0,8110{,}811 della foresta): su 143 campioni una differenza di due casi non è significativa; l'AUC, che usa tutte le soglie, è una misura più stabile. Una soglia più bassa sposta il compromesso a favore del recall: per esempio con t=0,2t=0{,}2 la foresta trova l'88%88\% dei sopravvissuti con 19%19\% di falsi allarmi. In un'applicazione in cui perdere un positivo costa molto si abbassa la soglia.

Codice

python
scores = np.where(y_pred == 1, confidences, 1 - confidences)        # punteggio per la classe 1
P, N = (y_test == 1).sum(), (y_test == 0).sum()
fpr, tpr = [], []
for t in np.linspace(0, 1, 101):
    pred = scores >= t
    tpr.append((pred & (y_test == 1)).sum() / P); fpr.append((pred & (y_test == 0)).sum() / N)
auc = np.trapz(tpr[::-1], fpr[::-1])                                 # regola dei trapezi (ordine per FPR crescente)
# esatta: media su tutte le coppie (positivo, negativo) di [s_pos > s_neg] + 0.5 [s_pos == s_neg]
# scikit-learn: roc_curve(y_test, scores), roc_auc_score(y_test, scores)

Un esempio svolto a mano (4 punteggi) è in Metriche di classificazioneIn classificazione binaria ogni previsione è vero positivo (TP), vero negativo (TN), falso positivo (FP, errore di tipo I) o falso negativo (FN, errore di tipo II). Da queste quattro quantità: accuracy $=\frac{TP+TN}{TP+TN+FP+FN}$, specificità $=\frac{TN}{TN+FP}$, precision $=\frac{TP}{TP+FP}$, recall $=\frac{TP}{TP+FN}$, e la loro media armonica $F_1=\frac{2PR}{P+R}$. Con dati sbilanciati l'accuracy inganna (un modello che predice sempre la classe maggioritaria ha 99%): si usano precision, recall, F1, ROC-AUC, la cross-validation stratificata e il riequilibrio con undersampling o oversampling (non SMOTE). Cambiando la soglia sulla probabilità si ottiene la curva ROC (TPR contro FPR) e l'area AUC. Approfondimento: non nel programma di Telecomunicazioni.Metriche di classificazione →.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata