Взвешенное максимальное правдоподобие по сравнению с передискретизацией

Вступление

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

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

Дополнительная мотивация для этой заметки заключается в том, что заглянуть внутрь общих библиотек ML может быть сложно. Учитывая, что многие методы являются оболочками библиотек C, отслеживание точной реализации может быть утомительным. Одна из надежд этого упражнения - показать, как использование sample_weights в библиотеке sklearn сравнивается с использованием созданной мной процедуры стратифицированной выборки.

Весь код и гиперссылка на данные доступны на моем гитхабе.

Чтобы обосновать проблему, давайте просто сравним нашу стандартную вероятность, когда наши данные распределены по Бернулли, с выборочной взвешенной вероятностью. «Стандартное правдоподобие» для случайной величины с распределением Бернулли выглядит следующим образом:

Взвешенное максимальное правдоподобие

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

Вероятность просто предварительно умножает каждый член на весовой коэффициент, что дает нам «взвешенную вероятность»:

Стратифицированная случайная выборка

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

  1. Выберите класс данных с некоторым весом выборки
  2. Внутри выбранного класса провести наблюдения с равной вероятностью с заменой

Поскольку я оцениваю использование MLE в обоих подходах, эти методы похожи по вычислительной сложности. Однако второй метод безразличен к модели, которую вы оцениваете. Эту же процедуру можно использовать для SVM, нейронных сетей и более сложных моделей. Кроме того, он является гибким и позволяет изменять дополнительные этапы выборки или правила принятия решений для включения в выборку. Моя следующая заметка будет посвящена расширению этой стратифицированной процедуры, которая пытается создать совпадающие выборки на основе «близости» наблюдений по классам.

Еще стоит отметить особенность sklearn, в библиотеке есть метод StratifiedKFold в библиотеке model_selection. Однако этот метод создает складки, которые сохраняют баланс между классами. Например, если класс 0 имеет 10 наблюдений, а класс 1 - 90 наблюдений, при разделении будет сохраняться пропорция от 0 к 1, т.е. всегда будет 1 наблюдение из класса 0 до 9 наблюдений из класса 1.

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

  1. Взвешенное максимальное правдоподобие: функция максимума «взвешенного правдоподобия»
  2. Стратифицированная случайная выборка: расслоите случайную выборку, а затем максимизируйте функцию «стандартного правдоподобия»

Анализ данных

Мы читаем наши данные и отделяем друг от друга зависимые и независимые переменные. Здесь независимая переменная определяется как «Класс». На графике ниже мы видим, что только 492 транзакции являются мошенническими из 284 807 транзакций.

Все это я делаю на питоне. В то время как sklearn имеет класс K-Fold, который производит K-разбиение данных, моя конкретная задача требует следующей процедуры выборки:

  1. Разбиваем данные на K складок, которые мы индексируем k
  2. В обучающем наборе в кратной k запустите нашу процедуру стратифицированной выборки.

Для этого я расширяю класс KFold, создав класс oversample_KFold. Этот новый класс требует выборки веса для выборки из каждого класса.

Мы создаем конвейер модели, который состоит из следующих этапов:

  1. Разделите категориальные и числовые переменные
  2. Стандартизация (или одно горячее кодирование) переменных
  3. Объедините столбцы вместе
  4. Создайте полный конвейер с преобразованием данных и моделью логистической регрессии

Оценка модели

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

Выбор модели

У нас есть три разных показателя производительности: точность, отзыв и точность. Синие линии на каждом графике - это значения показателей для стандартного MLE без весов выборки. По оси абсцисс отложены веса выборки для редких событий. По мере увеличения веса выборки вы придаете больший вес вариантам редких событий. Обратите внимание, что я использую модели между 0,05 и 0,95, поэтому процедура стратифицированной выборки начинается выше линии MLE. Кроме того, я использовал методы повторной выборки только один раз, поэтому в этих оценках есть некоторый шум. Однако, учитывая монотонность линий на диаграммах стратифицированной выборки, ошибка выборки должна быть незначительной.

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

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

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

Резюме

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

Первоначально опубликовано на http://github.com.