В моем первом курсе машинного обучения в качестве старшекурсника я построил систему рекомендаций. Используя набор данных с веб-сайта социальной музыки, я создал модель, чтобы предсказать, понравится ли конкретный пользователь определенного исполнителя. Я был взволнован, когда первоначальные эксперименты показали, что для 99% точек в моем наборе данных я дал правильную оценку - я ошибался только в 1% случаев!
Когда я с гордостью поделился результатами со своим профессором, он сказал, что я не был вундеркиндом в области машинного обучения. Я совершил ошибку, которая называется ошибкой базовой ставки. Набор данных, который я использовал, показал высокую степень дисбаланса классов. Другими словами, в 99% пар между пользователем и исполнителем пользователю не нравился исполнитель. В этом есть смысл: в мире очень много музыкантов, и маловероятно, чтобы хоть один человек слышал хотя бы о половине из них (не говоря уже о том, чтобы они действительно получали удовольствие).
Когда мы не готовы к этому, классовый дисбаланс создает проблемы, производя вводящие в заблуждение показатели. Моя младшая версия столкнулась лицом к лицу с этой проблемой: одна точность почти ничего нам не говорит. Тривиальная модель, которая предсказывает, что ни один пользователь, как любой художник, не может достичь 99% точности, но она совершенно бесполезна. Использование точности в качестве метрики предполагает, что все ошибки одинаково дороги; Часто это не так.
Рассмотрим медицинский пример. Если мы неправильно классифицируем опухоль как злокачественную и запрашиваем дальнейшее обследование, цена этой ошибки - это беспокойство для пациента и время для медицинских работников. Напротив, если мы неправильно заявляем, что опухоль доброкачественная, хотя на самом деле она злокачественная, пациент может умереть.
[Статья по теме: Стратегии устранения классового дисбаланса]
Изучите распределение классов
Помимо точности, существует ряд показателей, о которых следует подумать при решении несбалансированной проблемы. Знание распределения классов - первая линия защиты. Как показывает опыт, Прати, Батиста и Сильва обнаруживают, что дисбаланс классов не оказывает значительного ущерба производительности в тех случаях, когда класс меньшинства составляет 10% или более набора данных. Если вы обнаружите, что ваш набор данных несбалансирован больше, чем это, обратите особое внимание.
Я рекомендую начать с невероятно простой модели: выберите наиболее частый класс. scikit-learn реализует это в DummyClassifier. Если бы я сделал это с моим проектом музыкальных рекомендаций, я бы быстро заметил, что моя модная модель на самом деле ничему не училась.
Оценить стоимость
В идеальном мире мы могли бы рассчитать точную стоимость ложноотрицательного и ложноположительного. При оценке наших моделей мы могли умножить эти затраты на ложноотрицательные и ложноположительные значения, чтобы получить число, которое описывает стоимость нашей модели. К сожалению, эти затраты часто неизвестны в реальном мире, и увеличение количества ложных срабатываний обычно вредит истинным положительным результатам.
Чтобы визуализировать этот компромисс, мы можем использовать кривую ROC. Большинство классификаторов могут выводить вероятность принадлежности к определенному классу. Если мы выберем порог (например, 50%), мы можем объявить, что все точки с вероятностью выше порога являются членами положительного класса. Изменение порогового значения от низкого до высокого процента приводит к различным способам классификации точек, которые имеют разные уровни истинно положительных и ложных положительных результатов. Нанося ложноположительный результат на ось абсцисс, а истинный положительный результат - на ось ординат, мы получаем кривую ROC.
В качестве примера я обучил классификатор на наборе данных yeast3 от KEEL и создал кривую ROC:
Хотя мы, безусловно, могли бы написать код для рисования кривой ROC, библиотека желтого кирпича имеет встроенную возможность (и она совместима с моделями scikit-learn). Эти кривые могут подсказать, где установить порог для нашей модели. Кроме того, мы можем использовать область под ними для сравнения нескольких моделей (хотя бывают случаи, когда это не лучший показатель).
В следующий раз, когда вы будете работать над проблемой машинного обучения, подумайте о распределении целевой переменной. Первым огромным шагом к решению классового дисбаланса является признание проблемы. Используя более точные метрики и визуализацию, мы можем гораздо яснее говорить о несбалансированных проблемах.
[Статья по теме: Смотрите: Введение в машинное обучение с помощью Scikit-Learn]
Подробнее о классовом дисбалансе
В своем предстоящем выступлении на ODSC West я подробнее остановлюсь на причинах классового дисбаланса. Я также рассмотрю различные способы решения этой ошибки. Надеюсь увидеть вас в октябре!
Размещено в блоге Indeed Engineering
Прочтите больше статей по науке о данных на OpenDataScience.com, включая учебные пособия и руководства от новичка до продвинутого уровня! Подпишитесь на нашу еженедельную рассылку здесь и получайте последние новости каждый четверг.