Created by AIImproved by people

Riqli · living documents · updated continuously

Where AI knowledge meets human practice.

Share with friends
image
Библиотеки машинного обучения: Scikit-learn, XGBoost, LightGBM, CatBoost. Hard skill. (Self-study. Q&A. Tutorials. Scikit-learn. XGBoost. LightGBM. CatBoost. Классификация. Регрессия. Кластеризация. Работа с табличными данными.)
sections

Введение

contents

Аннотация. Этот курс посвящён практическому освоению ключевых библиотек машинного обучения на Python. Вместо абстрактной теории мы сосредоточимся на конкретных инструментах, которые позволяют решать реальные задачи: от предобработки данных до построения и настройки моделей. Scikit-learn, XGBoost, LightGBM и CatBoost образуют основу современного арсенала специалиста по данным, и умение эффективно их использовать критически важно для успешной работы в индустрии. Этот курс проведёт вас через все этапы — от первого знакомства с библиотеками до тонкой настройки градиентного бустинга и выбора оптимальной модели для вашей задачи.

contents

Цель курса. После прохождения курса вы сможете самостоятельно выбирать, настраивать и применять библиотеки машинного обучения на Python — Scikit-learn, XGBoost, LightGBM и CatBoost — для решения задач классификации, регрессии и кластеризации на табличных данных, обосновывая свой выбор и интерпретируя полученные результаты.

contents

Результаты обучения.

  • Знать: архитектуру и ключевые возможности каждой из четырёх библиотек; математические основы градиентного бустинга; критерии выбора модели в зависимости от типа задачи и данных.
  • Уметь: реализовывать полный пайплайн машинного обучения — от загрузки и очистки данных до обучения и оценки моделей; проводить настройку гиперпараметров; применять методы кластеризации для поиска скрытых закономерностей.
  • Владеть: библиотеками Scikit-learn, XGBoost, LightGBM, CatBoost на уровне, достаточном для участия в соревнованиях по анализу данных и решения прикладных задач в бизнесе.
contents

Для кого этот курс.

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

Этот курс не предназначен для полных новичков в программировании: предполагается базовое знание синтаксиса Python и структур данных. Также он не рассматривает глубокое обучение (нейронные сети) — это отдельная большая тема. Здесь мы фокусируемся исключительно на классических алгоритмах и ансамблевых методах, которые остаются «рабочими лошадками» в большинстве практических задач.

sections

Модуль 1. Основы Python для машинного обучения: экосистема и подготовка

contents

Почему Python стал стандартом в машинном обучении. Python для машинного обучения — это не просто мода, а объективная реальность, продиктованная его экосистемой. Согласно индексу TIOBE и данным Stack Overflow Developer Survey, Python устойчиво занимает первое место среди языков, используемых в области Data Science . Главное преимущество — не сам язык, а его окружение: библиотеки вроде NumPy, Pandas, Scikit-learn и PyTorch не имеют сопоставимых аналогов по полноте и удобству. Альтернативы вроде R или Julia существуют, но в реальных проектах и вакансиях Python является стандартом де-факто. Важно понимать, что для старта в ML не нужно учить весь язык целиком: асинхронность, метаклассы или сложные паттерны проектирования не понадобятся на первых этапах. Ключевая стратегия — изучать Python в контексте Data Science, начиная с базового синтаксиса и сразу переходя к специализированным библиотекам .

contents

Базовый синтаксис и структуры данных, необходимые для ML. Для эффективной работы с библиотеками необходимо уверенно владеть базовыми конструкциями языка. Переменные и типы данных (int, float, str, bool) критичны для понимания типов признаков. Условные операторы (if/elif/else) используются при предобработке, фильтрации и написании пользовательских метрик. Циклы (for, while) нужны для перебора признаков, строк датафреймов и эпох обучения. Функции — основа для организации пайплайнов обработки. Среди коллекций особое внимание стоит уделить спискам (list) для хранения меток и предсказаний, словарям (dict) для гиперпараметров и конфигураций, а также кортежам (tuple) для неизменяемых последовательностей, например, размерностей массивов. Генераторы списков (list comprehensions) — не просто «изящество», а необходимость для компактной и быстрой фильтрации и преобразования данных .

contents

Установка и настройка окружения: conda, pip, виртуальные окружения. Правильная настройка рабочего окружения — первый и крайне важный шаг. Рекомендуется использовать менеджер пакетов conda, который не только устанавливает Python-библиотеки, но и управляет системными зависимостями, что особенно актуально для сложных библиотек. Альтернативный подход — использование pip совместно с виртуальными окружениями (например, venv или virtualenv). Виртуальные окружения позволяют изолировать зависимости разных проектов, предотвращая конфликты версий. Типичный набор для курса: установите Python версии 3.8 или выше, затем выполните pip install numpy pandas scikit-learn xgboost lightgbm catboost matplotlib seaborn jupyter. Для работы с XGBoost может потребоваться дополнительная установка системных библиотек в зависимости от ОС. Рекомендуется проверять установку импортом каждой библиотеки в интерактивной среде .

contents

Jupyter Notebook как среда для экспериментов. Jupyter Notebook — это интерактивная среда, идеально подходящая для исследования данных и прототипирования моделей. Она позволяет комбинировать исполняемый код, визуализации и пояснительный текст в одном документе, что делает её незаменимой для быстрого анализа и обучения. Для установки используйте pip install jupyter и запустите jupyter notebook в терминале. Ключевая практика — разбивать процесс на логические ячейки: сначала загрузка данных, затем их предобработка, обучение модели, оценка и визуализация. Это помогает отслеживать изменения и экспериментировать с разными параметрами. Однако для продакшена код из ноутбуков требует рефакторинга в скрипты (.py файлы) для обеспечения надёжности и автоматизации. Важно помнить о порядке выполнения ячеек — неаккуратное переиспользование переменных может привести к ошибкам.

sections

Модуль 2. Scikit-learn: универсальный инструмент для классического машинного обучения

contents

Scikit-learn: архитектура и философия библиотеки. Scikit-learn — это фундаментальная библиотека для машинного обучения на Python, содержащая реализации практически всех классических алгоритмов и утилит. Её история насчитывает более десяти лет, и сегодня она является неотъемлемой частью экосистемы Data Science . Ключевая философия Scikit-learn — единообразие интерфейса. Все модели следуют одному и тому же паттерну: создание объекта модели, вызов метода fit() для обучения на данных и метода predict() для получения предсказаний. Такая унификация делает библиотеку невероятно удобной для изучения и использования: освоив один алгоритм, вы легко перейдёте к любому другому. Scikit-learn также предоставляет богатый набор инструментов для предобработки данных (масштабирование, кодирование категориальных признаков), выборки (разбиение на train/test), кросс-валидации и оценки качества моделей, что делает её «швейцарским ножом» для задач классификации, регрессии и кластеризации .

contents

Предобработка данных в Scikit-learn: StandardScaler, OneHotEncoder. Качество данных напрямую влияет на качество модели. Scikit-learn предлагает набор классов-трансформеров для подготовки признаков. StandardScaler выполняет стандартизацию — приводит данные к нулевому среднему и единичному дисперсии, что критически важно для алгоритмов, чувствительных к масштабу (например, метод опорных векторов или линейная регрессия). MinMaxScaler масштабирует признаки в заданный диапазон (обычно [0, 1]). Для категориальных признаков используется OneHotEncoder, который преобразует их в бинарные «фиктивные» переменные. Важно, что масштабировщики и кодировщики должны обучаться (fit) только на тренировочной выборке, чтобы избежать «утечки» информации из тестовой. После обучения трансформер применяется одновременно к train и test выборкам с помощью метода transform(). Для создания единого пайплайна удобно использовать ColumnTransformer, который позволяет применить разные трансформации к разным колонкам датафрейма.

contents

Разделение данных и кросс-валидация: train_test_split, cross_val_score. Для объективной оценки модели данные всегда разделяются на обучающую и тестовую выборки. Функция train_test_split из Scikit-learn делает это автоматически, позволяя задать долю тестовой выборки (обычно 20-30%) и параметр random_state для воспроизводимости. Однако одной «замороженной» тестовой выборки недостаточно для стабильной оценки — результат может сильно зависеть от конкретного разбиения. Поэтому применяется кросс-валидация. Функция cross_val_score выполняет K-Fold разбиение: данные делятся на K частей (складок), модель обучается на K-1 части и проверяется на оставшейся, и так повторяется K раз. Это даёт более устойчивую оценку качества. Встроенная функция cross_val_score возвращает массив из K оценок (например, точности для классификации или R2R^2 для регрессии), что позволяет оценить не только среднее качество, но и его стабильность.

contents

Классификация и регрессия с помощью Scikit-learn. Scikit-learn предоставляет широкий набор моделей для задач классификации и регрессии. Для линейных задач доступны LinearRegression, LogisticRegression (для бинарной и мультиклассовой классификации), а также регуляризованные версии вроде Ridge (L2-регуляризация) и Lasso (L1-регуляризация) . Для нелинейных данных часто применяются DecisionTreeClassifier и RandomForestClassifier — ансамбль решающих деревьев. Для задач кластеризации используется KMeans или DBSCAN . Ключевой принцип работы с любой моделью един: создайте экземпляр класса модели, передав необходимые гиперпараметры, затем вызовите model.fit(X_train, y_train) для обучения и model.predict(X_test) для предсказаний. После обучения можно получить важность признаков через атрибут model.feature_importances_ (для древовидных моделей) или коэффициенты model.coef_ (для линейных).

contents

Метрики оценки качества моделей. Выбор метрики зависит от задачи. Для классификации основные метрики: accuracy_score (доля правильных ответов), precision_score (точность), recall_score (полнота) и f1_score (среднее гармоническое). Для многоклассовой классификации важно уточнять тип усреднения (macro, micro, weighted). Для задачи регрессии стандартные метрики: MSE\text{MSE} (среднеквадратичная ошибка), MAE\text{MAE} (средняя абсолютная ошибка) и R2R^2 (коэффициент детерминации, доля объяснённой дисперсии). Scikit-learn позволяет вычислить все эти метрики с помощью соответствующих функций, например, mean_squared_error(y_true, y_pred). Важно помнить, что метрики нужно вычислять только на тестовой выборке или в процессе кросс-валидации, чтобы оценить способность модели к обобщению.

contents

Подбор гиперпараметров: GridSearchCV и RandomizedSearchCV. Гиперпараметры — это настройки алгоритма, которые не обучаются на данных (например, глубина дерева, количество деревьев в лесу). Их подбор — ключевой этап для достижения высокого качества модели. Scikit-learn предоставляет два основных инструмента для этого: GridSearchCV и RandomizedSearchCV . GridSearchCV выполняет полный перебор всех комбинаций гиперпараметров из заданной сетки (например, ищет глубину = 3, 5, 10 и кол-во деревьев = 100, 200). Это гарантирует нахождение лучшей комбинации в сетке, но может быть очень медленным при большом пространстве параметров. RandomizedSearchCV выполняет случайный поиск по заданному распределению параметров, что часто быстрее и позволяет исследовать более широкий диапазон значений. Оба метода используют кросс-валидацию для оценки каждой комбинации. Объект-поиск имеет атрибуты best_params_ и best_score_, которые дают лучшую комбинацию и её оценку.

contents

Pipeline для создания воспроизводимых пайплайнов. В реальных проектах процесс преобразования данных часто включает множество шагов: масштабирование, кодирование, уменьшение размерности, обучение модели. Scikit-learn предлагает класс Pipeline, который объединяет все эти шаги в единый объект. Это критически важно для воспроизводимости и предотвращения ошибок, например, случайного применения масштабирования после разбиения на выборки. Pipeline автоматически управляет обучением и применением всех трансформеров к данным и гарантирует, что при кросс-валидации преобразования выполняются корректно на каждой складке. Синтаксис: pipeline = Pipeline([('scaler', StandardScaler()), ('model', LogisticRegression())]). Затем с этим объектом можно работать как с обычной моделью: pipeline.fit(X_train, y_train). Pipeline также можно использовать в GridSearchCV, указывая параметры с двойным подчёркиванием, например model__C для параметра регуляризации модели.

sections

Модуль 3. Градиентный бустинг: архитектура и обзор библиотек

contents

Что такое градиентный бустинг и почему он так эффективен. Градиентный бустинг — это мощная техника ансамблевого обучения, которая последовательно строит композицию из «слабых» моделей (обычно решающих деревьев), где каждая новая модель корректирует ошибки предыдущих . Этот подход, реализованный в библиотеках XGBoost, LightGBM и CatBoost, доминирует в соревнованиях по анализу данных (например, Kaggle) и во многих прикладных задачах с табличными данными. В отличие от случайного леса, который строит деревья независимо, бустинг строит их последовательно, фокусируясь на объектах, которые сложнее предсказать. Хотя обучение бустинга может требовать больше времени и тонкой настройки, его точность и способность учитывать сложные взаимодействия признаков часто превосходят другие алгоритмы. В основе лежит идея минимизации функции потерь с помощью градиентного спуска в функциональном пространстве, где каждое новое дерево приближает отрицательный градиент функции потерь.

contents

XGBoost: пионер среди библиотек градиентного бустинга. XGBoost (eXtreme Gradient Boosting) — это самая распространённая и одна из первых оптимизированных реализаций градиентного бустинга, появившаяся в 2014 году . Она быстро завоевала популярность благодаря высокой скорости работы, эффективной реализации и победам в множестве соревнований. Ключевые особенности XGBoost: 1) использование сортировки для выбора разбиений и моделей на основе анализа гистограмм, что ускоряет обучение; 2) встроенная регуляризация (L1 и L2), которая борется с переобучением; 3) поддержка различных функций потерь и пользовательских метрик; 4) возможность работы с пропущенными значениями; 5) встроенная кросс-валидация и ранняя остановка для автоматического определения оптимального числа деревьев. XGBoost остаётся надёжным выбором для большинства задач классификации и регрессии, особенно когда важна интерпретируемость и скорость.

contents

LightGBM: высокая производительность от Microsoft. LightGBM, разработанный Microsoft в 2017 году, является альтернативной реализацией градиентного бустинга, сфокусированной на скорости и эффективности, особенно на больших наборах данных . Его главное нововведение — использование алгоритма Gradient-based One-Side Sampling (GOSS) для отбора наиболее информативных объектов и Exclusive Feature Bundling (EFB) для уменьшения размерности признаков. Это позволяет LightGBM обучаться значительно быстрее XGBoost, сохраняя при этом конкурентоспособную точность. Важной особенностью является нативная поддержка категориальных признаков, которую не нужно кодировать через One-Hot Encoding . LightGBM предъявляет высокие требования к памяти, но при этом хорошо масштабируется на распределённых системах. Он часто используется в задачах, где время обучения критично, или при работе с датасетами, содержащими миллионы строк и сотни признаков.

contents

CatBoost: работа с категориальными признаками «из коробки». CatBoost, разработка компании Яндекс, появился также в 2017 году и выделяется уникальным подходом к обработке категориальных признаков . Вместо простого One-Hot-кодирования, CatBoost использует продвинутое целевое кодирование (target encoding) с использованием упорядоченного бустинга, что позволяет эффективно использовать информацию из категориальных переменных и избегать утечек данных. Это делает CatBoost особенно эффективным для датасетов с большим количеством категориальных признаков. Кроме того, CatBoost использует симметричные деревья, что ускоряет обучение и позволяет строить модель, которая хорошо работает «из коробки», требуя минимальной настройки гиперпараметров . CatBoost часто показывает лучшие результаты на данных с нестандартными типами признаков и сложной структурой, например, в задачах из области финансов или клиентского скоринга.

sections

Модуль 4. Сравнение библиотек и практика выбора модели

contents

XGBoost, LightGBM, CatBoost: пошаговое сравнение. Все три библиотеки решают одну и ту же задачу — реализуют градиентный бустинг, но делают это с разными акцентами. XGBoost — это «тяжеловес», который хорошо зарекомендовал себя, надёжен и поддерживает множество функций. Он обычно чуть медленнее, чем LightGBM и CatBoost, но при этом имеет самый широкий набор настроек . LightGBM, в свою очередь, часто оказывается самым быстрым, особенно на больших данных, и хорошо работает «из коробки», хотя иногда требует большего контроля гиперпараметров для достижения стабильности. CatBoost — это выбор, когда в данных много категориальных признаков, и он показывает наилучшие результаты прямо «из коробки» (без настройки), что является его ключевым преимуществом . Важно отметить, что ни одна из библиотек не является «абсолютно лучшей»; выбор зависит от конкретной задачи, размера данных и вычислительных ресурсов. Рекомендуется проводить сравнительный анализ, обучая модели с базовыми параметрами и оценивая их качество и время выполнения на валидационной выборке.

contents

Скорость обучения и точность: когда что выбирать. На практике часто приходится искать компромисс между временем обучения и точностью модели. Если у вас есть ресурсы и время, XGBoost с тщательно подобранными гиперпараметрами часто даёт максимальную точность. В условиях ограниченного времени или при работе с очень большими данными, LightGBM будет отличным выбором благодаря своей скорости . Если вы не хотите погружаться в сложную настройку гиперпараметров и в данных много категориальных признаков, CatBoost позволит достичь хороших результатов с минимальными усилиями. Также стоит учитывать, что XGBoost и LightGBM чувствительны к масштабу данных, в то время как CatBoost, благодаря своему внутреннему устройству, менее зависим от этого. Рекомендуемый подход: начать с CatBoost как с базового решения для получения качественного результата «за пару кликов», а затем, при необходимости, попробовать XGBoost или LightGBM для борьбы за доли процента качества.

contents

Настройка гиперпараметров: практические советы и общие паттерны. Хотя каждая библиотека имеет свои уникальные параметры, существуют общие принципы. Начните с настройки learning_rate (скорости обучения, обычно 0.01–0.3) и n_estimators (количество деревьев). Между ними есть обратная зависимость: чем меньше learning_rate, тем больше деревьев требуется для хорошего результата. Ключевой параметр для регуляризации — max_depth (глубина дерева, обычно 3–10 для XGBoost и до 15 для LightGBM). Используйте subsample (доля данных, используемых для каждого дерева) и colsample_bytree (доля признаков) для уменьшения переобучения. В XGBoost параметры регуляризации alpha (L1) и lambda (L2) часто помогают улучшить результат. В CatBoost основные параметры — depth и learning_rate. Рекомендуется искать комбинации параметров с помощью RandomizedSearchCV, а затем уточнять с помощью GridSearchCV, начиная с самых важных параметров. Важно использовать раннюю остановку (early_stopping_rounds), чтобы избежать переобучения.

contents

Интерпретация результатов: важность признаков и SHAP. После обучения модели важно понять, какие факторы влияют на её решение. Все три библиотеки предоставляют атрибут feature_importances_, который оценивает важность каждого признака на основе различных критериев. Однако эти оценки являются приблизительными. Для более глубокого анализа современным стандартом является использование библиотеки SHAP (SHapley Additive exPlanations). SHAP позволяет вычислить вклад каждого признака в предсказание для каждого отдельного объекта, обеспечивая локальную интерпретируемость, а также показывает глобальную важность признаков . Это позволяет не только понять, какой признак важен в целом, но и увидеть, как он влияет на конкретные прогнозы. SHAP работает с моделями из всех трёх библиотек и является мощным инструментом для аудита, проверки и объяснения работы модели стейкхолдерам.

sections

Модуль 5. Продвинутые техники и кластеризация

contents

Кластеризация с Scikit-learn: K-Means, DBSCAN. Помимо задач с учителем, Scikit-learn предлагает мощные инструменты для кластеризации — поиска скрытых групп в данных без целевой переменной. KMeans — самый популярный алгоритм, который разбивает данные на K групп на основе близости к центроидам . Главная сложность — выбор числа кластеров K, который часто определяется с помощью метода «локтя» или индекса силуэта. DBSCAN — более гибкий алгоритм, способный находить кластеры произвольной формы и определять выбросы. Он основан на плотности точек: кластеры формируются там, где точки расположены близко друг к другу . В отличие от K-Means, DBSCAN не требует задавать число кластеров заранее, но чувствителен к параметрам eps (максимальное расстояние между точками) и min_samples (минимальное количество точек для формирования плотной области). Кластеризация часто используется для сегментации клиентов, аномалий-детекции и сжатия данных.

contents

Снижение размерности: PCA и t-SNE. Визуализация многомерных данных — сложная задача, и для её решения применяются методы снижения размерности . PCA (Principal Component Analysis, метод главных компонент) — линейный метод, который находит новые оси координат, максимизирующие дисперсию данных. Это эффективный способ уменьшить количество признаков, удалив шум, и подготовить данные для дальнейшего анализа или обучения. t-SNE (t-Distributed Stochastic Neighbor Embedding) — нелинейный метод, который особенно хорош для визуализации данных в 2D или 3D пространстве. Он сохраняет локальную структуру данных, то есть близкие точки в исходном пространстве остаются близкими в проекции. Однако t-SNE стохастичен и требует тонкой настройки, его результаты интерпретируются только визуально. На практике PCA часто используется для предобработки перед обучением модели, а t-SNE — исключительно для визуализации.

contents

Работа с несбалансированными данными: imblearn. В реальных задачах часто сталкиваются с проблемой несбалансированных классов, когда число объектов одного класса значительно превосходит другой (например, мошеннические транзакции). В Scikit-learn есть библиотека-компаньон imblearn, которая предоставляет методы для балансировки данных . Основной подход — сэмплинг: 1) передискретизация (oversampling), например, метод SMOTE, который создаёт синтетические объекты миноритарного класса; 2) недостаточная дискретизация (undersampling), которая случайно исключает объекты мажоритарного класса. Эти методы можно комбинировать. При работе с несбалансированными данными важно использовать корректные метрики: accuracy становится неинформативной, нужно смотреть на precision, recall, f1-score и ROC-AUC. Также можно использовать настройки классовых весов в самих моделях (параметр class_weight) для увеличения штрафа за ошибки на миноритарном классе.

contents

Лучшие практики и общие выводы. Успешная работа с библиотеками машинного обучения требует дисциплины. Всегда начинайте с простого: обучите базовую модель с дефолтными параметрами, чтобы получить бейзлайн. Используйте Pipeline и ColumnTransformer для автоматизации и воспроизводимости процесса. Тщательно разделяйте данные и контролируйте утечку информации. Для выбора модели применяйте кросс-валидацию и сравнивайте модели на фиксированной тестовой выборке. Для тонкой настройки используйте RandomizedSearchCV. Изучите документацию библиотек, так как каждая из них имеет свои уникальные настройки. Помните, что ML — это итеративный процесс: анализ ошибок модели даёт понимание, какие данные или признаки улучшить. Не бойтесь экспериментировать, но всегда документируйте результаты, чтобы ваш пайплайн был не только рабочим, но и понятным.