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

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

Прогнозирование возникновения инсульта у субъектов:

Набор данных, используемый для этого исследования, можно оценить здесь с ответами 62 001 пациента мужского и женского пола, перенесших инсульт (1) и не перенесших (0). Выбранный набор данных несбалансирован, инсульт зарегистрирован менее чем у 800 пациентов. Этот дисбаланс будет обработан ROS (случайная передискретизация для выравнивания данных). См. Словарь данных ниже:

Теперь самое интересное!

Шаги, необходимые для построения модели логистической регрессии:

  • Импорт библиотек
  • Прочитать в CSV-файле
  • Предварительная обработка данных
  • Обработка категориальных переменных

Импорт библиотек:

Импортируйте необходимые библиотеки в блокнот Jupyter:

Прочтите в файлах CSV:

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

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

train_data = pd.read_csv (‘train_2v.csv’)
test_data = pd.read_csv (‘test_2v.csv’)

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

Проверка нулевых значений в наборе данных.

train_data.isnull (). sum () / len (train_data) * 100

3% и 30,6% ячеек BMI и Smoking_status равны нулю.

test_data.isnull (). sum () / len (train_data) * 100

1% и 13% ячеек BMI и Smoking_status равны нулю.

Чтобы управлять недостающими клетками ИМТ в train_data:

train_data [«bmi»] = train_data [«bmi»]. fillna (train_data [«bmi»]. mean ())

Этим я заполнил пустые ячейки средним ИМТ набора данных, равным 28,6.

Обработка категориальных переменных:

Label Encoder преобразует категориальные переменные / функции в единицы или нули в зависимости от значения переменной. Подробнее о Label Encoder () читайте здесь.

Для просмотра этого изменения используйте: train_data.shape () или train_data.head ()

label = LabelEncoder ()
train_data ['пол'] = label.fit_transform (train_data ['пол'])
train_data ['ever_married'] = label.fit_transform (train_data ['ever_married']) < br /> train_data ['work_type'] = label.fit_transform (train_data ['work_type'])
train_data ['Residence_type'] = label.fit_transform (train_data ['Residence_type'])

Столбец ID уникален для каждого предмета, и его следует отбросить, так как он не повлияет на модель:

train_data.drop ([«id»], axis = 1, inplace = True) # удаление столбца id.

Пока что обработаны все переменные, кроме переменной Smoking_status. В переменной Smoking_status в настоящее время отсутствует более 30% нуля (в данном случае NaN).

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

training_data_without_smokingstatus = train_data [train_data [‘Smoking_status’]. isnull ()] # для пациентов без информации о курении.

# отбрасывает столбец статуса курения для нулевого набора данных статуса курения.
training_data_without_smokingstatus.drop (columns = ’Smoking_status’, axis = 1, inplace = True)

print («Тренировочные данные без формы статуса курения {}» .format (training_data_without_smokingstatus.shape))

training_data_with_smokingstatus = train_data [train_data [‘Smoking_status’]. notnull ()] # для пациентов с информацией о курении.

print («Тренировочные данные с формой статуса курения {}» .format (training_data_with_smokingstatus.shape))

Рад, что вы зашли так далеко! Чтобы избежать ситуаций TL и DR, я завершу статью в другом посте на Medium. Увидимся там:

Моя следующая статья будет посвящена следующему:

Обработка дисбаланса данных

Построение модели

Тестирование модели

ОБНОВИТЬ:

Я выполнил проект здесь:



Использованная литература: