• Home
  • Chi sono
  • Risorse
  • Contatti
  • Approfondimenti
  • Cerca nel sito

Lorenzo Govoni

Business e Tecnologia

  • Big Data
  • Business
  • Excel
  • Intelligenza Artificiale

Classificatore di Foresta Casuale in Python

Foresta Casuale in python

La foresta casuale (o Random Forest) è un tipo di algoritmo di apprendimento automatico supervisionato basato sull’apprendimento di più modelli previsionali per formare un unico modello di previsione più potente.

Ogni modello utilizzato dalla previsione del Random Forest di solito è un albero decisionale.

Ciò significa che una foresta casuale combina molti alberi decisionali in un unico modello. Individualmente, le previsioni fatte dai singoli alberi decisionali potrebbero non essere accurate, ma combinate insieme, le previsioni saranno in media più vicine al risultato.

L’algoritmo di foresta casuale può essere utilizzato sia per problemi di regressione che di classificazione.

In quest’articolo vediamo la risoluzione dell’algoritmo di Foresta Casuale in Python per un problema di classificazione.

 

Scelta del dataset

Il dataset in esame riguarda l’analisi delle campagne di marketing diretto di un istituto bancario portoghese, in prevalenza basate su telefonate.

L’obiettivo della classificazione è prevedere se il cliente sottoscriverà un deposito a termine o meno (variabile y).

Il dataset è composto da 45211 istanze (righe) e da 17 attributi (16 colonne o variabili di input e 1 di output, la y).

Gli attributi vengono così identificati (sono i dati del potenziale cliente):

1) Age: età;

2) Job: tipo di lavoro (“admin.”, “sconosciuto”, “disoccupato”, “manageriale”, “cameriera”, “imprenditore”, “studente”, “colletti blu”, “autonomo”, “in pensione”, “tecnico”, “servizi”);

3) Marital: stato civile (“sposato”, “divorziato”, “single”; nota: “divorziato” include anche i vedovi);

4) Education: istruzione (“sconosciuta”, “primaria”, “secondaria”, “terziaria”);

5) Default: il credito è in default? (“sì”, “no”);

6) Balance: saldo annuale medio, in euro;

7) Housing: ha un prestito immobiliare? (“sì”, “no”);

8) Loan: ha un prestito personale? (“sì”, “no”).

 

In relazione all’ultimo contatto della campagna corrente, si hanno a disposizione i seguenti dati:

9) Contact: tipo di comunicazione (“sconosciuto”, “telefono”, “cellulare”);

10) Day: ultimo giorno di contatto del mese;

11) Month: mese dell’ultimo contatto (“gen”, “feb”, “mar”, …, “nov”, “dec”);

12) Duration: durata ultimo contatto, in secondi.

 

Abbiamo anche altri attributi, come:

13) Campaign: numero di contatti eseguiti durante questa campagna e per questo cliente (include l’ultimo contatto);

14) Pdays: numero di giorni trascorsi dopo l’ultimo contatto del cliente da una campagna precedente (-1 significa che il cliente non è stato precedentemente contattato);

15) Previous: numero di contatti eseguiti prima di questa campagna e per questo cliente;

16) Poutcome: risultato della precedente campagna di marketing (“sconosciuto”, “altro”, “fallimento”, “successo”).

 

Infine troviamo la variabile di output, ossia il target desiderato:

17) y: il cliente ha sottoscritto un deposito a termine? (“sì”, “no”).

Il dataset analizzato lo puoi trovare qua (clicca su bank.zip).

 

Importare le librerie

Per poter risolvere l’algoritmo di foresta casuale in python, l’attività primaria è quella di importazione delle librerie necessarie alla sua risoluzione.

Oltre a Pandas, Numpy e Matplotlib, le librerie fondamentali nel machine learning in python, importiamo alcune importanti classi e moduli di Sklearn:

  • il LabelEncoder, per codificare i valori stringa in campi numerici;
  • il Train_test_split, per suddividere la fase di addestramento con quella di test;
  • il RandomForestClassifier, la classe che ci permette di prevedere la risposta al modello;
  • le metriche (classification_report, Confusion_matrix e accuracy score) per valutare l’accuratezza del modello di previsione.

Importare il dataset

Carichiamo i dati dal file excel.

Il file scaricato in realtà è un csv. Si è deciso di trasformarlo in Excel come mostrato in questo articolo, per visualizzare meglio i dati dentro le varie colonne.

Vediamo i dati importati (relativi alle prime 5 righe):

 

E quanti essi sono (il primo dato rappresenta le righe, il secondo le colonne):

 

Analizzare e modificare il dataset

Il dataset in esame non prevede righe vuote al suo interno, come indicato nelle note degli autori (Paulo Cortez e Sérgio Moro).

Come per l’algoritmo Cart, per la risoluzione dell’albero decisionale, ci conviene verificare il tipo di campi del nostro dataset. Se diverso da intero/float non riusciremo ad andare molto avanti. 

Per verificare la tipologia di dato di ogni colonna possiamo digitare il seguente script:

Le uniche colonne di tipo int sono:

  • Age;
  • Balance;
  • Day;
  • Duration;
  • Campaign;
  • Pdays;
  • Previous,

 come possiamo vedere dal risultato sotto:

 

Per modificare le altre colonne in formato intero, possiamo utilizzare il LabelEncoder, che permette di associare un numero ad ogni attributo, per una più facile identificazione.

Ad esempio per la colonna Loan, i cui attributi sono “Yes” e “No”, si decide di associargli al posto di “Yes” 1 e al posto di “No” il valore pari a 2.

Arrivati a questo punto, si trasforma la colonna da tipo object a tipo intero per quanto affermato sopra, tramite il metodo astype(int).

Lo stesso viene ripetuto anche per le colonne Job, Marital, Education, Default, Housing, Contact, Month, Poutcome e Y. 

 

Riscrivendo

Otteniamo che ora abbiamo trasformato il formato da Object ad Int:

 

Test train Data

Arrivati a questo punto associamo i valori di X e y necessari all’esecuzione dell’algoritmo.

La variabile X contiene le prime sedici colonne del set di dati (cioè gli attributi) mentre la variabile y contiene la colonna delle classi, etichettate con “Yes” e “No” (per indicare rispettivamente Si, se una persona ha sottoscritto il deposito a termine dopo il contatto oppure No, qualora non lo avesse fatto).

Provvediamo ora a suddividere il dataset in set di dati di test e di allenamento. In questo caso consideriamo il 20% del set di dati come dato di test, mentre l’80% sarà il set di dati di addestramento.

Costruire il modello di Foresta Casuale in python

Non ci resta che creare il modello di foresta casuale in python, digitando le seguenti righe di codice:

Con la prima riga (80) indichiamo il numero di stimatori, o alberi nella foresta: 100 nell’esempio.

Successivamente, adattiamo il modello al set di addestramento utilizzando fit (X_train, y_train) ed eseguiamo la previsione sul set di test usando predict (X_test).

 

Valutare il modello

Il modello di foresta casuale in python viene ora valutato, utilizzando:

  • La matrice di confusione. Il fondamento di una matrice di confusione è il numero di previsioni corrette (veri positivi) e non corrette (falsi positivi) riassunte in termini di classe.

Eseguiamo la successiva riga di codice:

Ossia la matrice di confusione sotto forma di oggetto array. La dimensione di questa matrice è 2 x 2 perché questo modello è di classificazione binaria. Hai cioè due classi Si e No.

I valori diagonali rappresentano previsioni accurate, mentre gli elementi non diagonali sono previsioni imprecise. Ciò significa che 7693 e 454 sono previsioni corrette e 609 e 287 sono previsioni errate.

  • I report di classificazione: riassumiamo i risultati ottenuti dal modello, la precisione, il richiamo, l’f1 score e il supporto.

Basta digitare la seguente riga di codice,

Per ottenere:

 

Precision: su 8302 (7693+609) previsioni negative (No), l’algoritmo di foresta casuale ha individuato il 93% (7693/8302) delle istanze come negative. Per le 741 (454+287) previsioni positive (Si), l’algoritmo ne ha individuato correttamente solo il 61% (454/741).

Recall: per tutte le istanze che erano effettivamente positive, solo il 43% (454/(454+609)) è stata classificata correttamente per i Si, mentre tale percentuale raggiunge il 96% (7693/(7693+287)) se si tratta dei No.

F1-score: è una media armonica ponderata delle due precedenti metriche, come visto nell’articolo dedicato alla matrice di confusione.

  • Il grado di accuratezza, che ci indica la frazione dei campioni predetti correttamente.

Ciò ci permette di concludere che quasi 9 volte su 10 il modello è in grado di predire correttamente.

 

Individuare gli attributi per importanza

La valutazione delle metriche ci permette di stimare quanto il modello di foresta casuale in python è affidabile.

Un’altra importante attività, che ci può venire utile quando analizziamo le foreste casuali, è quella di cercare di capire quale caratteristica tra le tante ha influito maggiormente nella costruzione del modello.

Dopotutto, fare ciò con Scikit-learn è semplice, siccome è possibile, con poche righe di codice, mostrare l’importanza relativa o il contributo di ciascuna funzione nella previsione.

Ciò permette di calcolare automaticamente la frequenza relativa di ciascuna caratteristica nella fase di addestramento, ridimensionando l’importanza di ogni caratteristica in modo che la somma di tutti i punteggi sia 1.

Questo punteggio ti aiuterà a scegliere le caratteristiche più importanti e a rilasciare quelle meno importanti per la costruzione del modello.

Le righe di codice che ci permettono di fare ciò, sono le seguenti:

 

 

Dal risultato precedente possiamo vedere che la durata del contatto è la caratteristica che maggiormente influenza il modello (molto probabilmente perché non si è eseguito nessun tipo di ridimensionamento dei dati).

Segue a quasi l’11%, il saldo annuale medio (balance) e l’età della persona.

Tali valori possono poi essere facilmente rappresentati grazie a Matplotlib e Seaborn, come mostrato sotto.

La seconda riga (101) ci permette di costruire un grafico a barre, mentre le successive di assegnare l’etichetta degli assi.

 

 

Conclusione

Il Random Forest rappresenta un metodo di apprendimento ensemble per risolvere problemi di classificazione e regressione.

Prevede di costruire una moltitudine di alberi decisionali al momento dell’addestramento al fine di restituire la classe che ottiene più voti, per i problemi di classificazione, o la previsione media dei singoli alberi, qualora si stia risolvendo un problema di regressione.

In questo articolo, si è provato a costruire una foresta casuale in python e si sono individuati le caratteristiche più rilevanti che hanno contribuito alla creazione del modello stesso.

La comprensione dei risultati di questo algoritmo, e in generale di tutti i modelli di previsione, è spesso tanto importante quanto avere buoni risultati.

Quindi quando si utilizza la foresta casuale è fondamentale riuscire a capire quali variabili sono le più importanti per il modello.

Ciò può aiutare a comprendere meglio il problema che si sta analizzando, e in secondo luogo può portare a ulteriori miglioramenti del modello, permettendo certamente di migliorare le previsioni.

  • Come l’algoritmo Random Forest migliora le previsioni degli alberi decisionaliCome l’algoritmo Random Forest migliora le…
  • Regressore di foresta casuale: esempio di previsione del valore di una azioneRegressore di foresta casuale: esempio di previsione…
  • 8 algoritmi diffusi nel machine learning8 algoritmi diffusi nel machine learning
  • Creazione di un albero decisionale tramite l’algoritmo CARTCreazione di un albero decisionale tramite l’algoritmo CART
Share
Pin1
Share
Tweet

Intelligenza Artificiale Albero Decisionale, Machine Learning

  • Home
  • Archivio
  • Risorse
  • Newsletter
  • Cerca nel sito

Copyright © 2021 · Lorenzo Govoni - Privacy Policy