Абстрактный

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

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

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

Эта работа не уникальна. Набор данных доступен публично, существует уже некоторое время и часто используется для обучения машинному обучению. Вы можете найти похожие статьи и работы в Medium на Kaggle.

Вступление

Этот проект фокусируется на повторной госпитализации диабетиков и анализирует набор данных под названием Диабет в 130 больницах США за годы 1999–2008, доступный из Калифорнийского университета в Ирвине.

Набор данных представляет 10 лет (1999–2008 гг.) Клинической помощи в 130 больницах США и в интегрированных сетях оказания медицинской помощи. Он включает более 50 функций, представляющих результаты для пациентов и больниц. Информация была извлечена из базы данных для встреч, которые удовлетворяли следующим критериям.

  • Это стационарный прием (госпитализация).
  • Это встреча с диабетом, то есть такая, во время которой любой вид диабета был введен в систему в качестве диагноза.
  • Продолжительность пребывания составляла от 1 до 14 дней.
  • Во время встречи были проведены лабораторные исследования.
  • Во время встречи вводили лекарства.

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

Ниже вставлены первые 20 строк данных:

Данные были представлены от имени Центра клинических и трансляционных исследований Университета Содружества Вирджинии, получателя гранта NIH CTSA UL1 TR00058 и получателя данных CERNER. Джон Клор ([email protected]), Кшиштоф Дж. Чиос ([email protected]), Джон ДеШазо ([email protected]) и Беата Страк ([email protected]). Эти данные представляют собой обезличенный отрывок из базы данных Health Facts (Cerner Corporation, Канзас-Сити, Миссури).

Корпорация Cerner создает систему электронных медицинских карт, которая используется во многих больницах и поликлиниках. Данные были извлечены и собраны из систем Cerner EHR многих больниц. Первоначальная работа была проделана доктором Клором для облегчения исследования и финансировалась NIH. Целью д-ра Клора было, в частности, влияние результатов HbA1c на повторную госпитализацию (Strack, 2014). Документ Стрэка также использовался в качестве справочного материала для лучшего понимания данных, различных диагностических кодов и облегчения предварительной обработки, необходимой для хорошей реализации модели.

Этот анализ преследует несколько целей:

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

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

Предварительная обработка данных выполнялась в несколько этапов.

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

  • Вес включал очень мало значений.
  • medical_specialty было сложно расшифровать без дополнительной информации.
  • То же самое для payer_code, который тоже вряд ли повлияет на мои модели
  • Encounter_id - уникальное значение для этого набора.
  • , и пациент_nbr (код пациента) не требовался.

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

Затем я протестировал новый модуль под названием pandas_profiling, который оказался очень эффективным способом быстрого просмотра большого количества данных. Инструмент создает виджет, который дает отличный обзор данных. Результат первого прохода этого инструмента профилирования можно увидеть здесь profile1.html.

Используя результаты профилирования, я завершил предварительную обработку данных.

Категориальные данные (дискретные переменные)

Пол

Пол, мужской или женский, - это классические категориальные данные. Я нормализовал эту функцию, создав одну двоичную функцию «isFemale». Я также удалил одного пациента неизвестного пола. Затем мы можем отказаться от функции пол.

Гонка

В случае расы я просто создал категориальные бинарные функции («манекены») для каждой расы.

Диагностический

Эти данные потребовали немного больше работы. Существует три независимых диагностических параметра (diag_1, diag_2 и diag_3), каждая из которых может иметь более 700 различных значений. Для этого я разделил диагностику на несколько релевантных категорий.

Для числовых кодов icd9 я следовал информации из статьи (Strack, 2014) с данными:

«Для конкретных кодов icd9 используются следующие сокращения:« циркуляторный »для icd9: 390–459, 785,« пищеварительный »для icd9: 520–579, 787,« мочеполовой »для icd9: 580–629, 788,« диабет » для icd9: 250.xx, «травма» для icd9: 800–999, «скелетно-мышечная» для icd9: 710–739, «новообразования» для icd9: 140–239, «респираторная» для icd9: 460–519, 786, и «прочее» в противном случае.

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

  • диабет_диагностика
  • other_diagnosis
  • и т.п.

Наркотики

Колонки о наркотиках, многочисленные и за которыми трудно следить, также усложнили эту задачу. Для начала я удалил все лекарства, которые редко присутствовали, например экзамен, цитоглиптон и метформин-розиглитазон. Затем, для наиболее распространенных препаратов, я создал двоичную переменную, в которой НЕТ - ЛОЖЬ, а «Вниз», «Устойчиво» или «Вверх» означает, что наркотик «присутствовал», то есть ИСТИНА.

Тесты A1C и GluSerum

Согласно статье (Strack, 2014), «A1C» из «› 7 »или« ›8» будет считаться ненормальным. То же самое для «› 200 »или« ›300» для тестов GluSerum. Я решил объединить эти два, чтобы уменьшить количество категориальных переменных. Я заменил закодированные результаты на «Abnorm» и создал из них двоичные макеты. Я отбросил результирующий двоичный файл * _None, оставив A1Cresult_Norm, A1Cresult_Abnorm и glu_serum_Norm, glu_serum_Abnorm. Я чувствовал, что это упростит моделирование.

Изменения и диабет

Эти две функции просто необходимо преобразовать:

  • для Change - с Ch на True и No на False.
  • для «диабетМед»: от «Да» до «Верно» и от «Нет» до «Ложь»

Несопоставленные данные

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

  • admission_type_id
  • разгрузка_disposition_id
  • admission_source_id

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

Реадмиссия (наша цель или результат)

Результатом или особенностью, которую мы хотим предсказать, является реадмиссия. Текущий набор данных включает переменную "readmitted", у которой есть несколько возможных значений:

  • это может быть NOИбо никогда не принимается повторно
  • >30 при повторном приеме через 30 дней
  • или <30если повторно допущены до 30 дней.

Я создал единственную фиктивную двоичную переменную, «повторно принятую», которая TRUE для пациентов, которые были повторно приняты в течение 30 дней, результат, который мы хотим предсказать.

Итак, мы хотим смоделировать дискретный результат.

Количественные данные (непрерывные переменные)

Возраст

Возраст был представлен в диапазонах. Я преобразовал эти диапазоны обратно в числовое значение, используя декаду:

  • 10–20 == 10
  • 20–30 == 20
  • и т.п.

Остальные числовые переменные не требовали специальной обработки.

Окончательное профилирование

Я повторно запустил инструмент профилирования после всех изменений в моем импортированном наборе данных, чтобы проверить результаты и проверить работу. Результаты этого второго профилирования можно увидеть здесь profile2.html.

Визуализация данных

Первая и наиболее очевидная визуализация заключалась в том, чтобы быстро взглянуть на мои числовые значения, увидеть диапазоны и спреды:

Затем я построил график своей переменной результата, чтобы увидеть, был ли результат сбалансированным или нет.

Результат не совсем сбалансирован: очень высокий процент случаев не требует повторной госпитализации в течение 30 дней. Моя последняя диаграмма была более близка к переменной «time_in_hospital», поскольку она относилась к повторным допускам. Я построил значение time_in_hospital, используя Seaborn KDEPlot. График оценки плотности ядра (KDE) - это метод визуализации распределения наблюдений в наборе данных, аналогичный гистограмме. KDE представляет данные с помощью непрерывной кривой плотности вероятности в одном или нескольких измерениях.

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

Кластеризация данных

Мы использовали алгоритм кластеризации K-среднего, чтобы оценить размер кластера с нашими данными. План состоял в том, чтобы изучить полученные кластеры с иерархической кластеризацией. Результаты K-среднего явно указывают на отсутствие улучшений после 4 кластеров, поэтому это стало нашей целью для подходов к кластеризации.

Итак, используя модель k-4Kmeans, я изучил и построил центроиды:

Обучение модели и прогнозирование

Наш результат дискретный (повторно принимается ДА или НЕТ), поэтому я буду сравнивать три разных типа моделей, но всего четыре модели:

  • Логистическая регрессия (логит)
  • Я переделал модель логистической регрессии после удаления некоторых переменных. Я уменьшал на основе полученных p-значений и постоянно удалял более высокие значения, пока все мои переменные не стали ниже 0,05. (newlogit)
  • Деревья классификации (fullClassTree)
  • Наконец, искусственная нейронная сеть с использованием ИНС Keras (annmodel).

Выбор модели

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

Для начала мы могли бы дисконтировать модели, в первую очередь ориентированные на непрерывный результат (числовые или количественные прогнозы). Мы проигнорировали:

  • Множественная линейная регрессия
  • Деревья регрессии

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

Логистическая регрессия

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

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

Деревья классификации

Деревья классификации - это классификационная альтернатива деревьям регрессии. Они основаны на «деревьях решений».

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

Глубокое обучение

Глубокое обучение часто используется для непрерывного вывода, но его также можно легко адаптировать к задачам классификации. Мы выбрали модель Keras-ANN, во многом основываясь на прошлом опыте.

  • Сильные стороны: глубокое обучение очень хорошо работает при классификации аудио, текстовых и графических данных. В нашем случае это не так. Наш набор данных был проще.
  • Слабые стороны. Как и в случае с регрессией, глубокие нейронные сети требуют для обучения очень больших объемов данных, поэтому они не рассматриваются как универсальный алгоритм.

Модель производительность

После построения и запуска моих моделей я использовал матрицу неточностей и точность для сравнения результатов.

Точность

Матрица неточностей и точность логистической регрессии:

Confusion Matrix (Accuracy 0.8844)
Prediction
Actual 0 1
0 34627 75
1 4457 62
 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Confusion Matrix and accuracy for LogReg reduced:
Confusion Matrix (Accuracy 0.8846)
Prediction
Actual 0 1
0 34631 71
1 4457 62
 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Confusion Matrix and accuracy for LogReg reduced:
Confusion Matrix (Accuracy 0.8226)
Prediction
Actual 0 1
0 31789 2913
1 4045 474
 — — — — — — — — — — — — — — — — — — — — — — — — — — — — — -
Acccuracy for ANN model:
Out[43]:
0.8914356827735901

График прироста

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

ROC и AUC

Заключение

Можно сделать несколько выводов:

  • Самой низкоэффективной моделью было дерево классификации. Мне жаль, что у меня не было больше времени, чтобы еще раз рассмотреть, почему, поскольку это было не то, что я ожидал. Но очень быстро мои модели логистической регрессии и мои модели Keras-ANN превзошли классификационное дерево, поэтому я тратил на это меньше времени.
  • Удаление всех переменных позволило сохранить согласованность результатов (если не немного улучшить), учитывая выгоду в отношении необходимых вычислительных ресурсов, использование уменьшенных было бы выгодно. Я ожидал, что результат улучшится за счет удаления функций с высоким значением p, но, в конце концов, получение той же модели высокой точности с меньшим количеством функций имеет ценность.
  • Модель Keras-ANN была более требовательной к вычислениям, но дала наивысшую точность. Интересно, что AUC был ниже, чем с деревом классификации с низкими эпохами (

Работа, проделанная Strack, для которой был создан набор данных, пришла к выводу, что получение результатов HbA1c для пациента может считаться полезным предиктором повторной госпитализации. Это, по-видимому, подтверждается данным экспериментом, поскольку функция A1C_Abnorm осталась в регрессии с P-значением ниже 0,05. Они также использовали модель логистической регрессии и использовали контрольную точку P-значения для выбора соответствующих функций. В отличие от этого проекта, они использовали попарные сравнения с A1Cresults и без них, чтобы сосредоточить свое исследование на влиянии на эту функцию.

«Во-первых, мы приспособили логистическую модель со всеми переменными, кроме HbA1c. Мы называем эту модель базовой. Во-вторых, мы добавили HbA1c к базовой модели. В-третьих, мы добавили парные взаимодействия в основную модель (без HbA1c) и оставили только значимые. Наконец, мы добавили парные взаимодействия с HbA1c, оставив только значимые в окончательной модели ».

В конце концов, я бы выбрал логистическую регрессию (или линейную классификацию) для этой задачи. Его было очень быстро и легко настроить, он легко запускался повторно и давал стабильные результаты с лучшим AUC, чем другие подходы.

Будущие улучшения

Недавно я обнаружил Evidently AI, который создает инструменты для анализа и мониторинга моделей машинного обучения. Я хотел бы переделать часть этой работы, используя некоторые из их инструментов, и сравнить результаты.

Я надеялся, что это сделает обзор более последовательным и сделает код более чистым. Как показывает мой код, я, например, боролся с матрицей путаницы для модели ИНС.

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

использованная литература

Страк, Б., ДеШазо, Дж. П., Геннингс, К., Олмо, Дж. Л., Вентура, С., Чиос, К. Дж., И Клор, Дж. Н. (2014). Влияние измерения HbA1c на частоту повторных госпитализаций: анализ 70 000 историй болезни пациентов из базы данных клиник. BioMed Research International, 2014, 781670.

«Современные алгоритмы машинного обучения: сильные и слабые стороны». EliteDataScience, 9 июня 2020 г., elitedatascience.com/machine-learning-algorithms.

Шмуэли, Галит, Брюс, Питер К., Гедек, Питер, Патель, Нитин Р. Интеллектуальный анализ данных для бизнес-аналитики. Вайли. Разжечь издание

Https://hub.packtpub.com/selecting-statistical-based-features-in-machine-learning-application

Https://www.kaggle.com/victoralcimed/diabetes-readmission-through-logistic-regression