Программа сокращения реадмиссии

Три основные цели Закона о доступном медицинском обслуживании - это расширение доступа к медицинскому страхованию, защита пациентов от страховых компаний и сокращение расходов на здравоохранение. Таким образом, закон направлен на улучшение качества системы здравоохранения в США. Больницы, как неотъемлемая часть этой системы, играют большую роль в достижении этих целей. Один из способов, которым больницы могут улучшить качество и снизить затраты, - это снижение количества повторных госпитализаций. В соответствии с Законом о доступном медицинском обслуживании Центры услуг Medicare и Medicaid разработали программу сокращения повторной госпитализации, которая увязывает оплату с качеством медицинской помощи, предоставляемой больницами, и показателями их повторной госпитализации. Компенсация больнице стационарной системы ожидаемых платежей (IPPS) зависит от количества повторных госпитализаций. Больницы с высокими показателями реадмиссии подлежат финансовым штрафам в виде уменьшенных платежей.

Заболевание, с которым пациенты снова поступают в больницу, - это диабет, занимающий седьмое место среди самых смертоносных заболеваний в США, от которого страдают почти 9,4 процента населения. В этом проекте мы разработаем модель, чтобы предсказать, будет ли пациент с диабетом повторно госпитализирован в течение 30 дней. Это позволит поставщикам медицинских услуг принять меры для предотвращения повторной госпитализации пациента.

Чтобы увидеть наш код, нажмите здесь.

Данные

Данные предоставлены Центром клинических и трансляционных исследований Университета Содружества Вирджинии. Набор данных состоит из 101 766 случаев клинической помощи пациентам с диабетом в 130 больницах США и в интегрированных сетях оказания медицинской помощи, собранных в период с 1999 по 2008 год. Он включает более 50 различных информационных элементов о каждом обращении и пациенте.

Программное обеспечение / Пакеты

Для этого проекта мы использовали Jupyter Notebook версии 4.4.0 и python 3.7. Библиотека scikit-learn использовалась для предварительной обработки, а также для всех моделей машинного обучения, кроме XGBoost.

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

Исследовательский анализ данных

Мы начали с проверки типа предоставленных данных и обнаружили, что существует 13 числовых характеристик и 36 категориальных характеристик, исключая целевую переменную (статус реадмиссии). 28 из 36 категориальных признаков были порядковыми, а остальные 8 - номинальными.

Функция Статус реадмиссии имеет 3 категории, но наша цель - предсказать реадмиссию в течение 30 дней, поэтому эта функция была преобразована в двоичную переменную, где 1 представляет повторный прием в течение 30 дней, а 0 - не повторный прием или повторный прием через 30 дней. дней. В результате у нас осталось 89% (90 409) пациентов как 0 и около 11% (11 357) как 1.

Распределение некоторых числовых характеристик показано ниже.

Отсутствие и вменение

У семи функций отсутствовали значения, представленные знаком «?», Которые были преобразованы в «NaN».

Переменная weight была удалена из-за слишком большого количества пропущенных значений. Пропущенные значения для расы были заполнены словом "другое", а отсутствующие значения для диагнозов 1, 2 и 3 были преобразованы в 0, что соответствует отсутствию диагнозов. Для медицинской специальности отсутствующие значения были перенесены в новую категорию «Нет». Отсутствующие значения для кода плательщика были преобразованы в "другое".

Функциональная инженерия

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

Поскольку для идентификатора источника допуска и идентификатора выписки было много идентификаторов, многие из которых имели лишь несколько наблюдений, мы сохранили 9 идентификаторов с наибольшим количеством наблюдений, в то время как все остальные были объединены в категорию под названием «прочие». Это уменьшило количество категорий до 10, что упростило кодирование меток и обработку моделей.

Код плательщика был преобразован в 3 отдельных столбца: self_pay, Medicaid / Medicare и CoatedByIns, все они содержат двоичные значения. Наблюдения с «другим» были представлены 0 во всех трех столбцах.

Поскольку у нас было 714 различных типов диагнозов, мы сопоставили разные идентификаторы с соответствующими кодами ICD9. Затем мы сгруппировали все похожие коды вместе, чтобы уменьшить общее количество кодов до 18 различных типов. Мы также переименовали diag_1, diag_2, ad diag_3 в f_diag, s_diag и t_diag. Это снова уменьшило количество различных категорий для каждой функции, что упростило обработку моделей.

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

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

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

Подготовка данных

Когда данные были готовы, мы оставили 15% наблюдений в качестве временного набора для проверки наших окончательных моделей. Данные перетасовывались и разделялись, сохраняя неизменным соотношение целевой переменной. Оставшиеся 85% данных были разделены на обучающий набор (70%) и тестовый набор (30%), снова сохраняя соотношение целевой переменной таким же, как и весь набор.

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

Для логистической регрессии и SVM категориальные переменные были одним горячим кодированием для данных. Эта фиктивная характеристика объекта создает столбцы для каждой категории объекта, содержащие двоичные значения. Это важно, потому что эти две модели не могут обрабатывать закодированные метками функции, поскольку они обрабатывают их как числовые, а не порядковые. Числовые функции для этих моделей также были стандартизированы с помощью StandardScaler из scikit-learn для устранения выбросов и искаженных распределений. StandardScaler соответствовал обучающим данным, а затем использовался для преобразования обучающих, тестовых и контрольных наборов.

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

Моделирование

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

Поскольку наш набор данных был несбалансированным, а отрицательный класс (0) преобладал в 89% наблюдений, было важно, чтобы мы рассмотрели эту проблему перед запуском моделей. При таком несбалансированном наборе данных модели склонны предсказывать каждое наблюдение как доминирующий класс. Модели могут предсказывать с точностью 89%, но без единого истинного положительного результата, что делает модели бесполезными.

Эту проблему можно решить несколькими способами. Класс меньшинства может быть «передискретизирован» путем дублирования положительных наблюдений до тех пор, пока количество наблюдений для обоих классов не станет равным. Мы также можем «занижать выборку», взяв только случайную выборку наблюдений класса большинства, равную таковой для класса меньшинства, так что у нас есть сбалансированный набор данных. Модели Scikit-learn также имеют встроенный механизм для балансировки набора данных, и это вариант, который мы выбрали для наших моделей. Один из таких примеров показан ниже.

Чтобы настроить гиперпараметры для наших моделей, мы запустили RandomizedSearchCV, метод перекрестной проверки в scikit-learn. Поскольку RandomizedSearchCV значительно быстрее, чем GridSearchCV, и дает аналогичные результаты, мы использовали его в качестве основного метода перекрестной проверки для некоторых моделей. Однако для некоторых моделей мы использовали его в качестве первого шага для получения оценки гиперпараметров перед запуском GridSearchCV с более узким диапазоном. Пример кода для одной из моделей показан ниже.

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

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

Результаты

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

Наконец, мы протестировали модели на удерживающем наборе, чтобы увидеть, насколько хорошо они работают.

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

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

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

Важность функции - XGBoost

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

Идентификатор разряда также был важной характеристикой для всех моделей. После детального рассмотрения различных идентификаторов разряда, в частности, выделился один. Для идентификатора № 22, который относился к пациенту, переведенному в реабилитационное учреждение, 27% пациентов были повторно госпитализированы, по сравнению с 10% пациентов выборки. Этот идентификатор появлялся только в 1% случаев у пациентов, которые не были повторно приняты, но подскочил до 5% для тех, кто был повторно принят.

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

Образец приложения для больницы

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

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

Будущая работа

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