Table of Contents
Inleiding: Waarom categorische variabelen materie in beslissingsbomen
Decision tree modellen behoren tot de meest interpreteerbare machine learning algoritmen, waardoor ze een keuze maken voor classificatie en regressietaken in domeinen zoals financiën, gezondheidszorg en marketing. Hun transparante beslissingsregels laten stakeholders toe te begrijpen waarom een voorspelling wordt gemaakt. Echter, de prestaties en betrouwbaarheid van een beslissingsboom zijn sterk afhankelijk van hoe categorische variabelen worden voorbewerkt. Categorische data. Waarden zoals land, producttype[, of klantsegment[] niet direct kunnen worden gevoed in de meeste boomalgoritmen zonder de juiste codering. Een naïeve benadering kan voorbevooroordeeling, computationele overhead, of zelfs verstoren van het model fragmenten. Dit artikel biedt een uitgebreide gids voor het verwerken van categorische variabelen in beslissingsboommodellen, die betrekking hebben op encoderingstechnieken, en beste praktijken om robuuste, hoog-pretatieve modellen te bouwen.
Begrijpen van categorische variabelen
De kategorale variabelen vertegenwoordigen gegevens die een beperkt, vast aantal mogelijke waarden kunnen aannemen.
- Nominale variabelen
- Gewoontevariabelen
Het onderscheid is van cruciaal belang omdat elk type een andere coderingsstrategie vereist om de informatie die inherent is aan de bestelling te behouden. Beslissingsbomen behandelen kenmerken inherent alsof ze continu zijn door het evalueren van gesplitste drempels; voor categorische kenmerken zonder codering, kan de boom alleen binaire splitsingen uitvoeren op basis van de vraag of een categorie aanwezig is of niet (bij gebruik van een heet) of behandelen integer labels zoals besteld (bij gebruik van labelcodering). Dit kenmerk maakt de keuze van coderingsmethode verre van triviaal.
Gemeenschappelijke coderingsmethoden
Er bestaan verschillende coderingstechnieken, elk met afwegingen in termen van dimensionaliteit, interpreteerbaarheid en compatibiliteit met beslissingsboomalgoritmen. Hieronder onderzoeken we de meest gebruikte methoden.
Codering van labels (Ordinale codering)
Label codering kent een uniek geheel getal toe aan elke categorie, typisch 0, 1, 2, ... voor K categorieën. Deze methode is eenvoudig en geheugen-efficiënt omdat het niet het aantal functies verhoogt. Echter, het impliceert een kunstmatige ordinale relatie die een beslissing boom kan misleiden. Bijvoorbeeld, een boom zou kunnen leren dat de split education level >= 2 scheidt
Wanneer te gebruiken: Alleen voor ordinale categorische kenmerken waarbij de gehele volgorde de ware hiërarchie weergeeft. Veel scikit-leer implementaties vereisen dat u de juiste volgorde handmatig door middel van een mapping, of gebruik met een vooraf gedefinieerde categorielijst.
One-Hot codering
Een-hot codering creëert K binaire dummy variabelen, elk die de aanwezigheid (1) of afwezigheid (0) van een categorie vertegenwoordigen. Deze methode elimineert elke kunstmatige bestelling en is over het algemeen veilig voor nominale gegevens. De meeste beslissingsboombibliotheken, waaronder scikit-learn... werken goed met één-hot functies omdat splits zijn eenvoudige ..is categorie aanwezig?
Terugtrekking: Het lijdt aan de curse van dimensionaliteit wanneer K groot is. Een kolom met 1000 unieke waarden zal de functieruimte opblazen door 999 kolommen, waardoor het geheugengebruik en de trainingstijd toenemen. Bovendien kan een hete codering leiden tot gegevenssparigheid, die de prestaties voor zeer diepe bomen kan afbreken.
Praktische punt: Een-hot coderen alleen na het splitsen van de gegevens in training en testsets om gegevenslekkage te voorkomen. Laat één categorie vallen (gebruik in pandas get dummies) voor lineaire modellen, maar voor beslissingsbomen die alle K-koloms behouden is meestal prima omdat de boom ze onafhankelijk zal behandelen.
Frequentie / doelcodering
De frequentiecodering vervangt elke categorie door de telling (of relatieve frequentie) in de trainingsset. Doelcodering vervangt categorieën door het gemiddelde van de doelvariabele voor die categorie (of een gladde versie). Deze methoden zijn populair voor high-cardinaliteitsfuncties omdat ze voorkomen dat de functiematrix wordt uitgebreid.
Waarschuwing: Doelcodering lekt informatie over het doel naar de functie, die ernstige overfitting kan veroorzaken als deze niet wordt behandeld met kruisvalidatie of gladmaking. LightGBM en CatBoost bieden ingebouwde doelcodering met regularisatie die dit risico vermindert. Voor andere bibliotheken, gebruik een aparte wacht-out set of een kruisvalidatie-systeem om doelmiddelen te berekenen.
Frequentiecodering lekt het doel niet maar verliest de correlatie tussen categorie en doel. Het werkt het beste wanneer de frequentie zelf voorspellend is (bijv. zeldzame categorieën geven uiterlijk gedrag aan).
Binaire codering
Binaire codering zet eerst categorieën om in gehele labels (0 tot K‐1) en vertegenwoordigt vervolgens elk geheel getal in binaire vorm, waardoor log2(K) nieuwe kolommen worden aangemaakt. Het is een compromis tussen één-hot en labelcodering: het produceert minder functies dan één-hot maar minder interpreteerbare splits. Sommige beoefenaars vinden het effectief voor high-cardinaliteit functies in boom-gebaseerde modellen.
Codering van de hashing-codering
De functie hashing (of de hashing truc) past een hash functie toe op elke categorie en neemt de modus van het aantal uitvoerbakken. Dit kan de afmetingen drastisch verminderen en is nuttig wanneer het aantal categorieën groot is (bijv. IP adressen). Echter, botsingen (verschillende categorieën in kaart brengen naar dezelfde bin) kan de kwaliteit van het model te verminderen. Het is zelden de eerste keuze voor beslissing bomen tenzij geheugen beperkingen zijn ernstig.
Native ondersteuning in beslissingsboombibliotheken
Moderne gradiënt stimuleren bibliotheken hebben native categorische behandeling ontwikkeld die vaak beter is dan handmatige codering. Begrijpen wat elke bibliotheek biedt kan tijd besparen en de nauwkeurigheid verbeteren.
scikit-leer (DecisionTree / RandomForest / GradientBoosting)
scikit-learn doet niet natively handle categorische kenmerken. Alle invoer moet numeriek zijn. U moet categorische variabelen coderen voordat u ze in het model invoert. Recente versies (≥ 0,24) geïntroduceerd en die categorische kenmerken rechtstreeks accepteren via de parameter , maar dit is beperkt tot de histogram-gebaseerde implementatie. Voor klassieke DecisionTree en RandomForest is nog steeds handmatige codering vereist.
scikit-leer OrdinaalEncoder documentatie
LichtGBM
LightGBM heeft een uitstekende inheemse ondersteuning voor categorische functies. U verklaart de functie simpelweg als (of gebruik de parameter ). Intern gebruikt het een algoritme dat categorieën op basis van de gradiëntstatistieken van de target selecteert, waarbij optimale splits worden gevonden zonder een heet uitzetting. Dit is zowel snel als geheugen-efficiënt, vooral voor hoge-kardinaliteits kolommen.
LightGBM categorische ondersteuning van de functie
CatBoost
CatBoost is specifiek ontworpen om categorische functies optimaal te behandelen. Het is van toepassing geordende doelcodering met een permutatie-gebaseerde aanpak die doellekken en overpassen vermindert. Standaard behandelt CatBoost alle functies als numeriek tenzij ze expliciet als categorisch worden gemarkeerd via . Het ondersteunt ook tekst- en multi-klasse-streefdoelen. CatBoosts behandeling van crises is vaak superieur aan handmatige codering, vooral op kleine datasets.
CatBoost categorische kenmerken documentatie
XGBoost
Vanaf versie 1.6 introduceerde XGBoost experimentele ondersteuning voor categorische functies via de parameter en het argument . Het gebruikt een split-based benadering die vergelijkbaar is met LightGBM. De implementatie verloopt echter nog steeds; veel beoefenaars blijven gebruik maken van handmatige codering met XGBoost.
De juiste coderingsstrategie kiezen
Het selecteren van een coderingsmethode hangt af van verschillende factoren:
- Cardinaliteit
- Modelbibliotheek
- Bestel van categorieën .Vertrouwelijk gebruik van de ordinaire codering. Labelcodering zonder bestelling te behouden is riskant voor nominale gegevens.
- Interpreteerbaarheid .. Een-hot gecodeerde functies produceren transparante splitsingen (bv. ). Binaire of doelcodering vermindert de interpreteerbaarheid, die aanvaardbaar kan zijn voor voor voorspelde taken maar niet voor regelgevingsvereisten.
- Boomdiepte en overfitting .Barbencodering kan overfitting veroorzaken als ze niet geregulariseerd zijn; één-hot codering kan leiden tot zeer ondiepe splitsingen voor zeldzame categorieën. Cross-validatie en hyperparameter tuning worden belangrijker met geavanceerde coderingen.
Handling High-Cardinality Features
De categorische kenmerken van de hoge Kardinaliteit (bv. ZIP-codes, gebruikers-ID's, product-ID's) zijn berucht moeilijk. Traditionele een-hot codering creëert duizenden dummy kolommen, waarvan er veel in slechts enkele rijen verschijnen.
- Verhoog het geheugengebruik en de trainingstijd dramatisch.
- Zorg ervoor dat de boom zich opsplitst op zeldzame categorieën die niet generaliseren.
- Maak het model gevoelig voor nieuwe categorieën die in productie verschijnen (indien niet behandeld met een onbekende vangst-alles).
Oplossingen omvatten:
- Targetcodering met gladheid
- Frequentiecodering
- Fature hashing
- Groep van zeldzame categorieën .Binnen alle categorieën die minder dan, laten we zeggen, 5 keer in één enkele ..andere groep verschijnen. Dit vermindert de kardinaliteit en stabiliseert het model.
- Met boomspecifieke methoden . . . Bibliotheken zoals LightGBM kunnen kardinaliteiten tot enkele duizenden efficiënt behandelen zonder de functiematrix te exploderen omdat ze intern categorieën leren groeperen.
Effect op de prestaties en de interpretatie van modellen
De coderingsmethode beïnvloedt direct zowel de nauwkeurigheid als de interpretatiebaarheid van beslissingsbomen. Bijvoorbeeld, een-hot codering levert splits die gemakkelijk uit te leggen zijn: . .if bezetting is ..engineer . dan tak links. .In tegenstelling, label codering kan split voorwaarden zoals . . . . >= 3.5, wat zinloos is tenzij de labels corresponderen met een echte orde. De structuur van de boom kan minder intuïtief worden.
Vanuit een prestatieperspectief kan de keuze veranderen welke variabelen als rootsplits worden geselecteerd. Onjuiste codering kan ertoe leiden dat de boom functies die vaker verschijnen of hogere verschillen in gecodeerde waarden hebben, wat leidt tot suboptimale splitsingen. Experimenten hebben aangetoond dat het gebruik van de juiste ordinale codering (bijv., het in kaart brengen van education level naar 0,1,2,3) consistent verbetert nauwkeurigheid over eenvoudige labelcodering op ordinale functies. Voor nominale functies, een-hot codering vaak boven het coderen van etiketten omdat de boom individuele categorieën kan testen zonder valse bestelling.
Onderzoeksresultaten: Een 2020-studie waarin coderingsmethoden voor gradiënt-verhoogde bomen werden vergeleken, toonde aan dat CatBoosts de laagste generalisatiefout in verschillende datasets had bereikt, gevolgd door target-codering met kruisvalidatie, terwijl één-hot codering het beste was voor een zeer lage kardinaliteit.
Praktische tips en beste praktijken
- Altijd splitsen voordat de codering . . Bereken coderingsstatistieken (bv. doel betekent, frequenties) op de trainingsset, pas dan dezelfde mappings toe op de testset. Gebruik nooit de hele dataset om coderingen te berekenen.
- Gebruik een pijpleiding
- Controleer op ongeziene categorieën .In productie kunnen nieuwe categorieën verschijnen. Beslis over een strategie: negeer (druppel), kaart naar een speciale ..onbekende waarde, of houd een terugval (bijvoorbeeld, globaal gemiddelde voor doelcodering).
- Test meerdere coderingen De beste methode hangt af van de dataset. Voer een klein kruisvalidatieexperiment uit waarbij één-hot, label, frequentie en doelcodering (met juiste kruisvalidatie) worden vergeleken met een validatieset.
- Verbeteren van de native ondersteuning indien mogelijk .Als u vrij bent om de modelbibliotheek te kiezen, kies CatBoost of LightGBM om handmatige codering van hoofdpijnen te voorkomen, vooral met high-cardinaliteit functies.
- Wees op uw hoede van labelcodering voor nominale gegevens .Het schaadt bijna altijd de prestaties. Als u labelcodering moet gebruiken (bijvoorbeeld vanwege geheugenbeperkingen), dan moet u de labeltoewijzing toch willekeurig maken om het ongewenste besteleffect te verminderen.
- Bin of groep zeldzame categorieën .. Een goede vuistregel: combineer categorieën die in minder dan 1% van de trainingsgegevens voorkomen in één groep. Dit vermindert het lawaai en stabiliseert het model.
- Opletten voor gegevenslekkage in doelcodering .Boek altijd kruisvalidatie of aparte vouwen om doelmiddelen te berekenen, of gebruik bibliotheken die bestellingen implementeren (zoals CatBoost). Gelekte doelcodering kan leiden tot over-optimale prestaties tijdens validatie en slechte generalisatie.
Conclusie
De belangrijkste kenmerken van de catalogus zijn:
- Pas de codering aan het variabele type (gewone vs. nominaal).
- Voor functies met hogecardinaliteit, verkiest doelcodering met regularisatie of gebruik bibliotheken met ingebouwde categorische ondersteuning.
- Vermijd gegevenslekkage door alleen op trainingsgegevens te rekenen.
- Experimenteer met verschillende methoden met kruisvalidatie om de beste configuratie voor uw specifieke dataset te vinden.
Door zorgvuldig omgaan met categorische variabelen, kunt u het volledige potentieel van beslissingsboommodellen ontgrendelen.Het bereiken van betere voorspellende nauwkeurigheid terwijl het behoud van de interpreteerbaarheid die bomen zo waardevol maakt.