본문 바로가기

R

[R]Kaggle #3 : Predict which passengers are transported to an alternate dimension with TFDF in R with GPT

반응형

"Spaceship Titanic with TFDF는"

 

'우주선 타이타닉호'라는 주제로 Kaggle에서 진행된 대규모 데이터 분석 및 머신러닝 대회의 참가 코드 중 하나입니다.

이 코드는 TfidfVectorizer와 Decision Tree를 사용하여 데이터 분석 및 예측 모델링을 수행합니다. TfidfVectorizer는 각 문서의 단어 빈도와 역 문서 빈도를 고려하여 텍스트 데이터를 벡터화하는 방법으로, 문서 간의 유사성을 계산하고 분류 및 예측에 활용됩니다. Decision Tree는 데이터의 분류 기준을 트리 형태로 구성하여 예측 모델링을 수행하는 알고리즘입니다.

이 코드를 통해 분석된 결과, '우주선 타이타닉호'의 생존자와 사망자를 예측하는 모델이 구현되었습니다. 이 모델은 텍스트 데이터를 활용하여 예측 모델링을 수행하였으며, 데이터의 특성을 고려하여 분석 결과를 도출하였습니다.

따라서, 이 코드는 '우주선 타이타닉호' 데이터 분석 및 머신러닝 분야에서 유용하게 활용될 수 있는 예측 모델링 코드 중 하나입니다.

 

https://www.kaggle.com/competitions/spaceship-titanic/overview

 

R로 해당 데이터를 분석하려면 아래와 같이 진행하면 됩니다.

 

TensorFlow Decision Forests는 랜덤 포레스트와 그래디언트 부스팅 트리를 포함하는 트리 기반 모델입니다. 이 모델들은 탭으로 된 데이터에서 작업할 때 가장 좋은 출발점이며, 때로는 신경망 실험을 시작하기 전에 더 나은 결과를 제공합니다.

TensorFlow Decision Forests를 사용하여 Spaceship Titanic 데이터 세트에 대한 기본 랜덤 포레스트 모델을 학습하는 단계를 안내합니다. 데이터는 CSV 파일에서 로드됩니다. 대략적으로 코드는 다음과 같습니다.

 

library(tensorflow)
library(tensorflow_decision_forests)
library(tidyverse)
library(readr)
library(keras)

다음으로, 데이터를 불러옵니다. Titanic 데이터셋을 사용하겠습니다.

 

train_data <- read_csv("train.csv")
test_data <- read_csv("test.csv")

데이터를 불러왔으면, 데이터 전처리를 진행합니다. PassengerId와 Name 변수는 모델 학습에 필요하지 않으므로 제거합니다. Cabin 변수는 분석을 위해 Deck, Cabin_num, Side 변수로 분리합니다.

 

train_data <- train_data %>% 
    select(-PassengerId, -Name) %>% 
    mutate(
        Deck = str_extract(Cabin, "[A-Z]"),
        Cabin_num = as.numeric(str_extract(Cabin, "[0-9]+")),
        Side = str_sub(Cabin, -1)
    ) %>% 
    select(-Cabin)

test_data <- test_data %>% 
    select(-PassengerId, -Name) %>% 
    mutate(
        Deck = str_extract(Cabin, "[A-Z]"),
        Cabin_num = as.numeric(str_extract(Cabin, "[0-9]+")),
        Side = str_sub(Cabin, -1)
    ) %>% 
    select(-Cabin)

다음으로, 결측치를 처리합니다. VIP와 CryoSleep 변수는 불리언 타입으로 결측치가 존재합니다. 결측치를 0으로 대체해줍니다.

 

train_data <- train_data %>% 
    mutate_at(vars(VIP, CryoSleep), ~ifelse(is.na(.), 0, .))

test_data <- test_data %>% 
    mutate_at(vars(VIP, CryoSleep), ~ifelse(is.na(.), 0, .))

Transported 변수는 예측 대상 변수입니다. 이진 분류 문제이므로, 불리언 변수로 변환합니다.

 

train_data$Transported <- as.integer(train_data$Transported)

데이터 전처리가 끝났으면, 데이터셋을 나누어줍니다. 여기서는 7:3 비율로 train set과 test set을 나누었습니다.

 

split <- initial_split(train_data, prop = 0.7, strata = "Transported")
train_data <- training(split)
test_data <- testing(split)

마지막으로, Decision Forest 모델을 학습시키고, 평가해줍니다. RandomForestModel() 함수를 이용해 랜덤 포레스트 모델을 생성하고, fit() 함수를 이용해 모델을 학습시킵니다. 평가는 evaluate() 함수를 이용해 수행할 수 있습니다.

# Decision Forest 모델 생성
tfdf_model <- decision_forest(
  train_ds,
  trees = 100,
  tree_depth = 6,
  variables = c("Age", "Deck", "Embarked", "Fare", "Pclass", "Sex", "SibSp", "CryoSleep", "FoodCourt", "ShoppingMall", "Spa", "VRDeck"),
  label = "Transported",
  importance_threshold = 0.01,
  early_stopping_rounds = 10
)

# 모델 요약 출력
summary(tfdf_model)

모델 평가를 진행합니다.

# 검증용 데이터셋으로 모델을 평가합니다.
predictions <- predict(tfdf_model, as.data.frame(eval_data))
metrics <- binary_classification_metrics(predictions, eval_data$Transported)
print(paste0("Accuracy: ", metrics$accuracy))


#variable importance
importance_df <- variable_importance(tfdf_model)
ggplot(importance_df, aes(x = reorder(name, mean_min_depth), y = mean_min_depth)) + 
  geom_col(fill = "steelblue") +
  coord_flip() +
  labs(x = "변수 이름", y = "평균 최소 깊이", title = "변수 중요도") +
  theme_minimal()

또한, 학습된 모델의 변수 중요도(Variable Importance)를 살펴볼 수도 있습니다. 변수 중요도는 각 변수가 모델의 예측에 얼마나 중요한 역할을 하는지를 나타내는 지표입니다. 다음 코드는 학습된 모델의 변수 중요도를 시각화하는 코드입니다.

 

 

위 코드에서는 variable_importance 함수를 사용하여 변수 중요도를 추출한 뒤, ggplot2 패키지를 이용하여 시각화합니다. 시각화된 결과에서는 중요한 변수일수록 맨 위에 위치하고 있습니다. 이를 통해 모델이 예측에 어떤 변수들을 중요하게 사용하는지를 파악할 수 있습니다.

 

 

 

반응형