Цель этого практикума - приблизить Тебя к машинному обучению и показать, что оно не должно быть таким сложным.

На примере Титаника познакомимся ближе с возможностями машинного обучения. Попробуем лучше понять, как именно выглядит процесс и как решается проблема. Сразу стоит заметить, что сама проблема, которую будем решать, с точки зрения машинного обучения - несложная. Но в то же время - это хороший старт для новичков, чтобы познакомиться на примерах и узнать, что такое инженерия признаков (англ. feature engineering) и почему это так важно!

Самое главное, что можешь запомнить сейчас про инженерию признаков:

1. Инженерия признаков - это очень важный шаг в машинном обучении.

2. В книгах про это мало пишут.

3. Этот шаг можно познать только на практике (собственно поэтому и появился второй пункт) - это как ремесло, можно долго слушать и много знать - и мало уметь. НО! можно пойти более практичным путем - впитать в себя, как губка, на примерах. Именно этим и займемся.


Ну и еще в качестве введения - жизненная подсказка: если проблема, которую решаешь - это что-то больше, чем просто таблица с данными, то машинное обучение, как правило, поможет лучше решить эту проблему, подобрать более качественные признаки (опять же - инженерия признаков). Именно поэтому, крайне советую, если есть такая возможность - погрузиться в проблему и запустить свое воображение по максимуму. Говоря простым языком - прочувствовать (с жизненной стороны), какую именно проблему хочешь решить. Ну что, начинаем?
Практическое машинное обучение на примере Титаника
Немного истории

Корабль «Титаник», который отправился в рейс до Нью-Йорка затонул в ночь с 14 на 15 апреля 1912 года. Свой рейс Титаник начал выполнять из Саутгемптона, сделал две остановки (Шербур, Квинстаун). Между Европой и Северной Америкой он случайно натолкнулся на айсберг (по крайней мере, так гласит официальная версия, а был ли это заговор - не будем обсуждать, но предпосылки к этому были) и поэтому затонул.

Попробуем разобраться с этим более подробно. Сейчас мы находимся на той стадии, когда пытаемся разобраться в бизнесе, наших данных и извлечь экспертную информацию.
Маршрут Титаника
Ночь 14 апреля 1912 года
Почему затонул «Титаник»?

Итак, ночью 14 апреля Титаник начал тонуть и за два часа с небольшим он полностью ушел под воду. Говорят, что причиной был айсберг, но здесь стоит добавить любопытство. На корабле было правило, что во время его плавания, должен быть назначен дозорный (для него было отведено специальное место). Суть работы дозорного - следить за появлением айсберга на пути следования корабля. Теоретически, такой человек способен увидеть айсберг на расстоянии около 6 км (или более). Этого достаточно, чтобы совершить хороший маневр, и даже если айсберг все-таки появится, его можно избежать. Но... вот только одно... Его видно с расстояния 6 км, когда есть специальный бинокль! А где бинокль? Но есть еще и другие версии, например, что без бинокля в тот день видимость была даже лучше из-за определенных погодных условий.

Корабль «Титаник», который отправился в рейс до Нью-Йорка затонул в ночь с 14 на 15 апреля 1912 года. Свой рейс Титаник начал выполнять из Саутгемптона, сделал две остановки (Шербур, Квинстаун). Между Европой и Северной Америкой он случайно натолкнулся на айсберг (по крайней мере, так гласит официальная версия, а был ли это заговор - не будем обсуждать, но предпосылки к этому были) и поэтому затонул.

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

"Мы быстро тонем, пассажиров сажают в лодки"
Bettmann/CORBIS
Странные обстоятельства вокруг Титаника

Первое странное обстоятельство, которое произошло за несколько дней до того, как «Титаник» отправился в рейс - моряку Дэвиду Блэру сообщили, что в рейс он не пойдет и нашли ему замену (почему так? ну всякое в жизни бывает, но тем не менее факт остается фактом). Вроде бы такая простая вещь, но произошло кое-что интересное. Дэвид положил бинокль в шкаф и запер его. Однако этот ключ, к сожалению (или к счастью для кого-то), не перешел тому, кто его сменил.

Получается странная ситуация. Почему, только после того, как корабль отплыл, через 2 дня (как гласит легенда) Дэвид Блэр понял, что не отдал ключ. Это означает простую вещь, что у нового дозорного не было этого ключа, поэтому у него не было и бинокля. А значит, ему приходилось отслеживать приближение айсбергов только своими глазами . Реально ли это в жизни? Кто его знает, разгильдяйство встречается в любой стране, но как-то кажется - это очень странно. Ведь Титаник "хвалился" своей безопасностью! Значит, безопасность была в приоритете. Как же тогда можно объяснить эту ситуацию? Этот вопрос оставляю для Тебя, как думаешь - какие могут быть версии?

Кстати, в 2007 году дочь Блэра в конце концов пожертвовала ключ Международному обществу моряков, и ключ был продан с аукциона за £90,000 (около $125,000).
White Star Line
Строящийся нос Титаника - Ralph White/CORBIS
В более широком смысле, когда дело касается всей истории, связанной с «Титаником», стоит упомянуть компанию «White Star Line», которая в те годы планировала построить три корабля из олимпийской серии - «Olympic», «Titanic» и «Britanic» («Gigantic»). Они были созданы более или менее одновременно (разница была совсем небольшой).
Строительство «Olympic» и «Titanic»
Столкновение «Olympic» (20 сентября 1911)

Следующее странное событие (уже получается №2). В 1911 году (примерно 20 сентября, когда «Титаник» вышел в море) произошло столкновение между «Olympic» и военным кораблем недалеко от побережья острова Уайт. Причиной столкновения был «Olympic», а это означало, что White Star Line должна была возместить все убытки. Проблема заключалась в том, что это были довольно большие суммы - учитывая, что «Olympic» был почти новым и теперь его нужно было ремонтировать.


Действительно ли Titanic затонул или это был Olympic?
Вот интересная история, которую Ты можешь прочитать, среди прочего, в книге «Загадка Титаника» Робина Гардинера, Дэна Ван Дер Вата и ряда других.
JP Morgan

Одна из легенд гласит, что JP Morgan (владелец `White Star Line`) мог придумать такой сценарий: что, если мы поменяем корабли? Вместо Титаника мы отправляем Олимпик (потому что они очень похожи) и затем просто его утопим? Как думаешь, это история реальная? Какие аргументы "за" или "против"?

Я оставляю Тебя подумать, правда это или нет. Критическое мышление - очень важный навык в XXI веке, его нужно постоянно развивать!
Могу немного подумать вместе с Тобой

С одной стороны (с точки зрения компании), можно понять, что компанию нужно спасать, и в случае затопления поврежденного корабля, будет выплачена очень большая страховка. Тем более, если мы почитаем историю - эта сумма была фактически выплачена компании "White Star Line" (1 миллион фунтов стерлингов на тот момент - это была гигантская сумма!). Сразу уточню по поводу страховки.
Лондонская компания Lloyds выплатила компенсацию в размере одного миллиона фунтов стерлингов в течение 30 дней после судьбоносного затопления. Это помимо страховки, которая должна была выплачиваться за застрахованные жизни, потерянные предметы, дорогие предметы искусства и драгоценности.


Кстати, тут еще стоит добавить, что с точки зрения Ллойда (да и вообще страховых компаний), Титаник надолго запомнится как одна из крупнейших потерь рынка, наряду с крупными природными и техногенными катастрофами, такими как потеря HMS Lutine в 1799 году, землетрясение в Сан-Франциско в 1906 году, ураган Катрина и землетрясение и цунами в Японии 2011 г.
Почему сам Дж. П. Морган отказался плыть в последний момент?

К мистике добавляется тот факт, что несколько высокопоставленных людей, в том числе Дж. П. Морган, отменили бронирование перед отправкой корабля в плаванье (сославшись на проблемы со здоровьем). Тем не менее, миллионеры: полковник Джейкоб Астор, известный строитель отелей и небоскребов, Исидор Штраус (про него еще будет отдельно история, которая лучше показывает, что это был, действительно, Человек или как они любили себя называть - Джентльмен), банкир и владелец Macy’s, и американский бизнесмен, занимающийся горнодобывающей промышленностью, Бенджамин Гуггенхайм, потерпели крушение вместе с кораблем.
Может, быть миллионером недостаточно?


Ну и стоит даже заметить тот факт, что Олимпик, у которого теоретически были проблемы из-за столкновения с военным кораблем, неплохо себя "чувствовал" и плавал аж до 1940-х годов (т.е. еще более 18 лет).

То, о чем я думал (расcматривая эту гипотезу), - если эта гипотеза верна и владелец компании, действительно, хотел спасти свою компанию от разорения (легко понять аргументацию), - то почему он не подумал, что было бы справедливо и ответственно спасти людей, которые поплыли на Титанике? Однако многие люди погибли :(. А ведь можно было избежать такого огромного количества жертв. А может это было неважно? Может и здесь был принцип: "Смерть одного человека — трагедия, смерть миллионов — статистика". Как думаешь?
Теперь давай приблизимся к данным.
Для начала немного цифр:
На Титанике было около 1300 пассажиров и 900 членов экипажа в сумме около 2200 людей и только 20 спасательных шлюпок (1 спасательная шлюпка для 65 пассажиров).

Говоря более точным языком. На Титанике было 2224 пассажира и капитан, но в спасательных шлюпках было всего 1178 человек, чуть больше половины, т.е. 1514 человек погибли!

Это означает, что по определению как минимум половина людей с Титаника не выживут :(. Кстати, как так могло получиться что спасательных шлюпок было так мало? Ведь опять же, если безопасность была в приоритете, то как можно было упустить этот факт? Возможно, никто не планировал, что он утонет. Хм.. возможно! Но все же... неужели никто не задал вопрос "... а что если - то что тогда?" или этот вопрос просто уверенно было проигнорирован? Почему? Нехватка времени, экономия денег (шлюпки тоже стоят денег), неправильный проект (ведь их физически где-то нужно повесить), что-то еще? Подумай. Какие еще есть варианты?
На рисунке ниже показано, как раскладывались эти шлюпки. Здесь стоит отметить, что эта информация может быть нам полезна.
Прежде всего - Ты можешь увидеть, где находятся шлюпки, размер шлюпок и где находятся каюты (на картинке видно 18 кают, потому что 2 находятся наверху, и мы не можем их здесь видеть).
Как тонул Титаник?

Давай посмотрим хронометраж затопления корабля. Видно, что на это ушло примерно 2 часа 40 минут. Так что теоретически, если бы у нас было достаточно спасательных шлюпок, можно было бы спасти почти всех.
Мемориал Титаника

Это Мемориал мужчинам, которые пожертвовали своей жизнью, чтобы спасти женщин и детей. Это важная информация, потому что, когда мы смотрим на данные, оказывается, что теоретически в те дни было нормой (не знаю, как сейчас, наверное, мир меняется), что сначала спасают детей и женщин, а затем мужчин. Были случаи, когда мужчины выдавали себя за женщин, например, надев шаль, и таким образом смогли вне очереди попасть на спасательную шлюпку.
Вообще с Титаником было много историй. Например, при постройке этого корабля (уже тогда) погибло около 8 человек. Возникли разные проблемы, и пришлось довольно быстро построить этот корабль. Кстати, как и стоило ожидать, в те времена поплыть на Титанике считалось очень престижным. А как сейчас?


Blue Star Line и «Titanic II»
Расскажу еще одну историю. Есть такая компания Blue Star Line, которая работает над тем, чтобы построить Титаник (уже второй версии). Сообщается, что Blue Star Line потратит 500 миллионов долларов на строительство своего нового роскошного океанского лайнера. В 1912 году компания White Star Line потратила на «Титаник» 7,5 миллионов долларов (сегодня - это примерно 180 миллионов долларов).

Titanic II - долгожданный корабль. Он должен был поплыть в 2016 году, но разработчики перенесли на 2018 год, а потом перенесли на 2022 год. Как думаешь? Получится ли в этот раз доплыть до конечной точки? Не забудет ли кто-то ключ от сейфа с биноклем, пересчитают ли количество шлюпок и т.д.?

«Titanic» vs «Titanic II»
Подобно оригиналу, новый корабль будет копировать опыт 1912 года, все те же рестораны, столовые, декор и даже... меню!

Хотя стоит заметить, что у этих двух кораблей есть несколько довольно заметных различий.
- Дизайнеры «Titanic II» заявили, что это не будет идентичная копия, несмотря на множество сходств.
- Он отправится из Дубая в Объединенных Арабских Эмиратах, а не из Саутгемптона в Англии - по крайней мере, в свое первое плавание. Затем он также пройдет через область, где корабль первой версии пересекся с айсбергом, а конечный пункт назначения - Нью-Йорк.
- Последующие поездки будут проходить из Нью-Йорка в Саутгемптон и обратно, как и предполагалось в оригинале.
- Многие, похоже, скептически относятся к тому, действительно ли «Titanic II» отправится в плавание в 2022 году, а некоторые критики говорят, что проект бесклассовый, наживающийся на большой трагедии.
- Другие говорят, что это хорошая дань памяти тем, кто погиб, когда в 1912 году затонул «Titanic».

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

Кстати, тут еще можно посмотреть видео от Blue Star Line, чтобы можно было лучше прочувствовать чего ожидать. На вопрос - а сколько стоит? Ответ - не знаю! Цены билетов все еще неизвестны, но желающих купить уже много. Поплывешь вторым Титаником?
Время перейти к практике и поработать с данными.

Кодим!

Сначала импортируем библиотеку `pandas`:
import pandas as pd
`pandas` - это библиотека которая помогает работать с данными, загружать, чистить, фильтровать, группировать и т.д.

Обычно, чтобы не писать длинно `pandas` используем сокращенную версию из двух букв `pd`. Это делается только в целях экономии и удобства. Программисты любят быть эффективными и вместо 6 букв использовать, например, 2.

Давай загрузим данные:

Из файлов `train.csv` и `test.csv` (кстати, формат `csv` - упрощенная версия Excel), для этого будем использовать функцию `pd.read_csv` и передаем путь (локацию нашего файла). В нашем случае файлы находятся "этажом" выше от этого notebook.


Упрощенная структура (не все файлы выпишу, только те, которые нужны).

```
---- notebook1.ipynb <=== мы сейчас здесь
- input
---- train.csv <=== наш первый файл
---- test.csv <=== наш первый файл
- images
```
Код для запуска
df_train = pd.read_csv('../input/train.csv')
df_test = pd.read_csv('../input/test.csv')

print("train", df_train.shape)
print("test", df_test.shape)

Результат: 


train (891, 12)

test (418, 11)

Ну что, давай еще раз посмотрим, что тут получилось.

У нас есть два файла: `train.csv`, который содержит все признаки пассажиров Титаника (признаки - это характеристики, ну например - возраст, пол, класс билета, который был приобретен и т. д.) и наш "ответ". В нашем случае ответом для решаемой задачи является - выжил конкретный человек или нет (иными словами есть только два варианта, именно поэтому говорят что ответ бинарный - "да" или "нет").

Второй файл `test.csv`, который содержит также все те же признаки (столбцы в таблице) пассажиров Титаника (аналогично файлу `train.csv`). Только в файле `test.csv` у нас нет ответа и мы его должны предсказать.

В этом и заключается наша задача! Предсказать ответ для файла `test.csv`.

Здесь мы сразу видим, каков размер нашего массива. Итак, в `train.csv` у нас `891` строка и `12` столбцов, а в `test.csv` - `418` строк и `11` столбцов.


Как я уже упоминал, в test отсутствует один столбец, потому что это столбец с информацией - выжил человек или нет, и мы должны это предсказать.
Можно еще так сказать. Мы изучаем историю 891 пассажира (содержимое train.csv), чтобы предсказать "судьбу" (звучит очень громко) для 418 пассажиров (содержимое файла `test.csv`), используя такие признаки, как: возраст, пол, класс билета, который был приобретен и т. д.


Теперь, если мы сложим эти два числа вместе (количество пассажиров в `train` и `test`), мы получим `1309`. Это довольно интересная информация, которая, вероятно, содержит количество пассажиров. И помни, что была еще и команда. Большая часть экипажа погибла, но некоторые выжили. Это означает, что часть корабля будет также занимать кто-то из экипажа, и эту информацию стоит держать в уме .
Общее количество пассажиров*

* - по крайней мере тех, о которых у нас есть данные.
Код для запуска
df_train.shape[0] + df_test.shape[0]

Результат: 

1309
Общая характеристика данных
Код для запуска
df_train.info()
Результат:
Посмотрим на данные, которые у нас уже есть, немного точнее (какие столбцы у нас есть и в каком количестве) используя функцию `.info()`. Как мы уже видели ранее - у нас `891` строка (в `train`).

Что еще видим? Ну например, сколько существует отдельных признаков (например, `PassengerId`, то есть `ID` данного пассажира) и сколько там не пустых значений (можно сравнить с `RangeIndex`, т.е. если число совпадает, то значит у нас есть все данные, мы ничего не упускаем).

Давай посмотрим на конкретном примере. Смотрим на возраст пассажиров - т.е. `Age`, мы замечаем, что у нас есть только `714` значений. Посмотри внимательно выше, там есть строчка `Age 714 non-null float64`. В этой строчке говорится следующее: в столбце `Age` у нас 714 заполненных значений (у нас есть информация о возрасте только для 714 пассажиров из 891 доступных в этом файле) и значение записано как `float64`, т.е. как дробное число.

Смотрим еще, например, номер каюты `Cabin`, то есть какое купе было куплено пассажиром, у нас имеются данные о каютах только для `204` пассажиров (видишь откуда взялось 204? Посмотри выше - там есть такая строчка `Cabin 204 non-null object`).

Идем дальше, данные о месте посадки `Embarked` у нас есть минимальные пропуски, отсутствует информация только для двух пассажиров (всего 891 в этом файле, а для этой колонки указано 889 заполненных значений. Поэтому 891 - 889 = 2 пропуска).

Давай посмотрим на данные, как они выглядят, хотя бы в первых 5 строках.


Первые 5 строк:
Код для запуска
df_train.head()
Результат:
Признаки (англ. `features`)

Рассмотрим подробно имеющиеся признаки для пассажиров Титаника, читай внимательно:
- PassengerId - Числовой идентификатор, присвоенный каждому пассажиру.
- Survived - Выжил ли пассажир (1) или нет (0) - это наш ответ или иногда говорят - целевая переменная (англ. target variable).
- Pclass - Класс билета (1-й = Upper, 2-й = Middle, 3-й = Lower)
- Name - Имя и фамилия пассажира и еще дополнительная информация (например `Mr.` нам это еще пригодится)
- Sex - Пол пассажира (с английского `male` мужчина и `female` - женщина)
- Age - Возраст пассажира
- SibSp - Наличие братьев и сестер (с английского brother - брат, sister - сестра, stepbrother - сводный брат, stepsister - сводная сестра) / супругов (husband - муж, wife - жена, любовниц и любовников не помечали - хотя возможно их можно вычислить) на борту Титаника
- Parch - Наличие родителей (mother - мама, father - папа) / детей (daughter - дочь, son - сын, stepdaughter - падчерица, stepson - пасынок) на борту Титаника. Заметка: некоторые дети путешествовали только с няней, поэтому parch=0 для них...
- Ticket - Номер билета пассажира
- Fare - Сколько пассажир заплатил за билет (в фунтах)
- Cabin - Номер каюты - отсек корабля (буквы A, B, C, D и цифры).
- Embarked - В каком порту пассажир зашел на Титаник (C = Cherbourg, Q = Queenstown, S = Southampton)
"Класс билета" (Pclass) и "Пол пассажира" (Sex) => "Выживание" (Survived)

Кстати, выше уже был показан памятник мужчинам, спасшим жизни женщин и детей, поэтому стоит проверить гипотезу, в какой степени Sex (пол) и Pclass (класс) повлияли на то, выживет конкретный человек или нет.
Код для запуска
df_train.groupby(["Pclass", "Sex"])["Survived"].value_counts(normalize=True)
Результат:
Если мы обратим внимание на первый класс, у нас есть информация о том, что это female (женщина) и выживет ли она - `1` или не выживет - `0`. Итак, как видим, если это была женщина из `1 класса`, это почти `100%` гарантия, что она выживет `(0,968085)`!

С мужчинами было немного иначе (иногда даже очень иначе). Однако мужчины даже из 1 класса пытались спасти женщин. Но можно увидеть, что выживаемость мужчин из 1 класса была выше ( ~37%), чем у мужчин `2`( ~16%) и `3`( ~14%) классов.

Давай сразу сравним женщин из всех классов. Оценка выживаемости женщин из 2 класса - ок. 92%, из 3 класса хуже - 50%. Это было также связано с несколькими другими причинами. Во-первых, больше всего людей было в 3 классе и, как правило, когда людей было больше, то выживало их меньше. Почему? Тут другая причина - пассажиры из 3 класса не имели прямой доступ к палубе со спасительными шлюпками, плюс многие пассажиры из 3 класса не знали английского языка, который и стал барьером в поиске пути к спасительным шлюпкам.

А самая маленькая вероятность выживаемости около `14%` была у мужчин из 3 класса. Из 100 мужчин 3 класса только 14 спасалось .
Карпатия

«Карпатия» прошла по ледяным полям и прибыла через два часа после затопления «Титаника», и команда спасла 705 выживших из спасательных шлюпок корабля.
Иронически «Карпатия» утонула через 6 лет, точнее была затоплена 17 июля 1918 года после трехкратного торпедирования немецкой подводной лодкой U-55 у южного побережья Ирландии с потерей пяти членов экипажа.
Исидор и Ида Штраус

Я уже выше упоминал про Исидора, стоит отдельно рассказать его историю, а также историю его Жены!

Исидор и Ида Штраус путешествовали первым классом. Исидор был очень богатым человеком, владельцем компании. Понятно, что ему просто предложили сесть в спасательную шлюпку и он бы спасся. Но... он сказал, что есть люди помоложе и что кто-то из них может занять его место! Поэтому он останется здесь, на корабле. Представляешь сейчас олигарха, который поступит так же? Возможно... кто его знает, но меня лично этот факт очень удивил и вызвал уважение. Мало того, здесь есть и продолжение истории. Исидор попытался спасти свою жену, уговаривая ее сесть в шлюпку, но та решила остаться навсегда с ним, заявив: «Я не оставлю мужа. Мы всегда были вместе, вместе и умрём».

Возникает куча вопросов. Ну как же так. Ведь у него явно были еще планы? Почему Исидор поступил именно так... и было ли это разумно? Конечно, здесь стоит отдать должное, что каждый человек имеет право идти своим путем - поэтому кто мы чтобы давать оценку, но все же такие истории заставляют поверить, что деньги и власть, не всегда портят людей (а может так было только раньше, что думаешь?).

Пометки на полях (немного философская мысль).

Кстати, есть еще, как минимум, другая мысль. Ведь эти люди, даже если бы выжили после Титаника, пожили бы еще может 10, 20 ну может 30 лет, а благодаря этому поступку увековечили себе память. Вот видишь, тоже про них рассказываю сейчас, получается они все еще живут... как минимум в памяти про них.
Train vs Test


А теперь давай посмотрим на еще одну вещь. У нас есть данные из набора `train` и `test`.
Давай проверим, как различается распределение признаков, в зависимости от набора. Предположим, мы хотим проверить возраст, сколько было заплачено за билет и класс.

Зачем? Может быть в одном файле только молодые, а в другом только старые. Надо проверить!
Код для запуска
describe_fields = ["Age", "Fare", "Pclass", "SibSp", "Parch"]

print("Train: males")
print(df_train[df_train.Sex == "male"][describe_fields].describe())

print("Test: males")
print(df_test[df_test.Sex == "male"][describe_fields].describe())

print("=" * 30)

print("Train: females")
print(df_train[df_train.Sex == "female"][describe_fields].describe())

print("Test: females")
print(df_test[df_test.Sex == "female"][describe_fields].describe())
Результат:
Итак, здесь мы видим, что средний возраст (Age) мужчин в `train` и `test` составляет около 30 лет (похоже).
С другой стороны, стоимость билета (Fare) в `train` = `25`, а в `test` = `27` - здесь это немного не по плану.
Среднее значение класса (Pclass) близок к `2.38`.

Здесь видно, что максимальное значение возраста в выборке `train` составляет 80 - для мужчин, 63 - для женщин. Максимальное значение для выборки `test` - составляет 60 - для мужчин, 76 - для женщин.

Еще раз, почему мы вообще все это проверяем? Что ж, мы хотим знать, сильно ли набор данных в `train` отличается от `test`. На данный момент делаем это немного на глаз. Есть несколько формальных методов, с помощью которых мы можем проверить, похожи ли эти два распределения или нет.

В целом можно сказать, что данные достаточно похожи, разница имеется - но не такая уж и большая. Аномалий не наблюдается. Как я уже упоминал, например, средний возраст женщин в выборке `train` - почти 28 лет, а в `test` - 30 лет. Это не такая уж большая разница, хотя она есть.

Это пример первого урока из интенсива "Прогнозирование выживших на Титанике с помощью Machine Learning".
Всего в этом интенсиве 5 уроков. В последующих уроках уже будет больше кода и практика в создании и тренировке моделей машинного обучения.

Получить доступ к этому интенсиву и 10+ другим, можно став участником закрытого DW Сlub. Присоединяйся сейчас и начни свое комфортное обучение в Data Science.