Contenuti del Corso
Regressione Lineare con Python
Regressione Lineare con Python
Scelta delle Variabili
In molti compiti, potresti avere molte variabili che non sai se siano utili o meno. Fortunatamente, puoi addestrare un modello con tutte queste variabili, vedere quali non hanno impatto e poi riaddestrare il modello utilizzando solo quelle che risultano influenti.
Perché rimuovere variabili dal modello?
Se aggiungi una variabile al modello che non ha alcuna relazione con il target, questa introdurrà del rumore nel modello, peggiorando la previsione. Quando hai molte variabili inutili, il rumore si accumula, facendo diminuire sempre di più le prestazioni del modello.
Come capire se le variabili sono buone o cattive?
Come già sai, durante l'addestramento, la classe OLS calcola anche informazioni statistiche. Tra le altre cose, esegue un t-test per determinare se ciascuna variabile ha un impatto significativo sul target. I risultati del test possono essere trovati nella tabella summary()
come mostrato di seguito:
import pandas as pd import statsmodels.api as sm file_link='https://codefinity-content-media.s3.eu-west-1.amazonaws.com/b22d1166-efda-45e8-979e-6c3ecfc566fc/heights_two_feature.csv' df = pd.read_csv(file_link) # Open the file X,y = df[['Father', 'Mother']], df['Height'] # Assign the variables X_tilde = sm.add_constant(X) # Create X_tilde regression_model = sm.OLS(y, X_tilde).fit() # Initialize and train an OLS object print(regression_model.summary()) #Get the summary
Ciò che ci interessa è il p-value per ciascuna caratteristica.
In breve, più basso è il p-value, maggiore è la fiducia che la caratteristica sia influente.
In statistica, è necessario stabilire la soglia del p-value, chiamata livello di significatività. Solitamente viene impostata a 0,05 e, una volta che il p-value supera tale livello di significatività, si considera che la caratteristica non abbia impatto.
Tuttavia, nella pratica, le caratteristiche con un p-value leggermente superiore a 0,05 spesso migliorano comunque il modello. Pertanto, è preferibile testare il modello con e senza quella caratteristica invece di rimuoverla immediatamente, a meno che il p-value non sia davvero elevato (>0,4). In tal caso, è possibile rimuovere la caratteristica in modo sicuro.
Il p-value varia da 0 a 1, quindi quando si parla di p-value basso si intende inferiore a 0,05, mentre un p-value alto solitamente significa superiore a 0,3-0,5.
Nel nostro esempio, abbiamo ottenuto p-value per l'altezza della madre e la costante rispettivamente di 0,087 e 0,051. Se rimuoviamo le feature con un p-value > 0,05, otterremo il risultato qui sotto (a sinistra).
Anche visivamente, possiamo notare che il modello con la costante (a destra) è migliore, quindi è preferibile non rimuoverla dal modello.
È normale ottenere p-value relativamente alti (da 0,05 a 0,2) per feature rilevanti quando il dataset è piccolo. Il p-value indica la fiducia che la feature sia rilevante, ed è naturale che più istanze abbiamo, più è facile distinguere le feature rilevanti da quelle non significative.
Supponiamo di avere dati che mostrano che 9 persone su 10 alte che conosci mangiano mele ogni giorno. Puoi esserne certo che sia correlato? Ma se fossero 9000 su 10000? Questo ti renderebbe più sicuro.
Come rimuovere le feature non rilevanti?
È sufficiente eliminare la colonna relativa alla feature da X_tilde
. Questo può essere fatto utilizzando il seguente codice:
X_tilde = X_tilde.drop(___, axis=1)
Ad esempio, per eliminare le colonne 'const' e 'Mother' si utilizza:
X_tilde = X_tilde.drop(['Mother', 'const'], axis=1)
Successivamente, creare un nuovo oggetto OLS utilizzando il X_tilde
aggiornato:
regression_model=sm.OLS(y, X_tilde)
1. Quali delle seguenti variabili dovresti MANTENERE?
2. Seleziona l'affermazione ERRATA.
Grazie per i tuoi commenti!