0Pricing
Learn AI with Python · Lezione

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 leakage

Codifica 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 columns

Altri 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

  1. Metodi di selezione delle feature
  2. Creazione di feature di interazione e polinomiali
  3. Target encoding e gestione avanzata delle variabili categoriche
  4. Ingegneria automatizzata delle feature con Featuretools
← Torna a Learn AI with Python