Набор данных «Титаник» очень распространен для начала практики — для энтузиастов машинного обучения.

Чтобы предсказать выживание пассажиров — по всему классу — во время катастрофы «Титаника», я начал поиск в наборе данных на Kaggle. Я решил выбрать набор данных Kaggle + Wikipedia для изучения цели.

Исследование проводилось в R Studio.

Перед загрузкой данных внимательно прочтите раздел Очистка и редактирование данных в Readme.md.

Структура переменных в наборе данных...

$ PassengerId       : int  1 2 3 4 5 6 7 8 9 10 ...
$ Survived          : int  0 1 1 1 0 0 0 0 1 1 ...
$ Pclass            : int  3 1 3 1 3 3 1 3 3 2 ...
$ Name              : Factor w/ 1307 levels "Abbing, Mr. Anthony",..: 156 287 531 430 23 826 775 922 613 855 ...
$ NameLength        : int  23 27 22 29 24 16 23 30 22 22 ...
$ Sex               : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
$ SibSpouse         : int  1 1 0 1 0 0 0 3 0 1 ...
$ ParentsChild      : int  0 0 0 0 0 0 0 1 2 0 ...
$ TicketNumber      : Factor w/ 929 levels "110152","110413",..: 721 817 915 66 650 374 110 542 478 175 ...
$ Fare              : num  7.25 71.28 7.92 53.1 8.05 ...
$ Cabin             : Factor w/ 187 levels "","A10","A11",..: 1 108 1 72 1 1 165 1 1 1 ...
$ Age_wiki          : num  22 35 26 35 35 22 54 2 26 14 ...
$ Age_Months        : int  264 420 312 420 420 264 648 24 312 168 ...
$ HometownCountry   : Factor w/ 47 levels "","Argentina",..: 18 47 19 47 18 24 47 41 47 27 ...
$ Boarded           : Factor w/ 5 levels "","Belfast","Cherbourg",..: 5 3 5 5 5 4 5 5 5 3 ...
$ Destination       : Factor w/ 292 levels "","Aberdeen, South Dakota, US",..: 217 187 186 242 186 186 73 57 250 60 ...
$ DestinationCountry: Factor w/ 10 levels "","Brazil","Canada",..: 3 10 10 10 10 10 10 10 10 10 ...
$ Lifeboat          : Factor w/ 21 levels "","1","10","11",..: 1 12 7 21 1 1 1 1 8 1 ...
$ LifeboatSupport   : Factor w/ 2 levels "No","Yes": 1 2 2 2 1 1 1 1 2 1 ...

Важной задачей, которую мы начинаем с анализа данных, была EDA (исследовательский анализ данных). Мы также использовали Tableau для анализа, мало того, что мы также использовали анализ таблицы для обработки пропущенных значений.

На основании анализа мы обнаружили, что пассажиры 1-го класса имели приоритет для спасательных шлюпок, так как выжило 62% пассажиров, а из 3-го класса выжило только 24% пассажиров. Однако общее количество пассажиров 1-го, 2-го и 3-го классов составило 323, 277 и 709 соответственно.

Лучшей частью исследования был EDA, который охватывает,

# Treating Missing Values
# Pivot table Analysis
# Fare Variable Analysis for Outliers
# Boxplot Analysis for Outlier - Used Hypothesis 
# Other Variables Outliers Study
# Correlation
# Data Normalization
## And Finally we stored clean data into TitanicCleanData.csv file. 

Для исследования мы решили изучить три метода машинного обучения в одном и том же наборе данных (TitanicCleanData.csv). Полное исследование было проведено в R.

Перед построением модели мы разделили данные на три части: 1. Пропущенные значения из переменной Survived — фактический прогноз. 2. Обучающий набор данных — для обучения модели. 3. Тестовый набор данных — для тестирования модели на основе неизвестного и производительности.

## Development (Study) dataSet and Validation (Test) dataset 
Prediction = subset(TitanicCleanData, is.na(TitanicCleanData$Survived)) 
train = na.omit(TitanicCleanData)attach(train) 
# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% # 
Make Ratio of 30% and 70% for test1 and train1 dataset  
ind = sample(2, nrow(train), replace = TRUE, prob = c(0.7,0.3)) 
train1 = train[ind == 1,]
test1 = train[ind == 2,]

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

#Feature Selection Techniques 
attach(train1) 
set.seed(123) 
boruta.train <- Boruta(Survived ~ . , data=train1, doTrace = 2)

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

train.tune = tuneRF(x = train1[, -c(1)], 
y = as.factor(train1$Survived),                   
mtryStart = 6,                    
ntreeTry = 41,                    
stepFactor = 1.2,                    
improve = 0.0001,                    
trace = TRUE,                    
plot = TRUE,                    
nodesize = 20,                    
doBest = TRUE,                    
importance = TRUE)  
train.rf = randomForest(as.factor(train1$Survived) ~ ., 
data = train1,                         
ntree =31, mtry = 5, nodesize = 20, importance  = TRUE)

Эту же модель — train.rf — мы применили для предсказания выжившего пассажира после катастрофы «Титаника» на тестовом наборе данных, чтобы проверить работоспособность модели.

Для оценки эффективности на неизвестных данных мы использовали три метода: 1. Матрица путаницы, 2. Оценка F1, 3. Оценка AUC.

# Confusion Matrix  
library(caret)
library(e1071) 
confusionMatrix(as.factor(test1$Survived), test1$predict.class) 
## F1 Score 
precision.test1 = precision(as.factor(test1$Survived), test1$predict.class)
# [1] 0.9940828 
recall.test1 = recall(as.factor(test1$Survived), test1$predict.class)
# [1] 0.9767442 
test1.F1 = (2*precision.test1*recall.test1) / sum(precision.test1, recall.test1)
# [1] 0.9853372  
## ROC Curve 
roc(test1$Survived, as.numeric(test1$predict.class), plot = TRUE, main = 'ROC Curve for test1', col = 'darkseagreen')

На основе файла TitanicCleanData.csv мы также построили логистическую регрессию и модель K-ближайшего соседа для прогнозирования выживших пассажиров Титаника.

Для реализации проектапожалуйста, посетите…Github