Drzewo decyzyjne

Model podejmujący decyzje przez serię pytań dzielących dane według ich cech. Czytelny i łatwy do interpretacji, lecz podatny na przeuczenie.

Drzewo decyzyjne (ang. decision tree) to model uczenia maszynowego, który podejmuje decyzje przez ciąg prostych pytań typu „tak/nie” zadawanych po kolei o cechy danych. Każde pytanie dzieli zbiór na mniejsze części, a Ty schodzisz w dół drzewa: od korzenia, przez węzły z warunkami (np. wiek > 30?), aż do liścia, który zawiera odpowiedź — etykietę klasy albo wartość liczbową. Dlatego drzewa służą zarówno do klasyfikacji, jak i regresji.

Najfajniejsze jest to, że drzewo da się przeczytać jak schemat blokowy. Nie musisz wierzyć modelowi na słowo — możesz prześledzić każdą decyzję krok po kroku i powiedzieć klientowi, dlaczego algorytm odrzucił wniosek kredytowy. To rzadkość w świecie ML, gdzie większość modeli to czarne skrzynki.

Jak drzewo wybiera pytania

Algorytm nie zgaduje, o co zapytać. Na każdym etapie szuka takiego podziału, który najlepiej „rozdziela” klasy. Miarą jest najczęściej Gini impurity albo entropia (information gain) — obie mówią, jak bardzo wymieszane są dane w węźle. Cel: po podziale każda gałąź ma być jak najbardziej jednorodna. Popularny wariant tej budowy to algorytm CART (Classification and Regression Trees), na którym opiera się m.in. scikit-learn.

Przykład z praktyki

W Pythonie ze scikit-learn wytrenowanie drzewa to dosłownie kilka linijek:

  • from sklearn.tree import DecisionTreeClassifier
  • clf = DecisionTreeClassifier(max_depth=4, criterion="gini")
  • clf.fit(X_train, y_train)

Parametr max_depth=4 jest tu kluczowy. Bez niego scikit-learn domyślnie buduje drzewo, które rośnie aż każdy liść jest idealnie czysty — czyli zapamiętuje dane treningowe na pamięć. Potem możesz podejrzeć logikę przez export_text(clf) albo narysować ją przez plot_tree(clf) i zobaczyć dokładnie, które progi cech decydują o klasie.

Na co uważać

Największa pułapka to przeuczenie (overfitting). Niczym nieograniczone drzewo dopasuje się do każdego szumu w danych treningowych i będzie miało genialne wyniki na treningu, a tragiczne na nowych danych. Ratują Cię: ograniczanie głębokości (max_depth), minimalna liczba próbek w liściu (min_samples_leaf) oraz przycinanie (pruning).

Drugi mit: „drzewo zawsze jest stabilne”. Niestety nie — drobna zmiana danych potrafi przebudować cały podział i dać zupełnie inne drzewo. Dlatego w praktyce rzadko używasz jednego drzewa do produkcji. Częściej sięgasz po lasy losowe (random forest) lub gradient boosting (XGBoost, LightGBM), które łączą dziesiątki drzew i są znacznie odporniejsze, choć tracisz wtedy tę piękną czytelność jednego schematu.

Pojęcia powiązane: random forest, gradient boosting, overfitting, Gini impurity, entropia, klasyfikacja, regresja, uczenie nadzorowane.