Как предсказать выживаемость пассажиров Титаника?

В этой статье я расскажу, как создавать модели для прогнозирования выживаемости пассажиров Титаника на Python. Используемая здесь методология также может быть применена к другим аналогичным вариантам использования.

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

Титанические данные можно скачать с сайта Kaggle.

  1. Обработка отсутствующих данных

Есть 4 предиктора, которые содержат недостающие данные: возраст, стоимость проезда, каюта и место посадки.

Возраст

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

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

В приведенной выше таблице не пропущенные возрастные значения были разделены на 9 возрастных групп. Легко изменить вход age_bin_size в функции category_age, чтобы проверить другое количество возрастных интервалов и посмотреть, какой из них имеет смысл. Этот подход несколько произвольный. Я предпочитаю другой способ выбора возрастных интервалов - использование метода кластеризации K-средних.

Примените кластеризацию K-средних к не пропущенным данным о возрасте.

Как показано в выходной таблице, дети (возрастная ячейка №1 с возрастом от 0 до 13 лет) имели самые высокие показатели выживаемости по сравнению с другими возрастными группами.

Основываясь на приведенных выше диапазонах возраста и размерах ящиков, я создал новую переменную под названием «возрастной диапазон».

Стоимость

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

У этого пассажира был билет третьего класса. Я пополнил данные о стоимости проезда по среднему тарифу в билетах 3-го класса.

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

Кабина

В кабине слишком много пропущенных значений. Решил отбросить эту колонку.

Посадка

У двух пассажиров не было данных Embarked, и у обоих были билеты первого класса.

Мы можем проверить медианное значение Embarked по классу Pclass.

Медиана Embarked in Pclass = 1 равна S. Пополните недостающие данные Embarked с помощью S.

2. Разработка новых функций

Размер туристической группы

Было бы интересно сгруппировать людей по номеру билета.

Обратите внимание, что выживаемость увеличивалась с увеличением размера путешествия, за исключением путешествующей группы из 5+ человек.

Затем используйте SibSp и Parch, чтобы дважды проверить, правильно ли определена переменная размера хода.

Количество людей, путешествующих вместе (размер туристической группы), должно быть ≥ количества братьев и сестер / супругов на борту (SibSp) + 1. Здесь мы видим, что это не относится к нескольким пассажирам. Это указывало на то, что несколько пассажиров путешествовали вместе, как семья, но не купили билеты с одинаковыми номерами.

Обновите размер путешествия на основе SibSp.

Я обновил размер хода на основе Parch, используя тот же подход.

Тип туристической группы

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

Заголовок

В переменной Name может быть некоторая информация. Я извлек заголовок из имени и создал новую переменную под названием «заголовок».

Сгруппируйте все остальные заголовки, кроме первых 4, в категорию «другое».

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

3. Быстрое кодирование

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

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

Затем примените горячую кодировку к столбцам, имеющим тип объекта.

Я убрал несколько столбцов, чтобы избежать высокой корреляции в данных. Используя в качестве примера Sex, достаточно сохранить только Sex_female - если Sex_female = 0, это означает, что пол мужской.

4. Корреляция

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

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

5. Моделирование

Наконец-то данные готовы к моделированию!

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

Random Forest дал наивысший балл точности - ~ 84%.

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

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

Спасибо за прочтение! Не стесняйтесь оставлять комментарии и дайте мне знать, что вы думаете.