Как стать автором
Обновить

Комментарии 10

"Работа с отсутствующими значениями в Pandas". Дарю.

Спасибо! Поправила.

Это значит, что пассажиры у которых возраст отсутствовал имели меньше шансов выжить. У них также был более дешевый билет и более низкий класс. Следовательно делаем вывод, что возраст случайно не занесли.

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

Среди пассажиров, у которых значение возраста отсутствовало, были выжившие (около 30%) и погибшие (около 70%) - колонка 'Survived’, True = 0.29 .

Эти пассажиры были в более низком классе:

  • колонка 'Pclass’ - True = 2.59 (это среднее значение класса)

  • колонка ‘Fare’ - True = 22.15 (это среднее значение стоимости билета)

Подсчет значений в колонке 'Pclass':

Например, в 3 классе было 491 пассажира (это 55%)

Пассажиров было много в 3 классе и много погибло (около76% пассажиров 3-го класса), то при опросе у выживших и при осмотре тел погибших могли случайно пропустить возраст пассажира (человеческий фактор).

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

Следовательно делаем вывод, что возраст случайно не занесли.

Неубедительно.

Более низкий класс означает с приличной вероятностью более дешёвый билет. И менее безопасное или с менее надёжными средствами спасения место. Что и приводит к снижению шансов выжить.

Что же до отсутствия сведений о возрасте - то дешёвые билеты, как ни странно, приносят бОльшую часть прибыли, а потому на отсутствие или нежелание сообщить возраст больше смотрят сквозь пальцы. Спросить, а потом ещё и занести возраст - лишняя работа. И если допустимо её не делать - её и не будут делать.

Так что связь, конечно, есть - но не та, которая описана в статье. Просто так совпало.

Крушение «Титаника»

Материал из Википедии — свободной энциклопедии

"Четверо из пяти спасшихся людей являлись пассажирами первого и второго классов. Ближе всех к шлюпочной палубе были пассажиры первого класса, каюты которых располагались преимущественно на верхних палубах, поэтому среди них велика доля спасённых (62 %). Большая часть пассажиров третьего класса не смогла выбраться из лабиринта коридоров нижних палуб. Они были отделены от первого и второго классов воротами, находившимися в разных частях судна, многие из которых оказались закрыты"

"Известно, что женщинам из кают третьего класса в большинстве случаев не препятствовали выйти на шлюпочную палубу, наоборот, их всячески призывали к этому, но не всегда эти призывы находили положительный отклик. Многие из женщин, размещавшихся на корме, сначала вообще отказывались покидать свои каюты[157]. Часть пассажиров третьего класса добиралась до шлюпочной палубы в обход барьеров, ограждавших их от остальных: по стрелам грузоподъёмных кранов на корме, по такелажам, перелезая через леера, люди пробирались к трапам и палубам первого и второго классов, откуда беспрепятственно можно было попасть к шлюпкам"

Поиск и захоронение тел

"Экипаж «Маккей-Беннетт» за две недели поисков обнаружил и поднял 306 тел, на его борту быстро закончились бальзамирующие вещества. Согласно санитарным правилам в порт могли быть доставлены только бальзамированные тела, поэтому капитан «Маккей-Беннетта» принял решение захоронить многих пассажиров 3 класса и членов экипажа в море. Кроме того, некоторые тела были настолько повреждены, что опознание было невозможно. На континент были доставлены в основном пассажиры 1 класса, которых определяли по дорогой одежде и личным вещам. Тела остальных зашивали в холщовые мешки, прикрепляли грузило весом 23 килограмма и по одному сбрасывали в море. Всего в море с «Маккей-Беннетта» было захоронено 116 человек, 60 из них не были опознаны "

Про заполнение отсутствующего возраста встретил крутую идею в другой статье: https://habr.com/en/company/mlclass/blog/270973/

Если посмотреть на имя пассажира, там явно прослеживается "титул": Mr, Mrs, Miss etc. И внутри этих "титулов" распределение возраста будет уже гораздо точнее, чем в среднем по больнице. Рекомендую посмотреть статью, там хоть и R, но логика исследования данных интересно описана

Да, конечно, если посмотреть на имя пассажира, там явно прослеживается "титул". Но "титул" и имя не влияет на выживаемость и не связан с .возрастом.

Посмотрим на подсчет значений в колонке 'Title'

# Extract a title for each Name
# 'Title'
train_df['Title'] = train_df.Name.str.extract(' ([A-Za-z]+)\.', expand=False)
train_df['Title'].value_counts()
подсчет значений в колонке 'Title'
подсчет значений в колонке 'Title'

Мы видим, что Mr - 517 пассажиров, Miss - 182, Mrs - 125, Master - 40 и другие "титулы " ( от 1 до 7)

frequent_titles = train_df['Title'].value_counts()[:4].index.tolist()
train_df['Title'] = train_df['Title'].apply(lambda x: x if x in frequent_titles else 'Other')
train_df['Title'].value_counts()
подсчет значений в колонке 'Title' (где другие титулы  объединены в 1 группу)
подсчет значений в колонке 'Title' (где другие титулы объединены в 1 группу)

"Титулы" не связанны с возрастом, но сильно связаны с полом пассажира.

"Титулы" показывают нам принадлежность к полу.

pd.crosstab(train_df['Title'], train_df['Sex'])
"Титулы" показывают  нам принадлежность к полу.
"Титулы" показывают нам принадлежность к полу.

Мы видим, что Master и Mr это - мужчины, а Miss и Mrs это - женщины. И мы не можем сказать, сколько им лет.

пропущенные значения возраста и "титул"
пропущенные значения возраста и "титул"

Из 36 Master - у 4 не указан возраст, из 398 Mr - у 119 не указан возраст и т д.

PS:

Для более полного детального анализа я создала новую колонку 'Age_NaN' (бинарный классификатор). Провела анализ в зависимости от наличия записи о возрасте , класса. пола и выживаемости ( статья обновлена).

Титул все-таки имеет корреляцию с возрастом - об этом написано по ссылке, да и вообще это логично: чтобы дослужиться до Colonel надо потратить какое-то время, а Miss в какой-то момент становится Mrs.

Ниже, на ящике с усами, можно увидеть, что у каждого титула свой "средний возраст"

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

Да, действительно, "Титул поможет более точнее заполнить пропущенные значения в колонке "Age".

Можно заменить пропущенные значения в колонке "Age" в соответствии с титулом:

train_df['Age'].fillna(train_df.groupby('Title')['Age'].transform(
  'median'), inplace=True)

Спасибо за идею!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации