Target encoding e gestione avanzata delle variabili categoriche
Target encoding, frequency encoding, binary encoding ed embedding per colonne ad alta cardinalità.
Target encoding e gestione avanzata delle variabili categoriche è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.
Il problema della codifica delle variabili categoriche
I modelli hanno bisogno di numeri, ma le categorie sono testo. La codifica one-hot funziona con poche categorie, ma le feature ad alta cardinalità (migliaia di città o prodotti) creano troppe colonne.
Limiti della codifica one-hot e label
La codifica one-hot fa esplodere la dimensionalità. La semplice codifica label introduce un ordinamento falso (la città 5 non è maggiore della città 2). Per i dati ad alta cardinalità servono codifiche più sofisticate.
Cos'è la codifica del target
La codifica del target sostituisce ogni categoria con la media del target per quella categoria. Una città diventa il tasso medio di abbandono dei clienti di quella città, un unico numero informativo.
import pandas as pd
means = df.groupby("city")["target"].mean()
df["city_encoded"] = df["city"].map(means)Il rischio di overfitting
Le categorie rare, con poche righe, producono medie estreme che fanno trapelare il target e causano overfitting. Una categoria presente una sola volta copierebbe esattamente quell'unica etichetta. Questo problema si risolve con lo smoothing.
Smoothing della stima
Lo smoothing combina la media della categoria con la media globale, assegnando un peso in base al numero di campioni della categoria. Le categorie rare tendono verso la media globale, riducendo la varianza.
import pandas as pd
global_mean = df["target"].mean()
agg = df.groupby("city")["target"].agg(["mean", "count"])
smoothing = 10
agg["enc"] = (agg["count"] * agg["mean"] + smoothing * global_mean) / (agg["count"] + smoothing)
df["city_enc"] = df["city"].map(agg["enc"])La libreria category_encoders
Il pacchetto category_encoders implementa questi encoder con un'API compatibile con scikit-learn, così può integrarli nelle pipeline e applicarli in modo coerente agli insiemi di addestramento e di test.
import category_encoders as ce
encoder = ce.TargetEncoder(cols=["city", "product"], smoothing=10)
X_enc = encoder.fit_transform(X_train, y_train)
X_test_enc = encoder.transform(X_test)Evitare il leakage nella pratica
Adatti sempre l'encoder solo sui dati di addestramento, quindi trasformi i dati di validazione/test. Meglio ancora, utilizzi la convalida incrociata o la codifica out-of-fold, in modo che ogni riga venga codificata usando dati che la escludono.
import category_encoders as ce
from sklearn.pipeline import make_pipeline
from sklearn.linear_model import LogisticRegression
pipe = make_pipeline(
ce.TargetEncoder(cols=["city"]),
LogisticRegression(),
)
# fit inside CV to encode without leakageCodifica binaria
BinaryEncoder converte le categorie in cifre binarie, utilizzando solo log2(N) colonne invece di N. È una soluzione intermedia e compatta tra la codifica one-hot e la codifica del target.
import category_encoders as ce
encoder = ce.BinaryEncoder(cols=["product_id"])
X_enc = encoder.fit_transform(X_train)
# 256 categories -> 8 binary columnsAltri encoder utili
category_encoders offre anche CountEncoder (frequenza di ogni categoria), LeaveOneOutEncoder (media del target esclusa la riga corrente) e CatBoostEncoder (statistiche ordinate del target).
import category_encoders as ce
count_enc = ce.CountEncoder(cols=["city"])
loo_enc = ce.LeaveOneOutEncoder(cols=["city"])Gestire un'elevata cardinalità
Per una cardinalità molto elevata, la codifica del target o del conteggio comprime i dati in una colonna, la codifica binaria rimane compatta e il raggruppamento delle categorie rare in un bucket "altro" riduce il rumore. Scelga in base alla cardinalità e al rischio di leakage.
import pandas as pd
freq = df["product"].value_counts()
rare = freq[freq < 20].index
df["product"] = df["product"].replace(rare, "other")Scegliere un encoder
Poche categorie: one-hot. Modelli ad albero con molte categorie: codifica del target o CatBoost. Se serve compattezza: codifica binaria. Protegga sempre dal leakage adattando l'encoder solo sui dati di addestramento e utilizzando lo smoothing o schemi out-of-fold.
Verifica rapida
Verifichi la sua conoscenza della codifica delle variabili categoriche.
Riepilogo
Riepilogo: la codifica del target sostituisce una categoria con la sua media del target, utilizzando lo smoothing per ridurre l'effetto delle categorie rare. Utilizzi category_encoders (TargetEncoder, BinaryEncoder, CatBoost/LeaveOneOut) e adatti l'encoder solo sui dati di addestramento oppure utilizzi la codifica out-of-fold per evitare il leakage. Gli encoder compatti gestiscono feature ad alta cardinalità che la codifica one-hot non riesce a gestire.
Domande Frequenti
La lezione «Target encoding e gestione avanzata delle variabili categoriche» è gratuita?
Sì — il testo completo di «Target encoding e gestione avanzata delle variabili categoriche» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.
Cosa imparerò in «Target encoding e gestione avanzata delle variabili categoriche»?
Target encoding, frequency encoding, binary encoding ed embedding per colonne ad alta cardinalità. Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn AI with Python?
Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Target encoding e gestione avanzata delle variabili categoriche»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?
Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Metodi di selezione delle feature
- Creazione di feature di interazione e polinomiali
- Target encoding e gestione avanzata delle variabili categoriche
- Ingegneria automatizzata delle feature con Featuretools