Введение

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

Что, если бы вы искали конкретную, редкую вещь? Что, если вы хотите найти золотой самородок в куче речной грязи или иголку в стоге сена?

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

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

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

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

Измерение дисбаланса

Итак, насколько неуравновешенный «неуравновешенный»? Хотя многое зависит от самого набора данных, как правило, любая разница между двумя классами, превышающая 1:10, может считаться несбалансированной.

Но разница в количестве примеров не является решающим фактором. Это то, насколько хорошо ваша модель может справиться с этим. И вот где дисбаланс может вас сбить с толку:

Точность — очень распространенный показатель для моделей машинного обучения. Это простое число, которое говорит нам, какую часть своих прогнозов модель получила «правильно» — и это похоже на то, что вы хотите. Но для несбалансированных данных это может быть очень обманчивым. Если вы хотите построить «детектор старинных автомобилей», и только 1 из 1000 автомобилей является старинной моделью, то вы можете просто выводить модель по умолчанию «современный автомобиль» без какого-либо обучения, и это будет точно на 99,9%, но бесполезно. . Мало того, что вы упустите все старинные автомобили, модель может привести к безвозвратной потере старинных автомобилей, потому что их количество ограничено.

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

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

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

Самый простой способ показать, насколько модель запуталась в своих результатах, называется «матрицей путаницы». Для двоичного случая/да-нет это простая сетка 2x2, сравнивающая реальные истинные (назовем это 1) и ложные (назовем это 0) значения с истинными и ложными значениями, заданными моделью. Это приводит к четырем возможностям:

  1. Истинное значение равно 1, модель говорит, что это 1.
  2. Истинное значение равно 0, модель говорит, что это 0.
  3. Истинное значение равно 1, модель говорит, что это 0.
  4. Истинное значение равно 0, модель говорит, что это 1.

Технические термины для этих случаев: истинно положительный (TP), истинно отрицательный (TN), ложноположительный (FP) и ложноотрицательный (FN). В сетке 2x2 есть по одному полю для каждого из них:

Теперь мы можем различать критические для бизнеса случаи пропуска события или его ложного прогнозирования.

Мы можем использовать эти значения и их отношения для создания новых показателей, которые дают более подробную информацию о производительности модели, особенно когда количество случаев в наборе данных не равно. Две самые важные метрики в этом плане называются Отзыв и Точность. Отзыв также называется процентом истинных положительных результатов или просто коэффициентом совпадений, поскольку он представляет собой долю положительных целевых значений, которые были правильно идентифицированы. Точность — это мера правильно определенных положительных значений во всех предложенных положительных значениях. Точность часто также называют положительной прогностической ценностью, поскольку она является показателем надежности модели. Хотя они могут показаться очень похожими, они описывают очень разное поведение модели. Представьте наш предыдущий пример, винтажный классификатор, в обратном порядке: если бы он классифицировал все автомобили как винтажные, у него был бы идеальный отзыв, но его точность была бы ужасной. И чем больше точек данных вы добавите, тем хуже!

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

В первом случае мы бы настроили модель с приоритетом на отзыв, во втором — на точность. Для примеров, которые мы рассмотрим ниже, мы сравним точность и полноту с точностью.

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

Уравновешивающие действия

Я взял набор данных из Kaggle, Данные Даниэля Перико о землетрясениях, и добавил столбец с логическим значением, указывающим, является ли событие землетрясением или нет (он заменил столбец тип, который имеет различные другие возможности, такие как взрывы в карьере). или звуковые удары). Около 3% набора данных не связаны с землетрясениями. Если бы это была прогностическая модель, мы могли бы представить, что нам пришлось бы выбирать между такими вариантами, как дорогостоящая эвакуация в случае ложной тревоги и травмами или гибелью людей в случае пропущенных событий.

Я удалил все столбцы, в которых был компонент времени или уникальный идентификатор события, масштабировал непрерывные данные и преобразовал категориальные столбцы в функции с горячим кодированием. Все эксперименты, за исключением указанных, проводились с использованием алгоритма Random Forest по умолчанию, поскольку он популярен, прост в использовании и имеет «встроенную» перекрестную проверку благодаря функции начальной загрузки.

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

Блокноты jupyter с обсуждаемыми здесь примерами (и многими другими) можно найти на github.

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

Следующая наименее разрушительная мера — попытаться спасти недостающие данные, обучив модель на полном наборе данных «угадывать» недостающие значения, чтобы заполнить их. Этот вариант называется импутация. (Это, конечно, не ограничивается несбалансированными данными. Однако я считаю важным включить его в качестве возможной точки сравнения того, какое влияние «больше данных» окажет на результаты.)

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

Противоположностью недостаточной выборке является избыточная выборка. В простейшей форме передискретизации доступные точки данных класса меньшинства умножаются методом копирования и вставки, чтобы сбалансировать соотношение классов. В более сложных методах алгоритм определяет конкретные характеристики класса меньшинства для создания новых, похожих, но не равных точек данных для поддержки класса меньшинства. Примеры таких типов алгоритмов включают SMOTE или AdaSYN. Сфера синтетических данных все время развивается, поэтому стоит следить за последними находками и экспериментами — сейчас в рамках пакета smote-variants идет конкурс на лучший оверсемплер!

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

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

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

В таблице ниже показаны результаты некоторых тестов, проведенных с упрощенными данными о землетрясениях:

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

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

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

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

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

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

Библиотека неуравновешенного обучения содержит несколько стандартных алгоритмов, которые были улучшены за счет встроенных мер балансировки.

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

Получение это прямо

Самый важный аспект любого метода устранения вашего дисбаланса такой же, как и во всех деловых предложениях — как мы измеряемуспех?

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

Алгоритмы со встроенными методами обработки несбалансированных обучающих данных, конечно же, очень упрощают эту задачу. Здесь вы можете просто сохранить набор проверки, как обычно.

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

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

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

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

Мы не обсуждали здесь временные ряды, но это особенно верно для них. Даже если вы обучаете простой классификатор, убедитесь, что вы проверяете свою модель на более свежих данных, чем данные обучения. Это гарантирует, что ваша модель будет проверена на данных, наиболее близких к реальным данным, с которыми она в конечном итоге будет работать. Одной из причин, почему это важно, является дрейф концепций — изменение базовых шаблонов в ваших данных, которые ваша модель не распознает, поскольку она обучается только на данных, которые не содержат новых шаблонов. Чтобы узнать больше об этом, прочитайте этот пост в блоге моего коллеги Patrick Robotham:

Почему ваши модели могут не работать после COVID-19

Поддержание уровня

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

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

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

Сделайте акцент на воспоминании.

Будет ли неверная идентификация ваших субъектов более вредной, чем отсутствие нескольких целей?

Сосредоточьтесь на точности.

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

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

Если у вас есть дополнительные вопросы или вы хотите обсудить конкретную бизнес-задачу, свяжитесь с нами в Элииза.

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

Дальнейшее чтение:

Обзор алгоритмов классификации несбалансированных наборов данных, В. Ганганвар, 2012 г.

Перевыборка для несбалансированного обучения на основе K-средних и SMOTE, F. Last et. др. 2017

Обучение на несбалансированных данных, Х. Хе и Э. А. Гарсия, 2009 г.

Data Science and Business — Precision and Recall (гипотетический пример), Eliiza AI, Medium

Матрица путаницы, Википедия

F1-счет, Википедия

несбалансированное обучение, читайте документы

Примеры несбалансированных данных, Элииза на Github