Краткая история

Вам когда-нибудь приходилось долго ждать в отделении неотложной помощи? Хотите знать, почему того парня со сломанным пальцем ноги вызвали раньше вас? Это сортировка. Сортировка - это процесс, с помощью которого поставщики медицинских услуг могут сортировать поступающих пациентов в зависимости от наличия ресурсов и потребностей пациентов. А теперь вернемся немного назад. Что это за сортировка? Слово сортировка происходит от французского слова «trier», означающего «сортировать». Около 1792 года этот красивый парень (внизу) был главным хирургом Имперской гвардии Наполеона.

После постоянных обстрелов раненых солдат на нескольких плохо подготовленных врачей барон Доминик Жан Ларрей (какое имя) подумал: «Привет, ребята. Думаю, есть способ получше ". Так родилась первоначальная форма сортировки, и французы «доверили [Ларри] разработку летающей машины скорой помощи».

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

Эта проблема

Хорошо… .Теперь зачем я провел вас через эту историю сортировки? Я считаю, что знание контекста системы - лучший способ начать повторять и улучшать. И что может быть лучше для решения задачи сортировки, чем компьютер? * кашель * бинарный поиск * кашель * сортировка пузырьков * кашель * сортировка слиянием * кашель *. Что, если бы мы могли использовать алгоритм для определения приоритетов пациентов для нас, а не тратить время создать рейтинг, который может даже не совпадать между поставщиками? Эээ ... хорошо, что мы специалисты по обработке данных!

Чтобы упростить эту проблему, я сосредоточусь на различии между госпитализированными пациентами (теми, кто останется на ночь и потребует много ресурсов) и временными пациентами (теми, кто уедет в течение дня и потребует меньше ресурсов). Мое оправдание этого, в отличие от детализированного подхода, представленного Ларри, двоякое:

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

Поскольку необходимо предсказать два целевых условия, это проблема классификации с двоичным результатом (1: допущено; 0: не допущено).

Данные

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

Очистка и разработка функций

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

  1. Удалены функции, которые не учитывались при этом анализе.
  2. Вмененные медианные значения для нулей
  3. Сгруппировал дискретные, неоднородные функции в более широкие категории.
  4. Созданы фиктивные переменные для категориальных функций
  5. Построил прогнозируемый объект (y) из исходного объекта в наборе данных под названием «расположение». Это указывает на то, куда пошел пациент после оценки. Я классифицировал такие вещи, как «поступление в палату» как «принятые», в то время как такие вещи, как «выписка», не допускались.

Чистый фрейм данных (с макетами) выглядел так:

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

Цель (допущенная или не допущенная) была несбалансированной (мы разберемся с этой загвоздкой позже):

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

Прежде чем погрузиться в моделирование, поговорим о показателях. Я собираюсь использовать взвешенную оценку (называемую Fbeta) двух важных показателей классификации: точности и запоминания. Точность указывает на то, что я действительно положительно отношусь к моим фактическим результатам. Это, из всех предсказанных мною поступлений, какое соотношение я предсказываю для поступающих пациентов, которые на самом деле не были госпитализированы (ложные срабатывания)? Recall описывает мои истинные положительные моменты из моих предсказанных результатов. Это, из всего, что я предсказал, каково соотношение, что я пропускаю прием (ложноотрицательные результаты)? Если у меня низкая точность, я могу в конечном итоге перераспределить ресурсы, потому что я предсказываю большее количество госпитализаций, чем реальность. Однако низкий уровень запоминания может означать, что я скучаю по пациентам, которых следует госпитализировать. Здесь для меня важнее вспоминать, потому что я предпочитаю перераспределять ресурсы, чем выделять их недостаточно. Чтобы расставить приоритеты по отзыву и одновременно убедиться, что я не слишком перераспределяю ресурсы, я взвесил мое бета-значение в большей степени в сторону отзыва, чтобы строго наказывать модели с плохим отзывом. Ниже приведен пример одной созданной мною матрицы путаницы:

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

Ok. Теперь мы знаем, что измерять. Переходим к следующей проблеме. Помните ту неприятную проблему классового дисбаланса, которая у нас есть? Оказывается, большинство людей, проходящих через ER, будут исправлены и выведены из строя к концу дня. Допустимый класс представляет меньшее подмножество. Я решил повысить выборку класса меньшинства, используя несколько различных методов, включая случайную передискретизацию, ADASYN и SMOTE. В конечном итоге я остановился на случайной передискретизации, проанализировав кривые ROC для различных моделей. Ниже приведены модели, которые я рассмотрел со случайной передискретизацией, перекрестной проверкой kfold и средним FBeta в качестве метрики.

Логистическая регрессия кажется победителем в этом случае (с FBeta 0,65). В дополнение к высокому FBeta, логистическая регрессия - хороший выбор, потому что я смогу интерпретировать функции. Ниже приведен график величины коэффициента.

Хотя мне на самом деле не нужно знать важность функций для прогнозирования, неплохо продемонстрировать немного проницательности. Приведенная выше модель не дает никаких подсказок относительно оценки сортировки. Почему? Это сделано намеренно. Как мы можем автоматизировать сортировку, если мы дадим нашей модели ответы? Однако я хотел увидеть, как производительность может измениться с учетом этой информации. И, что не удивительно, модель становится лучше. FBeta, равный 0,68, может быть достигнут путем указания некоторой оценки 1–5 степени тяжести пациента.

Так. Машинное обучение - это здорово. Модель отличная. Превосходно. Где сортировочный бот? Мы могли бы назвать его BOTriage (работа в стадии разработки). В любом случае… вот пример приложения, который я создал для имитации автоматической сортировки:

Вот и все, ребята! Спасибо за настройку, и, по крайней мере, если кто-то спросит вас о сортировке в будущем, вы можете направить их к тому французу, который изобрел летающую машину скорой помощи. Если вам интересно узнать больше об этом проекте, код можно найти на моем GitHub или связаться со мной здесь.

Ресурсы

  1. История сортировки: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2564046/
  2. Стоимость госпитализации: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3303656/