Всем привет, меня зовут Александр и я врач-гематолог. Для справки, это тот, кто занимается болезнями крови. Мой общий стаж перевалил за 16 лет, я кандидат медицинских наук и последние пару-тройку лет интересуюсь анализом данных, machine learning и ИИ в медицине. Под "интересуюсь" я подразумеваю исследования и публикации по этим темам, а также обучение и саморазвитие.
Так как я ни разу не программист, то мой пост будет не про это. Тем не менее последние пару лет моим рабочим инструментом является R. Это не тот язык программирования, на котором можно писать крутые сайты или приложения, но кое-что он все-таки умеет. R - больше про анализ данных, чем я и занимаюсь. Сегодня я хочу кратко рассказать и показать один из моих проектов на R, который решает вполне конкретную прикладную задачу - интерпретацию общего анализа крови.
Общий анализ крови (ОАК) – самый частый и один из самых сложных анализов человека для интерпретации, что обусловлено большим числом входящих в него параметров. Как правило, именно этот анализ является скрининговым тестом как для гематологов амбулаторного приема, так и для врачей общей практики и других специальностей. Объемы выполняемых анализов исчисляются сотнями тысяч. Моя идея не нова - машинная помощь в правильной и быстрой интерпретации общего анализа крови, которая будет содействовать развитию качественной, доступной и своевременной диагностики онкогематологических заболеваний. Зачастую врач первичного звена (терапевт) не может дифференцировать изменения в ОАК, что приводит либо к гиподиагностике, либо к повышенной настороженности и излишне частому направлению на консультацию к врачу-гематологу. Ситуацию усугубляют огромные объемы анализов, выполняемые в рамках профилактических и лечебно-диагностических процессов как в государственном, так и в частном секторе здравоохранения. Расшифровка анализов онлайн - один из востребованных запросов в Интернете. Меня часто просят об этом в социальных сетях.
Короче говоря, я создал проект в данной области - прототип приложения с использованием ML технологий, который позволяет проводить скрининговую интерпретацию ОАК на предмет наличия и дифференциальной диагностики основных групп заболеваний крови. Что для этого потребовалось:
Данные (результаты ОАК, выполненные на автоматическом гематологическом анализаторе). Данных было вполне достаточно, но дьявол, как обычно, в деталях. Большая часть из них не была размечена. Всего я разметил почти 24 тыс. анализов - норма / не норма / какое заболевание или группа возможных заболеваний.
Алгоритмы ML. Здесь ничего нового - эксперименты с разными ансамблевыми методами и их настройками позволили мне найти оптимальное решение.
Мой экспертный опыт как врача-гематолога и как аналитика и R-юзера. Что из этого получилось - чуть ниже.
Что в итоге получилось на текущий день. MD4ME (Medical data for me) - веб-приложение для машинной интерпретации ОАК (на английском языке для универсальности).
Работает все достаточно просто, но допускаю не все смогут разобраться какие показатели ОАК (25 параметров) в какую ячейку вносить, если вы не врач конечно. Данные нужно внести вручную (но возможна и пакетная загрузка тысяч анализов сразу), нажимаем кнопку и получаем интерпретацию на практически естественном языке. Внимание! Это не медицинское изделие и не сертифицированное медицинское программное обеспечение, которое может заменить врача!
Кому это нужно? В первую очередь мне. Этот проект позволил мне провести серьезную научно-исследовательскую работу по моей основной специальности и улучшить навыки в области ML и программирования на R. В перспективе я конечно бы хотел довести эти технологии до практического применения. Они могут работать в крупных лабораторных хабах и решать вопросы своевременного выявления пациентов с тяжелыми заболеваниями крови и совершенствоваться. Готов общаться и коллаборироваться с коллегами, энтузиастами и разработчиками, партнерами, со всеми, кому интересна данная тема. Ах да, чуть не забыл, само приложение доступно по ссылке.
Комментарии (53)
GbrtR
03.01.2023 23:56+2Какие конкуренты у вашего севриса? Очень сомнительно что для такой общей задачи как ОАК уже не существует анализаторов.
Было бы хорошо сделать крос-проверку на конкурирующих сервисах, а то неприятный сюрприз может случиться.
Плюс надо докрутить опцию при сильно абнормальных значениях уведомлять человека, чтобы проверил на адекватость результатов модели. Хотя конечно будут играться и всякую чушь вводить.KirovDoc Автор
04.01.2023 10:20+1Аналоги конечно же есть, но мы же не ездим на одних и тех же машинах и не пользуемся одними и теми же телефонами. К тому же эти аналоги часто потрогать руками нельзя. О полноценном продукте пока говорить рано, поэтому и про конкурентов не говорил.
pharo
04.01.2023 00:10+10Эта статья по рекламе сервиса сбора персональных медицинских данных привязанных к IP и браузеру пользователя, если кто то захочет их ввести?
т.к., кроме ссылки на Web страничку никаких данных о проекте не приведено!
и как сделал врач, согласно заголовку статьи — тоже. (как ни как)Wesha
04.01.2023 01:32+6А меня спугнула достаточно профессионально нарисованная иконка яйцеробоврача. На 100% уверен, что реальный врач красивостями бы не занимался. То есть Вашу оценку этого сервиса я считаю крайне вероятно истинной.
AirLight
04.01.2023 04:51+3Это хабрапост для сбора комментариев от людей с повышенной тревожностью. Рекомендую не палиться так явно.
KirovDoc Автор
04.01.2023 10:22Никаких данных эта страничка не собирает. Да, я врач, просто у меня есть и другие интересы. Вот моя группа в вк: https://vk.com/luchininmd
pharo
04.01.2023 12:21+3Никаких данных эта страничка не собирает
Какие доказательство этому утверждению?
Пока это всё выглядит как реклама своих услуг без технических подробностей даже аспектов использования языка R упомянутого в статье нет.
P.S. На Вашей страничке в Vk есть награждение премией, как лучший «Онкогематолог года 2022», но, к примеру здесь Итоги Премии им. академика А.И. Савицкого в 2022 году в результатах награждения Вы не упомянуты. Есть ли реальные пруфы подтверждения сего факта, кроме представленного изображения награды?KirovDoc Автор
04.01.2023 12:36Я был в числе 4 выбранных номинантов со воими проктами. Трем дали диплом и статуэтку, гематологу из Москвы еще и денежный приз.
AVEHA
04.01.2023 10:28А сие творение выдаёт какие-либо результаты помимо "У вас заболевание крови, обратитесь к врачу"?
KirovDoc Автор
04.01.2023 10:29+3По ОАК можно заподозрить некоторые группы заболеваний и очень редко какое-то конкретное заболевание. Это и делает сие творение. Окончательный диагноз можно поставить только путем специализированного обследования, которое может назначить врач-специалист. Это обследование можно дописывать как рекомендации, но эта информация в первую очередь будет для врача, а не для пациента.
george3
04.01.2023 15:17соответственно следующий шаг развития - что делать дальше немедику имея ваш системный вывод. те прикрутить базу знаний на выходе.
KirovDoc Автор
04.01.2023 16:50Тут скорее в перспективе проект для медиков (не гематологов). Вывод сделан специально сейчас в виде текстового сообщения. Конечно, все можно заменить формальными классами, к каждому из которых можно прикрутить любой текст рекомендаций. Если делать что-то для немедиков (да и для лабораторий), и превращать это в стартап, мне нужна IT поддержка.
cloudhunter
04.01.2023 12:36+1Какую точность модели удалось получить на обучении?
Для хейтеров - не требуйте от автора тут продукта - сервиса.
Использование ML в общем виде, насколько я знаю, не обеспечивает доказательность, поэтому в практической медицине можно использовать именно как ассистента, не конечного диагноста, иное противоречит законодательству. Если в этом вопросе что то поменялось, буду признателен за информацию.
Спасибо за статью!
KirovDoc Автор
04.01.2023 12:46+4Спасибо! Там не одна модель на самом деле. На первом шаге модель №1 различает 3 класса анализов: норма, клинически не значимые отклонения (незначительные отклонения от нормы) и клинически значимые отклонения (признаки какой-то болезни, но не ясно какой). Если отклонения клинически значимые включается модель №2, которая уже пытается определить группу возможнных заболеваний. Есть еще модель №3, которая в группе "анемия" ищет только случаи с подозрением на дефицит железа. У каждой модели свои метрики эффективности. Точность (Accuracy) у всех примерно 0.98, остальные метрики для разных классов варьируют, но все вполне хорошие. Планирую написать статью в журнал, там все подробно опишу и /или при следующем апгрейде приложения добавлю описание.
Serg79
04.01.2023 12:56+5ну и ну, на доктора накинулись просто. Пруфы Вам предоставьте, и в листинге премии им. академика А.И. Савицкого не упомянули, и иконка ужасная, да и вообще таких анализаторов как грязи.
Статья и web-приложение на R замечательно как минимум по двум причинам. Во-первых, знание компьютерных технологий да и статистики для врача редкость, так как медицинский институт одного из немногих высших образовательных учреждений где не требуется сдавать математику в качестве вступительного экзамена. Вы только представьте, что доктор самостоятельно это освоил и более того, сделал сервис себе в помощь. Представьте, что масштабировав сервис станет возможным получить базу для научных исследований. Во-вторых, доктор тратит свои собственные ресурсы, расширяет кругозор и популяризирует использование IT в медицине.pharo
04.01.2023 13:48+2Кроме приведённой ссылки на сторонний сервис в статье нет никакой полезной информации, а полезна ли Вам эта ссылка, с учётом всего представленного в треде, решайте сами.
P.S. Возможно само упоминание «магических» слов Web, ИИ и R и перечисление других тэгов в/к статье это очень значимо?
Но, вот, к примеру, даже не являясь программистом по профилю биолог сделал такое медицинское ПОПрограммное обеспечение для анализа и сбора данных SpectraLab для биохимической спектроскопии и кинетики ферментов
SpectraLab Software
SpectraLab User's Guide
Проект на площадке Github
(кодовая базa на Win3Forth и Delphi7)Serg79
04.01.2023 17:13как то подозрительно бурно вы накинулись на пост врача гематолога. С таким рвением и аргументами Вам бы в диссертационном совете выступать.
Ioanna
04.01.2023 15:23знание компьютерных технологий да и статистики для врача редкость
У нас на кафедре была студентка, которая одновременно еще училась в медакадемии (у нас - заочно). Писала ПО для врачей, а сейчас, кажется, работает все-таки программистом.
KirovDoc Автор
04.01.2023 16:46+1Спасибо за поддержку! Действительно так, тут несколько областей знаний: медицина, статистика, машинное обучение и программирование. За отсутствием команды и собственной тяги к знаниям, делал все сам.
theedge
04.01.2023 14:28Крайне полезная штука! Недавно сдавал кровь, половина показателей не в норме, а врач в поликлинике говорит, мол, оно же не сильно от референсных значений отличается, так что не парьтесь))
Такие штуки, как, MCHC, могут быть в г/л, а могут быть г/дл, возможно, не помешает подписать.
IG - это какой-то имуноглобулин?
Удобно, что обозначения можно выделить и скопировать в буфер для поиска в своем pdf файле с анализами.
Кнопочки +/- подглючивают - значение меняется не на 1, а на какую-то другую величину.
Есть оффлайн версия приложения?
KirovDoc Автор
04.01.2023 16:45IG - незрелые гранулоциты. Это всё параметры автоматического гематологического анализатора по общему анализу крови. Оффлайн версии нет.
Sarjin
05.01.2023 09:43а насколько одиночный анализ крови в обычной клинике совпадает с реальностью? могут ли лаборанты поставить значения от балды или +/- километр? существует ли такая проблема в российской или мировой практике?
KirovDoc Автор
05.01.2023 09:52Это хороший вопрос. На результат анализа, несмотря на все меры стандартизации, будет влиять оборудование, на котором он сделан. Есть много разных гематологических анализаторов разных производителей. Они могут выдавать измерения с некоторыми колебаниями относительно друг друга. С другой стороны диагноз какого-либо заболевания от этого не зависит. То есть, если анализ плохой, то плохой, независимо в какой лаборатории он сделан. Чтобы лаборатория откровенно выдавала ошибочные данные это вряд ли, все же есть служба контроля. Но модель может быть все равно чувствительна, поэтому нужна внешняя валидация. Проверка моделей на данных из других медицинских центров, например.
serg_borisovich
04.01.2023 16:50Я бы хотел стать тестером проекта. То есть сдать необходимые анализы на себя и своих близких и ввести данные и отслеживать динамику по времени и необходимости. На перспективу - использовать биосенсор.
Какие надо анализы сдать в местных платных лабораториях?
KirovDoc Автор
04.01.2023 16:53Спасибо. Здесь показатели исключительно общего анализа крови. Я вам как врач-гематолог быстрее скажу, что в ваших анализах так или не так). Но вот если развивать проект в сторону пользователей, то тестер был бы полезен с точки зрения юзабилити, вида информации, которая ему нужна и т.д. Но здесь также потребуется и IT поддержка в команду.
papilaz
04.01.2023 20:53IBM делали Доктора Ватсон, обучали на миллионах диагнозах, и так его и похерили.
KirovDoc Автор
04.01.2023 21:21+2Там немного другая история. Там был большой маркетинг, как в конце концов выяснилось, обман. За это уволили главу данного направления, а потом проект в первоначальном виде прикрыли. Суть проекта - выдавать врачам-онкологам рекомендации по лечению на основании данных из научных публикаций. На самом деле все рекомендации были клиническими рекомендациями одного из онкологических центров США (то есть просто написанные врачами). То есть Ватсон конечно искал информацию о лечении в Интернете в научных журналах, но рекомендациями не были заключения ИИ. Хотя маркетинг строился именно на ИИ. Это все в итоге вскрылось и проект провалился.
rutexd
04.01.2023 21:34+1Статье не хватает деталей. Что как почему какая ошибка модели как сделано под капотом итд. Как человеку крайне далёкому от медицины, мне было бы интересно почитать детали, возможно узнать что то новое и узнать как решено то или иное в контексте мл.
Однако в остальном - отличная работа. Особенно шикарно если оно реально работает, а судя по вашей статье - работает. И да, если вы сделали это самостоятельно (ну или почти) - огромное уважение вам. Профессионала своего дела (и не только) видно издалека!
KirovDoc Автор
04.01.2023 21:37+1Спасибо, обязательно учту ваши пожелания в продолжении темы, в новом посте. Сервис показал свою работоспособность в ходе строгой внутренней валидации. Мне нужны данные для внешней валидации, пока их нет в достаточном количестве.
economist75
05.01.2023 12:16+1Статья и разработка понравились, даешь больше доказательности в медицину!
Как DS-ник с главврачом в родне, вижу следующие проблемы (не ждите пруфы на цифры, сельские главврачи не врут, когда выпьют :-)
Отсутствие контекста (первичный ОАК, фаза лечения, прием лекарств, витаминов, особенно самоназначенных, про которых в 1/5 случаев врачу не скажут даже под присягой). Подобный "контекст" присутствует в ~60% случаев и расширяет референсые интервалы в 1,5-2 раза или вовсе бракует весь сданный ОАК
Отсутствие биохимии крови, которая вытаскивает огромное число фич/признаков хронических заболеваний и связанного с ними контекста
Отсутствие контроля динамики (было - стало на фоне лечения, диеты, пересдачи анализа с соблюдением требований). Текстовые выводы по динамике могут быть очень информативными, например: "Прием препарата X в дозировке Y привел к снижению параметра Z на N промиллей в неделю, что говорит об адекватности терапии. Возможно требуется увеличение дозировки в 2Х для достижения референсных значений в отведенный срок терапии 21 день или изменение схемы лечения врачом."
Осторожность формулировок в разработке автора статьи, кмк, свидетельствует о небольшом размере обучающей выборки. Даннные, данные, где ж их взять? Созданию подобного сервиса должен предшествовать мощный дата-майнинг. Но наша медицина и власти делают все, чтобы препятствовать цифровизации и росту доказательности медицины:
Врачи пишут неразборчиво, на латыни, медицинскими "штампами", а в коммерческой медицине - еще и с "советами друзей-юристов", так чтобы при любом исходе суд встал на сторону клиники или попросту ничего не понял (замотал дело экспертизами)
Законом о ПД и истерией вокруг него фактически уничтожена основа для получения и соединения (с обезличиванием) данных, скажем сити-лабов и медкарт поликлиник. Без этих данных особо трудно сделать ML-модель (это большая часть данных).
Вранье везде, даже в стационарном лечении. Формулировки в Выписках историй болезни (ИБ) в 30% "подогнаны" под методички минздрава и схемы лечения, причем многое специально делается для неотрекаемости пациента от диагноза. Написаны в ИБ симптомы, которых не было, а истинные - замолчены. Данные анализов в ИБ неполны и традиционно с опечатками.
По сути в стране нет ни одной IT-системы для сбора анамнеза пациента, без возможности его подлога/замены врачом. Более того, больницы ускоренно избавляются от протоколов анализов. Если вы разово сунетесь в обычную больницу (все не-столичные) даже с большим админресурсом - вы не найдете там данные для анализа глубже года. А это мало, т.к. в среднем человек госпитализируется 1 раз в 14 лет.
Philistine1917
05.01.2023 12:49Если врач к которому я пришёл, воспользуется таким инструментом - я предпочту обратиться к другому врачу. Максимум где это применимо - первичный осмотр у медсестры, которая в любом случае направит к нужному врачу. Тоже хорошее дело между прочим, вариант военной сортировки пациентов. Этого направляем срочно к терапевту, а этот пусть идёт своим ходом к аналогопататому - нечего младший медицинский персонал нагружать перевозкой тяжестей.
morijndael
06.01.2023 08:58+2В статье же явно написано: это не замена врачу, а быстрый способ понять, в какую сторону надо диагностировать дальше, и надо ли вообще
Philistine1917
06.01.2023 17:09Справочники врачу необходимы, а решения которые предлагают "правильный" ответ недопустимы. Человеческие жизни не оценивают по шаблонам. При таком подходе даже профессор из медицинского центра им. Бурденко, оказался бесполезен.
Врач сам должен ставить диагноз, не имея предубеждений относительно "очевидности" заболевания, самостоятельно оценивая всю совокупность сведений о пациенте.
У врача такого инструмента быть не должно. И точка.
radioxoma
Хотелось бы тултипы с человеческой расшифровкой сокращений и единицами измерения (PCT - это прокальцитонин?) т.к. сокращения ни разу не стандартизированы между лабораториями. Вы пишете, что сервис для специалистов, при этом вместо "looks well" для нормального результата, у вас полотнище текста, которое каждый раз новое ("My understanding...", "In my view...", "From what I gather...").
А так всё здорово, осталось прикрутить к ЕМИАСу и показывать флаги терапевту в поликлинике, если что-то не так.
Пару рабочих примеров ОАК бы к статье приложить.
И ещё момент. Пользователь точно должен вводить процентное отношение клеток, если известно их абсолютное количество?
radioxoma
Отвечу сам себе, у Вас 5 из 27 цифр пользовательского ввода не нужны (NEUT%, LYMTH%, EO%, BASO%, MONO%), т.к. пользователь уже ввёл абсолютное значение (число клеток). Пруф (цифры - значения по умолчанию с представленного сайта):
KirovDoc Автор
Спасибо! Это лишь прототип. PCT в ОАК означает тромбокрит (по аналогии с гематокритом). Что касается абсолютных и относительных значений, то если что-то убрать, работает хуже. "Черный ящик" короче. Было много экспериментов, переменные не коллинеарны. Хотя согласен, что модель можно будет упростить в будущем.
ainoneko
Получается, что числа не лишние: можно добавить проверку, что они достаточно хорошо согласуются между собой. (Если нет, то внимательнее посмотреть, почему так?)
radioxoma
Автор может рассчитать их самостоятельно и сократить форму ввода, не меняя модель.
tba
Избыточны не только показатели лейкоцитарной формулы (комментарий@radioxoma. правильный). Гематокрит в анализаторах является расчетным параметром, а также тромбокрит, MCH, MCHC и RDW-CV. Т.е. уже 10 из 27 вводимых показателей избыточны. Возможно, они присутствуют для контроля корректности ввода данных. Вопрос в другом - использованы ли расчетные (зависимые) показатели для ML наравне с измеряемыми?
KirovDoc Автор
В ML это не совсем так. Вполне можно и часто даже нужно комбинировать или изменять существующие переменные в наборе данных с помощью арифметических операций. Этот процесс известен как feature engineering. Создавая новые переменные, можно потенциально повысить производительность своей модели. Модели ML не обязательно должны логически объясняться (черный ящик), скорее наоборот. Часто логика, что убрать, а что оставить там не срабатывает. Так можно в итоге дойти до простого алгоритма на правилах. Даже в простой логистической регрессии я могу умножить одну переменную на другую, создав третью, и тем самым улучшив модель. Но я не исключаю возможность упрощений. Уже были убраны несколько параметров, которые были изначально. Но весь этот поиск, эксперименты и переобучение требует немало времени. Поэтому в новой версии, я думаю, это возможно, но не быстро.
tba
"Простой алгоритм на правилах" это очень даже неплохо и, на мой взгляд, даже лучше чем ML, в первую очередь именно потому, что можно понять каким образом из исходных данных получился результат.
Еще вопрос: в ОАК "с анализатора" входят по сути три анализа - эритроциты, лейкоциты, тромбоциты. Эти показатели в модели разделены или все идет "в одном наборе"?
KirovDoc Автор
На правилах я тоже делал. Да, все объяснимо что и почему, но часто очень громоздко получается. Некоторые вещи при описании булевой логикой приводят к очень сложным правилам. С анализатора в лабораторную информационную систему выходят столько параметров, сколько запрограммировано. Есть краткие ОАК (5-6 параметров), есть развернутые - 25 параметров и выше, смотря что назначил врач. Модель сейчас обучена на развернутых ОАК (со всеми параметрами сразу), с краткими она работать откажется из-за нехватки данных.