В мире существует множество болезней, поэтому случайно выбранное медицинское учреждение с большой долей вероятности не будет иметь достаточно данных для каждой болезни для достоверной статистической модели. По этой причине все исследования на эту тему отбирают пациентов с одним классом болезней.
По этим 2 причинам большинство попыток построить предсказательную модель пациентского потока ограничиваются одним медицинским учреждением и одним классом болезней. Кроме частых проблем, в статье также расписана математическая интерпретация данных и часто используемые математические модели для решения подобных задач.
В исследовании ИТМО предлагается использовать агрегированную историю посещений для предсказания следующей точки посещения.
Математически данную систему можно представить следующим образом:
,
,
,
,
Где Event - посещение пациента в медицинское учреждение; Department и time - время и отделение посещение; - Последовательность посещений от m по n; i - базовая информация о пациенте; - функция вероятности того, что пациент посетит отделение k.
Задача формулируется следующем образов - аппроксимация параметритов функции, которая принимает информацию о пациенте и его последних t-n посещений и выдает вероятность того, что он подойдет в отделение k. Похожий подход также использовался в данной ВКР, однако стоит отметить пару недостатков его реализации в рамках этой модели: во-первых, слишком ограниченный набор параметров; во-вторых, предиктивная модель предсказывает модель точку посещения, но не предсказывает время. В качестве функции предсказания использовались только простые методы, такие как SVM, Logistic Regression, Random Forest. Random Forest показал наилучший результат.
Другая статья, на которую стоит обратить внимание была опубликована в IEEE 33rd International Conference on Data Engineering (ICDE)[2]. Эта статья предсказывает направление пациентов между отделениями для оптимизации нагрузки на палату интенсивной терапии, также она решает один недостаток предыдущей статьи и добавляет новые методы предсказания. Для данного исследования из данной статьи полезно будет вычленить математическую формулировку системы и модели, которые использовались для ее решения.
Математическая формулировка очень похожа на формулировку предыдущей статьи, однако она напрямую учитывает время и добавляет новые признаки.
,
,,
,
,
,
Где u - пациент, c - палата, d - Время перевода в предыдущую палату.
Задачей данного исследования было спрогнозировать следующее состояние по истории посещений, т.е. . Если же говорить об используемых моделях, то здесь были модели с более сложным математическим аппаратом - помимо SVM и логистической регрессии также использовались сети Маркова, векторная авторегрессия и модель взаимодействующих процессов (Mutually Correcting Processes). Последней модели посвящена большая часть статьи, т.к. у нее очень сложный математический аппарат и она очень редко применяется на практике. В результате наилучший результат показала логистическая регрессия.
Третья работа “Emergency patient flow forecasting in the radiology department”[3]. Особенность данного исследования в том, что оно предсказывает поток как случайный временной ряд с помощью различных моделей, таких как ARIMA и Random Forest. Модель предсказывает количество пациентов, которые подойдут в определенный день. Ниже приведены результаты модели:
Рисунок 12. Результаты моделей на разных типах пациентов[3].
Класс моделей ARMA хорошо предсказывает трендовую и сезонную составляющую. Т. к. данной исследования занимается радиологии, занятным считается тот факт, что MAPE (функция ошибки - отклонение от истинного ответа в процентах) показывает такой низкий результат. Средним целевой переменной было 121, а стандартное отклонение 22, таким образом можно сказать, что количество пациентов в отделение радиологии имеет трендовую и сезонную компоненту. Данный подход также был опробован при выполнении данной ВКР, но не дал результата.
Следующее исследования было опубликовано в журнале «Journal of Diabetes Science and Technology»[4] в 2017 году. По математической формулировке оно очень похоже на то, что было описано в первых 2 работах, однако данная статья интересна тем, что большая ее часть посвящена заполнению пропусков пустых значений. Ключевая проблема, с которой можно столкнуться при решении такой задачи заключается в том, что ценная информация может присутствовать не у всех образцов, например не всех людей есть анализ крови, но это признаки могут быть очень важны. Данное исследование сравнивает 3 популярных метода для заполнения среднего - заполнение средним, заполнение медианой и missForest.
Результаты различных алгоритмов для метрики RMSE (корень MSE) находятся ниже
Рисунок 13. Метрика RMSE для разных алгоритмов заполнения данных
Видно, что missForest показывает наилучший результат. Тем не менее у самой задачи заполнения пустого значения есть весомый недостаток: данные, которые заменяют пустое значения выражены из других признаков, т. е. отсутствует дополнительная информационная ценность. Это может быть полезно, если сама цель стоит как заполнения пустых значений, например, как в рекомендательных системах, или же если в задаче используются простые параметрические подходы. В непараметрических алгоритмах заполнение пустого пространства уникальным значением дает наилучший результат, если данных достаточно для того, чтобы создать отдельную ветку в дереве под пустое значение. Данная работа может быть интересна в том случай, если данных слишком мало или набор допустимых алгоритмов ограничен линейными моделями.
Последняя обозреваемая работа была опубликована в журнале Pain Medicine [5] в 2012 году. Данное исследование предсказывает необходимость в предоперационной консультации в острой боли. Здесь работает довольно стандартный механизм - обработать признаки и передать их моделям, но ценность здесь представляет то, что это одна из немногих работ, где нейронные сети используется для предсказательной аналитики медицинских данных.
На вход модели подается возраст пациента, количество дней до операции, продолжительность анестезии и т. д., в качестве ответа выходит вероятность того, что пациенту потребуется консультация.
В данной работе было опробовано несколько моделей, результаты представлены ниже:
Рисунок 14. Результаты разных моделей и время их обучения [5]
Интерес в данном случай представляют модели с наилучшим результатом ROC кривой (метрика бинарной классификации). Их можно разделить на 3 семейства: байесовские сети, нейронные сети и случайный лес. Т.к. байесовские сети больше подходят для категориальных признаков, можно считать, что наилучшими предсказательными способностями обладает случайный лес и нейронные сети.
Глава 3. Решение задачи машинного обучения
3.1 Постановка задачи
Постановка задачи звучит следующем образом: обучить 2 модели fс и fr, классификатор и регрессор соответственно. Эти модели должны принимать вектор входных признаков - информацию пациенте и его истории посещений, и выдавать вектор из вероятностей посещения каждого отделения и ожидаемую дату следующего посещения.
3.2 Описание данных
Данные представляют собой набор событий - визитов пациентов.
Каждый визит хранит информацию о дате посещений, информации о пациенте и информацию о точки посещения.
,
,
,
,
,
Где patient info - информация о пациенте, которая содержит id, возраст и заболевание; visit info - информация и посещений пациентом мед. отделения, содержит множество признаков, в том числе дату посещения, отделение и id пациента; E - история посещений; Hi - история посещений с признаками информации о пациентах; H - вся история посещений с информацией о всех пациентах.
Данные представляют собой блоки в JSON формате. Пример данных в формате JSON в их изначальном виде.
Patient info
{'@key': 'Age', '@value': '33'},
{'@key': 'Treatment code', '@value': '13'},
{'@key': 'Diagnosis code', '@value': '106'},
{'@key': 'Specialism code', '@value': `7'}
VISIT INFO
{'@key': 'org:group', '@value': 'Radiotherapy'},
{'@key': 'Section', '@value': 'Section 5'},
{'@key': 'lifecycle:transition', '@value': 'complete'},
'{'@key': 'Number of executions', '@value': '1'},
{'@key': 'Specialism code', '@value': '61'},
{'@key': 'Activity code', '@value': '410100'},
'date': {'@key': 'time:timestamp', '@value': '2005-01-03}}
Тем не менее, анализировать такой формат с помощью методов машинного обучения практически невозможно, поэтому следует перевести JSON в табличный формат. Легко заметить, что весь датасет состоит из 2 сущностей - информации о пациентах и информации о посещениях. Таким образом можно сделать 2 таблицы и совместить их по ключу patient_id.
Ниже приведет пример некоторых полей из таблицы. Каждая строка представляет собой полную информацию о посещении и пациенте.
Таблица 1. Таблица с некоторыми исходными признакми.
|
id |
age |
diag |
code |
int_spec |
int_diag |
int_treat |
date |
||
|
0 |
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
106.0 |
23.0 |
2005-01-03 00:00:00 |
|
|
1 |
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
106.0 |
23.0 |
2005-01-03 00:00:00 |
|
|
2 |
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
106.0 |
23.0 |
2005-01-05 00:00:00 |
|
|
3 |
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
106.0 |
23.0 |
2005-01-05 00:00:00 |
|
|
4 |
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
106.0 |
23.0 |
2005-01-05 00:00:00 |
Ниже описаны все поля, которые были в таблице.
Таблица 2. Признаки до обработки данных
|
Имя поля |
Формат поля |
Кол. уникальных значений |
||
|
0 |
id |
int64 |
1139 |
|
|
1 |
age |
int64 |
74 |
|
|
2 |
diag |
object |
109 |
|
|
3 |
code |
object |
7 |
|
|
4 |
int_spec |
float64 |
4 |
|
|
5 |
int_diag |
float64 |
6 |
|
|
6 |
int_treat |
float64 |
41 |
|
|
7 |
date |
object |
1274 |
|
|
8 |
group |
object |
43 |
|
|
9 |
code_exec |
int64 |
37 |
|
|
10 |
code_activ |
float64 |
354 |
|
|
11 |
code_spec |
int64 |
25 |
|
|
12 |
activity |
object |
296 |
|
|
13 |
producer |
object |
117 |
|
|
14 |
section |
object |
8 |
|
|
15 |
concept |
object |
624 |
|
|
16 |
lifecycle |
object |
1 |
В таблице находится 150287 записей. Однако от многих записей пришлось избавиться по следующим причинам. Во-первых, пришлось удалить всех пациентов, у которых слишком короткая история болезней. Во-вторых, нужно было удалить всех посетителей с редкими заболеваниями, т.к. у них не было статистической значимости. В-третьих, в таблице оказалось слишком много строк-дубликатов, их тоже следовало удалить. Таким образом в таблице осталось 32163 записей.
3.3 Обработка данных
Задача была поставлена следующем образом - предсказать информацию о следующем событии, а именно дату (регрессия) и точку посещения (классификация).
Таблица 3. Пример целевых и входных признаков
|
id |
age |
diag |
code |
int_spec |
int_diag |
date |
group |
|
|
0 |
33 |
Gynaecologische tumoren |
M14 |
62.0 |
106.0 |
2005-01-05 |
Obstetrics & Gynaecology clinic |
|
|
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
107.0 |
2005-01-05 |
Nursing ward |
|
|
0 |
33 |
Gynaecologische tumoren |
M13 |
61.0 |
106.0 |
2005-01-24 |
Radiotherapy |
Иными словами, на основе информации представленную синим цветов на таблице 3, предсказать значения, которые находятся в ячейках зеленого цвета. На текущий момент данные таблицы не позволяет напрямую решить задачу классификации и регрессии. Для этого нужно пересобрать таблицу с учётом того, что в строке должна быть агрегированная информация и целевые переменные. Было использовано 2 подхода для агрегации данных. Во-первых, это использования значений переменных с учетом лагов, т.е. просто сместить их на несколько шагов. Во-вторых, создание специальных агрегирующих переменных, таких как экспоненциальное среднее, номер посещения и т.д.
Таблица 4. Формат данных пригодные для предиктивной аналитики
|
id |
age |
diag |
Num |
date |
group |
Date_lag1 |
Group_lag1 |
Date_Y |
Group_Y |
|
|
0 |
33 |
Gyn. tumoren |
2 |
2005-01-05 |
Nursing ward |
2005-01-05 |
Gyn. clinic |
2005-01-24 |
Radiotherapy |
В данном виде, указанном на таблице 4, можно решить задачу предиктивной аналитики. Формулировку задачи можно описать следующем образом: есть множество пар значений входных векторов X и векторов ответов Y, требуется описать функцию f, и оценить ее параметры таким образом, чтобы значения f(X) принимала максимально близкое значения к Y, т.е. значения функции ошибки L(f(X), Y) было минимально.