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_Bfeature_Csample_colfeature_A
034.835708Ztest0.123
13.086785Xtest0.456
242.384427Ytest0.789
386.151493Xtest0.987
4-1.707669Vtest0.654
5-1.706848Vtest0.321
688.960641Xtest0.234
748.371736Vtest0.567
8-13.473719Ztest0.890
937.128002Ytest0.012
10-13.170885Xtrain55.0
11-13.286488Ztrain56.0
1222.098114Wtrain50.0
13-85.664012Wtrain55.0
14-76.245892Xtrain57.0
15-18.114376Xtrain54.0
16-40.641556Ztrain56.0
1725.712367Ytrain59.0
18-35.401204Ytrain55.0
19-60.615185Ytrain53.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