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_Afeature_Bfeature_Ctarget
0A34.835708Z75.013312
1B3.086785X109.194174
2C42.384427Y96.287048
3D86.151493X264.905765
4E-1.707669V2.880829
5A-1.706848V2.318509
6B88.960641X273.054387
7C48.371736V101.779140
8D-13.473719Z-25.266714
9E37.128002Y73.118623
10A-13.170885X69.538553
11B-13.286488Z-30.168523
12C22.098114W54.445288
13D-85.664012W-171.324610
14E-76.245892X-48.581133
15A-18.114376X59.816750
16B-40.641556Z-85.182377
17C25.712367Y56.834657
18D-35.401204Y-77.550289
19E-60.615185Y-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