Введение.
Эта статья представляет собой анализ набора данных Титаника. Его цель — получить некоторое представление о коэффициенте выживания пассажиров потерпевшего крушение корабля.
В регрессионном анализе использовался метод statsmodel.api для расчета вероятности выживания путем обучения алгоритма набору обучающих данных и использованию тестового набора данных. для подтверждения его точности. Для обучения и тестирования использовались две модели одного и того же метода statsmodel.api, но они различались по переменным, переданным в алгоритм. точность двух моделей, чтобы определить, какая из двух моделей смогла более точно предсказать коэффициент выживаемости.
Наконец, документ показывает код, который разработал алгоритм в приложении.

Предыстория
В начале 20 века Титаник отправился в плавание с 891 пассажиром, которые отправились на борт из трех разных портов в Шербуре, Квинстауне и Саутгемптоне. На борту находились взрослые и дети из разных слоев общества. На корабле было три класса кают, а именно первый, второй и третий класс. На борту находились 312 женщин и 577 мужчин в возрасте от младенцев до 80 лет. Данные показали, что 81% и 25% всех мужчин и женщин умерли соответственно. Хотя мужчин на корабле было больше, чем женщин.
Данные также показали, что в 1-м классе выжило 134 из 214 (63%), во 2-м классе выжило 87 из 184 (47%), а в Салон 3-го класса уцелел 119 из 491 (24%). Это наводит нас на мысль, что пассажиры салона 1-го класса имели приоритет покинуть злополучный корабль перед другими пассажирами своего класса. Из-за отсутствия данных возраст 177 человек не был учтен в наборе данных, но, насколько известно, из 113 пассажиров, которых можно было бы считать детьми (от младенцев до 17 лет), выжил 61 человек или около 54% ​​из них выжили. Интересно, что было 5 мужчин с pclass 1 (1-й класс) с нулевым тарифом — все 5 не выжили, я предполагаю, что они были членами экипажа или, может быть, они выиграли билет в акции.

Метод моделирования и переменные
Как упоминалось выше, для этой задачи использовался метод регрессионного анализа statsmodel.api. Набор данных Titanic был разделен на 2 набора для обучения и тестирования для каждой модели, чтобы выполнить прогноз и проверку. Используемые переменные указаны ниже. Для обеих моделей задача состоит в том, чтобы максимально точно предсказать выживаемость пассажиров. Следующие переменные использовались на основе разделения 80/20 для набора данных поезда и теста.

Определение переменных:
PassengerId: уникальный идентификатор для каждого пассажира.
Выжил: указывает, выжил ли пассажир или нет
(0 = нет, 1 = да) .
Pclass: пассажирский класс (1 = первый класс, 2 = второй класс, 3 = третий класс).
Name: имя пассажира.
Пол: пол пассажира (Мужчина или женщина).
Возраст: возраст пассажира в годах. Он может содержать пропущенные значения.
SibSp: количество братьев и сестер/супругов на борту «Титаника».
Parch: количество родителей/детей на борту «Титаника».
Ticket: номер билета.
Стоимость проезда: Стоимость билета.
Салон: Номер салона.
Прибытие: Порт посадки
(C = Шербур, Q = Квинстаун, S = Саутгемптон).< br /> В наборе данных было 12 столбцов и 889 строк.

Модель 1:
Зависимый: Выжил
Независимый: Pclass, SibSp, Parch
Модель 2:
Зависимый: Выжил< br /> Независимые: Pclass, Sibsp, Parch, Fare

Выводы из модели 1
Класс пассажиров (Pclass): коэффициент -0,3097 предполагает, что пассажиры более высокого класса (меньшее числовое значение) имели более высокую вероятность выживания. Это означает, что пребывание в более высоком пассажирском классе, таком как первый класс, увеличивало шансы выжить при катастрофе Титаника.

Братья и сестры/супруги на борту (SibSp): коэффициент -0,1406 предполагает, что наличие большего количества братьев и сестер или супругов на борту было связано с несколько более низкой вероятностью выживания. Однако значение p 0,0836 указывает на то, что эта связь не является статистически значимой при обычном уровне значимости 0,05. Таким образом, влияние SibSp на выживаемость может быть не очень сильным или надежным на основании имеющихся данных.

Родители/дети на борту (Parch): коэффициент 0,3638 предполагает, что наличие большего количества родителей или детей на борту связано с более высокой вероятностью выживания. Это означает, что у пассажиров, которые путешествовали с членами своей семьи, было больше шансов выжить на Титанике.

Псевдо-R-квадрат: значение псевдо-R-квадрата, равное 0,055, указывает на то, что модель логистической регрессии объясняет примерно 5,5% вариаций результатов выживания. Это означает, что включенные переменные (Pclass, SibSp и Parch) в совокупности способствуют пониманию вероятности выживания, но все еще существует значительная часть необъяснимых вариаций.
Точность модели: 65 %.

Выводы из модели 2.
Псевдо-R-квадрат. Псевдо-R-квадрат равен 0,088. Это означает, что независимые переменные (Pclass, SibSp, Parch, Fare), включенные в модель, в совокупности объясняют около 8,8% общей дисперсии вероятности выживания. Это указывает на относительно низкий уровень объяснительной способности, предполагая, что могут быть другие факторы, не включенные в модель, которые влияют на выживание на Титанике.

P-класс: коэффициент -0,3593 предполагает, что пассажиры более высоких классов (более низкие значения P-класса) имеют более высокую вероятность выживания. Это указывает на то, что принадлежность к более высокому социально-экономическому классу была связана с более высокими шансами выжить после катастрофы Титаника.

SibSp: коэффициент -0,2301 указывает на то, что наличие большего количества братьев и сестер или супругов на борту Титаника было связано с более низкой вероятностью выживания. Это говорит о том, что пассажиры с большими семьями могли столкнуться с трудностями при эвакуации или спасательных работах.

Парч: коэффициент 0,2269 предполагает, что наличие большего количества родителей или детей на борту «Титаника» было связано с более высокой вероятностью выживания. Это может означать, что у пассажиров с членами семьи, которые поддерживали и помогали им, было больше шансов на выживание.

Стоимость проезда: коэффициент 0,0103 указывает на то, что более высокая стоимость билета была связана с более высокой вероятностью выживания. Это может отражать приоритет, отдаваемый пассажирам, которые заплатили больше за свое размещение, потенциально предоставляя им доступ к лучшим удобствам или ресурсам эвакуации.
Точность модели: 70%
Анализ показал, что второй Модель была лучшей моделью для прогнозирования количества выживших на Титанике.

Приложение

Модель 1

df = pd.read_csv('Titanic_Train.csv', index_col = 0)
df.info()
‹class 'pandas.core.frame.DataFrame'›
Int64Index: 711 записей, От 709 до 104
Столбцы данных (всего 11 столбцов):
# Столбец Non-Null Count Dtype
— — — — — — — — — — — — — —
0 Survived 711 non-null int64
1 Pclass 711 non-null int64
2 Name 711 non-null object
3 Sex 711 non-null object
4 Age 564 non-null float64
5 SibSp 711 non-null int64
6 Parch 711 non-null int64
7 Ticket 711 non-null object
8 Fare 711 non-null float64
9 Cabin 159 непустых объектов
10 Embarked 711 непустых объектов
dtypes: float64(2), int64(4), object(5)
использование памяти: 66,7+ КБ
тип(df)
pandas.core.frame.DataFrame
df.head()

идентификатор пассажира; Выжил; класс; Имя; Секс; Возраст; СибСп; пергамент; Стоимость билета; Хижина погружена.

709 1 1 Кливер, мисс Элис, женщина 22 0 0 113781 151,55 NaN S
241 0 3 Забур, мисс Тамин, женщина NaN 1 0 2665 14,4542 NaN C
383 0 3 Тикканен, г-н Юхо самец 32 0 0 STON/O 2. 3101293 7,925 NaN S
793 0 3 Сейдж, мисс Стелла Анна самка NaN 8 2 CA. 2343 69,55 NaN S
684 0 3 Гудвин, г-н Чарльз Эдвард мужской 14 5 2 CA 2144 46,9 NaN S

Xtrain = df[[‘Pclass’, ‘SibSp’, ‘Parch’]]
ytrain = df[[‘Survived’]]
Xtrain.head()

PassengerId Pclass SibSp Parch
709 1 0 0
241 3 1 0
383 3 0 0
793 3 8 2
684 3 5 2
поезд. голова()

PassengerId выжил
709 1
241 0
383 0
793 0
684 0

log_reg = sm.Logit(ytrain, Xtrain).fit()
Оптимизация успешно завершена.
Текущее значение функции: 0,628221
Итераций 5
log_reg.summary()
Результаты логит-регрессии
Отд. Переменная: Выживший № Наблюдения: 711
Модель: Logit Df Остатки: 708
Метод: MLE Df Модель: 2
Дата: Чт, 06 июля 2023 г. Псевдо R-кв.: 0,05477
Время: 03:29:10 Логарифмическое правдоподобие: -446,67
сходится: True LL-Null: -472,55
Тип ковариации: неустойчивое LLR p-значение: 5,738e-12
coef стандартная ошибка z P›|z| [0,025 0,975]
Pкласс -0,3097 0,038 -8,121 0,000 -0,384 -0,235
SibSp -0,1406 0,081 -1,730 0,084 -0,300 0,019
Parch 0,3638 0,108 3. 354 0,001 0,151 0,576
лог_рег. summary2()
Модель: логит-псевдо-R-квадрат: 0,055
Зависимая переменная: Выживший AIC: 899,3303
Дата: 06.07.2023, 03:29 BIC: 913.0303
No. Наблюдения: 711 Логарифм правдоподобия: -446,67
Модель Df: 2 LL-Null: -472,55
Остатки Df: 708 LLR p-значение: 5,7383e-12
Схождение: 1,0000 Масштаб: 1,0000
№ Итерации: 5.0000
Коэф. Стандартная ошибка z P›|z| [0,025 0,975]
Pкласс -0,3097 0,0381 -8,1210 0,0000 -0,3844 -0,2349
SibSp -0,1406 0,0812 -1,7301 0,0836 -0,2998 0,0187Parch 0,363 8 0,1085 3,3544 0,0008 0,1512 0,5764

# Набор данных для тестирования загрузки
df = pd.read_csv('Titanic_Test.csv', index_col = 0)
Predicts = log_reg.predict(Xtest)
Predictions
PassengerId
282 0,283134
436 0,568922
40 0,255495
419 0,349938
586 0,603006

434 0,283134
808 0,283134
> 26 0,679099< br /> 86 0.205769
11 0.330552
Длина: 178, dtype: float64
прогнозы = список (карта (раунд, прогнозы))
print('Фактические значения', list( ytest.values))
print('Предсказания:', предсказания)
cm = растерянность_матрица(ytest, предсказания)
print ("Матрица путаницы: \n", cm)

Матрица путаницы:
[[104 5]
[ 58 11]]
print('Точность теста = ', precision_score(ytest, предсказания))
Точность теста = 0,6460674157303371

Модель 2
Xtrain = df[['Pclass', 'SibSp', 'Parch', 'Fare']]
ytrain = df[['Survived']]< br /> Xtrain.head()
Pclass SibSp Parch Fare
PassengerId
709 1 0 0 151,5500
241 3 1 0 14,4542
383 3 0 0 7,9250
793 3 8 2 69,5500
684 3 5 2 46,9000
ytrain.head()

Выжил
PassengerId
709 1
241 0
383 0
793 0
684 0
log_reg = sm.Logit(ytrain, Xtrain) .fit()
Оптимизация успешно завершена.
Текущее значение функции: 0,606150
Итераций 5
Результаты логит-регрессии
Отл. Переменная: Выживший № Наблюдения: 711
Модель: Logit Df Остатки: 707
Метод: MLE Df Модель: 3
Дата: Чт, 06 июля 2023 г. Псевдо R-кв.: 0,08798
Время: 03:45:22 Логарифмическое правдоподобие: -430,97
сходится: True LL-Null: -472,55
Тип ковариации: неустойчивое LLR p-значение: 6,466e-18
coef стандартная ошибка z P›|z| [0,025 0,975]
Pкласс -0,3593 0,040 -8,938 0,000 -0,438 -0,281
SibSp -0,2301 0,090 -2,557 0,011 -0,407 -0,054 Parch 0,2269 0,113 2. 012 0,044 0,006 0,448
Тариф 0,0103 0,002 4,809 0,000 0,006 0,015
log_reg.summary2()
Модель: логит-псевдо R-квадрат: 0,088
Зависимая переменная: Выживший AIC: 869,9453
Дата: 06.07.2023 03:45 BIC: 888,2120
№ Наблюдения: 711 Логарифмическое правдоподобие: -430,97
Df Модель: 3 LL-Null: -472,55
Df Остатки: 707 LLR p-значение: 6,4658e -18
Конвергенция: 1,0000 Масштаб: 1,0000
Количество итераций: 5,0000
Коэф. Стандартная ошибка z P›|z| [0,025 0,975]
Pкласс -0,3593 0,0402 -8,9383 0,0000 -0,4381 -0,2805
SibSp -0,2301 0,0900 -2,5572 0,0106 -0,4065 -0,0537 Parch 0,226 9 0,1128 2,0120 0,0442 0,0059 0,4479
Тариф 0,0103 0,0021 4,8092 0,0000 0,0061 0,0145

# Набор данных для тестирования нагрузки
df = pd.read_csv('Titanic_Test.csv', index_col = 0)
Xtest = df[['Pclass', 'SibSp', 'Parch', 'Fare']]
ytest = df['Survived']
предсказания = log_reg.predict(Xtest)
предсказания
PassengerId
282 0,269528
436 0,750533
40 0,232858
419 0,357866
586 0,714146

434 0,268050
808 0,269367
26 0,537400
86 0,167280
11 0,287187< br /> Длина: 178, dtype: float64
print('Фактические значения', list(ytest.values))
print('Предсказания:', предсказания)

из импорта sklearn.metrics (матрица_замешательства, оценка_точности)
cm = матрица_замешательства(тест, прогнозы)
print ("Матрица замешательства: \n", см)
cm = матрица_замешательства(тест, прогнозы)
печать («Матрица путаницы: \n», cm)
Матрица путаницы:
[[99 10]
[44 25]]

print('Точность теста =', точность_оценки(ytest, предсказания))
Точность теста = 0,6966292134831461