Я начал свой путь там же, где и многие другие: проверил возможности блокнотов Kaggle с помощью популярного набора данных Titanic. Этот набор данных включает 11 базовых атрибутов, из которых мы должны определить их полезность при прогнозировании выживания пассажира в печально известном путешествии «Титаника».

Предоставляемые нам атрибуты включают PassengerId, Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket, Fare, Cabin и Embarked. Этот список и краткий обзор первых пяти строк данных можно увидеть на рисунке ниже.

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

В этот момент мы можем увидеть яркого слона в комнате (таблица/фрейм данных?) выше: слишком вкусный NaN или пустые значения. Я решил рассмотреть эти значения поближе по всему фрейму данных.

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

Из-за пугающего количества значений, отсутствующих в столбце «Хижина», было легко решить, какой атрибут будет следующим атрибутом, который будет удален из фрейма данных, что и было моим следующим курсом действий.

Удалив такого отвратительного зверя, я решил взглянуть на статистическую сводку фрейма данных, чтобы лучше понять характеристики данных — что-то вроде знакомства друг с другом на первом свидании!

Глядя на эти таблицы, я заметил несколько вещей. Во-первых, в колонке «Тариф» есть существенный выброс. Не о чем сразу писать, но есть на что обратить внимание. Я также заметил, что средний возраст пассажиров составлял 29,7 лет, а стандартное отклонение — 14,5 лет. Это придало мне уверенности, чтобы принять базовое решение: установить постоянно преследующие значения NaN в столбце age равным среднему значению того же столбца — здесь, по сути, дополняя пустые данные несколькими экземплярами 29,7. Я чувствовал себя комфортно с этим решением, учитывая, насколько близко это число к значению 25-го процентиля, значению 50-го процентиля, значению 75-го процентиля и довольно низкому стандартному отклонению.

Затем я быстро распечатал парный сюжет (морской борн на помощь!). Это дало мне еще более широкое представление об остальных столбцах и о том, как они коррелируют с выживаемостью пассажиров. Например, как показано ниже, я мог видеть небольшую корреляцию между старшими возрастными группами и низкой выживаемостью, в то время как остальные возрастные группы были примерно одинаковыми по всем направлениям. Я также обнаружил корреляцию между пассажиром, имеющим семью на корабле, включая брата, сестру/супруга/родителя/ребенка, и более низкой выживаемостью. Я также смог подтвердить свое первое предположение о низкой применимости столбца «Плата за проезд» для этого предиктора модели.

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

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

Итак, после удаления столбца «Проезд» мои окончательные атрибуты были сокращены до «Выжил», «Pclass», «Sex», «Age», «SibSp» и «Parch».

Выполнив базовую очистку и обработку, я разделил свои данные на подмножества для обучения и проверки (и, конечно же, их целевые подмножества, являющиеся столбцом «Выжившие»), используя 80% данных для обучения и 20% данных для проверки. Затем я использовал sklearn LabelEncoder для кодирования моих категориальных данных, столбца «Пол», в числовую форму (переключение «мужских» значений на целое число 1 и «женских» значений на целое число 0) для использования в модели прогнозирования (в конце концов , как мы все знаем, модели прогнозирования могут быть очень привередливыми).

Наконец, я решил использовать RandomForestClassifier в качестве базовой модели со всеми атрибутами, установленными на значения по умолчанию. Используя показатель точности sklearn.metrics, я рассчитал показатель точности моей модели по сравнению с подмножеством проверки, получив точность примерно 82,7%.

Наконец, я предварительно обработал тестовые данные, предоставленные мне Kaggle, создал свои тестовые прогнозы и правильно отформатировал их, чтобы их могли принять Kaggle Gods. После встроенного счетчика прогнозов моя базовая модель показала довольно разумную точность прогноза 72,248%. Очевидно, что это число может и будет увеличиваться по мере того, как я буду тестировать свою модель на наличие лучших значений атрибутов, но это будет целью следующей части.

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