Начните свой первый проект моделирования данных и предскажите, есть ли у пациента диабет

(НЕОБХОДИМО: скачать блокнот Jupyter здесь)

Обзор проблемы:

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

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

Подход высокого уровня:

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

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

Давайте приступим-



1. Анализ данных:

Другие наблюдения:

  • Большинство функций [инсулин, беременность и т. д.] имеют выбросы, которые можно устранить, чтобы улучшить производительность модели.
  • Коробчатая диаграмма может дать лучшее понимание распределения непрерывных переменных.
  • Узнайте, как толщина кожи, уровень глюкозы или ИМТ могут быть равны 0. Если данные отсутствуют, удалите эти записи.

Блочная диаграмма анализа непрерывных переменных [Читайте комментарии, чтобы понять выводы. Чтобы узнать больше о ящичковых диаграммах, посмотритеПерекосы и коробчатые диаграммы]-

Ключевые уточнения:

  • Инсулин имеет много значений равных 0. Мы можем удалить этот столбец и проверить производительность модели.
  • Искаженными данными можно легко управлять, понимая контекст данных и создавая значимые категории, например. Большинство значений артериального давления находятся в пределах нормы. Кроме того, низкое артериальное давление имеет больше больных сахарным диабетом, чем высокое. Независимо от того, составляет ли АД 120 или 100, влияние на диабет остается одинаковым. Но это не то же самое, как если бы у пациента было 60 и 80, так как у одного низкое кровяное давление, а у другого нормальное. Таким образом, мы можем создать 3 категории: низкое АД[2], нормальное BO[0] и высокое АД[1], уменьшая влияние асимметрии и выбросов и сохраняя при этом информацию, относящуюся к диабету.
  • Данные несбалансированы, так как в наборе данных больше «пациентов без диабета», чем диабетиков. Таким образом, мы можем использовать SMOTE для балансировки обучающих данных.

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

f = plt.figure(figsize=(19, 15))
plt.matshow(diabetesDF.corr(), fignum=f.number)
plt.xticks(range(diabetesDF.shape[1]) ), мочеизнурение DF.columns, размер шрифта = 14, вращение = 45)
plt.yticks (диапазон (diabetesDF.shape [1]), мочеизнурение DF.columns, размер шрифта = 14)
cb = plt.colorbar ( )
cb.ax.tick_params(labelsize=14)
plt.title('Матрица корреляции', fontsize=16);

Наблюдения:

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

2. Запустите быстрое автоматическое моделирование, чтобы найти наиболее эффективные базовые модели [предоставит повторно используемый код, который вы можете применить к любому набору данных для поиска наиболее подходящих моделей]

Вывод:

«Два лучших варианта для этих данных — повышение градиента и случайный лес»

3. ГИПОТЕЗА: тщательный выбор функций и настройка гиперпараметров

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

  • Инсулин: сохранен, поскольку он по-прежнему дает важную информацию для результата
  • АД делят на низкое, нормальное и повышенное
  • Беременность от 1 до 4 и 4+
  • Колонка толщины кожи удалена
  • Проведена передискретизация обучающих данных
  • Оптимизировано, чтобы получить больше ошибок типа 1 [сообщение пациентам, не страдающим диабетом, что они диабетики]. Ошибки 2-го типа представляют собой риск в данном случае.

Классификатор повышения градиента-

GradientBoostingClassifier (n_estimators = 80, learning_rate = 0,1, min_samples_split = 100, min_samples_leaf = 50, max_depth = 4, subsample = 0,8, random_state = 20)

Параметр настроен для получения оценки AUC 84,38%

  • Оценка F1: 79,15
  • Матрица путаницы: 75 14 10 31

Классификатор случайного леса-

RandomForestClassifier (n_estimators = 500, min_samples_split = 4, min_samples_leaf = 3, max_features = ‘sqrt’, max_depth = None, bootstrap = False)

Параметр настроен для получения оценки AUC 85,5%

  • Оценка F1: 77,67
  • Матрица путаницы: 73 16 10 31