Машинное обучение для прогнозирования пациентов с диабетом

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

Цель моделирования

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

Ожидаемый результат

Ожидается, что это исследование поможет нам создать прогностическую модель с использованием бинарной классификации ИЛИ случайного леса. Эти модели можно использовать

  1. Чтобы диагностически предсказать, есть ли у пациента диабет, на основе определенных диагностических измерений, включенных в набор данных.
  2. Какие факторы играют основную роль в определении диабета

На основе модели прогнозирования своевременная диагностика диабета поможет принять профилактические меры.

ДАННЫЕ

Источник данных: набор данных PIMA Indian Diabetes: https://www.kaggle.com/uciml/pima-indians-diabetes-database

Вменение данных

Идентифицированные нулевые значения в некоторых переменных – артериальное давление, ИМТ, глюкоза, инсулин и толщина кожи – имеют минимальное значение 0, что невозможно, и, следовательно, СЛЕДУЮЩИЙ МЕТОД ОТВЕТНЫХ НАПРАВЛЕНИЙ для импутации значения, в котором вместо простой замены нулевых значений медианой классифицируется переменная на основе по результату, а затем заменил «нулевые» значения медианой «по классам».

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

Использование сводки (диабет) для анализа ОПИСАТЕЛЬНОЙ СТАТИСТИКИ данных

Кажется, классовый дисбаланс

Из гистограммы мы можем видеть

  1. Возраст, диабет, родословная, функция и инсулин имеют перекос вправо
  2. Глюкоза слегка смещена влево
  3. Большинство субъектов находятся в возрасте от 21 до 30 лет.
  4. Артериальное давление и ИМТ имеют тенденцию показывать нормальную тенденцию

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

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

Для дальнейшего подтверждения было проведено дополнительное тестирование для подтверждения корреляции с использованием R

Поскольку значение p меньше 0,05, мы можем считать, что существует значительная корреляция между возрастом и беременностью, но для ИМТ и толщины кожи значение p больше 0,05, поэтому между ними нет значительной корреляции.

Поскольку значение p намного меньше 0,05, оно показывает отклонение от нормы, и, следовательно, нулевая гипотеза, т.е. переменная-предиктор (кровяное давление) является нормальной, должна быть отклонена.

Поскольку наша переменная Predictor не соответствует нормальности, мы выполним тест Уилкокса для двух групп переменных ответа Y0 и Y1.

мы видим, что значение P меньше 0,05, что показывает, что существует значительная разница между двумя группами Y0 и Y1, и, поскольку Y0 соответствует значению ответа 0 и аналогично Y1 соответствует 1, существует большая разница между двумя группами, и, следовательно, мы можем сказать, что кровь Давление оказывает большее влияние на определение того, есть ли у пациента диабет или нет.

Проверка гипотез для выбора категориальных признаков

Поскольку наша переменная ответа «Результат» является категориальной, мы должны использовать критерий хи-квадрат Пирсона, чтобы определить, должен ли возраст быть частью модели. Значение P, которое мы получаем, намного ниже 0,05, поэтому мы можем сказать, что возраст является важным предиктором для зависимой переменной.

Чтобы подогнать модель, мы должны сначала разделить данные на обучающие и тестовые данные.

Подбор модели

Начато создание модели со всеми доступными функциями

glm (формула = as.factor(Результат) ~ as.factor(Возраст2) + Беременности + АД2 + ST + Инсулин2 + ИМТ2 + Функция родословной диабета, семья = «биномиальная», данные = поезд1)

Интерпретация оценок параметров

Проверка гипотезы, проведенная на коэффициенте параметра, основана на том, что коэффициент параметра погоды будет равен нулю,

Для этой нулевой гипотезы: Бета = 0 Альтернативная гипотеза: Бета ‹› 0

➢ Значение P менее 0,05 указывает на отклонение нулевой гипотезы и на то, что индивидуальная незначительность признака в модели

➢ Толщина кожи, инсулин, ИМТ и функция родословной диабета — вот некоторые важные характеристики модели.

➢ Для любой категориальной переменной (КАТЕГОРИЯ) = 0 обозначает базовый уровень для категориальной переменной. Все оценки для остальных категорий сравниваются с использованием этой базовой категории.

➢ Возраст2=1 (возрастной диапазон от 31 до 40 лет) по сравнению с возрастом2=0 (возрастной диапазон от 21 до 30 лет) будет иметь в 1,09 раза больше шансов заболеть диабетом, учитывая, что все остальное не изменилось.

Выбор функции. Функция stepAIC в R выполняет ПОШАГОВЫЙ ВЫБОР МОДЕЛИ с целью минимизировать значение AIC. Здесь мы запустим пошаговый код AIC для выбора функций.

#### Выбор признаков для подгонки сокращенной модели логистической регрессии

библиотека (МАСС)

шаг = шаг AIC (полный мод)

Шаг: AIC=581,76

as.factor(Результат) ~ as.factor(Age2) + ST + Insulin2 + BMI2 + DiabetesPedigreeFunction

Мы можем видеть НАИМЕНЬШИЙ AIC IS 581,76, полученный путем настройки количества предикторов. Из кода видно, что Толщина кожи, Функция родословной диабета, ИМТ, Инсулин и Возраст — это функции, выбранные с помощью Step AIC(), соответствующие самому низкому AIC во всех моделях подмножества.

НОВАЯ МОДЕЛЬ: mod1=glm(as.factor(Outcome)~as.factor(Age2)+ST+Insulin2+BMI2+DiabetesPedigreeFunction,data=train1,family="binomial")

Результаты показали снижение значений AIC для выбранных функций.

Интерпретация коэффициентов модели с точки зрения шансов:

Непрерывная функция: индекс массы тела (ИМТ)

Коэффициент (оценка), соответствующий ИМТ, равен 0,06.

При увеличении ИМТ на 1 вероятность наличия у пациента диабета увеличивается на (1–e0,06)∗100 = -6%.

Увеличение ИМТ оказывает пагубное влияние на здоровье пациента с диагнозом сахарный диабет.

Категориальная характеристика : Age2 [1]

Коэффициент (оценка), соответствующий возрасту 2 [1] = 1, равен 1,168.

Это означает, что пациенты в возрасте от 31 до 40 лет имеют шансы

диабет (e1,168−1) × 100 = на 222% выше по сравнению с базовой категорией возрастного диапазона 21–30 лет.

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

Гистограмма предсказанной вероятности

test1_new=test1[,c(7,9,11,12,15,16)]# создание тестовых данных только с выбранными функциями

pred_prob = прогноз (mod1, test1_new, тип = «ответ»)

hist(pred_prob) # распределение предсказанных вероятностей

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

Теперь мы даже можем использовать эту модель для прогнозирования вероятности того, что у любого пациента будет диабет. Прогнозируется, что пациент в возрасте от 31 до 40 лет (Возраст2 = 1), ST = 25, инсулин = 201, ИМТ — 27 и DiabetesPedigreeFunction = 0,578, имеет вероятность диабета 51,7%.

## ПРОГНОЗИРОВАНИЕ ВЕРОЯТНОСТИ ДИАБЕТА ОТ ЛИЦА

sampletest=data.frame(t(c(1,25,201,27,0,578)))

colnames(sampletest)=c("Age2", "ST", "Insulin2", "BMI2", "DiabetesPedigreeFunction")

Кривая ROC и пороговое значение

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

библиотека (pROC) ### Построение графика ROC

roc1=roc(test1[,16],pred_prob,plot=TRUE,legacy.axes=TRUE)

сюжет (рок1)

roc1$auc

Кривая ROC имеет значение AUC 0,8892, что означает хорошую классификационную способность модели.

Использование ROC для определения порога

Кривая ROC помогает нам решить, какой порог лучше

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

Низкий порог: низкая специфичность, высокая чувствительность.

thres=data.frame(sen=roc1$sensitivities, spec=roc1$specificities,thresholds=roc1$thresholds)

thres[thres$sen›0,7&thres$spec›0,4,]

После вычисления различных значений чувствительности и специфичности, соответствующих разным порогам ROC-кривой, мы решили рассматривать только те модели, у которых значения чувствительности и специфичности превышают 0,7 и 0,4 соответственно. Из полученных значений и после проведения некоторых испытаний мы выбираем ПОРОГ 0,20.

Проверим это на том же пациенте, который мы предсказывали ранее, где возрастной диапазон пациентов составляет 31–40 лет (возраст2 = 1), ST = 25, инсулин = 201, ИМТ — 27 и DiabetesPedigreeFunction = 0,578, прогнозируемая вероятность 0,517. быть диабетиком.

Поскольку прогнозируемая вероятность превышает пороговое значение 0,20, мы классифицируем пациента как диабетика.

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

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

библиотека (каре)

pred_Y=ifelse(pred_prob › 0.20,1,0)

матрица путаницы (as.factor (test1 [, 16]), as.factor (pred_Y)

ТОЧНОСТЬ модели кажется хорошей, т.е. 68,75%. Около 58 пациентов были ошибочно классифицированы как диабетики.

ЧУВСТВИТЕЛЬНОСТЬ модели довольно высока ~ 97,1%, что означает низкую вероятность того, что модель ошибочно классифицирует пациента как не страдающего диабетом. СПЕЦИФИЧНОСТЬ модели также является средней, то есть 52,85%, что означает, что модель с вероятностью ~ 50% может классифицировать пациента как диабетика.

СЛУЧАЙНАЯ МОДЕЛЬ ЛЕСА

Классификация случайного леса основана на деревьях решений

Количество деревьев и переменных выбрано равным 500 и 6 . Эти гиперпараметры выбраны для возврата наименьшей ошибки Out Of Bag.

Применение той же модели к тестовым данным

Матрица путаницы показывает, что 114 + 59 пациентов классифицируются правильно, тогда как 11 + 8 ошибочно классифицируются случайным лесом.

Частота ошибок вне пакета (OOB)

OOB в общей модели составляет 11,2%, что означает, что почти 11% выборок OOB классифицируются неправильно. У той же модели при проверке на тестовых данных показатель OOB снизился до 9,9%.

Поскольку частота ошибок OOB низкая и, следовательно, использование случайного леса гораздо точнее, чем использование логистической регрессии для классификации.

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

Выполнение кода ниже классифицирует пациента как диабетика, который правильно классифицируется

Заключение

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

Таким образом, мы выбираем КЛАССИФИКАТОР СЛУЧАЙНЫХ ЛЕСОВ КАК ПРАВИЛЬНУЮ МОДЕЛЬ ИЗ-ЗА ВЫСОКОЙ ТОЧНОСТИ, ТОЧНОСТИ И ПОКАЗАНИЯ. Одной из причин, по которой классификатор случайного леса показал улучшенную производительность, было наличие выбросов. Как упоминалось ранее, поскольку случайный лес не является алгоритмом, основанным на расстоянии, на него не сильно влияют выбросы, тогда как алгоритм на основе расстояния, такой как логистическая регрессия, показал более низкую производительность.

В зависимости от важности функции:

Возраст является наиболее важным фактором, определяющим начало диабета, за которым следуют ИМТ и уровень инсулина.

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

Как мы видим, результаты, полученные с помощью функции «Значимость признаков», имеют смысл, поскольку одним из первых факторов, который фактически отслеживается у пациентов с высоким риском, является возраст. С увеличением возраста шансы заболеть диабетом также увеличиваются. Повышенный ИМТ также может указывать на риск развития диабета II типа. В норме, особенно при диабете II типа, существует высокий риск развития по мере увеличения возраста человека (учитывая другие факторы).

Теперь у нас есть модели классификации, отвечающие нашим основным задачам:

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

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

Если вы хотите увидеть, как были написаны коды R, обратитесь к https://github.com/shilpi17/R-and-Python/tree/52a4e070a703e7b251019ef22ca6eed64afcf4f3.

Ссылки:

Набор данных и информация о данных: https://www.kaggle.com/uciml/pima-indians-diabetes-database

Точность и отзыв: https://towardsdatascience.com/beyond-accuracy-precision-and-recall-3da06bea9f6c