K čemu jsou rozhodovací stromy dobré?
Rozhodovací stromy jsou rozšířeným a užitečným nástrojem strojového učení určeným pro úlohy klasifikace a predikce. Princip klasifikace funguje tím způsobem, že ke všem existujícím datovým záznamům (zákazníkům, návštěvníkům, produktům, dnům, …) zvolíme jeden cílový atribut (label), zpravidla v binární podobě Ano / Ne (1/0) – například zda od nás zákazník odešel nebo zda u nás stále nakupuje. Rozhodovací strom se poté “naučí”, jaké kombinace ostatních zákaznických atributů v datech (např. čas od posledního nákupu, věk, preferovaná produktová kategorie, počet nákupů atd.) vedou k tomu, zda nás zákazník opustil nebo ne.
Strom naučený na historických datech lze poté jednoduše využít k predikci toho, kteří z našich stávajících zákazníků s nejvyšší pravděpodobností odejdou a můžeme se tomu pokusit včas zabránit (například dobře mířenou slevou, telefonátem atd.). Varianty tohoto algoritmu umožňují klasifikovat nejen binární veličiny, ale také cílové atributy s více než dvěma kategoriemi (tato varianta se nazývá C4.5), případně dokáží predikovat i spojité veličiny (v tom případě mluvíme o regresních stromech).
V tomto návodu se podíváme na to, jak si takový strom jednoduše připravit sami. Zde je pro představu několik možných využití:
- včasné odhalení odcházejícího zákazníka
- detekce spamu pro příchozí emaily
- nalezení podezřelých bankovních transakcí
- predikce budoucí platební (ne)schopnosti klientů
- identifikace zákazníků se zájmem o prémiové produkty
- odhad konverzní míry nových produktů
- určení kombinace faktorů, které mají klíčový vliv na sportovní výkon
Proč zrovna stromy?
Strojové učení nabízí řadu dalších a komplexnějších algoritmů pro klasifikaci a predikci proměnných. Proč tedy rozhodovací stromy?
- Jsou ideální pro začátečníky v oblasti strojového učení. Nevyžadují žádnou speciální přípravu dat (např. převod na vektory) a zpracují vedle sebe jak kategorické tak číselné proměnné. Stromy jsou poměrně snadno schopné nalézt i nelineární vztahy mezi vstupními atributy.
- Výsledkem je jednoduchý graficky znázorněný strom, který lze zpravidla interpretovat běžnou řečí nebo ukázat na prezentaci a vysvětlit managementu. Většina ostatních algoritmů pracuje spíše na principu black-boxů a ani jeho tvůrce často netuší, jak model k výsledné klasifikaci vůbec došel.
- Stromy si samy určí, které atributy jsou opravdu klíčové a na kterých naopak nezáleží a je vhodné je z modelu vypustit. To je obzvlášť šikovné, pokud máte desítky nebo stovky různých atributů ke každému záznamu. Ostatním algoritmům je potřeba ty správné atributy předvybrat.
Co k tomu budeme potřebovat?
Především budeme potřebovat strukturovaná a pročištěná data. Každý řádek vstupních dat by měl reprezentovat jednu unikátní entitu (zákazníka, produkt, webovou stránku, den, atd.), každý sloupec nějaký atribut této entity (počet nákupů, útrata, konverzní míra). Hodnoty atributů by neměly být příliš monotónní (absolutní převaha jedné hodnoty) a neměly by obsahovat příliš prázdných (NULL) hodnot. Je vhodné očistit data také o extrémní hodnoty, ale vůči ním jsou naštěstí rozhodovací stromy relativně odolné.
Dále budeme potřebovat nástroj, který umožňuje vymodelování stromů. Vedle běžných komerčních nástrojů (jako např. SPSS) lze doporučit i nástroje s volnější licenční politikou jako jsou například RapidMiner, R nebo Weka. V dalších příkladech budeme používat RapidMiner ve verzi 5.3.
Jak vymodelovat ten nejlepší strom?
Nástroj RapidMiner umožňuje vytvořit strom pomocí procesu sestávajících z dílčích úloh (operátorů), které se pak pomocí linek, reprezentujících datové toky, spojují dohromady. Pomocí prvního operátoru Import XLS načteme data, v našem případě z Excelu. Pomocí import wizardu určíme, co bude výsledná binární proměnná (label) a pro ostatní atributy určíme, zda jsou kategorické (polynominal) nebo číselné (numerical).
Poté vložíme operátor Optimization, který zajistí, že se algoritmus spustí několikrát v různých variantách a nakonec bude automaticky vybrána ta nejlepší kombinace. Operátor spojíme s importem dat a rozklikneme, abychom mohli určit, co bude obsahem optimalizačního procesu.
Dovnitř vložíme operátor X-Validation a ten opět proklikneme. Do něj pak a na levou stranu vložíme modelovací algoritmus (Decision Tree) a na pravou stranu operátory Apply model a Performance a vše dle obrázku spojíme. Tím jsme zajistili to, že část dat bude rezervovaná pro otestování kvality modelu. Opět vše spojíme a všechny výstupy z operátoru Optimize napojíme na pravou stranu, reprezentující ukončení procesu.
Proces je připraven, ale před spuštěním je u některých operátorů potřeba pomocí dvojkliku a následném nastavení v pravém menu ještě dospecifikovat některé parametry. Konkrétně v operátoru Decision Trees nastavíme Criterion na “Gain ratio”. Nastavení minimal size of split, minimal leaf size a maximal depth souvisí s velikostí vašeho datasetu (počtu záznamů). Čím více záznamů, tím mohou být tyto hodnoty vyšší.
Jako poslední nastavíme ještě operátor Optimization tak, aby vyzkoušel různé varianty parametrů minimal gain a confidence. Počet validačních kombinací ovlivní to, jak dlouho bude modelování trvat. Pak už nezbývá nic jiného, než model spustit.
Jak poznat kvalitu modelu?
První, co po dokončení modelování uvidíte, je výpis s informacemi o kvalitě modelů (záložka Performance vector). Hodnota accuracy zjednodušeně řečeno vypovídá o celkové kvalitě modelu. Čím vyšší procento, tím lépe. Pozor ale na příliš vysokou hodnotu blížící se 100%. Takhle vysoká hodnota naznačuje, že strom je tzv. přeučený – to znamená, že sice perfektně klasifikuje data, na kterých se naučil, ale pravděpodobně nebude příliš dobrý k predikci v nových datech.
Dále vidíme čtyřpolní tabulku, tzv. confusion matrix, která podrobněji ukazuje, jak se moc se při validaci strom osvědčil v jednotlivých předpovědích. Levé horní a pravé dolní pole ukazují úspěšně klasifikované (1/0) záznamy. Levé dolní políčko ukazuje počet tzv. false positives, tedy záznamy, které model chybně vyhodnotil jako kategorii 1 (např. zákazník odejde), zatímco pak ve skutečnosti byl stav 0 (neodešel).
V pravém horním políčku naopak vidíte false negatives, což jsou případy, které model vyhodnotil jako 0 (zákazník neodejde) a přitom byly ve skutečnosti pozitivní (odešel). Z uvedeného případu vyplývá, že v různých úlohách můžou mít oba druhy chyb odlišnou důležitost. Pokud je pro nás odchod zákazníka významná finanční ztráta, budeme se snažit, aby model minimalizoval počet false negatives (na obrázku červeně). Chyba false positives pak není tak kritická, jelikož to znamená, že naše obchodní oddělení například častěji zavolá někomu, kdo ve skutečnosti nechce odejít, což v případě dostatečných kapacit není takový problém jako ztráta zákazníka, kterého model neodhalil.
Pokud chcete minimalizovat jen jeden druh chyby, je občas potřeba mírně upravit modelovací proces. Model je zpravidla úspěšnější v tom typu chyby, pro který má více příkladů (v našem případě je několikanásobně více zákazníků, kteří neodešli – pro ty je model přesnější a proto dělá poměrně dost false negatives chyb, kterých se chceme vyvarovat). Data vedoucí z operátoru import je proto potřeba nejdříve rozdělit na pozitivní a negativní záznamy. Poté z té množiny, která dominuje v množství záznamů (v našem případě negativní) potřebujeme náhodně vybrat jejich podmnožinu tak, aby byl počet pozitivních i negativních záznamů při modelování srovnatelný (např. 50 na 50).
Po vybrání reprezentativního vzorku pomocí operátoru Sample už stačí jen data opět spojit (operátor Join) a ověřit si, zda model podává skutečně lepší výsledky.
Jak interpretovat rozhodovací strom?
Samotná interpretace a “čtení” rozhodovacího stromu je poté už intuitivní a zábavná činnost. Najdete jej na záložce Tree ve výpisu výsledků. Strom v každém spoji obsahuje jeden konkrétní atribut a šipky s jeho odlišnými hodnotami popisují rozhodovací logiku. Strom se čte od shora dolů (od kořene k listům) a atributy, které se nacházejí v jeho vrchních vrstvách, jsou zpravidla těmi nejlepším prediktory. Každá cesta stromem končí v jednom z listů, který určuje, zda je výsledkem spíše pozitivní (červená) nebo negativní hodnota (modrá). Výška barevného sloupce pak naznačuje, jak velkého podílu ze všech záznamů se tato kombinace týká.
Na obrázku níže vidíte jednoduchý strom sestavený z mých osobních dat. Klíčovou proměnou je zde moje subjektivní spokojenost s daným dnem (1) nebo nespokojenost (0) – dny zde reprezentovaly jednotlivé záznamy. Začátek stromu ukazuje, že klíčovým faktorem spokojenosti je dobrá fyzická kondice. Ve zdravém těle zdravý duch a proto pokud se fyzicky cítím mizerně, spokojený rozhodně nejsem. Pokud je fyzická kondice dobrá, tak rozhoduje délka střední fyzické aktivity (chůze) v průběhu dne. Pokud nachodím více než 115 minut, tělo mě odmění dávkou endorfinů a to opět vede k mé spokojenosti.
Naopak pokud je čas chůze kratší a den předtím jsem vypil více než 10 alkoholických jednotek (přepočteno na malá piva), tak se ozve kocovina a spokojenost je ta tam. Pokud netrpím ani kocovinou, tak do hry vstupuje množství vyšší fyzické aktivity, jako je například běh nebo rychlá chůze do schodů. Pokud je tato aktivita vykonávána nejméně necelé půl hodiny denně a kvalita spánku byla vysoká, cítím se dobře. Naopak při nedostatečné kvalitě spánku vysoká fyzická zátěž může vést k rychlému vyčerpání a následné nespokojenosti. Tímto způsobem můžete snadno dočíst i zbytek stromu.
Sestavit rozhodovací strom, který dává i při interpretaci smysl selským rozumem, bývá opravdu radost. Lidé často namítají, že tím mnohdy odhalíte vztahy, které bývají předem intuitivně jasné (např. korelace kocoviny a nespokojenosti). Na druhou stranu jsou tyto vztahy podepřeny daty a nikoliv subjektivním míněním. Lze ovšem objevit i překvapivé kombinace vztahů, které už tak intuitivní nejsou (např. vztah náročné aktivity a kvality spánku). A navíc vám strom ukáže i konkrétní hodnoty, při kterých dochází k větvení (např. více než 10 alkoholických jednotek).
Cílem tohoto článku bylo ukázat, že sestavení rozhodovacích stromů nemusí být nutně jen záležitostí odborníků a že to může být dokonce zábava.
Příště se podíváme na to, jak využít rozhodovací stromy k analýze webových dat z Google Analytics.