• Non ci sono risultati.

Progettazione modello

6.4 Scelta delle variabili

6.4.2 Albero decisionale

Random Forest e XGBoost rappresentano due modelli di intelligenza artificiale basati sul concetto di albero decisionale e, per questo motivo, si ritiene opportuno e interessante iniziare, per lo sviluppo di un processo di feature selection, dalla costruzione di un modello di albero decisionale singolo, utile come punto di partenza per svolgere le analisi successive.

Prima di procedere, è doveroso effettuare una precisazione sul database impiegato, in quanto il processo in questione è stato eseguito utilizzando contemporaneamente il dataset trasformato sia con i valori normalizzati MinMax che con i valori standardizzati Z-score, anche se con risultati praticamente identici in entrambe le applicazioni.

Implementazione

Per l’implementazione del modello di albero decisionale semplice si è scelto di utilizzare, in merito alla fase di training del modello, sia l’intero database a disposizione che una divisione del database in training set e testing set, rispettivamente pari a 23 e 13, ricorrendo alla funzione train_test_split:

#s p l i t t i n g d a t a s e t i n t o t r a i n i n g s e t and t e s t i n g s e t

X_train1 , X_test1 , y_train1 , y_test1 = t r a i n _ t e s t _ s p l i t ( d f _ i n d i c a t o r i , df_flag1 , t e s t _ s i z e =1/3 , random_state =42)

Dal momento che non si è interessati a impiegare il modello di albero decisionale per risolvere il problema di classificazione tra imprese sane e imprese anomale, si è ritenuto opportuno utilizzare non solo una divisione del database in training set e testing set, più corretta dal punto di vista teorico per la validazione dei risultati, ma anche l’intero database a disposizione, senza nessuna divisione, in modo da sfruttare tutta l’informazione contenuta al suo interno per individuare le variabili più significative.

A questo proposito, si inizializza il classificatore DecisionTreeClassifier, scegliendo adeguatamente gli iperparametri del modello, si addestra un albero decisionale singolo, utilizzando la funzione fit, e, infine, si predice il risultato, utilizzando la funzione predict:

#implementing a s i n g l e D e c i s i o n Tree model

c l f = D e c i s i o n T r e e C l a s s i f i e r ( random_state =42 , c r i t e r i o n= ’ g i n i ’ , max_depth=3)

#f i t t i n g the model

c l f = c l f . f i t ( X_train1 , y_train1 )

#p r e d i c t i n g the r e s u l t

y_pred1 = c l f . p r e d i c t ( X_test1 )

Per la definizione del modello di albero decisionale singolo si è deciso di utilizzare come criterio decisionale l’impurità di Gini, oltre che una limitata dimensione dell’albero, in modo da ottenere il giusto compromesso tra complessità e interpretabilità dei risultati.

Così facendo, è possibile osservare i risultati conseguiti dal modello appena prodotto, visualizzando graficamente la struttura dell’albero decisionale, con la funzione plot_tree:

#d e s c r i b i n g the model p l t . f i g u r e ( f i g s i z e =(20 ,10) ) t r e e . p l o t _ t r e e ( c l f ,

f i l l e d =True , rounded=True , feature_names=X_train1 . columns , class_names =[ ’ 0 ’ , ’ 1 ’ ] ,

f o n t s i z e =12) p l t . show ( )

Progettazione modello

In definitiva, è possibile controllare la predizione del modello sui dati, utilizzando, per comparare i risultati previsti e osservati, la matrice di confusione e l’Accuracy, rispetti-vamente tramite le funzioni confusion_matrix e accuracy_score, in modo da mostrare le performance del modello sia graficamente che analiticamente:

#computing the accuracy and v i s u a l i z i n g the c o n f u s i o n matrix p r i n t( ’ Accuracy : ’ , m e t r i c s . accuracy_score ( y_test1 , y_pred1 ) ) mat = confusion_matrix ( y_test1 , y_pred1 )

sns . heatmap ( mat . T, square=True , annot=True , cbar=False , fmt=" . 0 f " ) p l t . x l a b e l ( ’ Actual l a b e l ’ )

p l t . y l a b e l ( ’ P r e d i c t e d l a b e l ’ ) ; p l t . show ( )

Analisi risultati

Il modello di albero decisionale singolo risulta estremamente semplice, con l’obiettivo di studiare il database a disposizione e svolgere alcune interessanti osservazioni preliminari.

Con la visualizzazione grafica del modello, infatti, è possibile analizzare la struttura dell’albero decisionale e interpretarne i risultati: in ogni nodo decisionale si può osservare la variabile di decisione selezionata per dividere i dati e il valore assunto da quest’ultima, il valore del criterio di decisione adottato, il numero di osservazioni presenti in ogni ramo e, infine, l’esito finale della classificazione (figura6.4e6.5).

KCN ≤0,042 KCN ≤ −0,751

gini=0,036 samples=15879 value=[15585,294]

class=0

KN T /DT+ KN ≤ 0,264 KN T /DT+ KN ≤ −1,358

gini=0,214 samples=1002 value=[880,122]

class=0

KN/AT ≤0,448 KN/AT ≤ −0,524

gini=0,023 samples=14877 value=[14705,172]

class=0

AC/AT ≤0,289 AC/AT ≤ −1,223

gini=0,441 samples=283 value=[190,93]

class=0

DT L/DT ≤0,819 DT L/DT ≤2,056

gini=0,077 samples=719 value=[690,29]

class=0

M S ≤0,256 M S ≤ −1,237

gini=0,056 samples=4038 value=[3922,116]

class=0

M S ≤0,126 M S ≤ −1,919

gini=0,010 samples=10839 value=[10783,56]

class=0

gini=0,490 samples=100 value=[43,57]

class=1

gini=0,316 samples=183 value=[147,36]

class=0

gini=0,046 samples=683 value=[667,16]

class=0

gini=0,461 samples=36 value=[23,13]

class=0

gini=0,273 samples=135 value=[113,22]

class=0

gini=0,047 samples=3903 value=[3809,94]

class=0

gini=0,068 samples=283 value=[273,10]

class=0

gini=0,009 samples=10556 value=[10510,46]

class=0

Figura 6.4. Albero decisionale (flag di status S/A - impresa).

6.4 – Scelta delle variabili

KN/AT ≤0,201 KN/AT ≤ −1,573

gini=0,236 samples=15879 value=[13706,2173]

class=0

OF N/AT ≤0,228 OF N/AT ≤ −0,313

gini=0,436 samples=1032 value=[332,700]

class=1

AU −(P S − OS)/AT ≤ 0,498 AU −(P S − OS)/AT ≤ −0,368

gini=0,179 samples=14847 value=[13374,1473]

class=0

M S ≤0,494 M S ≤0,005 gini=0,370 samples=628 value=[154,474]

class=1

M S ≤0,438 M S ≤ −0,287

gini=0,493 samples=404 value=[178,226]

class=1

CB/CO ≤0,005 CB/CO ≤ −1,564

gini=0,358 samples=3201 value=[2454,747]

class=0

ln(F N) ≤ 0,422 ln(F N) ≤ −0,088

gini=0,117 samples=11646 value=[10920,726]

class=0

gini=0,344 samples=602 value=[133,469]

class=1

gini=0,311 samples=26 value=[21,5]

class=0

gini=0,421 samples=156 value=[47,109]

class=1

gini=0,498 samples=248 value=[131,117]

class=0

gini=0,444 samples=969 value=[647,322]

class=0

gini=0,308 samples=2232 value=[1807,425]

class=0

gini=0,207 samples=3986 value=[3518,468]

class=0

gini=0,065 samples=7660 value=[7402,258]

class=0

Figura 6.5. Albero decisionale (flag di status S/A+L - impresa).

Con la visualizzazione analitica del modello, invece, è possibile valutare le performance dell’albero decisionale, applicato ai due determinati problemi che si intende analizzare, ovvero “flag di status S/A - impresa” e “flag di status S/A+L - impresa”, utilizzando sia il database completo che il database diviso in training set e testing set (figura6.6e 6.7).

Nel primo problema, si è ottenuto rispettivamente una Accuracy del 98,05%, a fronte di un numero di imprese correttamente classificate pari a 5190 su un totale di imprese analizzate nel testing set pari a 5293, e una Accuracy del 98,24%, a fronte di un numero di imprese correttamente classificate pari a 15599 su un totale di imprese analizzate nel database pari a 15879.

Nel secondo problema, si è ottenuto rispettivamente una Accuracy dell’88,23%, a fronte di un numero di imprese correttamente classificate pari a 4670 su un totale di imprese analizzate nel testing set pari a 5293, e una Accuracy del 88,82%, a fronte di un numero di imprese correttamente classificate pari a 14104 su un totale di imprese analizzate nel database pari a 15879.

In realtà, non si è particolarmente interessati alle performance del modello, in quanto il modello di albero decisionale semplice non risulta sufficientemente adeguato per modellare la complessità che governa il fenomeno dell’insolvenza di una controparte. Tuttavia, è importante studiare questo modello poiché, rappresentando il componente fondamentale dei modelli Random Forest e XGBoost, costituisce il punto di partenza ideale.

Progettazione modello

Accuracy= 0,9805

0 1

0

1

5178 93

10 12

Actual label

Predictedlabel

Flag di status S/A

0 1000 2000 3000 4000 5000 6000

Accuracy= 0,8823

0 1

0

1

4494 553

70 176

Actual label

Predictedlabel

Flag di status S/A+L

0 1000 2000 3000 4000 5000 6000

Figura 6.6. Albero decisionale (testing set).

Accuracy= 0,9824

0 1

0

1

15542 237

43 57

Actual label

Predictedlabel

Flag di status S/A

0 1000 2000 3000 4000 5000 6000

Accuracy= 0,8882

0 1

0

1

13526 1595

180 578

Actual label

Predictedlabel

Flag di status S/A+L

0 1000 2000 3000 4000 5000 6000

Figura 6.7. Albero decisionale (database).