Когда он был впервые спущен на воду в 1912 году, британский пароход был самым большим кораблем в мире. Невероятный 882 фута в длину и 175 футов в высоту, Титаник был провозглашен самым дорогим, самым роскошным кораблем, когда-либо построенным. Говорили, что он «непотопляемый». 10 апреля 1912 года «Титаник» отплыл в Нью-Йорк. Через четыре дня после отплытия случилось великое бедствие: «Титаник» затонул на дне северной части Атлантического океана.

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

Найдите ссылку на блокнот Kaggle здесь

Подробнее о проблеме здесь

Теперь приступим к кодированию

У нас есть два набора данных

Набор данных для обучения: этот набор данных используется для обучения моделей машинного обучения (train.csv)
Тестовый набор данных: этот набор данных используется для тестирования моделей машинного обучения (test.csv)

Описание столбца

  1. PassengerId : уникальный идентификационный номер для каждого пассажира
  2. Выжил : 1-выжил и 0-умер
  3. Pкласс: Пассажирский класс
  4. Имя: Имя пассажира
  5. Пол: Пол пассажира
  6. Возраст : Возраст пассажира
  7. SibSp : Количество братьев и сестер/супругов
  8. Parch :Количество родителей/детей
  9. Билет: номер билета
  10. Стоимость : Цена билета
  11. Кабина : Категория кабины
  12. Высадка: порт, в котором пассажир прибыл (C = Шербур, Q = Квинстаун, S = Саутгемптон)

Сначала давайте загрузим и проверим оба набора данных.

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

Следующим шагом будет выполнение базового анализа данных.

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

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

Pclass против выживших

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

Секс против выживания

у самок больше шансов выжить, чем у самцов

СибСп против выживших

Когда SibSp равен 0,1 или 2, у пассажиров больше шансов выжить

Парч против выживших

Когда Parch равен 0,1,2 или 3, у пассажиров больше шансов выжить

Отправившиеся против выживших

Когда Embarked имеет статус C, у людей больше шансов выжить по сравнению с Q и S

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

Итак, моей целью было повысить точность с 0,77511, и после нескольких часов кодирования и 40+ версий я смог повысить точность до 0,78708.

Вот мой прогресс...

  1. Первым шагом было найти пропущенные значения и заполнить пропущенные значения

Здесь значения Age, Cabin и Embarked отсутствуют. Таким образом, пропущенные значения в возрасте можно заполнить средним значением, а пропущенные значения в Embarked можно заполнить C, поскольку пассажиры с Embarked C имеют самые высокие шансы выжить, а столбец Cabin можно опустить.

Это помогло мне достичь точности 0,78468.

2. Следующим шагом было получение полезной информации из всех доступных столбцов.

из анализа данных совершенно очевидно, что пассажиры с ibSp равными 0,1 или 2 и Parch равными 0,1,2 или 3 имеют больше шансов выжить. Итак, мы добавим новый столбец, чтобы проверить, одинок человек или нет (column_name = is_Alone). Предположим, что у человека без семьи больше шансов выжить, чем у человека с членами семьи.

После включения is_Alone в классификатор случайного леса точность повысилась до 0,78708.

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

Поэтому мы добавим новый столбец с именем «Размер», который соответствует размеру семейства, которое представляет собой сумму столбцов SibSp и Parch.

после добавления параметра размера также в случайный классификатор мы получили точность 0,77751, что выше исходной точности, но не самое лучшее.

4. Мы также попытались разделить тариф на 5 разных диапазонов и применить этот диапазон тарифов также в случайном классификаторе.

train_data['Fare_range'] = [0, если 39,688‹x‹512,329, иначе 1, если 21,679‹x‹9,688, иначе 2, если 10,5‹x‹21,679, else 4, если 7,854‹x‹10,5, иначе 4 для x в train_data['Fare'] ]
train_data.head()

test_data['Fare_range'] = [0, если 39,688‹x‹512,329 else 1, если 21,679‹x‹9,688 else 2, если 10,5x‹21,679 else 4, если 7,854‹x‹10,5 else 4 for x в test_data['Fare'] ]
test_data.head()

После включения fare_range в классификатор Random Forest мы получили точность 0,77900.

5. Мы также попытались разделить Возраст на 5 разных диапазонов и применить этот диапазон тарифов также в случайном классификаторе.

После включения fare_range в классификатор Random Forest мы получили точность 0,78229.

Мой лучший результат

Вклад

Первоначальная модель работала со всем набором данных, поэтому первым шагом было понимание данных и определение пропущенных значений, заполнение пропущенных значений и удаление ненужных столбцов. В столбцах «Возраст» и «Посадка» отсутствовали значения. Таким образом, пропущенные значения в возрасте можно заполнить средним значением, а пропущенные значения в Embarked можно заполнить C, поскольку пассажиры с Embarked C имеют самые высокие шансы выжить, а столбец Cabin можно опустить.

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

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

Справочник

https://www.kaggle.com/alexisbcook/titanic-tutorial

https://www.kaggle.com/bestesakar/titanic-eda

https://www.makeuseof.com/fill-missing-data-with-pandas/

https://stackoverflow.com/questions/59642338/creating-new-column-based-on-condition-on-other-column-in-pandas-dataframe

https://www.kaggle.com/topptheeralertham/titanic-beginner-s-simple-guide-w-random-forest/notebook