Анализ данных • 21 августа 2024 • 5 мин чтения

CatBoost: алгоритм градиентного бустинга

Анализ данных - это процесс, который требует избавления данных от пропусков и приведения к виду, понятному для компьютера. Сделать это быстро и надёжно помогает библиотека CatBoost.

Что такое CatBoost и как он работает

CatBoost (Categorical Boosting) — это алгоритм машинного обучения, разработанный компанией Яндекс. Он предназначен для работы с табличными данными и особенно эффективен в задачах, где важную роль играют категориальные признаки. Основной механизм работы CatBoost — градиентный бустинг на деревьях решений. Подробнее о математической основе алгоритма можно почитать в хендбуке Яндекса.

Основные особенности CatBoost:

● Работа с категориальными признаками. CatBoost уникален благодаря своей способности обрабатывать категориальные данные без необходимости в предварительном кодировании. Это позволяет значительно упростить подготовку данных и сохранить информацию, которая может быть утрачена при использовании методов вроде one-hot encoding.
● Обработка пропусков. Алгоритм автоматически обрабатывает пропущенные значения, что уменьшает вероятность возникновения ошибок, связанных с отсутствием данных.
● Борьба с переобучением. CatBoost использует несколько методов для предотвращения переобучения, включая мощную регуляцию и усреднение.
● Скорость и производительность. В CatBoost реализованы оптимизации, делающие обучение и предсказания более быстрыми по сравнению с аналогами. Они включают в себя поддержку многоядерной обработки и эффективное использование памяти.
● Стабильность и воспроизводимость. Алгоритм предлагает методы, обеспечивающие стабильные результаты даже при изменении порядка входных данных.

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

● Инициализация. Алгоритм начинается с простой модели, которая предсказывает среднее значение целевой переменной.
● Построение деревьев. На каждом шаге создаётся новое дерево решений, обучающееся на ошибках предыдущей модели. Деревья добавляются последовательно, при этом корректируются предсказания.
● Использование случайных перестановок. Для борьбы с переобучением CatBoost применяет метод случайных перестановок данных, что помогает улучшить обобщающую способность модели.
● Вычисление градиента. На каждой итерации вычисляется градиент ошибки, который затем используется для корректировки модели.
● Интеграция модели. Итоговое предсказание — это взвешенная сумма всех деревьев, где каждый последующий шаг уменьшает ошибку модели.

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

CatBoost — ML-библиотека с открытым исходным кодом

Установка CatBoost

Специалистам по Data Science требуется умело работать с Python и его многочисленными библиотеками — в первую очередь с Numpy, Pandas и Scikit-learn. Большим плюсом будет знание Keras и навык работы с SQL. Всему этому можно научиться на курсе «Специалист по Data Science», где наставники также дают студентам твёрдый математический базис — статистику и теорию вероятностей.

Установка CatBoost достаточно проста и может быть выполнена через пакетный менеджер Python — pip. Для открытого ПО есть традиционная возможность самостоятельной сборки библиотеки из исходного кода.

CatBoost зависит от следующих пакетов:

● graphviz (для использования функции plot_tree);
● matplotlib;
● numpy (>=1.16.0);
● pandas (>=0.24);
● plotly;
● scipy;
● six.

Установка через pip

1. Убедитесь, что у вас установлены Python и pip. Это можно сделать, выполнив следующие команды в терминале:

python --version
pip --version

2. Чтобы установить CatBoost, выполните команду:

pip install catboost

Эта команда загрузит и установит последнюю стабильную версию CatBoost.

Установка из исходного кода

Если вы хотите установить CatBoost из исходного кода, выполните следующие шаги:

1. Клонируйте репозиторий CatBoost с GitHub:

git clone https://github.com/catboost/catboost.git
cd catboost

2. Выполните команды для сборки и установки:

python -m build --sdist

# замените переменную на реальный путь к собранному дистрибутиву
python -m pip install <path-to-sdist-tar.gz>
pip install .

Установка в Jupyter Notebook

Если вы используете Jupyter Notebook, то установка через pip позволяет сразу начать работу с CatBoost, просто добавив ячейку:

!pip install catboost

Установка в Anaconda

1. Установите CatBoost через Anaconda:

conda config --add channels conda-forge

conda install catboost

Проверка установки

Чтобы убедиться, что CatBoost установлен правильно, запустите Python-интерпретатор и попробуйте импортировать библиотеку:

import numpy
from catboost import CatBoostRegressor

dataset = numpy.array([[1,4,5,6],[4,5,6,7],[30,40,50,60],[20,15,85,60]])
train_labels = [1.2,3.4,9.5,24.5]
model = CatBoostRegressor(learning_rate=1, depth=6, loss_function='RMSE')
fit_model = model.fit(dataset, train_labels)

print(fit_model.get_params())

Если ошибок нет, значит установка прошла успешно и CatBoost готов к использованию.

Советы по использованию CatBoost

В качестве первого шага рассмотрим несложные примеры работы с CatBoost. Вот несколько советов, которые помогут максимально эффективно использовать его возможности.

Работа с категориальными признаками: передайте категориальные признаки в виде списка индексов или названий. CatBoost сам обработает их, используя специальные алгоритмы кодирования:

from catboost import CatBoostClassifier
model = CatBoostClassifier(cat_features=[0, 1, 2])

Настройка гиперпараметров. Количество деревьев (`iterations`): определяет, сколько деревьев будет построено. Большее значение может повысить точность, но увеличивает время обучения.

Темп обучения (`learning_rate`): обычно устанавливается в пределах 0.01–0.1. Меньшее значение позволяет модели учиться более плавно и уменьшает риск переобучения.

Глубина деревьев (`depth`): регулирует сложность модели. Глубокие деревья могут лучше выявлять сложные зависимости, но также рискуют переобучиться.

Обработка дисбаланса классов. Параметр `class_weights`: помогает сбалансировать классы при обучении, указывая вес каждого класса:

model = CatBoostClassifier(class_weights=[1, 3])

Оценка качества модели. Кросс-валидация: `cv` из CatBoost используется для оценки производительности модели на разных фолдах:

from catboost import cv, Pool
data_pool = Pool(data, label, cat_features=[0, 1, 2])
params = {"iterations": 100, "depth": 5, "learning_rate": 0.1, "loss_function": "Logloss"}
cv_results = cv(params, data_pool, fold_count=5)

Интерпретируемость модели. Feature Importance: встроенные методы для оценки важности признаков позволяют понять, какие из них наиболее влиятельны:

model.get_feature_importance(prettified=True)

SHAP-значения используются для более детального анализа влияния признаков на предсказания:

shap_values = model.get_feature_importance(data, type="ShapValues")

Ускорение обучения. Многопоточность: CatBoost автоматически использует все доступные ядра, но можно настроить параметр `thread_count` для управления этим процессом. Сохранение промежуточных результатов — используйте `snapshot_file` для восстановления обучения после прерывания:

model = CatBoostClassifier(iterations=1000, snapshot_file='catboost_snapshot')

CatBoost эффективно обрабатывает пропуски, что упрощает предобработку данных. Не нужно тратить время на ручное удаление NULL-значений из всех возможных строк и колонок.

Под какие задачи подходит CatBoost

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

Классификация

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

Регрессия

Построение функции регрессии

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

Обработка категориальных данных

CatBoost эффективно справляется с задачами, где в данных много категориальных признаков, что делает его идеальным для работы с сырыми бизнес-данными. Примеры: маркетинговый анализ, персонализация контента.

Работа с неравномерными данными

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

Рекомендательные системы

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

Финансовый анализ

CatBoost применяется для задач в финансовой сфере, таких как оценка кредитоспособности и прогнозирование рыночных трендов. Примеры: скоринг клиентов, алгоритмическая торговля.

Биомедицина

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

Сравнение CatBoost с другими алгоритмами бустинга

CatBoost выделяется среди других алгоритмов бустинга своими уникальными характеристиками. Рассмотрим его отличия от XGBoost и LightGBM.

Обработка категориальных признаков:

CatBoost автоматически обрабатывает категориальные данные без предварительного кодирования.
● XGBoost и LightGBM требуют предварительного преобразования (например, one-hot encoding), что может усложнять работу с большими наборами данных.

Устойчивость к переобучению:

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

Скорость и производительность:

CatBoost — производительность на задачах с категориальными признаками благодаря оптимизированным алгоритмам и поддержке многопоточности.
● XGBoost — высокая скорость обучения с возможностью параллельных вычислений.
● LightGBM — быстро обучается за счёт техники «leaf-wise» роста деревьев и оптимизаций.

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

CatBoost предоставляет инструменты для оценки важности признаков и SHAP-значения для интерпретируемости.
● XGBoost и LightGBM поддерживают оценку важности признаков, но требуют дополнительных инструментов для более детального анализа.

Простота настройки:

CatBoost — меньше гиперпараметров для настройки, интуитивно понятные параметры.
● XGBoost — большое количество параметров, что даёт гибкость, но усложняет настройку.
● LightGBM требует тщательной настройки для достижения оптимальных результатов.

Совместимость и интеграция:

CatBoost легко интегрируется с Python, R и поддерживает совместимость с популярными инструментами анализа данных.
● XGBoost и LightGBM поддерживают несколько языков программирования и имеют широкую экосистему.

Статью подготовили:
Богдан Сиротич
Яндекс Практикум
Редактор
Полина Овчинникова
Яндекс Практикум
Иллюстратор

Дайджест блога: ежемесячная подборка лучших статей от редакции

Поделиться

Успейте начать учебу в Практикуме до конца ноября со скидкой 20%

Thu Sep 26 2024 02:18:54 GMT+0300 (Moscow Standard Time)