LightGBM
LightGBM — это фреймворк градиентного бустинга, который строит деревья решений по листьям на основе гистограмм признаков и быстро обучается на больших табличных наборах данных.
LightGBM (машина градиентного бустинга Light) — фреймворк с открытым исходным кодом для градиентного бустинга, который обучает ансамбли деревьев решений на табличных данных и рассчитан на высокую скорость и низкое потребление памяти при работе с большими наборами данных. Microsoft выпустила его в 2016 году и описала алгоритмы в статье NeurIPS 2017 LightGBM: высокоэффективное дерево решений с градиентным бустингом. В марте 2026 года официальный репозиторий переехал в организацию lightgbm-org на GitHub, сохранив прежних сопровождающих. LightGBM поддерживает классификацию, регрессию и ранжирование из Python, R, C++ и командной строки и встречается во многих победивших решениях конкурсов по машинному обучению. На таблицах среднего размера, примерно с 10 000 строк, подобные ансамбли деревьев по-прежнему часто превосходят глубокое обучение.
Как работает LightGBM#
Градиентный бустинг строит деревья одно за другим. Каждое новое дерево подгоняется под градиенты функции потерь относительно предсказаний текущего ансамбля; при квадратичной ошибке это просто остатки, поэтому дерево исправляет ошибки предыдущих деревьев. Предсказание модели — это сумма выходов всех деревьев, каждый из которых масштабируется с помощью скорости обучения. Самый затратный этап — поиск наилучшего разбиения для каждого узла, и LightGBM ускоряет его четырьмя методами:
- Разбиения на основе гистограмм: перед обучением LightGBM распределяет каждую непрерывную характеристику не более чем по 255 корзинам (
max_bin). При поиске разбиения проверяются границы корзин, а не каждое отсортированное значение. После разбиения по данным строится гистограмма только для меньшего потомка, поскольку гистограмма большего потомка равна гистограмме родителя минус гистограмма меньшего потомка. - Рост по листьям: LightGBM всегда разделяет лист, для которого наилучшее разбиение сильнее всего уменьшает функцию потерь, пока в дереве не будет
num_leavesлистьев (по умолчанию 31); вместо того чтобы сначала разделить все узлы на одном уровне, а затем перейти глубже. При одинаковом числе листьев такой подход приводит к меньшей функции потерь, чем рост по уровням, но создаёт глубокие и несбалансированные деревья, которые могут переобучиться на небольших наборах данных. - Выборка по градиенту с одной стороны (GOSS): строки с большими градиентами соответствуют примерам, которые модель пока предсказывает плохо. При использовании
data_sample_strategy="goss"LightGBM оставляет 20% строк с наибольшими градиентами, случайно выбирает ещё 10% из остальных и увеличивает вес этой выборки, чтобы распределение данных оставалось близким к исходному. - Объединение взаимоисключающих признаков (EFB): разреженные признаки, которые редко бывают ненулевыми одновременно, например столбцы one-hot-кодирования, объединяются в один признак, что сокращает число гистограмм, которые нужно построить.
Каждое дерево повторяет поиск разбиений, пока не исчерпает лимит листьев или пока не останется полезных разбиений; бустинг повторяет этот процесс на каждом шаге:
LightGBM также напрямую разделяет категориальные признаки, закодированные целыми числами, если они перечислены в categorical_feature: категории группируются при каждом разбиении без one-hot-кодирования. Пропущенные значения обрабатываются по умолчанию. Обучение выполняется на CPU, на GPU (device_type="gpu" или "cuda"), а также на нескольких машинах с помощью распределённых алгоритмов обучения.
Обучение и настройка LightGBM#
Для большинства задач подходят классы LGBMClassifier, LGBMRegressor и LGBMRanker в стиле scikit-learn. Поскольку деревья с ростом по листьям могут быть очень глубокими, основные параметры для борьбы с переобучением — num_leaves, min_child_samples (по умолчанию 20 строк на лист) и max_depth; их обычно настраивают вместе со скоростью обучения и числом деревьев с помощью подбора гиперпараметров или ранней остановки на валидационной выборке. Преимущества гистограмм и роста по листьям видны при сравнении с классическим градиентным бустингом scikit-learn с точным поиском разбиений на синтетической таблице из 20 000 строк и 40 признаков:
import time
import lightgbm as lgb
from sklearn.datasets import make_classification
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
X, y = make_classification(n_samples=20_000, n_features=40, n_informative=15, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 200 trees each: exact split search vs. LightGBM's histograms and leaf-wise growth
for model in (GradientBoostingClassifier(n_estimators=200), lgb.LGBMClassifier(n_estimators=200, verbose=-1)):
start = time.perf_counter()
model.fit(X_train, y_train)
seconds = time.perf_counter() - start
print(f"{type(model).__name__}: {seconds:.1f} s, accuracy {model.score(X_test, y_test):.3f}")На CPU Apple M5 Pro LightGBM строит 200 деревьев с числом листьев до 31 менее чем за секунду, тогда как scikit-learn требуется около 20 секунд на 200 деревьев с точным поиском разбиений и глубиной 3; при этом более крупные деревья LightGBM обеспечивают точность на тестовой выборке 0.956 против 0.901. Обученные модели сохраняются в текстовом формате или JSON, а onnxmltools конвертирует их в ONNX для инференса вне Python.
LightGBM и родственные методы#
- XGBoost: библиотека градиентного бустинга, популяризировавшая регуляризованный бустинг второго порядка в 2014 году. По умолчанию она строит деревья с ограничением глубины (
max_depth=6), поддерживает рост по листьям с помощьюgrow_policy="lossguide", а начиная с версии 2.0 по умолчанию использует поиск разбиений по гистограммам; теперь обе библиотеки используют большинство общих методов. - CatBoost: библиотека бустинга от Яндекса, выпущенная в 2017 году. Она строит симметричные деревья и кодирует категориальные признаки с помощью упорядоченной целевой статистики, чтобы ограничить утечку целевой переменной.
- Случайный лес: независимо обучает глубокие деревья на бутстрэп-выборках и усредняет их предсказания, что снижает дисперсию.
- HistGradientBoosting:
HistGradientBoostingClassifierиHistGradientBoostingRegressorв scikit-learn — это реализации, вдохновлённые LightGBM, которые аналогичным образом распределяют признаки по корзинам гистограмм. - Фундаментальные модели для табличных данных: предобученные трансформеры, например TabPFN, делают предсказания на небольших таблицах за один прямой проход без отдельного цикла обучения для каждого набора данных.
Примеры применения в реальных условиях#
- Мошенничество и кредитные риски: банки оценивают транзакции и заявки на кредиты по истории счёта, продавцу, сумме и времени операции; быстрый инференс LightGBM подходит для принятия решений по отдельным транзакциям.
- Прогнозирование спроса: ритейлеры прогнозируют продажи каждого товара в каждом магазине по прошлым продажам, ценам, акциям и календарным признакам. Часто в качестве входных данных используют поток посетителей: Ultralytics YOLO26 с помощью подсчёта объектов отслеживает людей, пересекающих линию на видео из магазина, и сообщает число входящих и выходящих людей по классам; эти данные, агрегированные по часам, становятся признаками для прогноза численности персонала с помощью LightGBM.
- Ранжирование в поиске и рекомендациях:
LGBMRankerпо умолчанию обучается с целевой функцией LambdaRank, упорядочивая документы или товары внутри каждой группы запросов для оптимизации нормализованного дисконтированного кумулятивного выигрыша (NDCG).










