FeatureSelection.find_collinear_feature_optimized

FeatureSelection.find_collinear_feature_optimized(**kwargs)

Esegue solo il filtro per le feature collineari (basato su VIF).

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

Questa funzione ha lo scopo di identificare e suggerire la rimozione di feature numeriche che causano multicollinearità, basandosi sul calcolo del VIF (Variance Inflation Factor). Può operare in due modi distinti, a seconda che si attivi o meno un’opzione di ottimizzazione:

  • Modalità non ottimizzata (quando il parametro optimize è False, default): In questa modalità, la funzione inizia analizzando le feature numeriche del DataFrame, o un sottoinsieme da te specificato. Per queste feature, calcola il Variance Inflation Factor (VIF). Successivamente, individua la feature che presenta il valore di VIF più elevato. Se questo VIF massimo supera una certa soglia (vif_threshold, default 5), quella feature viene considerata problematica e viene virtualmente rimossa. Il processo viene quindi ripetuto: sui dati rimanenti (senza la feature appena eliminata) si ricalcolano i VIF, si identifica nuovamente la feature con il VIF più alto e si confronta con la soglia. Questo ciclo iterativo di calcolo, identificazione e rimozione prosegue finché i VIF di tutte le feature numeriche ancora in gioco non risultano inferiori alla soglia stabilita.

  • Modalità ottimizzata (quando il parametro optimize è True): Quando si attiva questa modalità, la funzione adotta un approccio differente, sempre concentrandosi sulle feature numeriche. Le feature vengono esaminate seguendo un ordine preciso, che deve fornire l’utente attraverso un parametro specifico (optim_Series,ovvero una pd.Series, default None), il quale determina la sequenza di controllo (se None non viene eliminata alcuna feature, anche se collineare). La funzione scorre le feature una ad una, rispettando rigorosamente questo ordine prestabilito. Per ogni feature, nel momento in cui viene analizzata secondo la sequenza, si calcola il suo VIF (considerando solo le feature che non sono state eliminate nei passaggi precedenti dell’analisi). Se il VIF di quella specifica feature, al momento del suo controllo, risulta superiore alla soglia, allora quella feature viene identificata per la rimozione. Indipendentemente dal fatto che la feature corrente sia stata rimossa o meno, la funzione procede poi a esaminare la feature successiva nell’ordine definito.

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

Oltre alla soglia, all’opzione di ottimizzazione e alla sequenza di analisi possono essere impostati parametri aggiuntivi come: la richiesta di avere più dettagli in output (verbose, default False) e l’ordine crescente (in base al valore del VIF) di analisi, ovvero analizzare per prima la feature con il valore più basso (optim_value_ascending, default True).

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_A2feature_A3
034.835708Z-0.270712-0.607548-0.878260
13.086785X0.104848-0.126136-0.021288
242.384427Y0.250528-0.684606-0.434079
386.151493X-0.9252000.9287150.003515
4-1.707669V0.567144-1.844401-1.277257
5-1.706848V-1.040180-0.467002-1.507183
688.960641X-0.1536762.2924902.138814
748.371736V0.7898520.4888101.278662
8-13.473719Z-1.2262160.710267-0.515949
937.128002Y-0.9480071.0555340.107527
10-13.170885X-0.5696540.054073-0.515581
11-13.286488Z-0.9771500.257953-0.719197
1222.098114W-0.7706320.588282-0.182350
13-85.664012W-0.0337110.8852440.851533
14-76.245892X-1.032859-1.017007-2.049866
15-18.114376X1.142427-0.1336931.008734
16-40.641556Z-0.609778-0.438186-1.047964
1725.712367Y1.4694160.4934431.962860
18-35.401204Y1.492679-0.1990091.293670
19-60.615185Y0.707125-1.274984-0.567858

Esempio:

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