Как увеличение глубины дерева влияет на дисперсию модели?

«Как увеличение глубины дерева влияет на дисперсию модели?» — вопрос из категории Деревья и ансамбли, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Увеличение глубины дерева напрямую повышает дисперсию (variance) модели и снижает ее смещение (bias). Глубокое дерево может идеально подогнаться под обучающие данные, включая их шум и случайные флуктуации. Это приводит к переобучению: высокая точность на тренировочном наборе, но плохая способность обобщать на новые, невидимые данные.

Практическая демонстрация на синтетических данных:

import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split

# Генерируем данные с шумом
np.random.seed(42)
X = np.sort(5 * np.random.rand(80, 1), axis=0)
y = np.sin(X).ravel() + np.random.normal(0, 0.1, X.shape[0])
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# Модель с высокой дисперсией (глубокое дерево)
deep_tree = DecisionTreeRegressor(max_depth=10)
deep_tree.fit(X_train, y_train)
train_score_deep = deep_tree.score(X_train, y_train)  # Будет близко к 1.0
test_score_deep = deep_tree.score(X_test, y_test)      # Существенно ниже

# Модель с низкой дисперсией (мелкое дерево)
shallow_tree = DecisionTreeRegressor(max_depth=3)
shallow_tree.fit(X_train, y_train)
train_score_shallow = shallow_tree.score(X_train, y_train) # Ниже, чем у deep_tree
test_score_shallow = shallow_tree.score(X_test, y_test)     # Выше, чем у deep_tree

Вывод: Слишком большая глубина увеличивает сложность модели и дисперсию. Оптимальную глубину находят через кросс-валидацию, балансируя смещение и дисперсию.