Мы прямо сейчас посреди большого беспорядка. Крах мировой экономики, голод, хаос. Наши лидеры переходят от розыгрыша к удушению за несколько дней. На данный момент нет руководства, нет указаний, нет планов, нет выхода. Многие из нас сражаются на переднем крае здравоохранения, а большинство из нас просто наблюдают в режиме ожидания.

Вся эта неразбериха вызвана простым вирусом COVID-19 — в основном потому что мы не сделали многого при подготовке — но сейчас, что более важно, потому что мы не можем определить, переносят ли люди болезнь или нет. Если мы не сможем протестировать людей, мы не сможем эффективно сдержать вспышку, и болезнь будет распространяться. У нас не хватает наборов для тестирования.

Но что, если… мы можем вообще отказаться от наборов для тестирования и выяснить, является ли пациент носителем вируса, на основе данных, которые уже есть у пациента? Клинические данные (анализ крови, анализ газов венозной крови, возраст), которые можно легко получить на месте, во время регистрации в любой больнице или медицинском центре? Будет ли это иметь значение?

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

Для торговли все эти данные затем закачиваются в компоненты, встроенные в программное обеспечение, каждый из которых имеет разные алгоритмы, ищущие разные условия с использованием методов искусственного интеллекта. Эти компоненты являются программными, они не похожи ни на R2D2, ни на C3PO, но мы их ласково называем «роботами». Для большинства этих роботов результатом всей обработки данных является один из двух сигналов: ПОКУПКА или ПРОДАЖА.

Что, если… мы могли бы настроить некоторые из этих методов для обработки данных — не финансовых данных, а медицинских данных — и выводить один из двух сигналов: БОЛЬНОЙ или ЗДОРОВЫЙ?

Набор тестов на основе данных.

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

Сценарий

Всемирная организация здравоохранения (ВОЗ) охарактеризовала COVID-19, вызванный SARS-CoV-2, как пандемию 11 марта 2020 года. Это решение было принято примерно в то же время, когда возник риск экспоненциального роста числа случаев. чтобы перегрузить системы здравоохранения во всем мире спросом на койки в отделениях интенсивной терапии, намного превышающим существующие возможности.

Текущий консенсус заключается в том, что раннее тестирование — лучший практический вариант сдерживания распространения смертельного вируса на данном этапе. Мы можем ходить по кругу и перечислять все причины, по которым мы не можем тестировать что-то такое простое, как вирус, но основная причина очень проста: тестирование каждого случая было бы непрактичным, а результаты тестов могут быть задержаны даже если бы тестировалась только целевая подгруппа.

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

Это мотивация для этого упражнения: учитывая нашу перегруженную систему здравоохранения и ограничения на проведение тестов для обнаружения SARS-CoV-2, мы оцениваем возможность предоставления роботизированной замены, управляемой электронными данными.

Данные

Этот набор данных получен в результате вызова, запущенного Больницей Альберта Эйнштейна, расположенной в округе Сан-Паулу, Бразилия. Округ находится в одноименном штате. До 27 марта 2020 года в штате Сан-Паулу было зарегистрировано 1223 подтвержденных случая заболевания COVID-19, 68 из которых скончались. По состоянию на 23 марта 2020 года в округе Сан-Паулу с населением около 12 миллионов человек, где расположена больница Альберта Эйнштейна, было зарегистрировано 477 подтвержденных случаев заболевания и 30 связанных с ним смертей.

Набор данных отражает реальность этих цифр по состоянию на 28 марта 2020 года или около того и содержит анонимные данные пациентов, у которых были взяты образцы для проведения ОТ-ПЦР на SARS-CoV-2 и дополнительных лабораторных анализов во время визита в больницу.

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

Большая часть признаков в наборе данных является категориальной. Категориальные данные предоставлялись либо в виде целочисленных показателей (например, тип госпитализации пациента), либо в виде простых строк, обозначающих категорию, на английском или португальском языке.

В ходе лечения врач может принять решение о госпитализации пациента. Пациента могут госпитализировать в палату, полуреанимацию или отделение интенсивной терапии. Распределение данных по всем условиям можно визуализировать в виде скрипичного графика:

Просто просмотрев визуализацию, мы можем вывести несколько интересных взаимосвязей:

  • Для популяции пациентов, которые не были госпитализированы, распределения кажутся примерно такими же, как и общее распределение по возрастным квантилям во всей больнице. Поскольку абсолютное большинство обращений в больницу не требовало госпитализации, это ожидаемо.
  • Уровень госпитализации с отрицательными случаями намного выше в более низких возрастных диапазонах, чем в старшем населении. Не уверен, соответствует ли это обычному повседневному распределению госпитализаций.
  • Для положительных случаев показатели госпитализации меняются на обоих концах возрастного квантиля, т. Е. Вес более высоких квантилей увеличивается по мере того, как мы продвигаемся вверх по тяжести типа госпитализации. Это, кажется, отражает реальность COVID-19, который более серьезно влияет на более старшее население.

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

ВНИМАНИЕ. До сих пор мы просто выделяли этапы процесса. С этого момента требуется базовое понимание науки о данных. Если вы действительно хотите пройтись по гиковским деталям, вы можете двигаться дальше и, что еще лучше, обратиться к ядру этого упражнения.

Разработка функций

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

Все категориальные признаки были закодированы в горячем режиме в соответствии со стандартными процедурами, т.е.:

df3 = pd.concat([df3, pd.get_dummies(df3[c], prefix=c)], axis=1) df3.drop(c, inplace=True, axis=1)

Поскольку наша целевая зависимая переменная указывает на результат теста («sars_cov_2_exam_result»), мы предположили, что все признаки «patient_admitted_*» также являются зависимыми переменными для других несвязанных упражнений по классификации, и исключили их из набора признаков независимых переменных.

Мы использовали возрастной квантиль в качестве непрерывных переменных и нормализовали их, т.е.:

df3['patient_age_quantile'] = (df.patient_age_quantile - df.patient_age_quantile.mean()) / df.patient_age_quantile.std()

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

Вменение

Поскольку доступный набор данных является скудным (подробнее об этом см. в «Заключительных заметках»), нам пришлось рассмотреть несколько альтернатив:

  • Вменение для классификации не является обязательным для всех алгоритмов. Мы попробуем алгоритмы классификации без импутации.
  • Непрерывные переменные не зависят от вертикального (строка за строкой) измерения признаков, поэтому не имеет практического смысла пробовать численные вменения (например, среднее или аналогичное).
  • Метрики классификации были собраны с использованием вменения подобия (подобие K-ближайших соседей). Подробнее об этом позже.

Учитывая это, мы перешли к дальнейшим шагам с двумя вариантами нормализованного набора данных с горячим кодированием для дальнейшего анализа (а) разреженного набора данных для оптимизированной классификации повышения градиента (XGBoost) и (б) плотный, K-ближайший - Neighbours вменили набор данных для обучения, тестирования и сравнения вариантов алгоритмов обучения ансамбля пакетов и бустинга.

Классификация и измерения

Для этого шага мы принимаем во внимание два соображения.

Первое соображение состоит в том, чтобы продолжать думать, что прозрачность методов является положительным моментом, и не верить в то, что наука, основанная на данных, служит какой-либо пользе. С этой целью мы намеренно держались подальше от автоматизированных методов машинного обучения. Мы нашли время, чтобы как следует разглагольствовать об этом ниже, так что следите за обновлениями.

Второе соображение — простота. Начните с простых классификаторов. Вы будете поражены тем, на что способны логистический, линейный, стохастический градиент и бэггинг, прежде чем вы перейдете к RNN, LSTM, GRU и тому подобному. Будь проще.

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

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

Вот как выглядит визуальное представление сравнения производительности оценщика перекрестной проверки с точки зрения трех визуализаций, сверху вниз: кривая обучения, масштабируемость и производительность модели:

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

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

Кривая обучения показывает выдающийся балл как для оценок без вменения, так и для оценок с бэггингом с точностью около 92%. В то же время линейное увеличение как времени обучения, так и оценки точности по мере увеличения размера набора обучающих данных.

Фантастика. Эта модель точно предсказывает 92% диагностики заражения пациентов SARS-Cov2. Полный успех. Правильно?

Абсолютно нет. Я объясню.

Точность ничто

Спросите любого изучающего медицинские науки, и он скажет, насколько важна бинарная классификация в изучении диагностики. В упражнениях по бинарной классификации, в которых мы должны предсказать один из двух вариантов (например, этот, БОЛЬНОЙ и ЗДОРОВЫЙ, или другие, где вам нужно выбирать между ПОКУПАТЬ и ПРОДАВАТЬ или, в более общем смысле, ПОЗИТИВ и ОТРИЦАТЕЛЬНЫЙ), вас в основном беспокоят две вещи: сколько раз вы правильно выбрали ПОЛОЖИТЕЛЬНУЮ сторону, и сколько раз вы правильно выбрали НЕГАТИВНУЮ сторону. Жаргон для каждого из этих случаев — «истинно положительный» и «истинно отрицательный». Точно так же количество раз, когда вы неправильно выбираете любую сторону, называется «ложноположительным» и «ложноотрицательным».

Точность — это, по определению, доля истинных результатов (ПОЛОЖИТЕЛЬНЫХ или ОТРИЦАТЕЛЬНЫХ) в общем количестве прогнозов. Вы видите, что пошло не так?

В нашем случае это объясняет, почему двоичный классификатор с точностью 92% является ужасным предсказателем. Поскольку набор данных несбалансирован:

df[y_column].value_counts()
negative 5086 positive 558 Name: sars_cov_2_exam_result, dtype: int64

Поскольку он правильно предсказал почти все отрицательные случаи и пропустил почти все положительные, предиктор имеет действительно высокую точность, потому что у него намного больше отрицательных, чем положительных, а не из-за его качества. Вы никогда не захотите использовать этот предиктор для диагностики пациентов.

Мы надеемся, что беглый взгляд на матрицу путаницы ряда классификаторов, которые мы приняли во внимание, может сделать ее более ясной:

Теперь это ясно и описательно, и графически. Но вопрос остается. Если не точность, что мы можем использовать для измерения качества нашего классификатора?

Кривая рабочих характеристик приемника

На помощь приходит кривая рабочих характеристик приемника, или ROC. Кривая ROC была впервые разработана инженерами-электриками и инженерами-радиолокаторами во время Второй мировой войны для обнаружения вражеских объектов на полях сражений и вскоре была введена в клинические тесты в психологии.

У ROC есть причудливое название для чего-то очень, очень простого. ROC отслеживает количество истинных срабатываний по вертикальной оси и количество ложных срабатываний по горизонтальной оси.

Общее качество классификатора определяется так называемой «площадью под кривой» или AUC. Оптимальный классификатор будет иметь AUC=1,0, в то время как случайное предположение даст AUC=0,5 (так называемая линия «случайности» или «отсутствия дискриминации»).

Итак, теперь к моменту истины: как наши классификаторы работают с метрикой AUC?

И вот оно. Наши лучшие классификаторы дали AUC 0,69. Лучше, чем шанс, но все еще нет сигары. Поскольку только 0,95 AUC или выше считаются приемлемыми для медицинских учреждений, я с сожалением сообщаю, что наши классификаторы не годятся для такого рода приложений. облом.

Что еще? Кривая точного отзыва

Итак, прежде чем мы закончим, важно подчеркнуть, что дисбаланс может возникнуть как в положительных, так и в отрицательных классах. С этой целью кривая точного отзыва считается более информативной, чем комбинация ROC / AUC для бинарных, несбалансированных классификаций (в случае этого набора данных).

Precision-Recall — полезная мера успеха предсказания, когда классы очень несбалансированы. В информационном поиске точность является мерой релевантности результатов, а полнота — мерой доли фактических положительных результатов, которые были идентифицированы правильно. Итак, как наши классификаторы работают по этой метрике?

Кривая точность-отзыв показывает компромисс между точностью и полнотой для различных пороговых значений. Большая площадь под кривой представляет как высокую полноту, так и высокую точность, где высокая точность связана с низким уровнем ложноположительных результатов, а высокая полнота связана с низким уровнем ложноотрицательных результатов. Высокие оценки для обоих показывают, что классификатор возвращает точные результаты (высокая точность), а также возвращает большинство всех положительных результатов (высокая полнота).

Все еще нехорошо, но я просто хотел поговорить об этом. Сделанный.

Что нам нужно?

Данные. Низкое качество классификаторов связано с разреженностью доступного набора данных, а вменение может сделать лишь некоторые из них. Другими словами, сценарий не был полностью объяснен в точках данных (почему бы не собрать все клинические данные пациентов и не сделать их доступными?) и неполный.

Вы слышали выражение «данные — это новая нефть»? Это упражнение показывает, что данные также являются новой кровью. Данные — это жизнь.

Вы хотите помочь? Есть ли у вас доступ к (законным) данным, которые могут помочь заполнить пробелы, или у вас есть идеи, как мы можем получить их?

"Связаться".

Намерение

Это простое упражнение, на выполнение которого от загрузки данных до классификации у меня ушло около полутора часов. Ввод всего этого занял, конечно, больше времени. Всего около 10 часов, но подготовка этого сопутствующего чтения должна была быть частью процесса. Просто сбросить ядро ​​на kaggle и ожидать, что люди приложат все усилия, чтобы его расшифровать, — это бесполезно, по крайней мере, не в такое неотложное время, как то, через которое мы сейчас проходим.

Хорошо, зачем мне все это?

Есть две основные цели этого упражнения. Мое первое намерение — помочь. Я живу в первой зоне конфликта в США, примерно в полутора милях к северу от Нью-Йорка. Пандемия сильно ударила по нам, и люди страдают. Я зарабатываю на жизнь исследованием и применением таких технологий, и если это хоть как-то поможет, пусть даже немного, будет здорово. Мое второе намерение — информировать. Надеюсь, кто-то наткнется на эти заметки из бесцельного поиска в Google и узнает что-то полезное, а вместе с тем сможет протянуть руку помощи.

Нам (людям) нужна вся помощь, которую мы можем получить на данный момент.

О науке… и науке, основанной на данных

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

  1. фрагментация: набор данных представляет собой компиляцию нескольких фрагментов из разных источников и доступен сообществу kaggle, чтобы люди помогали им объединять данные.
  2. это чрезвычайная ситуация: процесс сбора данных от людей в настолько хаотичен, что они относятся к пациентам по-разному (пациент А сдает кровь, пациент Б не делал, а Б был кем-то отправлен домой — так что теперь они не могут получить его кровь — давайте теперь позаботимся о пациенте С).
  3. именно так обстоят дела в медицинской практике: может быть, я все-таки не такой врач (без каламбура).
  4. это всего лишь упражнение по исследованию данных.

Я очень, очень, очень надеюсь, что это не так (4). На самом деле, я думаю, мы можем быть уверены, что это не так. Это было бы слишком расточительно, а ситуация слишком непростая.

Тем не менее, почему-то в науке до сих пор проводится много учений data-first, и они просто процветают в кризисные времена. Наука, ориентированная на данные, — это то, что несколько лет назад рекламировалось как движущая сила заявления о конце науки. В этом утверждении вместо того, чтобы начинать с наблюдений, обоснованной гипотезы и методического исследования, метод конца науки требовал, чтобы люди использовали вычислительную мощность и науку о данных для поиска корреляций в данных, а оттуда начал рисовать объяснения того, что может быть в игре. Были буквально тысячи сообщений о неправильном использовании процедур и, как следствие, предвзятость всех видов, подпитывающая оправдание плохой науки и ошибочной государственной политики.

По сути, наука, основанная на данных, — это не наука.

И помните — фейковая наука, притворяющаяся наукой, и загнала нас в эту дыру. Давайте договоримся перестать копаться и начнем помогать друг другу выкарабкиваться из этой неразберихи.

Первоначально опубликовано на http://jfaleiro.wordpress.com 31 марта 2020 г.