Титаник: извлекаем уроки из катастроф

Хочу закрыть маленький гештальт. Я придумал свой ML-метод, 9 лет работаю ML-инженером, преподавал машинное обучение в GoTo и в Российско-Армянском университете. Но при этом никогда не отправлял решение в классический Kaggle-конкурс «Titanic». Давайте исправим это и построим собственный пайплайн с нуля.

Kaggle
Это известная ML-платформа с задачами по регрессии, классификации, ранжированию и не только. Там можно проверять качество решений и сравнивать их с результатами других участников. «Kaggle Grandmaster» - вполне реальная строчка в CV.

Titanic
Конкурс вышел 13 лет назад и давно стал классикой для обучения. Почему:
🛳 бинарная классификация
🛳 можно хорошо потренировать accuracy, precision/recall, ROC и ROC AUC
🛳 много пропусков
🛳 смешанные типы признаков (строки + числа)

Данные
На странице данных датасет разделен на train и test. Обучаем модель на train, предсказываем для test, отправляем сабмит и получаем скор.

Целевая переменная
☠️ Survived - 1 если пассажир выжил (около 38%), 0 иначе.

Признаки
🛂 PassengerId — идентификатор пассажира, обычно как предиктор не используется.
🏛 Pclass — класс билета: 1/2/3, прокси социально-экономического статуса.
👺 Name — имя пассажира; из него можно извлекать титулы (Mr, Mrs, Miss, ...).
👧🏻 Sex — пол, сильный предиктор выживания.
🧙🏿‍♂️ Age — возраст, есть пропуски.
👩‍❤️‍👨 SibSp — число братьев/сестер/супругов на борту.
👨‍👩‍👦 Parch — число родителей/детей на борту.
🎫 Ticket — номер билета, часто «грязный» строковый признак.
💲 Fare — стоимость билета, может коррелировать с Pclass и Cabin.
🏡 Cabin — каюта, очень много пропусков, но при наличии может быть информативна.
🧳 Embarked — порт посадки: C, Q, S.

EDA
Всегда полезно сначала посмотреть на структуру данных и сигнал в признаках.

🏛 Pclass
Пропусков нет, частоты:
1 -> 216
2 -> 184
3 -> 491

Средняя доля выживших по классам:
1 -> 63%
2 -> 47%
3 -> 24%

При среднем по выборке 38% видно: первый класс сильно «за выживание», третий - заметно «против».

👺 Name
Проверил через hash trick: у признака есть сигнал (около 62% ROC AUC). Дальше раскопал структуру строк, например:

Futrelle, Mrs. Jacques Heath (Lily May Peel)

После извлечения титулов получается хороший признак:

Master 0.575000 40
Miss 0.702703 185
Mr 0.156673 517
Other 0.724832 149

👧🏻 Sex
Ожидаемо сильный фактор (есть на графике в посте).

🧳 Embarked
Три значения, заметный uplift, полезный признак.

Продолжу это исследование. Если тема интересна, дайте 🔥.

JupyterLab
github: eda