In questo tutorial applichiamo un modello Random Forest in Python per un caso di regressione: andremo infatti a predire la temperatura in base ad una serie di fattori atmosferici.

Il Random Forest è uno dei principali modelli di Machine Learning, tra i più popolari ed utilizzati.
E’ un modello di tipo Ensemble (ovvero un insieme di classificatori) tree-based, ovvero basato su molti Decision Tree, in italiano Alberi Decisionali.
Abbiamo già parlato del Random Forest, quindi se siete interessati a ripassare il suo funzionamento vi invito ad cliccare qui.
Nel tutorial di oggi cerchiamo di fare il bis di quanto abbiamo fatto con il Decision Tree, ovvero usare un Random Forest per fare una prediction sulla temperatura in base ad una serie di fattori atmosferici.
Non sai dove eseguire il codice Python? Prova Google Colab, che è gratis, web-based e semplicissimo da usare!
Iniziamo senza indugi e vediamo un caso di Random Forest in Python!
Import necessari e lettura dei dati per il Random Forest in Python
Per prima cosa, come sempre, bisogna importare i moduli di cui abbiamo bisogno e i dati che utilizzeremo per il nostro train e per validare la bontà del nostro modello.
import pandas as pd
import numpy as np
from sklearn.ensemble importRandomForestRegressorfrom sklearn.model_selection import train_test_split
from sklearn import metrics
from sklearn.metrics import r2_score,mean_squared_error
Oltre al modello, che importiamo da scikit-learn, utilizziamo train_test_split per dividere in nostri dati in train e test e le metriche r2_score,mean_squared_error per valutare la bontà del modello.
Carichiamo i dati per il modello. Puoi trovare questi dati su Kaggle, di cui ti ho parlato qui, a questo link.
data = pd.read_csv('jena_climate_2009_2016.csv')
Per vedere le prime righe, ci basterà eseguire il comando data.head().

In questo tutorial non ci soffermeremo nell’analisi esplorativa del dataset, che è però uno step fondamentale per ogni progetto di Data Science e Machine Learning. Puoi trovare un tutorial su questo tema nell’articolo Analisi esplorativa in Python con Pandas (tutorial con codice).
Selezione variabili e divisione Train e Test
Nel seguente snippet di codice, andiamo a selezionare le variabili che vogliamo utilizzare per fare il training (le mie x) e quale sia il target da predire (la y).
Come target da predire prenderemo la variabile ‘T (degC)’, che rappresenta la temperatura in gradi.
features = ['p (mbar)', 'rh (%)', 'VPmax (mbar)', 'VPact (mbar)', 'sh (g/kg)', 'H2OC (mmol/mol)', 'rho (g/m**3)']
X = data[features]
y = data['T (degC)']
La divisione tra Train e Test (o validation) è fondamentale per i modelli di Machine Learning, per capire se il modello che addestriamo riesce a generalizzare bene su dati non conosciuti.
Useremo il parametro test_size per decretare quanta parte del dataset originale utilizzeremo per training e quanto come test. Impostando “0.2” vuol dire che usiamo il 20% dei dati originali per il test e quindi l’80% come training.
Si tratta di una divisione abbastanza standard e consolidata.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=77)
Random Forest in Python: addestriamo il modello
Finalmente possiamo addestrare il nostro modello!
Partiamo da un caso semplice e poi vediamo come possiamo migliorare il modello tramite techine di Hyperparameter Optimization (molto semplici).
Utilizzo il modello nella sua versione standard con i parametri di default. I principali parametri di default del Random Forest Regressor di Scikit-learn sono i seguenti:
- n_estimators:
- max_depth:
- min_samples_leaf:
Imposto solo il valore random_state per la riproducibilità del modello.
rf_model = RandomForestRegressor(random_state=77)
rf_model.fit(X_train, y_train)
A questo punto il modello si addestrerà. L’operazione potrebbe metterci pochi secondi così come qualche minuto. Questo dipende da molti fattori: la numerosità dei dati, le caratteristiche hardware e software del PC su cui il modello si addestra, alcuni parametri come il numero di estimatori per il modello.
Inferenza ed Evaluation del Random Forest
Una volta che il modello avrà finito il suo addestramento, potrò usarlo per fare delle predizioni, che in gergo si chiamano Inferenze.
L’inferenza, che consiste infatti nell’inferire su nuovi dati, dovrò farlo sul dataset di test, non su quello che ho usato per il training. Per quale motivo?
Se dovessi usare solo il dataset di training, il rischio sarebbe quello che il modello impari “a pappagallo” i dati del training, e non sia in grado di generalizzare su dati nuovi, che è l’obiettivo di un modello predittivo.
Uso quindi il metodo .predict() sui dati di test e controllo la differenza tra le vere y e le y che ha predetto il nostro modello.
Per valutare le performance di questo modello, posso usare due principali metriche, ovvero il Mean Squared Error e l’R-quadro:
- Il Mean Squared Error è l’errore quadratico medio, ovvero in media di quanto i valori predetti si discostano dal valore reale, al quadrato per evitare valori negativi
- R-quadro: è una metriche che varia tra -1 e 1, dove più il valore è vicino all’1, tanto più mostra la bontà del modello. -1 rappresenta invece un pessimo valore di predizione.
y_pred = rf_model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred
print(f"Mean Squared Error: {mse}")
print(f"R2 Score: {r2}")
Se stampiamo le metriche di accuratezza, vedremo che il valore r-quadro è altissimo, e il mse molto basso. Questo vuol dire che il nostro algoritmo è già molto performante così com’è!
Puoi provare però a giocare con i parametri del modello di cui ti ho parlato sopra per renderlo ancora più efficace, oppure sperimentare tecniche di Feature Selection.
Conclusioni
In questo tutorial ti ho fatto vedere come puoi addestrare un modello Random Forest in Python per un caso di regressione.
Grazie al package scikit-learn questa operazione è molto semplice e richiede poche righe di codice.
Alcuni articoli utili che ti ho segnalato nel tutorial sono:
- https://pulplearning.altervista.org/classificazione-e-regressione-scopi-di-apprendimento-supervisionato/
- https://pulplearning.altervista.org/random-forest-algoritmi-di-machine-learning/
Se sei interessato a questi temi, ti consiglio di dare un’occhiata al mio profilo Medium e LinkedIn. Cerco di parlare ogni giorno di AI, Data Science e Machine Learning.
