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 DecisionTreeClassifierclf = 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.