Автор: Адам Г. Добраковски
Редакция: Зузанна Квятковска

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

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

Свойства эталона

На мой взгляд, есть несколько свойств, которыми должен обладать полезный бенчмарк:

  1. Его должно быть легко запустить.
  2. Он должен иметь простую структуру/архитектуру.
  3. Он должен быть интерпретируемым (т. е. мы должны знать, почему он дает те или иные результаты).
  4. Если для этого требуется обучение, оно должно быть относительно быстрым.
  5. Он должен хорошо подходить для решения нашей задачи и обеспечивать относительно хорошую производительность.

Создать такие бенчмарки проще, чем кажется. Давайте погрузимся в пару примеров!

Создание наивных моделей с помощью sklearn

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

Однако не все знают, что он также предоставляет 2 простых класса для бенчмаркинга: фиктивный регрессор и фиктивный классификатор.

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

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

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

Регрессия

Хорошее эмпирическое правило при создании эталона для задач обучения с учителем на табличных данных — использовать регрессию (либо линейную для непрерывной цели, либо логистическую для классификации).

Много раз вы могли заметить, что такой простой статистический метод может обеспечить относительно хорошую производительность. Более того, иногда трудно превзойти более сложные модели, такие как нейронные сети или XGBoost (совет: если вы столкнулись с подобной ситуацией, ознакомьтесь с Data Centric Approach).

Что помнить? Если вы хотите интерпретировать коэффициенты регрессии как коэффициенты важности признаков, вам необходимо сначала нормализовать свои данные!

Использование интуитивной эвристики

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

  1. Оценка кредитного рейтинга клиента.
  2. Прогнозирование оптимальной дозы препарата, принимаемого пациентом.
  3. Рекомендация лечения на основании симптомов заболевания.
  4. Прогнозирование количества продаж для данного продукта.
  5. Рекомендация товара к покупке.
  6. Прогнозирование задержки поездов.

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

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

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

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

Использование подмножества функций

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

Сравнительный анализ проблем НЛП

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

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

  1. Анализ настроений.
  2. Текстовые резюме.
  3. Классификация видов документов.

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

  1. Мы можем создать модель, которая находит некоторые ключевые слова. Например, если мы создадим простую базу данных положительных и отрицательных прилагательных, мы сможем найти их в нашем тексте и, основываясь на встречающихся, оценить, является ли мнение положительным или отрицательным.
  2. Здесь мы можем использовать первые несколько фраз входного текста.
  3. Хорошим эталоном для таких типов задач является использование частотных методов, таких как TF-IDF. Его особенно легко использовать в Sklearn.

Но зачем мне вообще эталон?

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

По моему опыту, это не лучший подход.

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

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

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

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

Выводы

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