От данных к инсайтам: использование машинного обучения для обнаружения гепатита С

Начало захватывающего путешествия по созданию проекта с использованием реальных данных, переход от «Учебных лагерей» к набору данных из реального мира может быть довольно ошеломляющим. На каждом этапе вы можете ловить себя на мысли: «Это ново для меня». Я хочу заверить вас, что каждый проект, который я строю, сопровождается именно этим чувством. Как говорится, «Каждое облако имеет серебряную подкладку», так что не бойтесь «взять быка за рога» в сфере исследований, это справедливо.

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

Набор данных

Набор данных, использованный в этой статье, можно найти в Хранилище машинного обучения UCI. Он состоит из двенадцати столбцов, представляющих различные лабораторные измерения как доноров крови, так и пациентов с гепатитом С. Столбец Категория, наша зависимая переменная, содержит такую ​​информацию, как 0=донор крови, 0s=подозрительный донор крови, 1=гепатит, 2=фиброз и 3=цирроз печени.

Обработка данных

Когда дело доходит до анализа набора данных и подготовки его к исследовательскому анализу данных (EDA), обычно выполняется несколько важных шагов. Эти простые шаги включают в себя такие вещи, как: (1) чтение файла, (2) проверка количества столбцов и строк, (3) подсчет значений в столбцах, (4) поиск всех скрытых значений NULL , (5) удаление ненужных столбцов, если это необходимо, и т. д. Выполняя эти шаги, мы гарантируем, что наши данные находятся в хорошем состоянии и готовы к исследовательской фазе.

Исследовательский анализ данных (EDA)

Исследовательский анализ данных необходим в каждом проекте по науке о данных, поскольку он помогает понять данные, найти закономерности, обнаружить аномалии и принять обоснованные решения о предварительной обработке данных, разработке функций и выборе модели. В приведенном выше фрагменте мы удалили ненужный столбец с именем «Безымянный: 0», подсчитали столбцы (всего: 13) и проверили значения NULL.

В большинстве наборов данных встреча со значениями NULL является распространенным сценарием. Тем не менее, крайне важно вникнуть в причины их присутствия. Возможно ли, что эти значения были намеренно опущены? Это поднимает вопрос о том, намеренно ли пациенты скрывали свои медицинские записи, и если это правда, как это потенциально может повлиять на наше исследование?!

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

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

Визуализация данных

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

При интерпретации распределения респондентов по возрасту нормальное распределение показывает, что большинство респондентов сосредоточено вокруг среднего возраста (49 лет), а меньшее количество респондентов находится в крайних точках (возраст: 19, 77 лет).

Распределение наших данных по независимым переменным, по-видимому, соответствует нормальному образцу, за исключением таких характеристик, как ALT, AST, BIL, CREA и GGT, которые отклоняются от нормы. Это показывает необходимость обеспечения масштабируемости наших данных. Чтобы решить эту проблему, мы еще раз взглянем на DataFrame (df) и продолжим соответствующим образом масштабировать наши значения. Здесь мы представляем реальный взгляд на столбец Категория, который служит индикатором необходимости действовать.

Кодировка этикетки

Наша цель – выяснить, есть ли у пациента гепатит С или нет. При подготовке модели к обучению, тестированию и прогнозированию нам необходимо учитывать ожидаемый результат (Да = 1, Нет = 0). Чтобы улучшить наш подход, мы должны (1) скорректировать значения столбцов, которые сильно отличаются от бинарной классификации (значения в диапазоне от 1 до 100), и (2) преобразовать метку Категория в двоичный формат (1 = у пациента гепатит С, 0 = у пациента нет гепатита С).

Корреляционный анализ

Метод Pandas DataFrame corr() используется для вычисления матрицы корреляции, где по умолчанию он вычисляет коэффициент корреляции Пирсона. Обычно для выбора переменных используется порог 0,5. Если мы находим корреляцию между переменными, мы можем отбросить переменную с более низким значением коэффициента корреляции, чем целевая переменная. Есть много других анализов, которые мы можем выполнить, например: Порог дисперсии, Средняя абсолютная разница (MAD) и т. д.

Крайне важно понимать важность выбора функций при разработке модели машинного обучения. Довольно редко все переменные в наборе данных могут быть полезны для создания модели в реальных ситуациях, связанных с наукой о данных. Если две переменные коррелированы, мы можем предсказать одну из другой. Следовательно, если две функции коррелированы, модели нужна только одна, так как вторая на самом деле не добавляет больше информации.

Разделение данных на наборы для обучения и тестирования

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

Масштабирование данных

Scikit-learn предлагает библиотеку Преобразования набора данных, которая может очищать (Предварительная обработка данных), уменьшать (Неконтролируемое уменьшение размерности), расширять (Приближение ядра) или генерировать (Извлечение признаков) представления признаков. Если эти преобразования данных используются при обучении модели, они также должны использоваться в тестовом наборе данных. В противном случае модель не сможет работать эффективно. Обычно мы нормализуем/масштабируем данные после их разделения на обучение и тестирование.

Это связано с тем, чтонабор тестовиграет роль свежих невидимых данных, поэтому он не должен быть доступен на этапе обучения. Следовательно, любая информация, которая поступает из тестового набора до или во время обучения, является потенциальной погрешностью в оценке производительности. В приведенном ниже фрагменте кода создается конвейер с использованием make_pipeline из sklearn.pipeline.. Он применяет масштабирование к данным для обучения с помощью StandardScaler и обучает модель логистической регрессии с помощью Logistic-Regression. Наконец, он вычисляет оценку модели на тестовых данных. (0,96)

Выбор правильного оценщика (алгоритма)

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

Выбранные оценки для нашего набора данных:

  1. Классификатор опорных векторов
  2. K-классификатор ближайших соседей
  3. Случайный лесной классификатор
  4. Классификатор повышения градиента

Следующим шагом является оценка выбранных оценщиков для сравнения различных оценок между ними.

Выход:

Как мы видим, Support Vector Classifier и Gradient Boosting набрали самые высокие баллы с точностью 92%, все остальные алгоритмы набрали немного меньше этого. При работе с моделью машинного обучения, предназначенной для прогнозирования наличия у человека гепатита С, полагаться исключительно на точность в качестве основного показателя может быть не самым подходящим подходом.

Настройка гиперпараметров

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

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

Три наиболее распространенных подхода к настройке гиперпараметров: (1) вручную, (2) GridSearchCV и (3) RandomizedSearchCV. В нашей модели ML мы используем RandomizedSearchCV. Мы можем просто просмотреть param_grid adjustments в документации Scikit-Learn.Проще говоря, для каждого оценщика вы гуглите его параметры в документации Scikit-Learn, а затем добавляете их в словарь, чтобы позже оценить, какой из них работает лучше всего.

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

Матрица путаницы

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

Результат приведенного выше фрагмента кода:

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

Давайте разберем элементы нашей матрицы путаницы:

  • Истинно положительные результаты (TP). В этом случае модель правильно предсказала наличие у пациента гепатита С (метка 1). Есть десять случаев, когда фактический ярлык был один, и модель правильно предсказала его как один. Это действительно положительные случаи.
  • Ложноположительные результаты (FP): модель неправильно предсказала, что у пациента гепатит С (метка 1), но у него нет этого заболевания. Был один случай, когда фактическая метка была нулевой (у пациента нет гепатита С), но модель неправильно предсказала ее как единицу. Это ложное срабатывание.
  • Истинно отрицательные результаты (TN): это случаи, когда модель правильно предсказала, что у пациента нет гепатита С (метка 0). В этом случае есть четырнадцать случаев, когда фактический ярлык был равен нулю, и модель правильно предсказала его как нуль. Это истинно отрицательные случаи.
  • Ложноотрицательные результаты (FN): модель неправильно предсказала, что у пациента нет гепатита С (метка 0), но у него есть заболевание. В этой матрице путаницы нет случаев, когда модель делала ложноотрицательный прогноз (прогнозировал ноль, тогда как фактическая метка равнялась 1).

  • Истинно положительные результаты (TP): десять случаев, когда модель правильно предсказала гепатит С.
  • Ложноположительные результаты (FP): один случай, когда модель неправильно предсказала гепатит С.
  • Истинно отрицательные результаты (TN): четырнадцать случаев, когда модель правильно предсказала отсутствие гепатита С.
  • Ложноотрицательные результаты (FN): ноль случаев, когда модель неправильно предсказывала отсутствие гепатита C.

Другие показатели оценки с использованием перекрестной проверки

Важным шагом в процессе машинного обучения является оценка производительности модели. Обычно наиболее часто используемыми показателями оценки производительности являются точность, точность, полнота и F1. Здесь мы должны сделать шаг назад и подумать о масштабах нашего проекта. Это для выявления пациентов с гепатитом С на основании их медицинских записей? Да.

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

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

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

Заключение

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

Мы имеем дело с точностью 0,91 и отзывом одного прогноза пациентов с гепатитом С. Наша модель более точно прогнозирует пациентов, у которых нет гепатита С, если мы анализируем точность. Если мы посмотрим на показатель отзыва, мы получим идеальное 100% предсказание гепатита С. Вот почему мы можем выбрать метод отзыва.

Наконец, мы можем ясно видеть, что настройка гиперпараметров не увеличила оценку нашей модели, а уменьшила ее с 97,32% до 96%. Важно отметить, что при разработке проекта машинного обучения не существует строгих правил или процедур. Хотя в этой статье я хочу сосредоточиться на обосновании решений, которые мы принимаем, «почему» мы их принимаем и как они могут изменить масштаб нашего проекта.

Спасибо за чтение!