ML Atlas

Kurs uczenia maszynowego od zera · Lekcja 5.1 · 26 z 33 gotowych lekcji · 10 min

Drzewa decyzyjne: dwadzieścia pytań do danych

W skrócie

Drzewo decyzyjne klasyfikuje, zadając pytania tak lub nie, z których każde możliwie czysto dzieli dane. Przykład: kto przeżył katastrofę Titanica.

Rozgrzewka Dwa pytania z wcześniejszych lekcji. Minuta, a lekcji nie blokuje.
Z lekcji 4.6: Pipeline: od tabeli do predykcji Dlaczego skaler dopasowujesz tylko na części treningowej?

Pokaż odpowiedź

Poprawna odpowiedź: Bo skaler to część modelu, a test ma udawać dane, których model nie widział

Test ma udawać nowe pingwiny. Średnia i rozrzut to też coś, czego model się uczy, więc liczy się je tylko na treningu.

Z lekcji 4.5: Wyciek danych Uzupełniasz braki średnią z całego pliku, dzielisz dane na trening i test, uczysz model na treningu i liczysz wynik na teście. Który krok przecieka?

Pokaż odpowiedź

Poprawna odpowiedź: Uzupełnianie braków średnią policzoną na całym pliku

Średnia zawiera dane testowe, więc test wpływa na naukę. Uzupełnianie braków dopasuj tylko na treningu, najlepiej w pipeline.

Pamiętasz grę w dwadzieścia pytań? „Czy to żyje?”, „Czy jest większe od kota?”. Dobry gracz nie pyta na chybił trafił; zadaje pytanie, które odcina mniej więcej połowę pozostałych możliwości. Drzewo decyzyjne to model, który gra w tę grę z danymi — a ponieważ jego pytania da się zapisać zwykłym językiem, to jeden z nielicznych modeli, które można czytać jak schemat blokowy.

Przewidź, potem sprawdź Drzewo o głębokości 20 trafia w ponad 98% pasażerów treningowych, a drzewo o głębokości 1 (jedno pytanie) w około 79%. Które trafi więcej na pasażerach testowych?
Jak bardzo jesteś pewny(-a)?

Eksperyment

Ten interaktywny eksperyment działa w przeglądarce z włączonym JavaScriptem. Tekst wokół opisuje, co w nim widać.

Pokaż odpowiedź

Poprawna odpowiedź: Płytkie (głębokość 1)

Głębokość 20 ma 98,7% na treningu, ale 73,9% na teście. Głębokość 1 ma 79,3% na treningu i 77,2% na teście. Głębokie drzewo zapamiętało pasażerów (114 z jego 145 liści obejmuje najwyżej 5 osób), zamiast nauczyć się reguły; najlepszy wynik testowy, 79,5%, daje głębokość 3.

Spróbuj

  • Ustaw suwak maksymalnej głębokości na 1. Drzewo może zadać tylko jedno pytanie. Przeczytaj je na liście podziałów: którą cechę algorytm uznał za najbardziej pouczającą?
  • Podnoś suwak głębokości o jeden krok. Patrz, jak rośnie trafność treningowa, i porównuj ją z trafnością testową przy każdej głębokości.
  • Przesuń suwak głębokości na maksimum. Czy trafność treningowa jest bliska idealnej? Co stało się z testową?
  • Znajdź głębokość z najlepszą trafnością testową i przeczytaj tam najważniejsze podziały. Umiałbyś wytłumaczyć to drzewo komuś w dwóch zdaniach?

Gdy już sprawdzisz to w labie, zobaczmy, co się tam właściwie działo.

Pomysł w prostych słowach

Drzewo decyzyjne przewiduje, zadając ciąg pytań tak lub nie o cechy: „Czy pasażer ma mniej niż tyle lat?”, „Czy płynął pierwszą klasą?”. Każda odpowiedź kieruje przykład do jednej gałęzi, a kolejne pytanie zależy od poprzednich odpowiedzi. Na końcu każdej ścieżki jest liść z przewidywaniem — zwykle najczęstszą etykietą wśród przykładów treningowych, które tam trafiły.

W tej lekcji korzystamy z danych o 891 pasażerach Titanica, z których 342 przeżyło. Cechy to między innymi klasa biletu, płeć, wiek, liczba krewnych na pokładzie i cena biletu. Drzewo uczy się, które pytania o te cechy najlepiej oddzielają tych, którzy przeżyli, od tych, którzy zginęli.

Pomyśl o pielęgniarce na izbie przyjęć, która prowadzi segregację pacjentów. Nie liczy ważonej sumy; idzie krótkim łańcuchem pytań — oddycha? krwawi? jest przytomny? — z których każde zawęża, co robić. Drzewo to taki łańcuch, tylko wyuczony z danych, a nie spisany przez lekarzy. Dzięki temu można je pokazać ekspertowi i zapytać: „czy to ma sens?” — czego z większością innych modeli zrobić się nie da.

Dlaczego to działa

Drzewo buduje się od góry, po jednym pytaniu. Na każdym kroku algorytm próbuje każdej cechy i każdej możliwej wartości odcięcia i pyta: które pytanie dzieli tę grupę na dwie grupy możliwie czyste, czyli takie, w których dominuje jedna etykieta? Popularną miarą nieczystości grupy jest indeks Giniego:

Gini = 1 − Σ pₖ²

gdzie pₖ to udział etykiety k w grupie. Grupa, w której wszyscy mają tę samą etykietę, ma Gini równy 0; grupa podzielona po połowie między dwie etykiety ma Gini 0,5, najgorszy możliwy przy dwóch klasach. Algorytm wybiera pytanie, które najbardziej obniża średnią nieczystość, a potem powtarza procedurę osobno w każdej gałęzi. Takie zachłanne szukanie krok po kroku nie gwarantuje najlepszego możliwego drzewa, ale jest szybkie i w praktyce dobrze działa.

Zostawione samo sobie drzewo dzieli dalej, aż każdy liść będzie czysty — nawet jeśli w liściu siedzi jeden pasażer. Wtedy nauczyło się danych treningowych na pamięć, razem z szumem: przeuczenie z lekcji 7 w nowym przebraniu. Główne pokrętło to maksymalna głębokość, czyli liczba pytań dozwolona na każdej ścieżce. Płytkie drzewo łatwo przeczytać, ale może przegapić prawdziwe wzorce; głębokie dopasowuje się do danych treningowych prawie idealnie i gorzej uogólnia. Uczciwym sposobem wyboru głębokości jest walidacja krzyżowa z lekcji 8.

Częsty błąd

Podział to nie wyjaśnienie przyczyny. Drzewo pyta o cechę, która w tych danych najlepiej rozdziela etykiety, a ta może zastępować coś innego: klasa biletu i jego cena idą w parze i obie mówią coś o tym, gdzie na statku pasażer spał. Drugi błąd to zaufanie głębokiemu drzewu dlatego, że jego reguły wyglądają tak precyzyjnie. Reguła w rodzaju „wiek od 31,5 do 32,5 i bilet droższy niż tyle” to zwykle opis jednego czy dwóch pasażerów, a nie wzorzec. Małe zmiany w danych potrafią też zmienić pierwszy podział, a przez to całe drzewo, co czyni pojedyncze drzewa niestabilnymi.

Ta niestabilność to słabość, ale da się z niej zrobić siłę. W następnej lekcji wyhodujemy wiele różnych drzew i pozwolimy im głosować.

Quiz

Trzy pytania na sprawdzenie się. Wybierz odpowiedź albo rozwiń odpowiedź pod pytaniem. Z klawiatury: strzałki wybierają, Enter albo spacja zatwierdza.

1. Jak drzewo decyzyjne wybiera pytanie na każdym kroku?
Pokaż odpowiedź

Poprawna odpowiedź: Sprawdza możliwe pytania i wybiera to, po którym grupy są najczystsze

Zachłanne szukanie ocenia kandydatów na podział i zostawia ten, który najbardziej obniża nieczystość, na przykład indeks Giniego.

2. Drzewo bez limitu głębokości osiąga prawie idealną trafność treningową. Dlaczego to sygnał ostrzegawczy?
Pokaż odpowiedź

Poprawna odpowiedź: Bo pewnie zapamiętało pasażerów z treningu, więc gorzej uogólni

Drzewo, które dzieli, aż każdy liść jest czysty, dopasowuje się do szumu próbki — klasyczny objaw przeuczenia.

3. Ile wynosi indeks Giniego grupy, w której przeżyli wszyscy pasażerowie?
Pokaż odpowiedź

Poprawna odpowiedź: 0 — grupa jest idealnie czysta

Gdy jedna etykieta ma udział 1, suma kwadratów udziałów wynosi 1, a Gini to 1 − 1 = 0, czyli grupa idealnie czysta.

Najważniejsze wnioski

  • Drzewo decyzyjne przewiduje łańcuchem pytań tak lub nie, który da się czytać jak schemat blokowy.
  • Każdy podział wybiera się zachłannie tak, żeby powstałe grupy były możliwie czyste, na przykład według indeksu Giniego.
  • Maksymalna głębokość steruje złożonością: płytkie drzewa są niedouczone, głębokie uczą się na pamięć.
  • Podział pokazuje, co rozdziela etykiety w danych, a nie co jest przyczyną wyniku.

Głębiej: wzór, kod, praktyka

Matematyka

Dla grupy z udziałami etykiet pₖ mamy Gini = 1 − Σ pₖ². Przy dwóch klasach przyjmuje wartości od 0 (jedna etykieta) do 0,5 (pół na pół). Cała tabela Titanica, 342 ocalałych z 891, ma Gini = 1 − (342/891)² − (549/891)² ≈ 0,473.

Podział wysyła n_L wierszy w lewo i n_R w prawo, n = n_L + n_R. Jego jakość to spadek nieczystości: Δ = G(rodzic) − (n_L/n) · G(lewy) − (n_R/n) · G(prawy). Drzewo wybiera pytanie o największym Δ, a potem powtarza to w każdej gałęzi. Entropia, −Σ pₖ log₂ pₖ, to alternatywna miara nieczystości o podobnym zachowaniu.

Drzewo o głębokości d ma najwyżej 2^d liści. Liść przewiduje etykietę większościową swoich wierszy treningowych, więc liść z jednym pasażerem przewiduje dokładnie jego etykietę.

W kodzie (Python)

891 pasażerów i sześć cech (płeć jako 0/1, brakujący wiek uzupełniony medianą z treningu) oraz stratyfikowany podział z 30% na test. To ten sam rodzaj eksperymentu co w labie, ale inny podział, więc liczby trochę różnią się od labowych. Notebook podlinkowany pod wynikiem sam pobierze dane.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

df = pd.read_csv("data/raw/titanic.csv")
X = pd.DataFrame({"female": (df["sex"] == "female").astype(int)}).join(df[["pclass", "age", "sibsp", "parch", "fare"]])
Xtr, Xte, ytr, yte = train_test_split(X, df["survived"], test_size=0.3, stratify=df["survived"], random_state=1)
Xtr, Xte = Xtr.fillna({"age": Xtr["age"].median()}), Xte.fillna({"age": Xtr["age"].median()})  # mediana z treningu dla obu zbiorów
print(f"passengers {len(df)}, survived {df['survived'].sum()}")
for d in (1, 3, 20):
    t = DecisionTreeClassifier(max_depth=d, random_state=0).fit(Xtr, ytr)
    print(f"depth {d:2d}: train {t.score(Xtr, ytr):.3f}, test {t.score(Xte, yte):.3f}, leaves {t.get_n_leaves()}")

Wynik

passengers 891, survived 342
depth  1: train 0.780, test 0.802, leaves 2
depth  3: train 0.833, test 0.802, leaves 8
depth 20: train 0.986, test 0.780, leaves 141

Drzewo o głębokości 1 to jedno pytanie. Drzewo o głębokości 20 jest prawie idealne na pasażerach treningowych, a na testowych gorsze niż to jedno pytanie.

Dla praktyka
  • Ogranicz drzewo: max_depth, min_samples_leaf albo ccp_alpha (przycinanie). Wartość wybieraj walidacją krzyżową, a nie trafnością treningową.
  • Nie czytaj głębokiego drzewa jak zestawu reguł. Liść z garstką pasażerów to pamięć, a nie prawidłowość.
  • Drzewa nie wymagają skalowania cech, ale wymagają liczb. Zakoduj kategorie (np. płeć jako 0/1) i zdecyduj, co zrobić z brakami. Uzupełnianie dopasuj tylko na zbiorze treningowym.
  • Pojedyncze drzewo jest niestabilne: mała zmiana danych może zmienić pierwszy podział. Jeśli zależy ci tylko na trafności, bezpieczniejszy jest zespół drzew.
  • Podział to twierdzenie o tych danych, a nie o przyczynie. Klasa biletu i cena zastępują się nawzajem, więc drzewo może wybrać dowolną z nich.

Więcej w Atlasie

Hasła encyklopedii o pojęciach z tej lekcji: