FeatureSelection.find_unstable_psi_features¶
- FeatureSelection.find_unstable_psi_features(**kwargs)¶
Esegue solo il filtro per le feature instabili (basato su PSI).
Questo metodo è un wrapper attorno al metodo run, configurato per attivare specificamente il filtro delle feature instabili tra campioni (misurate tramite Population Stability Index) e disabilitare tutti gli altri filtri. Aggiorna lo stato dell’istanza in base ai risultati di questo singolo filtro.
Questa funzione confronta la distribuzione dei valori di ciascuna colonna tra le due sezioni del DataFrame (una relativa al train e una al test). Lo scopo è identificare le colonne la cui distribuzione dei dati è cambiata in modo significativo tra i due set. Se il cambiamento (misurato internamente con un indice chiamato PSI - Population Stability Index) supera una certa soglia (max_psi, default 0.2), la colonna è considerata “instabile” e il suo nome viene restituito. Oltre alla soglia possono essere impostati parametri aggiuntivi come la percentuale minima di valori all’interno di un bin (psi_bin_min_pct, default 0.2) e il numero massimo di bin da utilizzare per il calcolo (psi_nbins, default 20).
Dopo l’applicazione del filtro vengono modificati gli attributi della classe con la selezione effettuata.
- Parameters:
**kwargs – Argomenti keyword aggiuntivi per sovrascrivere i parametri dell’istanza per questa esecuzione.
Dati utilizzati per gli esempi:
>>> db_test_filters
feature_B feature_C sample_col feature_A 0 34.835708 Z test 0.123 1 3.086785 X test 0.456 2 42.384427 Y test 0.789 3 86.151493 X test 0.987 4 -1.707669 V test 0.654 5 -1.706848 V test 0.321 6 88.960641 X test 0.234 7 48.371736 V test 0.567 8 -13.473719 Z test 0.890 9 37.128002 Y test 0.012 10 -13.170885 X train 55.0 11 -13.286488 Z train 56.0 12 22.098114 W train 50.0 13 -85.664012 W train 55.0 14 -76.245892 X train 57.0 15 -18.114376 X train 54.0 16 -40.641556 Z train 56.0 17 25.712367 Y train 59.0 18 -35.401204 Y train 55.0 19 -60.615185 Y train 53.0 Esempio:
>>> from cefeste.selection import FeatureSelection >>> fs = FeatureSelection( ... db=df_test_filters, ... sample_col='sample_col', ... sample_train_value='train', ... verbose=True # Utile per vedere cosa succede ... ) >>> fs.find_unstable_psi_features() >>> fs.make_report()
feat_name result drop_reason 0 feature_A drop unstable 1 feature_B keep NaN 2 feature_C keep NaN