Как врач сделал себе ИИ помощника. Часть 2
Первая часть собрала хорошую «кассу» в виде рейтинга и кармы, но самое главное вызвала интерес аудитории. Последний факт стал решающим критерием для написания продолжения. Очень часто, 2-я часть хуже первой, но я все же решил рискнуть. Представлюсь снова, меня зовут Александр и я врач-гематолог. Я работаю над приложением по интерпретации общего анализа крови (ОАК) с помощью алгоритмов машинного обучения (МО). После публикации первой заметки о проекте я внимательно изучил комментарии своих читателей. Сразу скажу — практически все из них были конструктивными и понятными. Спасибо всем! Это подстягнуло перенести проект в список приоритетных и поработать над обновлением. Кому не терпится, могут сразу переходить по ссылке. Бот работает в тестовом режиме. Ниже я кратко и подробно расскажу, что изменилось.
Кратко
Руссифицированный интерфейс
Совершенно новые алгоритмы МО
Сокращен список входных параметров ОАК без потери точности моделей
Исправлены технические неточности, улучшен юзабилити
Изменены сообщения бота для пользователя
Подробно
Текущий функционал сервиса направлен на скрининг возможных заболеваний крови взрослого человека (>=18 лет) по ОАК. Приложение не является медицинским, не заменяет врача и представляет собой больше информационно-аналитический инструмент работы с данными. Вся информация на сервисе не является медицинским советом или рекомендацией. В случае необходимости получения медицинского совета или тем более консультации следует связываться с врачом в рамках очной консультации или по телемедицинской связи.
Технически проект решает задачу классификации с применением технологий МО. В текущей версии работают 4 алгоритма XGBoost (в прошлой версии был Random Forest), количество входных параметров 20. Три из четырех моделей, назовем их А, В, С классифицируют данные поэтапно, 4-я — модель D является «контрольной» и универсальной. Общий объем данных, на которых произведено обучение — ОАК более 23 тысяч пациентов, обратившихся к врачу-терапевту и врачу-гематологу.
Этап 1 — модель А (классификация ОАК на 3 класса: нормальный анализ, «несущественные» отклонения, значимые отклонения). Если выявлены значимые отклонения выполняется переход на этап 2.
Метрики на тестовой выборке (сплит 80/20), Accuracy 0.966, 95% CI: (0.9576, 0.9731):
Этап 2 — модель B (классификация ОАК на 4 класса: «острое» заболевание крови (ОЗК), хроническое миелопролиферативное заболевание крови (ХМПЗ), хроническое лимфопролиферативное заболевание крови (ХЛПЗ), анемия). Каждый из эти классов представляет собой группу возможных заболеваний, объединенных между собой общими отклонениями в ОАК. Более точный диагноз не пишется по причине, что это практически мало возможно на текущих данных (требуются специализированное обследование), а также просто запрещено. Тем не менее определение любого из этих классов является прямым показанием для консультации не просто врачом, а врачом-гематологом (специалистом по заболеваниям крови). В случае подозрения на класс «анемия» выполняется переход на 3-й этап.
Метрики на тестовой выборке (сплит 80/20), Accuracy 0.9879, 95% CI (0.9822, 0.9922):
Этап 3 — модель С, бинарный классификатор выявляющий случаи похожие на железодефицитную анемию (ЖДА) — самую частую анемию человека.
Метрики на тестовой выборке (сплит 80/20), Accuracy 0.9829, 95% CI (0.9748, 0.9889)
Модель D является универсальной моделью для всех названных выше классов. Ее прогноз согласуется с прогнозом остальных моделей для принятия «коллегиального» решения по настроенным вручную правилам с учетом вычисляемых коэффициентов уверенности. Последний тем больше, чем больше вероятность отдельно взятого класса, по отношениию к остальным.
Метрики на тестовой выборке (сплит 80/20), Accuracy 0.949, 95% CI (0.9408, 0.9563)
Количество входных параметров было сокращено как в угоду юзабилити (часть данных высчитывается из введенных исходных), так и ввиду частого их отсутствия в анализах. При этом качество моделей снизилось не сильно и компенсируется за счет новых алгоритмов и условий для принятия окончательных решений.
Максимально постарался исправить технические баги, где это было возможно и насколько хватает моих программистких скилов.
Общая концепция сообщений бота также была изменена. Теперь более четко очерчивается предсказанный класс. Описание класса можно расширить, но в большинстве случаев это не требуется, так как на этапе выявленных отклонений должен уже подключаться врач-специалист. Для врачей заключения могут быть более профессиональными с перечислением списка конкретных заболеваний по международной классификации и рекомендаций по дополнительному обследованию.
Бот работает в тестовом режиме и не собирает никакую информацию самостоятельно. Я даже не знаю как это сделать, если бы захотел :). Дальнейшие планы могут включать в себя:
Постепенное дообучение с новыми данными;
Использованием логики, основанной на правилах для коррекции некоторых заключений или проверки общепринятых критериев тех или иных заболеваний;
Внешняя валидация на больших размеченных выборках данных.
Спасибо, что дочитали до конца!