1. Бизнес-проблема
  2. Сопоставление с проблемой ML
  3. Понимание данных
  4. EDA и разработка функций
  5. Описание модели
  6. Полученные результаты
  7. Выводы и будущая работа
  8. Рекомендации

Введение

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

Бизнес-проблема

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

Сопоставление с проблемой ML

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

Понимание данных

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

  1. Стационарные данные. Эти данные позволяют получить представление о требованиях, поданных для тех пациентов, которые госпитализированы в больницы. Он также предоставляет дополнительные сведения, такие как даты поступления и выписки и код диагноза допуска.
  2. Амбулаторные данные. Эти данные предоставляют подробную информацию о требованиях, поданных для тех пациентов, которые посещают больницы и не госпитализируются в них.
  3. Сведения о бенефициаре Данные: эти данные содержат данные KYC получателя, такие как состояние здоровья, регион, к которому он принадлежит, и т. д.
  4. Данные обучения.Эти данные показывают, является ли поставщик мошенническим или нет.

EDA и разработка функций

EDA и FE являются одними из задач. Чтобы решить приведенную выше постановку задачи, нам дается несколько наборов данных с именами train.csv, train_beneficiary, train_inpatient и train_outpatient. Значения меток указаны в файле train.csv. Мы собираемся добавить различные функции для train.csv, используя другие наборы данных.

Используя набор данных бенефициара, мы можем получить информацию, связанную с бенефициаром, такую ​​​​как пол, дата рождения, смерть и возраст. Есть много функций, которые также можно преобразовать в двоичные файлы. Набор данных о стационарных пациентах содержит такую ​​информацию, как госпитализация, диагноз и врачи, и он связан с пациентами, которые были госпитализированы. Мы можем разработать такие функции, как количество дней пребывания пациента в больнице. Набор амбулаторных данных содержит информацию о пациентах, которые не были госпитализированы. Мы преобразуем диагностические коды в бинарные функции, а информацию о врачах — в бинарные функции. Позже мы объединим бенефициара, стационарного и амбулаторного пациентов, чтобы иметь функции для каждого поставщика в train.csv.

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

Мы выполнили несколько операций над наборами данных. Наиболее распространенные операции, когда

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

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

Устранение признаков может быть выполнено двумя способами:

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

Корреляция Пирсона

Корреляция Спирмена

Ясно одно: такие функции, как PartA, PartB conv и возраст, не сильно коррелируют с выходной переменной. Парные диаграммы помогают проверить нашу теорию.

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

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

Здесь есть некоторая степень отделимости.

2. SHAP: это одна из концепций объяснимого ИИ. SHAP — это аббревиатура от Shapley Additive exPlanations. SHAP хорошо работает с любым типом алгоритмов машинного обучения или алгоритмов глубокого обучения. SHAP предпочитает различные визуализации, чтобы продемонстрировать важность функций и вклад функций в прогнозы.

Сохраняя XGboost в качестве нашей базовой модели и не используя какую-либо технику повышения частоты дискретизации, мы построим результаты для SHAP.

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

Описание модели

Оставив XGboost в качестве базовой модели, которая была настроена на данные, мы получили высокие оценки точности и низкие оценки f1.

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

После повышения частоты дискретизации.

Пользовательский классификатор стекирования:

1. Разделите все данные на поезд и тест (80–20)

2. Разделить набор поездов на D1 и D2 (50–50).

Из этого D1 мы делаем выборку с заменой, чтобы создать d1, d2, d3….dk (k выборок). Теперь мы можем создать «k» моделей и обучить каждую из этих моделей с каждым из этих k образцов.

3. Теперь передайте набор D2 каждой из этих k моделей, мы получим k прогнозов для D2 от каждой из этих моделей.

4. Теперь, используя эти k прогнозов, создайте новый набор данных, и для D2 у нас уже есть соответствующие целевые значения, поэтому теперь обучите метамодель с этими k прогнозами.

5. Теперь для оценки модели мы можем использовать 20% данных, которые мы сохранили в качестве тестового набора. Пройдите этот тестовый набор для каждой из базовых моделей, и вы получите «k» прогнозов. Теперь мы создаем новый набор данных с этими k прогнозами и передаем его в нашу метамодель, и мы получаем окончательный прогноз. Используя этот окончательный прогноз и цели для набора тестов, мы можем рассчитать показатель производительности модели.

Полученные результаты

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

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

Выводы и будущая работа

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

Рекомендации

  1. Постановка проблемы и набор данных: https://www.kaggle.com/rohitrox/healthcare-provider-fraud-detection-analysis
  2. EDA и разработка функций: https://www.kaggle.com/rohitrox/medical-provider-fraud-detection
  3. Обучение, связанное с ML и DL: appliedaicourse.com
  4. Код: https://github.com/Subratho/Case_Study_2

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

Также свяжитесь со мной в LinkedIn