Наверное, немногие знают о проведении в Москве масштабного эксперимента по использованию искусственного интеллекта (ИИ) в лучевой диагностике. Первые медицинские изображения искусственный интеллект начал обрабатывать в феврале 2020 года — это были КТ‑снимки органов грудной клетки, на которых алгоритмы находили признаки COVID-19. Нейросети с 2020 года работают в рамках эксперимента по внедрению технологий компьютерного зрения в работу столичных медучреждений. Он проводится Департаментом здравоохранения города Москвы совместно с Департаментом информационных технологий на базе столичного Центра диагностики и телемедицины. Проект помогает развивать искусственный интеллект в России, а также поддерживать отечественных разработчиков.

На начало лета 2024 года с помощью нейросетей обработали более 12 миллионов исследований. В распоряжении московских врачей свыше 50 сервисов компьютерного зрения. Алгоритмы помогают находить на медицинских изображениях (маммограммах, КТ, МРТ и рентгеновских снимках) признаки 37 различных заболеваний, в том числе рака легкого, пневмонии, остеопороза, аневризмы аорты, ишемической болезни сердца, инсульта, легочной гипертензии, гидроторакса и других патологий.

В 2023 году впервые в России медицинскую услугу с использованием технологий искусственного интеллекта включили в систему обязательного медицинского страхования. А в 2024-м столица открыла доступ к специальной платформе, после подключения к которой врачи по всей стране смогут обрабатывать результаты лучевых исследований с использованием столичных алгоритмов.

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

Dr. Prescription в мультсериале Futurama. 20th Century Fox
Dr. Prescription в мультсериале Futurama. 20th Century Fox

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

Трудно найти человека, который не слышал бы о COVID-19 и компьютерной томографии, позволяющей оценить степень поражения легочной ткани. Возросшее в период пандемии количество пациентов при дефиците врачей (в т.ч. из‑за болезни) потребовало от системы здравоохранения оперативных тактических изменений. В тех обстоятельствах использование технологий компьютерного зрения и искусственного интеллекта для помощи врачам получило возможность практической апробации. ИИ в отличие от человека имеет большую производительность, не устает и обладает «естественным иммунитетом» ко всем человеческим болезням, в том числе к COVID-19. Он дает врачам возможность сосредоточиться на более важных случаях и бережет их время. Но так ли точен ИИ в медицинской диагностике? Может ли он заменить врача? Ответить на эти и многие другие вопросы призван Эксперимент по использованию инновационных технологий в области компьютерного зрения для анализа медицинских изображений и дальнейшего применения в системе столичного здравоохранения «ИИ‑сервисы для лучевой диагностики». Этот проект, инициированный Правительством Москвы, предоставляет гранты компаниям, разрабатывающим такие сервисы на основе технологий искусственного интеллекта. Подробнее о проекте можно почитать на mosmed.ai.

В этой статье «ИИ‑сервисом» будем называть некий алгоритм, на вход которого подается исследование, требующее анализа, а он в ответ выдает вероятность наличия в нем целевой патологии.

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

Как подготовить данные для оценки?

Чтобы глубоко не погружаться в детали автоматизации пересылки медицинских исследований, рассмотрим как пример результат работы ИИ‑сервиса в виде таблицы, которая содержит для каждого исследования (study_uid) истинное значение (GT) и вероятность патологии (result), определенную ИИ‑сервисом:

Здесь и далее будем предполагать, что вероятность патологии лежит в диапазоне от 0 до 1, хотя это не является строгим требованием. Например, взамен вероятности патологии можно использовать объем пораженной ткани, тогда вместо процентов будут кубические сантиметры, которые, разумеется, не ограничены единицей.

Пример работы ИИ сервиса
Пример работы ИИ сервиса

Например, так выглядит поиск признаков COVID-19 на одном из срезов компьютерной томографии. Для данного ИИ‑сервиса вероятность патологии была 59%, значит, это исследование можно отнести к истинно положительным.

Методология оценки данных

Существует много различных способов оценки результатов работы ИИ‑сервисов, но для простоты мы ограничимся бинарным (есть патология / нет патологии). В целом все данные можно разделить на положительные (Positive) и отрицательные (Negative) в зависимости от разметки.

Кроме того, эти же данные можно распределить в соответствии с тем, как их классифицировал алгоритм ИИ. В итоге мы получим 4 группы результатов работы ИИ:

  • истинно положительные (в англоязычной литературе их обычно называют True Positives (TP))

  • ложноотрицательные — False Negatives (FN)

  • ложноположительные — False Positives (FP)

  • истинно отрицательные — True Negatives (TN)

Исходя из количества исследований каждого класса, можно посчитать метрики:

Accuracy =  (TN + TP)/(TP+FN+FP+TN)Sensitivity=  TP/(TP+FN)Specificity =  TN/(TN+FP)

Разумеется, на практике в зависимости от задач используются не только эти метрики, но их можно назвать наиболее распространенными.

Для бинарной оценки все исследования можно разделить на две колонки: Positive и Negative, в зависимости от разметки (GT); с другой стороны, их можно линейно распределить по вероятности патологии от ИИ‑сервиса. Например, на рисунке для случайно выбранного порогового значения (cutoff) получилось, что 11 исследований имели вероятность патологии меньше cutoff, из них 4 содержали патологию согласно разметке — значит, их можно отнести к FN (ИИ‑сервис ошибочно отнес их к исследованиям без патологии), а 7 не имели патологии согласно разметке TN (ИИ‑сервис правильно отнес их к исследованиям без патологии). Аналогично 6 исследований будут TP и 3 — FP. Для нашего случайно выбранного ИИ‑сервиса получаются такие метрики:

Accuracy =  (TN + TP)/(TP+FN+FP+TN)=(7 + 6)/(6+4+3+7)=0.65Sensitivity=  TP/(TP+FN)=6/(6+4)=0.60 Specificity =  TN/(TN+FP)=  7/(7+3)=0.70

Разумеется, если мы выберем другое пороговое значение, то и метрики получатся другие. Перебирая все возможные значения, получим набор зависимости чувствительности от специфичности (традиционно принято переворачивать ось и использовать 1 — специфичность) и, соединив точки, получим так называемую «ROC‑кривую» (ROC — receiver operating characteristic), в русской литературе ее иногда называют «характеристической кривой». Стоит обратить особое внимание на точки 0,0 и 1,1: если во всех исследованиях будет принято за патологию пороговое значение 0, чувствительность будет 100%, в то время как специфичность — 0%, аналогично при пороговом значении в +∞ специфичность будет 100%, а чувствительность — 0%.

С помощью графика легко убедиться, что, когда чувствительность (sensitivity) равна 1, специфичность (specificity) имеет значение 0. Это происходит как раз тогда, когда пороговое значение равно нулю, то есть, по мнению ИИ‑сервиса, все исследования относятся к патологическим. Аналогично при вероятности патологии больше 1 (другими словами, все является нормой) получается точка 0,0, в которой чувствительность равна 0, а специфичность — 1. Также стоит заметить, что для «идеального» сервиса кривая будет стремиться к левому верхнему углу, а синяя пунктирная линия описывает непригодный для классификации ИИ‑сервис, так как его результат не лучше, чем при подбрасывании монетки или случайном угадывании.

Выбор оптимального порогового значения для данного ИИ‑сервиса является нетривиальной задачей: как отделить патологию от нормы? Применяя разные пороговые значения, можно регулировать настройку сервиса на минимальное количество.

Одним из подходов является определение индекса Юдена — это вертикальное расстояние от случайной линии до ROC‑кривой. Точка, для которой индекс Юдена максимален, является оптимальной. Следовательно, соответствующее пороговое значение является оптимальным по этому методу.

Альтернативной метрикой для определения порогового значения является выбор точки (и соответствующего порогового значения), наиболее близкой к левому верхнему углу. В литературе этот метод называется минимальным расстоянием (min Distance). Применяя различные пороговые значения, можно настроить ИИ на определенную чувствительность, например, в медицине можно настроить ИИ‑сервис на гипердиагностику, чтобы минимизировать вероятность пропуска патологии.

Кроме этого, одним из ключевых параметров, описывающих качество работы ИИ‑ сервиса, является площадь под кривой (area under curve, AUC). Для идеального сервиса она будет стремиться к единице, а для «монетки» равна 0,5. Если получается AUC меньше 0,5, сервис работает хуже простого угадывания, и, вероятно, есть какие‑то проблемы в интерпретации результатов ИИ‑сервисов, например, необходимо заменить вероятность наличия патологии на вероятность ее отсутствия. Изменив пороговое значение, можно настроить сервис на максимальную чувствительность, специфичность или сбалансированность. Выбор подхода в конечном счете сильно зависит от контекста используемой задачи, и в общем случае может быть изменен в соответствии с полученными метриками.

Веб-инструмент

Со временем количество ИИ‑сервисов, которые мне необходимо было оценивать, начало возрастать в геометрической прогрессии, как и разнообразие вариантов их оценки, — я просто не успевал обрабатывать данные самостоятельно. Усугубляла проблему необходимость делать это практически вручную, пусть даже используя готовые к тому времени скрипты, написанные на Python. Вдобавок коллеги, занимающиеся оценкой диагностической точности ИИ‑сервисов, часто высказывали пожелания поменять язык подписей или цвет кривых, а также посмотреть различные пороговые значения.

Для упрощения своей жизни и автоматизации этой работы я поставил себе задачу написать веб‑сервис, с помощью которого исследователи ИИ‑сервисов могли бы и без моего участия производить ROC‑анализ, загружая данные, например, в формате *.csv или *.xlsx, а на выходе получать ROC‑кривую с доверительными интервалами. Необходимо было предусмотреть возможность визуализировать различные метрики для каждой точки данной кривой, определять класс для каждого исследования одним из описанных выше способов, а также выбирать язык подписей осей и цвета ROC‑кривых.

За ядро проекта была взята библиотека  plotly позволяющая быстро создавать интерактивные веб‑страницы. Для удобства весь сервис собрали как Docker‑контейнер.

Для построения ROC‑кривых использовалась библиотека  roc‑utils.

Доверительный интервал для площади под кривой строился двумя методами: статистическим и алгоритмом DeLong для применения первого использовалась библиотека  roc‑comparison.

В итоге получился, надеюсь, довольно функциональный веб‑сервис Соответственно, туда можно загрузить любой файл в формате.xslx или.csv, — главное, чтобы в нем была колонка, содержащая уникальный идентификатор исследования, например его номер, колонка 'GT' с правильной разметкой и колонка 'result' с вероятностью патологии по мнению ИИ‑сервиса (или другого).

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

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

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

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

Комментарии (3)


  1. Wesha
    05.06.2024 21:44
    +5

    вероятность патологии лежит в диапазоне от 0 до 1, хотя это не является строгим требованием

    , в военное время она может достигать четырёх, а при отражении ядерного удара — даже пяти?


  1. saipr
    05.06.2024 21:44

    Применяя различные пороговые значения, можно настроить ИИ на определенную чувствительность

    Он же Интеллект! Как его настроить? Он же есть или его нет... И если его можно настроить, то, значит, это не интеллект?!


  1. VadimProfii
    05.06.2024 21:44

    Настройте на применение в регионах. Тут беда с медиками.