FeatureSelection.find_not_explanatory¶
- FeatureSelection.find_not_explanatory(**kwargs)¶
Esegue solo il filtro per le feature non esplicative rispetto al target.
Questo metodo è un wrapper attorno al metodo run, configurato per attivare specificamente il filtro delle feature con basso potere esplicativo e disabilitare tutti gli altri filtri. Aggiorna lo stato dell’istanza in base ai risultati di questo singolo filtro.
Questa funzione ha l’obiettivo di identificare le feature che, prese singolarmente, non dimostrano una capacità sufficiente di spiegare o predire la variabile target. In pratica, cerca le feature “poco utili” al problema di machine learning. Il modo in cui valuta l’utilità di una feature dipende dal tipo di problema che si sta affrontando, specificato dal parametro algo_type (default “classification”).
Indipendentemente dal tipo di problema, la funzione opera esaminando ogni feature una alla volta:
Se il tipo di problema è classification (classificazione binaria): Per ogni singola feature nel dataset (eventualmente solo di training), la funzione esegue i seguenti passaggi: prima di tutto, la feature viene preparata. Se è una feature categorica, viene trasformata in un formato numerico (usando One-Hot Encoding, o una sua versione semplificata se la feature ha troppe categorie distinte, specificando il numero di feature desiderate tramite il parametro dim_cat_threshold, default 10). Se è una feature numerica, eventuali valori mancanti vengono riempiti (ad esempio, con la mediana). Successivamente, viene addestrato un modello predittivo semplice (un Albero Decisionale) utilizzando esclusivamente quella singola feature preparata per cercare di predire la variabile target (eventualmente solo di training). La capacità predittiva di questo modello basato sulla singola feature viene poi misurata calcolando l’AUC (Area Under the ROC Curve) sia sui dati di training che, se forniti, sui dati di test. Se il valore di AUC ottenuto (o il valore minimo tra training e test, se entrambi disponibili) è inferiore a una certa soglia minima di performance (derivata dal parametro threshold sommandogli 1 e dividendo per 2, valore default di threshold 0.05), allora quella feature viene considerata “non esplicativa” e il suo nome viene aggiunto a una lista di feature da scartare.
Se il tipo di problema è regression (regressione): Anche in questo caso, ogni feature viene analizzata individualmente. Se la feature è categorica, si calcola una misura di associazione (simile alla correlazione tra feature miste, per dettagli vedere
find_correlated_features()) tra quella feature (dopo aver gestito i valori mancanti) e la variabile target numerica (eventualmente anche di test). Se la feature è numerica, si calcola la correlazione di Pearson (in valore assoluto) tra la feature (dopo aver gestito i valori mancanti) e la variabile target. Se questa misura di correlazione/associazione (o il valore minimo tra training e test, se entrambi disponibili) risulta inferiore a una certa soglia (threshold, default 0,05), la feature viene etichettata come “non esplicativa”.Se il tipo di problema è multiclass (classificazione multiclasse): Il processo è molto simile a quello della classificazione binaria. Per ogni singola feature, dopo la preparazione (gestione delle categoriche con One-Hot Encoding/semplificato e riempimento dei mancanti per le numeriche), si addestra un Albero Decisionale usando solo quella feature per predire la variabile target multiclasse. La performance viene misurata tramite l’AUC, adattato per problemi multiclasse (ad esempio, calcolando l’AUC in modalità “one-vs-rest”). Questo viene fatto per i dati di training e, se presenti, per quelli di test. Se l’AUC (o il minimo tra training e test) non raggiunge la soglia minima richiesta (derivata dal parametro threshold sommandogli 1 e dividendo per 2, valore default di threshold 0.05), la feature è considerata “non esplicativa”.
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_A feature_B feature_C target 0 A 34.835708 Z 75.013312 1 B 3.086785 X 109.194174 2 C 42.384427 Y 96.287048 3 D 86.151493 X 264.905765 4 E -1.707669 V 2.880829 5 A -1.706848 V 2.318509 6 B 88.960641 X 273.054387 7 C 48.371736 V 101.779140 8 D -13.473719 Z -25.266714 9 E 37.128002 Y 73.118623 10 A -13.170885 X 69.538553 11 B -13.286488 Z -30.168523 12 C 22.098114 W 54.445288 13 D -85.664012 W -171.324610 14 E -76.245892 X -48.581133 15 A -18.114376 X 59.816750 16 B -40.641556 Z -85.182377 17 C 25.712367 Y 56.834657 18 D -35.401204 Y -77.550289 19 E -60.615185 Y -123.306439 Esempio:
>>> from cefeste.selection import FeatureSelection >>> fs = FeatureSelection( ... db=df_test_filters, ... target_col='target', ... verbose=True # Utile per vedere cosa succede ... ) >>> fs.find_not_explanatory() >>> fs.make_report()
feat_name result drop_reason 0 feature_A drop unexplanatory 1 feature_B keep NaN 2 feature_C keep NaN