Перейти к основному содержимому

Регрессия случайного леса: полное руководство

Как работает регрессия случайного леса, где она дает сбои и как её оценивать, настраивать и интерпретировать. Включает реализацию на Python и каркас для сравнения моделей.
Обновлено 17 июн. 2026 г.  · 12 мин читать

Регрессия случайного леса — один из самых надежных способов моделировать нелинейные табличные данные с минимальной подготовкой. Она быстро дает рабочую модель, даже когда данные шумные или связи неочевидны.

В этом руководстве мы пройдем весь рабочий процесс регрессии случайного леса. Вы поймете, как работает алгоритм, и реализуете его на Python. Мы также обсудим методы оценки и тонкую настройку для повышения качества.

Что такое регрессия случайного леса?

Рандом-форест-регрессия — это ансамблевый метод, который строит несколько рандомизированных деревьев решений и объединяет их выходы для получения непрерывного прогноза. Вместо того чтобы полагаться на одну модель, он агрегирует предсказания многих деревьев, обычно усредняя их результаты.

Random Forest Regression

Почему несколько деревьев? Одно дерево решений склонно к переобучению. Оно захватывает шум вместе с сигналом, особенно при работе с «грязными» реальными данными.

Бутстреп-агрегирование и случайность признаков

Сила модели регрессии случайного леса заключается в том, как она вносит случайность на каждом шаге, а затем агрегирует результаты для снижения дисперсии. Давайте разберем этот внутренний механизм. 

Бутстреп-агрегирование, или бэггинг, обучает каждое дерево на своей случайной подвыборке данных. Это вносит вариативность между деревьями и снижает риск переобучения

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

Бутстреп-выборки и случайность признаков

Random Forest начинается с бутстреп-выборки, также известной как бэггинг. Каждое дерево обучается на случайно отобранной подвыборке исходного датасета. В результате деревья изучают разные паттерны вместо повторения одной и той же структуры.

Также вводится случайность по признакам. На каждом разбиении модель рассматривает только случайное подмножество признаков вместо всех доступных. Это не позволяет нескольким доминирующим признакам управлять каждым деревом. 

Вместе бэггинг и случайность признаков создают набор некоррелированных деревьев, которые делают разные ошибки, поэтому при объединении их предсказания компенсируют шум и повышают общую точность.

Рост деревьев и агрегирование предсказаний

Каждое дерево в лесу растет глубоким, часто без обрезки. Это позволяет модели захватывать сложные паттерны, взаимодействия и нелинейные зависимости в данных. 

Отдельные деревья могут переобучаться, но этот эффект снижается, когда Random Forest агрегирует их выходы для финального результата.

Компромисс смещения и дисперсии

Случайный лес балансирует два ключевых фактора: силу отдельных деревьев и разнообразие леса. 

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

Предобработка данных и рабочий процесс реализации

Далее мы перейдем от теории к практике и рассмотрим приемы преобразования сырых данных в рабочую модель случайного леса.

Очистка данных и построение признаков

Подготовка данных для моделей случайного леса обычно начинается с обработки категориальных переменных. 

  • Для небольших категорий хорошо и надежно работает one-hot кодирование
  • Для признаков с высокой кардинальностью чаще эффективнее таргет-кодирование, так как оно улавливает сигналы на уровне категорий без значительного увеличения размерности

Далее — пропуски в данных. Подход зависит от используемой библиотеки. Некоторые реализации могут обрабатывать пропуски напрямую при разбиениях, другие ожидают, что вы их заполните. В большинстве случаев достаточно простой импутации медианой или модой. Поскольку Random Forest не полагается на строгие распределения, такие прямолинейные методы хорошо работают на практике.

Наибольшее влияние, впрочем, оказывает построение признаков. Например, лаговые переменные вводят временные зависимости, скользящие агрегаты отражают локальные тренды, а групповые статистики кодируют более высокоуровневые паттерны. Эти инженерные признаки позволяют модели лучше представлять информацию и повышают точность предсказаний.

За подробностями рекомендую прочитать мой туториал Feature Engineering in Machine Learning.

Базовые показатели и стратегии разбиения

Прежде чем что-либо настраивать, первым шагом является корректное разбиение данных. 

Для стандартных табличных задач это обычно означает разделение набора данных на обучающую, валидационную и тестовую выборки, чтобы модель обучалась на одной части, настраивалась на другой и оценивалась на финальной нетронутой части. 

Такое разделение важно, потому что дает реалистичное представление о том, как модель будет вести себя на новых данных.

Train-Test Split vs Walk-Forward Validation

Для временных рядов стратегия разбиения меняется. Случайные разбиения могут «протекать» информацией из будущего в прошлое, из-за чего качество выглядит лучше, чем есть на самом деле.

Последовательная скользящая валидация (walk-forward) избегает этой проблемы: модель обучается на начальном временном окне, валидируется на следующем, затем окно последовательно сдвигается вперед. Это согласует оценку с тем, как модель будет использоваться в продакшне.

Сквозная реализация на Python

Реализация следует простому потоку scikit-learn: 

  1. Импорт модели
  2. Разделение данных
  3. Обучение оценивателя
  4. Генерация предсказаний
  5. Оценка результата

Типичная настройка на практике выглядит так:

from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error, root_mean_squared_error
import matplotlib.pyplot as plt

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

mae = mean_absolute_error(y_test, y_pred)
rmse = root_mean_squared_error(y_test, y_pred)

После обучения и оценки модели следующим шагом будет визуализировать предсказанные значения относительно фактических. 

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

Тонкая настройка гиперпараметров и оценка

После обучения модели следующий шаг — настройка ключевых параметров и оценка качества. Вот популярные подходы:

Выбор и интерпретация метрик регрессии

Корень из среднеквадратичной ошибки (RMSE), средняя абсолютная ошибка (MAE) и R² по-разному оценивают качество. 

  • RMSE сильнее наказывает большие ошибки, поскольку возводит остатки в квадрат. Это полезно, когда крупные промахи особенно затратны и их нужно минимизировать
  • MAE относится ко всем ошибкам одинаково, поэтому дает более стабильную картину при наличии выбросов или когда важнее ровная средняя ошибка, чем редкие всплески
  • измеряет, какую долю дисперсии целевой переменной объясняет модель, что помогает сравнивать общий «фит», но напрямую не отражает ошибку предсказаний

Помимо агрегированных метрик, анализ ошибок дает более глубокие инсайты. Остатки, определяемые как разница между фактическими и предсказанными значениями, следует изучать по разным срезам данных. 

Построение остатков от предсказанных или целевых значений помогает выявить паттерны. Например, если ошибки растут по мере увеличения целевого значения, это указывает на гетероскедастичность. Если предсказания стабильно выше или ниже диагонали, это указывает на систематическое смещение.

Срез ошибок по группам признаков или диапазонам цели также помогает выявлять режимы отказов. Модель может хорошо работать на средних значениях, но «проваливаться» на крайних, или вести себя по-разному в сегментах данных.

Использование оценки по выброшенным наблюдениям (OOB)

Random Forest предоставляет встроенный механизм валидации через выборки out-of-bag. Поскольку каждое дерево обучается на бутстреп-выборке, часть данных остается неиспользованной и не видна во время обучения. Эти вневыборочные наблюдения можно использовать для оценки модели без отдельной валидационной выборки. Именно это и отражает OOB-оценка.

OOB evaluation

Однако OOB-оценки бывает недостаточно. Для финальной валидации модели, особенно в критичных сценариях или при риске утечки данных, необходим строгий отложенный тестовый набор. 

Приоритезация ключевых гиперпараметров для настройки

В Random Forest параметры max_features и n_estimators обычно вносят самые заметные изменения в качество.

  • max_features управляет максимальным числом признаков, рассматриваемых на каждом разбиении. Низкие значения увеличивают случайность и уменьшают корреляцию между деревьями, что может улучшить обобщение. Высокие значения делают деревья сильнее, но похожее друг на друга, потенциально повышая дисперсию. 

  • n_estimators определяет количество деревьев в лесу. Увеличение обычно улучшает качество за счет стабилизации предсказаний, но повышает вычислительные затраты. После некоторой точки прирост становится минимальным, поэтому важно найти плато.

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

Важность признаков и интерпретируемость

Модели случайного леса часто считают «черными ящиками», но они предоставляют несколько способов понять, как признаки влияют на предсказания. Рассмотрим ключевые.

Важность на основе нечистоты

Random Forest вычисляет важность признаков с помощью показателя среднего уменьшения нечистоты (MDI). Каждый раз, когда признак используется для разбиения узла, модель измеряет, насколько это разбиение снижает нечистоту, например дисперсию в задачах регрессии. Эти снижения накапливаются по всем деревьям, формируя оценку вклада признака в улучшение предсказаний.

Хотя метод быстрый и встроенный, у него есть ограничения. MDI склонен завышать важность непрерывных признаков или категориальных с большим числом уникальных значений. У таких признаков больше потенциальных точек разбиения, что может искусственно увеличивать их важность, даже если они не действительно более предиктивны.

Перестановочная важность

Перестановочная важность измеряет, как меняется качество, когда значения признака случайно перемешиваются в отложенном наборе. Если перемешивание заметно ухудшает качество, признак важен. Если влияние мало, у признака, вероятно, низкая предсказательная ценность.

Этот подход отражает реальное поведение модели, что делает его более надежным для анализа. 

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

Значения SHAP

Значения SHAP (Shapley Additive Explanations) объясняют, насколько каждый признак вносит вклад в индивидуальное предсказание. Каждому признаку присваивается значение, показывающее, насколько он сдвинул предсказание выше или ниже базового уровня. 

Метод часто используют для объяснения решений модели и повышения доверия. Подробный разбор — в нашем руководстве SHAP Values in Machine Learning.

Ограничения и типичные случаи неудач

Регрессия случайного леса надежна во многих сценариях, но у нее есть явные ограничения. Понимание их помогает решить, когда использовать этот метод, а когда выбрать другой подход.

Лимиты экстраполяции и крайние случаи

Random Forest не умеет экстраполировать за пределы диапазона обучающих данных. 

Каждое дерево делает предсказания на основе разбиений, увиденных при обучении, поэтому конечный результат всегда ограничен минимальными и максимальными целевыми значениями из датасета. Если модель видела цели только в диапазоне 10–100, она не предскажет 120, как бы ни был силен входной сигнал. Это становится проблемой в сценариях вроде прогнозирования роста или систем, движимых трендами. 

Модель также испытывает трудности с крайне высокоразмерными разреженными данными, например текстовыми представлениями или one-hot векторами с тысячами столбцов. В таких случаях деревья становятся неэффективны и не улавливают содержательные разбиения. Практические обходные пути включают 

Компромиссы интерпретируемости

Одно дерево дает прозрачный путь от входа к предсказанию, что облегчает объяснение. Лес, напротив, агрегирует сотни деревьев, из-за чего отдельные решения сложнее проследить.

В сильно регулируемых средах этот компромисс важен. Если нужны простые и напрямую прослеживаемые объяснения, уместнее одно дерево решений или линейная модель. Если на первом месте качество, а объяснения можно поддержать методами вроде важности признаков или SHAP, Random Forest остается сильным вариантом.

Ограничения по вычислениям, памяти и задержкам

Случайный лес масштабируется линейно по числу деревьев и размеру данных. По мере роста датасетов увеличиваются время обучения и использование памяти, поскольку каждое дерево нужно построить и хранить. Большие леса также могут замедлять инференс, так как предсказания требуют агрегирования выходов всех деревьев.

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

Регрессия случайного леса и альтернативы: как выбрать

Вы можете задуматься, подходит ли регрессия случайного леса для вашей задачи и какую альтернативу стоит рассмотреть.

Построение каркаса для сравнения моделей

Кейсы различаются, но один подход всегда помогает: сравнивать результаты разных моделей (например, линейной регрессии, регрессии опорных векторов, градиентного бустинга и т. п.) на одном и том же датасете рядом с Random Forest Regressor. 

Это означает — использовать одни и те же обучающую, валидационную и тестовую части для каждой модели, а затем оценивать их по одинаковым метрикам ошибок и бизнес-требованиям.

Регрессия случайного леса vs. линейная регрессия и регрессия опорных векторов

Random Forest и линейная регрессия решают очень разные задачи. Линейная регрессия лучше всего работает, когда связь между признаками и целью в основном линейная, а коэффициенты нужно легко объяснять. Это также лучший выбор, когда важна строгая экстраполяция, поскольку она может выходить за пределы наблюдаемого диапазона целевых значений. 

Random Forest, напротив, лучше справляется с нелинейными паттернами, взаимодействиями признаков и неровными границами. Это делает его более сильным инструментом для сложных реальных систем, но более слабым вариантом для прогнозирования, где доминируют тренды.

Регрессия опорных векторов (SVR) находится «в другом углу». Она может хорошо работать на небольших выборках, но гораздо чувствительнее к масштабированию признаков и обычно требует более тщательной настройки. Random Forest не зависит от стандартизации входов, что упрощает работу в типичных табличных пайплайнах. 

SVR может быть сильным вариантом при компактном датасете и ограниченном пространстве признаков, но становится труднее в сопровождении при росте объема данных, сложности признаков или операционного давления.

Регрессия случайного леса vs. градиентный бустинг и одиночные деревья решений

Random Forest строит деревья независимо и усредняет их выходы. Градиентный бустинг строит деревья последовательно, где каждое новое дерево исправляет ошибки предыдущих.

Методы градиентного бустинга, такие как XGBoost, обычно достигают более высокой планки точности, особенно на структурированных табличных данных. Однако они требуют более тщательной настройки и чувствительнее к гиперпараметрам. Обучение также может быть медленнее из-за последовательной природы бустинга. Random Forest проще обучать, он стабильнее «из коробки» и менее чувствителен к конфигурации.

По сравнению с одиночным деревом решений Random Forest намного стабильнее и точнее. Одно дерево легко интерпретировать, потому что можно проследить каждый путь решения, но оно крайне чувствительно к небольшим изменениям в данных. Случайный лес снижает эту нестабильность за счет усреднения по множеству деревьев, но теряет прямую интерпретируемость.

Итоги сравнения моделей

Модель

Работа с нелинейностью

Экстраполяция

Интерпретируемость

Сложность настройки

Стоимость обучения

Регрессия случайного леса

Сильная

Слабая

Средняя

Умеренная

Умеренная

Линейная регрессия

Слабая–умеренная

Сильная

Высокая

Низкая

Низкая

Регрессия опорных векторов

Сильная

Слабая–умеренная

Низкая

Высокая

Высокая (на больших данных)

Градиентный бустинг (XGBoost)

Очень сильная

Слабая

Низкая–средняя

Высокая

Высокая

Одиночное дерево решений

Умеренная

Слабая

Высокая

Низкая

Низкая

Заключение

Регрессия случайного леса лучше всего работает как модель по умолчанию, когда данные «грязные», зависимости нелинейные, а вам нужен сильный базовый уровень без тяжелой предобработки. Она справляется со смешанными типами признаков, улавливает взаимодействия и обеспечивает стабильное качество при минимальной настройке.

Типовой рабочий процесс идет по понятной траектории. Начните с минимальной предобработки и корректной структуры данных. Постройте базовую модель с настройками по умолчанию Random Forest и оцените её по согласованным метрикам. Затем улучшайте качество, настраивая ключевые гиперпараметры, такие как число деревьев и стратегию выборки признаков. 

Когда модель стабилизируется, переходите к более глубокой оценке: анализируйте остатки, срезайте ошибки и используйте SHAP, чтобы объяснять предсказания там, где это необходимо. 

Далее, для глубокого понимания и практики, посмотрите курс Machine Learning with Tree-Based Models in Python.

Частые вопросы по регрессии случайного леса

Каковы ограничения модели случайного леса?

Random Forest не умеет экстраполировать за пределы обучающего диапазона и может испытывать сложности с очень высокоразмерными разреженными наборами данных. Он также менее интерпретируем, чем одиночное дерево решений, и по мере роста числа деревьев может становиться вычислительно затратным.

Как понять, что моя модель Random Forest переобучается?

Сравните качество на обучении и валидации. Если ошибка на обучении низкая, а на валидации заметно выше, модель переобучается. Также проверьте, не перестают ли улучшаться валидационные метрики при увеличении глубины деревьев.

Что лучше: XGBoost или Random Forest?

XGBoost обычно достигает более высокой точности, поскольку строит деревья последовательно и исправляет ошибки на каждом шаге. Он лучше подходит, когда вы готовы вложиться во время на настройку гиперпараметров. Random Forest, напротив, строит деревья независимо и усредняет их предсказания. Он стабильнее, требует меньше настройки и хорошо работает как базовая модель.

Может ли Random Forest работать с временными рядами?

Напрямую — нет. Необходимо преобразовать временной ряд в табличный формат с помощью лаговых признаков, скользящих статистик или оконных преобразований перед обучением.

Темы

Лучшие курсы по машинному обучению

Track

Специалист по машинному обучению на Python

85 ч
Откройте для себя машинное обучение с Python и двигайтесь к тому, чтобы стать учёным по машинному обучению. Изучите обучение с учителем, без учителя и глубокое обучение.
ПодробнееRight Arrow
Начать курс
Смотрите большеRight Arrow