Предположим, я хочу узнать классификатор, который предсказывает, является ли электронная почта спамом. И предположим, что только 1% писем являются спамом.
Проще всего было бы изучить тривиальный классификатор, который говорит, что ни одно из писем не является спамом. Этот классификатор дал бы нам точность 99%, но он не выучил бы ничего интересного и имел бы 100% ложных негативов.
Чтобы решить эту проблему, люди сказали мне «уменьшить выборку» или изучить подмножество данных, где 50% примеров - это спам, а 50% - не спам.
Но меня беспокоит такой подход, поскольку, как только мы построим этот классификатор и начнем использовать его в реальном объеме электронных писем (в отличие от набора тестов 50/50), он может предсказать, что многие электронные письма являются спамом, когда они ' действительно нет. Просто потому, что он привык видеть гораздо больше спама, чем на самом деле в наборе данных.
Итак, как мы можем решить эту проблему?
(«Повышение частоты дискретизации» или повторение примеров положительного обучения несколько раз, так что 50% данных - это положительные примеры обучения, похоже, страдает от подобных проблем.)
источник
Реальная проблема здесь заключается в выборе метрики:% точности является плохой мерой успеха модели на несбалансированном наборе данных (по той причине, которую вы упомянули: достичь точности в 99% в этом случае тривиально).
Балансирование вашего набора данных до подгонки модели - плохое решение, так как оно смещает вашу модель и (что еще хуже) выбрасывает потенциально полезные данные.
Вам гораздо лучше сбалансировать метрику точности, чем балансировать данные. Например , вы могли бы использовать взвешенную точность при оценке вы модель:
(error for the positive class + error for the negative class)/2
. Если вы прогнозируете все положительные или все отрицательные, это будет50%
хорошая метрика .По моему мнению, единственная причина для уменьшения выборки - это когда у вас слишком много данных и вы не можете соответствовать вашей модели. Многие классификаторы (например, логистическая регрессия) отлично справляются с несбалансированными данными.
источник
Как всегда,
@Marc Claesen
как отличный ответ.Я бы просто добавил, что ключевая концепция, которая, кажется, отсутствует, это концепция функции стоимости . В любой модели у вас есть неявная или явная стоимость ложных отрицательных значений для ложных положительных результатов (FN / FP). Для описанных несбалансированных данных часто желательно иметь соотношение 5: 1 или 10: 1. Существует много способов введения функций стоимости в модели. Традиционный метод состоит в том, чтобы ограничить вероятности, создаваемые моделью, - это хорошо работает для логистической регрессии.
Метод, используемый для строгих классификаторов, которые не выводят оценки вероятности естественным образом, заключается в том, чтобы отбирать выборку из класса большинства в соотношении, которое будет вызывать интересующую вас функцию стоимости. Обратите внимание, что если вы выбираете 50/50, вы вызываете функцию произвольной стоимости. Функция стоимости отличается, но такая же произвольная, как если бы вы использовали выборку по уровню распространенности. Вы часто можете предсказать подходящий коэффициент выборки, который соответствует вашей функции стоимости (обычно это не 50/50), но большинство практикующих, с которыми я говорил, просто пробуют пару коэффициентов выборки и выбирают тот, который ближе всего к их функции стоимости.
источник
Ответ на вопрос Джессики напрямую - одна из причин понижающей дискретизации - это когда вы работаете с большим набором данных и сталкиваетесь с ограничениями памяти на вашем компьютере или просто хотите сократить время обработки. Понижение выборки (т. Е. Взятие случайной выборки без замены) из отрицательных случаев уменьшает набор данных до более приемлемого размера.
Вы упомянули использование «классификатора» в своем вопросе, но не указали, какой именно. Один классификатор, которого вы можете избежать, это деревья решений. Когда я запускаю простое дерево решений для данных редких событий, я часто нахожу, что дерево строит только один корень, поскольку ему трудно разбить так мало положительных случаев на категории. Могут быть более изощренные методы улучшения производительности деревьев для редких событий - я не знаю ни одного из них.
источник
Конечно, классифицируя все как «не спам», вы можете сказать, что, учитывая 100 писем, он правильно классифицирует 99 из них, но он также классифицирует как «не спам» единственный, помеченный как спам (100% ложное срабатывание). Оказывается, что метрика, выбранная вами для оценки алгоритма, не адаптируется. Это видео иллюстрирует концепцию.
Грубо говоря, балансировка набора данных позволяет взвешивать ошибки ошибочной классификации. Алгоритм, который использует несбалансированный обучающий набор, по-видимому, не научится отличать особенности, потому что он не придаст большого значения тому факту, что неправильно классифицирует данные скудного класса.
источник
Я не пошел бы ни на понижающую, ни на повышающую дискретизацию, поскольку оба обманывают алгоритм обучения, однако, если данные были несбалансированными, мера точности становится недействительной или неинформативной, поэтому лучше использовать меры точности и отзыва, оба зависят в основном от TP ( правильная классификация спама в вашем случае) это дает хорошее представление о реальной производительности вашей системы с точки зрения обнаружения спама независимо от количества отрицательных примеров.
источник