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

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

В этой статье предпринята попытка решить одну из наиболее важных проблем несбалансированного распределения классов с помощью проблемы, связанной с прогнозированием выживания пациента с учетом его или ее медицинской карты. Конкурс проводился на платформе Codalab под названием Быть ​​или не быть, ссылка на которую - https://competitions.codalab.org/competitions/30715.

Задача направлена ​​на разработку эффективной модели, которая прогнозирует выживание пациента на основе его / ее медицинских записей, информации о разнородных заболеваниях и медицинских затруднениях.

Справочная информация, описание данных и показатель оценки

Из постановки задачи совершенно очевидно, что число умирающих определенно составит очень минимальную долю от общего числа госпитализированных в больницу. Следовательно, это приводит к несбалансированной классификации. Несбалансированность классов возникает, когда экземпляры выходных меток для разных классов чрезвычайно непропорциональны, чтобы дать вам представление, из 1000 вхождений 19 из них относятся к классу «0», а остальные 9981 относятся к классу «1», создавая искаженное распределение. , начать с.

Набор данных для обучения содержит информацию о 80 000 пациентов, представленную категориальными, двоичными и числовыми функциями или переменными. Эти характеристики включают возраст, пол, этническую принадлежность, семейное положение, а также медицинские данные, такие как уровень артериального давления или уровень глюкозы. Всего 342 переменных. класс (или метка), который нужно предсказать, представляет собой двоичную переменную, указывающую, умер пациент (обозначается как «1») или нет (обозначается как «0» ) в больнице.

Оценка точности не является хорошим показателем несбалансированной классификации. Значит доля правильно классифицированных примеров. Несбалансированное распределение может показаться довольно вводящим в заблуждение и несправедливым. Модель, классифицирующая каждого пациента как НЕ УМЕР, имела бы точность 94%, но была бы явно непрактичной в качестве модели для прогнозирования. Желательными показателями для таких обстоятельств являются оценка F1, оценка AUC ROC (я предпочитаю) и оценка сбалансированной точности. Соревнование использовало сбалансированную точность в качестве критерия оценки и дается как среднее значение чувствительности (истинно положительный результат или отзыв) и специфичность (количество истинно отрицательных или 1 ложноположительных результатов). Чтобы получить больше информации о сбалансированной точности, посетите - https://statisticaloddsandends.wordpress.com/2020/01/23/what-is-balanced-accuracy/#:~:text=Balanced%20accuracy%20is%20a%20metric. , болезнь% 20presence% 20of% 20a% 20 .

Предварительная обработка данных:

Нам нужно проверить сходство наборов данных для обучения и тестирования. Существуют определенные значения категориальных признаков в наборе обучающих данных, которые отсутствуют в наборе данных тестирования (например, набор тестовых данных состоит из языка '* MAN' в столбце 'LANGUAGE', в то время как в тестовом аналоге такого экземпляра нет) .

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

Моделирование и результаты

Одним из очень широко используемых методов обработки искаженных классов является повторная выборка данных путем передискретизации, недостаточной выборки или их комбинации. Существует множество подходов к передискретизации, таких как SMOTE и Random Over Sampler. Эти методы имеют тенденцию улучшать и регулировать непропорциональное соотношение, существующее между классами, путем введения большего количества экземпляров классов меньшинства. В то время как в случае недостаточной выборки он просто отбрасывает вхождения класса большинства, чтобы сбалансировать классы. Однако в этом исследовании я не использую такой метод или технику. XGBoost и другие алгоритмы повышения градиента имеют уже существующий встроенный параметр, называемый scale_pos_weight. На мой взгляд, использование чего-то более консервативного, вместо того, чтобы вводить и обрабатывать механизированные несуществующие данные в этом сильно несбалансированном сценарии с большим количеством записей.

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

В нашем случае соотношение (класс - «1») меньшинства к (класс - «0») составляет около 27 (77158/2796). Следовательно, параметр scale_pos_weight принимает значение 27.

Учитывая большое количество функций и записей, доступных в нашем распоряжении, внедрение CatBoost Classifier кажется полезным вариантом. CatBoost - это алгоритм повышения с исключительными методами обработки категориальных данных. Это надежный вычислительный рецепт, обеспечивающий простую реализацию и более быстрое обучение и прогнозирование. CatBoost может улучшить производительность модели, уменьшить переобучение и уменьшить потребность в обширной настройке гиперпараметров. Хотя я ввел параметры для конвейера CatBoost, используемые значения параметров успешно работали для меня в прошлом, однако параметры по умолчанию чрезмерно дают отличные результаты. Однако параметру scale_pos_weight необходимо присвоить соответствующее значение для несбалансированной классификации. Чтобы получить больше информации о CatBoost, посетите страницу https://dataaspirant.com/catboost-algorithm/ и официальную документацию CatBoost.

Обсуждаемый выше подход дал удовлетворительную сбалансированную оценку точности 0,7254 на полностью невидимом наборе данных валидации. В конце концов, прогнозы были сделаны на основе данных тестирования, и модель классификатора CatBoost достигла приличной сбалансированной оценки точности 0,74. Моя заявка была помещена на 10-е место в публичной таблице лидеров, уступая лишь 2% лидерам.

Весь исходный код Python предоставляется в моем репозитории Github - https://github.com/poddaraayush14/Mortality_Prediction-Codalab-

Следите за новостями о машинном обучении и науке о данных

Удачного обучения !!!