В этой статье мы рассмотрим процесс участия в конкурсе Kaggle. Мы изучим набор данных Титаника и постараемся предсказать выживание на Титанике. Мы будем использовать Python и ряд его популярных библиотек, таких как pandas, scikit-learn и numpy.



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

  • Понимание проблемы
  • Понимание данных: EDA, тип переменных, любые отсутствующие значения, потенциальная связь между переменными.

Это проблема бинарной классификации. Цель состоит в том, чтобы предсказать, выжил ли пассажир после катастрофы Титаника.

Проанализируем эти данные дальше.

  • Основная информация о наборе данных: количество строк и столбцов, типы данных столбцов.
  • Описательная статистика набора данных
  • Проверка любых отсутствующих значений

Вот краткое изложение наших наблюдений:

  • Есть пропущенные значения. (Возраст, Кабина, Посадка). Нам нужно будет справиться с этим.
  • Столбец «PassengerID» — это просто идентификатор. Он не будет иметь никакой предсказательной силы. Мы можем игнорировать это во время моделирования.
  • Столбцы «Имя» и «Билет» являются текстовыми полями. мы могли бы извлечь титулы из имен. Это может дать нам дополнительную информацию о социальном статусе или профессии.

Следующие шаги могут включать:

  • Визуализация данных. Это может помочь нам лучше понять данные и выявить возможные закономерности.
  • Очистка данных. Обработка отсутствующих значений и выбросов.
  • Разработка функций: создание новых функций на основе существующих. Это может помочь улучшить производительность модели.
  • Моделирование: создание и оценка моделей машинного обучения с использованием перекрестной проверки. Мы также можем настроить гиперпараметры моделей, чтобы улучшить их производительность.
  • Интерпретация модели: понимание прогнозов модели.

Визуализация данных

Вот выводы из сюжетов:

  • Показатели выживаемости в разбивке по полу. Выживаемость женщин была намного выше, чем у мужчин. Секс может быть важным элементом нашей модели.
  • Распределение по возрасту по выживаемости. Мы видим, что выжило больше детей.
  • Показатель выживаемости по классам пассажиров. Пассажиры 1-го класса имели более высокий показатель выживаемости, чем другие.
  • Показатель выживаемости в зависимости от порта посадки. Пассажиры, высадившиеся в Шербуре, имели более высокий показатель выживаемости.

Мы визуализировали данные. Мы перейдем к следующему шагу: очистка данных. Мы обработаем отсутствующие значения в столбцах "Возраст", "Кабина" и "Посадка". Мы также преобразуем категориальные переменные в числовые. Модели машинного обучения лучше работают с числовыми переменными.

Мы могли бы заполнить недостающие значения средним возрастом и для Embarked.

Очистка данных

Разработка функций

Мы можем создавать новые функции из существующих.

  • Название: извлечено из имени.
  • Размер семьи: сумма «SibSSp» и «Parch».
  • Один: бинарный признак, основанный на размере семьи.
  • Возрастная группа. Возраст разделен на разные возрастные группы.
  • Cabin Letter: первая буква функции «Cabin».

Пол преобразуется в двоичную переменную, где «мужской», а 1 — «женский».

«Заголовок», «Возрастная группа», «CabinLetter» и «И встал» мы применили один метод горячего кодирования.

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

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

Разделить данные. Мы отделим нашу целевую переменную («Выжившие») от остальной части набора данных и разделим данные на наборы для обучения и проверки.

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

Обучение модели. Мы впишем модель в наши обучающие данные.

Оцените модель. Мы будем использовать проверочный набор для оценки производительности нашей модели. Мы можем использовать точность в качестве нашей оценочной метрики.

Настройте проблему. В зависимости от результатов мы можем настроить нашу модель, изменив ее параметры.

Прежде чем разделить данные, я уберу несколько столбцов. К ним относятся «PassengerID», «Имя», «Билет» и «Кабина». У них нет предсказательной силы.

Логистическая регрессия

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

Точность нашей модели логистической регрессии в проверочном наборе составляет ок. 0,81. Это хорошее начало, но мы могли бы улучшить нашу модель, попробовав более сложные модели, такие как случайный лес или усиление градиента, или настроив гиперпараметры нашей модели.

Случайный лес

Точность нашей модели Random Forest на проверочном наборе составляет ок. 0,79. Это означает, что наша модель немного ниже, чем у модели логистической регрессии. Точность — это всего лишь один из показателей. В зависимости от проблемы другие показатели, такие как точность, полнота или AUC-ROC, могут оказаться более подходящими.

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

  • n_estimators: количество деревьев в лесу.
  • max_depth: максимальная глубина деревьев.
  • min_samples_split: минимальное количество выборок, необходимое для разделения внутреннего узла.
  • min_samples_leaf: минимальное количество образцов, необходимое для конечного узла.

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

Лучшие гиперпараметры для нашей модели Random Forest:

  • макс_глубина: 15
  • min_samples_leaf: 4
  • min_samples_split: 2
  • n_оценщиков: 100

Вот и все! Мы прошли через процесс участия в конкурсе Kaggle, от исследования исходных данных до прогнозирования на тестовом наборе. Я надеюсь, что вы нашли это руководство полезным, и я желаю вам удачи в ваших соревнованиях Kaggle! 🎈

Полная тетрадь:

https://www.kaggle.com/code/ahmetenesyalnkaya/titanic-ml