Introduzione: Perché le variabili categoriche nella decisione degli alberi

I modelli di analisi nativo [LT] sono tra i più interpretabili algoritmi di apprendimento automatico, rendendoli una scelta ideale per la classificazione e le attività di regressione in domini come finanza, sanità e marketing.

Comprendere le variabili categoriche

Le variabili categoriche rappresentano i dati che possono assumere un numero limitato e fisso di valori possibili, che rientrano in due tipi principali:

  • Le variabili nominali[[] – categorie senza ordine intrinseco (ad esempio, colore rosso, blu, verde; città: New York, Londra, Tokyo).
  • Variabili ordinarie[[] – categorie con un ordine chiaro e significativo (ad esempio, livello di istruzione: liceo, scapolo, master, dottorato; soddisfazione: basso, medio, alto).

La distinzione è fondamentale perché ogni tipo richiede una strategia di codifica diversa per conservare le informazioni inerenti all'ordine. Gli alberi decidano intrinsecamente le caratteristiche come se fossero continue valutando le soglie divise; per le caratteristiche categoriche senza codifica, l'albero può eseguire solo spaccature binarie basate sul fatto che una categoria sia presente o meno (quando si utilizza un solo punto) o trattare le etichette integer come ordinato (quando si utilizza la codifica delle etichette).

Metodi di codifica comuni

Esistono diverse tecniche di codifica, ognuna con trade-off in termini di dimensionalità, interpretabilità e compatibilità con gli algoritmi degli alberi di decisione.

Etichetta codifica (codifica orizzontale)

La codifica di etichette assegna un intero unico per ogni categoria, tipicamente 0, 1, 2,... per le categorie K. Questo metodo è semplice e privo di memoria, perché non aumenta il numero di caratteristiche. Tuttavia, implica un rapporto di ordine artificiale che può ingannare un albero di decisione. Per esempio, un albero potrebbe imparare che la divisione education level >= 2[FLTgreen:1]

Quando usare:[]] Solo per le caratteristiche ordinali categoriche in cui l'ordine interinale riflette la vera gerarchia. Molte implementazioni di fantascienza richiedono di fornire l'ordine corretto manualmente attraverso una mappatura, o utilizzare con un elenco di categorie predefinite.

Codifica One-Hot

La codifica One-hot crea variabili binarie di manichino, ognuna delle quali rappresenta la presenza (1) o assenza (0) di una categoria. Questo metodo elimina qualsiasi ordine artificiale ed è generalmente sicuro per i dati nominali. La maggior parte delle librerie di alberi di decisione, tra cui le prove di scikit-learn , funzionano bene con caratteristiche di un solo hot perché le scissioni sono semplici “è categoria presente?”

Drawbacks:[] Soffre del [[]curse di dimensionalità[[[] quando K è grande. Una colonna con 1000 valori unici infiammerà lo spazio di funzionalità di 999 colonne, aumentando l'utilizzo della memoria e il tempo di formazione. Inoltre, la codifica di un-hot può portare a sparsity di dati, che può degradare le prestazioni molto profonde per gli alberi.

Pratica punta:[] Un solo hot codifica solo dopo aver diviso i dati in formazioni e set di test per evitare perdite di dati. Gettare una categoria (utilizzare in pandas get dummies) per modelli lineari, ma per gli alberi di decisione mantenere tutte le colonne K è di solito bene perché l'albero li tratterà indipendentemente.

Frequenza / Codifica obiettivo

La codifica di frequenza sostituisce ogni categoria con il suo numero (o frequenza relativa) nel set di allenamento. La codifica di destinazione sostituisce le categorie con il mezzo della variabile di destinazione per quella categoria (o una versione lisciata) che sono popolari per le caratteristiche di alta-cardinalità perché evitano di espandere la matrice di funzionalità.

Attenzione:[] La codifica mirata consente di ottenere informazioni sull'obiettivo nella funzione, che possono causare un'eccessiva sovrafitting se non gestita con la valutazione trasversale o l'allentamento. LightGBM e CatBoost offrono una codifica integrata con regolarizzazione che mitiga questo rischio.

La codifica di frequenza non perde il bersaglio ma perde la correlazione tra categoria e obiettivo. Funziona meglio quando la frequenza stessa è predittiva (ad esempio, le categorie rare indicano il comportamento più evidente).

Codifica binaria

La codifica binaria converte le categorie in etichette integer (0 a K‐1) e rappresenta quindi ogni intero in forma binaria, creando nuove colonne log2(K). Si tratta di un compromesso tra una sola e codifica di etichette: produce meno caratteristiche di una sola o più o meno spaccature interpretabili. Alcuni praticanti trovano efficace per le caratteristiche di alta-cardinalità nei modelli a base di albero.

Codifica di Hashing

La funzione di hashing (o il trucco di hashing) applica una funzione hash per ogni categoria e prende il modulo del numero di contenitori di uscita. Questo può ridurre drasticamente le dimensioni ed è utile quando il numero di categorie è enorme (ad esempio, indirizzi IP). Tuttavia, le collisioni (diverse categorie che mappano allo stesso bin) possono degradare la qualità del modello.

Supporto nativo nelle biblioteche dell'albero della decisione

Le librerie di potenziamento del gradiente moderno hanno sviluppato una gestione categorica nativo che spesso supera la codifica manuale. Capire cosa offre ogni libreria può risparmiare tempo e migliorare l'accuratezza.

scikit-learn (DecisionTree / RandomForest / GradientBoosting)

] non[]] nativamente maneggiare caratteristiche categoriche. Tutti gli input devono essere numerici. È necessario codificare variabili categoriche prima di alimentarle nel modello. Tuttavia, le versioni recenti (≥0.24) introdotte e ] che accettano caratteristiche categoriche direttamente tramite il parametro – ma questo è limitato

Scikit-learn OrdinalEncoder documentazione[

Luce GBM

LightGBM ha un eccellente supporto nativo per le caratteristiche categoriche. Dichiara semplicemente la funzione come (o usa il parametro []). Internamente utilizza un algoritmo che raggruppa le categorie in base alle statistiche di gradiente del bersaglio, trovando delle divisioni ottimali senza un'espansione a un solo punto.

L'aiuto categorico della caratteristica LightGBM[]

CatBoost

CatBoost è specificamente progettato per gestire le caratteristiche categoriche in modo ottimale. Si applica [] codifica target[] con un approccio basato sulla permutazione che riduce la perdita di obiettivo e overfitting.

CatBoost caratteristiche categoriche documentazione[]

XGBoooo

A partire dalla versione 1.6, XGBoost ha introdotto il supporto sperimentale per le caratteristiche categoriche tramite il parametro e l'argomento [].

Scegliere la strategia di codifica giusta

La selezione di un metodo di codifica dipende da diversi fattori:

  • Cardinality[ – Per le caratteristiche nominali a bassa cartilina (classi ≤10), la codifica a un solo punto è semplice ed efficace. Per la cardinalità moderata (10–100), prendere in considerazione la codifica binaria o la codifica di destinazione.
  • Libera di modello[] – Se si utilizza già CatBoost o LightGBM, lasciare che la libreria gestisca categorici. Per scikit-learn, è necessario codificare manualmente.
  • Ordine delle categorie[[] – Le caratteristiche ordinali dovrebbero usare la codifica ordinaria. La codifica dell'etichetta senza mantenere l'ordine è rischiosa per i dati nominali.
  • Interpretabilità[[] – Le caratteristiche codificate One-hot producono spaccature trasparenti (ad esempio ]). La codifica binaria o target riduce l'interpretabilità, che può essere accettabile per le attività orientate alla previsione, ma non per i requisiti normativi.
  • Tre profondità e overfitting[[[] – La codifica mirata può causare sovrafissamenti se non regolarizzati; la codifica a un solo hot può portare a spaccature molto basse per categorie rare.

Gestione delle funzioni di alta qualità

Le caratteristiche categoriche di alta cartolina (ad esempio, i codici ZIP, gli ID utente, gli ID dei prodotti) sono notoriamente difficili. La codifica tradizionale a un solo punto crea migliaia di colonne fitte, molte delle quali appaiono in poche righe.

  • Aumentare l'utilizzo della memoria e il tempo di formazione drammaticamente.
  • Causare l'albero a dividersi su categorie rare che non generalizzano.
  • Rendere il modello sensibile a nuove categorie che appaiono in produzione (se non gestito con un “sconosciuto” catch-all).

Le soluzioni includono:

  1. Codifica di Target con l'irrorazione[] – Sostituisci ogni categoria con il mezzo di destinazione, ma restringi le stime per le piccole categorie verso il mezzo globale.
  2. Codifica della frequenza[[] – Utilizzare il conteggio di ogni categoria come caratteristica numerica. Spesso funziona bene con i modelli degli alberi perché le categorie frequenti sono più probabili essere predittori affidabili.
  3. Creazione della temperatura[[] – Categorie della mappa ad un numero fisso di contenitori (ad esempio, 2^16) utilizzando una funzione di hash. Questa è una scelta pratica per una cardinalità molto alta, ma può introdurre il rumore dalle collisioni.
  4. Groping rare categorie[[] – Combina tutte le categorie che appaiono meno di, diciamo, 5 volte in un unico gruppo “altro”: questo riduce la cardinalità e stabilizza il modello.
  5. Utilizzando metodi specifici per l'albero[[[] – Le biblioteche come LightGBM possono gestire le cardinalità fino a diverse migliaia in modo efficiente senza espellere la matrice di funzionalità perché imparano a raggruppare le categorie internamente.

Impatto sulle prestazioni del modello e sull'interpretabilità

Il metodo di codifica influisce direttamente sia sull’accuratezza che sull’interpretazione degli alberi delle decisioni. Ad esempio, la codifica a un punto consente di distinguere le rese che sono facili da spiegare: “se l’occupazione è ‘ingegnere’ allora ramifica sinistra”. Al contrario, la codifica delle etichette può produrre condizioni di divisione come “occupazione >= 3.5”, che è inutile se le etichette non corrispondono a un vero ordine.

La codifica non corretta può causare il favore delle caratteristiche che appaiono più frequentemente o hanno una maggiore varianza nei valori codificati, portando a spaccature suboptimali. Gli esperimenti hanno dimostrato che utilizzando la corretta codifica dell'etichetta (ad esempio, mappando l'istruzione livello a 0,1,2,3) migliora costantemente l'accuratezza su semplici funzioni di codifica dell'etichetta.

Ricerca risultati:[[] Uno studio del 2020 che compara i metodi di codifica per gli alberi gradienti-boosted ha scoperto che la gestione categorica integrata di CatBoost ha raggiunto il più basso errore di generalizzazione in una varietà di dataset, seguita dalla codifica di destinazione con la trasversalità, mentre la codifica di un hot è stata eseguita al meglio solo per la cardinalità molto bassa.

Consigli pratici e migliori pratiche

  • Sempre suddivisi prima della codifica[[] – Computo delle statistiche di codifica (ad esempio, i mezzi di destinazione, le frequenze) sul set di formazione solo, quindi applicare le stesse mappature al set di test.
  • Usare un condotto[ – In fantascienza, combina [ e codifica in un ] per evitare perdite di dati e semplificare la valutazione trasversale.
  • Controllo per categorie non visibili[[[] – In produzione, possono apparire nuove categorie. Decidi una strategia: ignorare (drop), mappare un valore speciale “non noto” o mantenere un fallback (ad esempio, significa globale per la codifica di destinazione).
  • Test multiple encodings[[] – Il metodo migliore dipende dal dataset. Eseguire un piccolo esperimento di cross-validation che confronta un solo-hot, etichetta, frequenza e codifica di destinazione (con corretta trasvalidazione) su un set di validazione.
  • L'assistenza nativo di Leverage quando possibile[[] – Se siete liberi di scegliere la libreria modello, scegliete CatBoost o LightGBM per evitare la codifica manuale dei mal di testa, soprattutto con caratteristiche di alta cartolina.
  • Sii attento alla codifica delle etichette per i dati nominali[[] – Quasi sempre danneggia le prestazioni. Se si deve utilizzare la codifica delle etichette (ad esempio, a causa di vincoli di memoria), almeno casualizza l'assegnazione dell'etichetta per ridurre lo spurio effetto di ordinazione.
  • Le categorie rare di gruppo o di gruppo[[[] – Una buona regola del pollice: combinare le categorie che appaiono in meno dell'1% dei dati di formazione in un unico gruppo, riducendo il rumore e stabilizza il modello.
  • ]Attenti per la perdita di dati nella codifica di destinazione[[[] – Utilizzare sempre le pieghe di valutazione o di separazione per calcolare i mezzi di destinazione, o utilizzare le librerie che implementano l'ordine (come CatBoost).

Conclusioni

Le variabili categoriche sono una parte fondamentale di molti dataset reali. Mentre i modelli di albero di decisione sono robusti e interpretabili, il loro successo si incertezze su una corretta preparazione delle caratteristiche categoriche. Questo articolo ha coperto le principali strategie di codifica: label, one-hot, frequenza, target, binario e hashing, così come le capacità native delle librerie popolari basate sugli alberi.

  • Abbina la codifica al tipo variabile (ordinal vs. nominale).
  • Per le caratteristiche di alta cartolina, preferi la codifica di destinazione con regolarizzazione o utilizzare librerie con supporto categorico integrato.
  • Evitare perdite di dati tramite codifica di calcolo solo sui dati di formazione.
  • Sperimenta con metodi diversi utilizzando la valutazione trasversale per trovare la migliore configurazione per il tuo set di dati specifico.

Grazie alla manipolazione di variabili categoriche, è possibile sbloccare il pieno potenziale dei modelli di alberi decisionali, ottenendo una migliore precisione predittiva mantenendo l'interpretabilità che rende gli alberi così preziosi.