CatBoost — новый метод машинного обучения от Яндекса

19.07.2017

Яндекс представляет метод машинного обучения CatBoost. Он придёт на смену Матрикснету, который используется в Яндексе с 2009 года. CatBoost даёт более точные результаты в задачах ранжирования, регрессии и классификации, а также учитывает данные в нечисловой форме. Библиотека машинного обучения CatBoost выложена в общий доступ — её может использовать любой желающий.

Многие привычные нам вещи, например лента социальной сети, прогноз погоды или картинка «под Ван Гога» в чьём-нибудь инстаграме, — результат применения машинного обучения. И речь не только об интернете. Банкам машинное обучение помогает своевременно пополнять купюрами банкоматы. Магазинам — прогнозировать спрос на товары. Металлургам — выявлять дефекты проката стали и определять соотношение примесей в сплавах.

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

Нейронные сети в Яндексе
Яндекс тоже использует нейронные сети: например, они задействованы в распознавании голоса и поиске похожих картинок. Нейросети также поставляют факторы для Матрикснета. Они соотносят смысл поискового запроса и заголовка документа — так работает алгоритм «Палех».

С 2009 года Яндекс развивает собственный метод машинного обучения — Матрикснет. Он был разработан для ранжирования результатов поиска, но используется и в других сервисах Яндекса: например, в Почте — для фильтрации спама, в Картах и Навигаторе — для расчёта времени в пути, в Директе — для подбора релевантных рекламных объявлений. Матрикснет устойчив к переобучению и позволяет использовать множество факторов и их комбинаций.

В основе Матрикснета лежит механизм градиентного бустинга. Его особенность — в том, что он хорошо подходит для работы с разнородными данными. Такими данными, скажем, могут быть температура, влажность, сила ветра, снимки со спутников и сводки с наземных радаров — по ним можно предсказать, какая будет погода. Кроме того, градиентный бустинг даёт точные результаты даже там, где данных относительно мало. Этим он отличается от нейронных сетей, которым для обучения требуется огромный массив однородной информации.

Методы на основе градиентного бустинга отлично подходят для работы с разнородными данными
Методы на основе градиентного бустинга отлично подходят для работы с разнородными данными

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

Тренируемся на кошках
Название CatBoost придумано в Яндексе. Это сокращение от categorical boosting, то есть бустинг с учётом категориальных признаков.

Сегодня Яндекс представляет преемника Матрикснета — новый метод машинного обучения CatBoost. В нём также используется градиентный бустинг, но CatBoost, во-первых, превосходит Матрикснет по точности предсказаний, а во-вторых, способен учитывать так называемые категориальные признаки — то есть признаки, которые принимают одно из конечного количества значений. Так, облака могут быть кучевыми, перистыми, перисто-кучевыми и так далее. Жанры музыки включают рок, рэп, классику, альтернативу, метал. Пудель, овчарка, спаниель и эрдельтерьер — породы собак. Подобные данные больше не нужно выражать в числах: CatBoost воспринимает их в исходном виде. Обученные с его помощью модели позволяют использовать всё многообразие доступных данных, не тратя время на их перевод в числовую форму.

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

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

С разнородными данными, в том числе и выраженными в нечисловой форме, сталкиваются во всех отраслях, от финансов до сельского хозяйства. Поэтому мы решили выложить библиотеку машинного обучения CatBoost в открытый доступ. Она доступна на языках программирования Python и R. Версии библиотеки для Windows, macOS и Linux и программу визуализации CatBoost Viewer — она позволяет следить за процессом обучения на графиках — можно скачать в репозитории на GitHub. Выкладывая CatBoost в открытый доступ, мы надеемся, что сообщество оценит алгоритм по достоинству и поможет нам сделать его ещё лучше.

Метод машинного обучения CatBoost уже нашёл первое применение за пределами Яндекса — в Европейском центре ядерных исследований (ЦЕРН). CatBoost используется для обработки данных эксперимента LHCb, который проходит на одноименном детекторе Большого адронного коллайдера. Задача эксперимента — исследование асимметрии материи и антиматерии во взаимодействиях тяжёлых прелестных кварков. Детектор LHCb включает несколько субдетекторов — каждый из них реагирует на разные свойства частиц. CatBoost помогает объединить данные с разных детекторов, чтобы учёные могли получить максимально полное представление о частицах. Результаты CatBoost оказались существенно лучше результатов, получаемых с использованием других алгоритмов.