FeatureSelection.find_correlated_features

FeatureSelection.find_correlated_features(**kwargs)

Esegue solo il filtro per le feature altamente correlate.

Questo metodo è un wrapper attorno al metodo run, configurato per attivare specificamente il filtro delle feature altamente correlate e disabilitare tutti gli altri filtri. Aggiorna lo stato dell’istanza in base ai risultati di questo singolo filtro.

Questa funzione identifica e aiuta a rimuovere le feature altamente correlate. Opera in tre fasi principali, considerando le feature specificate (o tutte se non indicate):

  • Tra feature numeriche: Calcola la correlazione (Spearman) tra tutte le possibili coppie di feature numeriche. Se il valore assoluto della correlazione di una coppia supera la soglia (correlation_threshold, default 0,95), una delle due feature viene scelta per l’eliminazione. La scelta su quale feature eliminare si basa su una regola (selection_rule, default “random”): o casualmente, oppure viene eliminata la feature con potere esplicativo nei confronti della variabile target più basso (“univ_perf”). Questo processo di identificazione ed eliminazione viene ripetuto finché non ci sono più coppie di feature numeriche rimanenti la cui correlazione supera la soglia.

  • Tra feature categoriche: Esegue un processo analogo per le coppie di feature categoriche, ma utilizza un’altra misura di associazione (Cramer). Anche qui, se l’associazione supera la soglia, una feature della coppia viene eliminata seguendo la stessa regola di scelta (casuale o potere esplicativo), e il processo è iterativo.

  • Tra feature miste (una numerica e una categorica): Calcola una misura di associazione (basata sull’R2 di una regressione fatta sulle colonne dummy categoriche che vanno a prevedere come target la variabile numerica). Se questa misura supera la soglia, una delle due feature della coppia viene eliminata, sempre con la stessa logica di scelta e in modo iterativo.

Dopo l’applicazione del filtro vengono modificati gli attributi della classe con la selezione effettuata.

Oltre alla soglia e alla regola di selezione possono essere impostati parametri aggiuntivi come: il seed casuale (random_state, default 42), il dataset contenente il potere esplicativo di ciascuna feature sul target (feat_univ_perf, default DataFrame vuoto), la richiesta di avere più dettagli in output (verbose, default False), la richiesta di avere le scelte di selezione (return_selection_history, default False) e la richiesta di avere un dataset addizionale contenente le correlazioni medie tra feature (return_avg_correlation, default False).

Parameters:

**kwargs – Argomenti keyword aggiuntivi per sovrascrivere i parametri dell’istanza per questa esecuzione.

Dati utilizzati per gli esempi:

>>> db_test_filters
feature_Bfeature_Cfeature_A1feature_A2
034.835708Z-0.270712-0.812137
13.086785X0.1048480.314544
242.384427Y0.2505280.751583
386.151493X-0.925200-2.775600
4-1.707669V0.5671441.701431
5-1.706848V-1.040180-3.120541
688.960641X-0.153676-0.461028
748.371736V0.7898522.369555
8-13.473719Z-1.226216-3.678648
937.128002Y-0.948007-2.844021
10-13.170885X-0.569654-1.708962
11-13.286488Z-0.977150-2.931451
1222.098114W-0.770632-2.311895
13-85.664012W-0.033711-0.101134
14-76.245892X-1.032859-3.098578
15-18.114376X1.1424273.427282
16-40.641556Z-0.609778-1.829334
1725.712367Y1.4694164.408249
18-35.401204Y1.4926794.478037
19-60.615185Y0.7071252.121376

Esempio:

>>> from cefeste.selection import FeatureSelection
>>> fs = FeatureSelection(
...    db=df_test_filters,
...    verbose=True # Utile per vedere cosa succede
... )
>>> fs.find_correlated_features()
>>> fs.make_report()
feat_name result drop_reason
0 feature_A2 drop correlated
1 feature_A1 keep NaN
2 feature_C keep NaN
3 feature_B keep NaN