R - 로지스틱 회귀

회귀 모델 생성

R에서 로지스틱 회귀의 세계에 환영합니다! 이 튜토리얼에서는 R을 사용하여 로지스틱 회귀 모델을 만드는 기본 단계를 단계별로 안내해 드리겠습니다. 먼저 기본 개념을 설명한 후 코드로 들어갑니다. 이 튜토리얼은 프로그래밍 경험이 전혀 없는 초보자를 위해 설계되었으므로, 처음에는 혼란스러울 수 있지만 걱정하지 마세요. 시작해 보겠습니다!

R - Logistic Regression

로지스틱 회귀는 무엇인가요?

로지스틱 회귀는 데이터를 분석하고 하나 이상의 예측 변수를 기반으로 예측을 하는 통계 방법입니다. 이는 종종 이진 분류 문제에 사용되며, 결과가 "예" (1) 또는 "아니요" (0) 중 하나인 경우에 유용합니다. 로지스틱 회귀와 선형 회귀의 주요 차이는 로지스틱 회귀가 결과 발생 확률을 예측하는 반면, 선형 회귀는 연속 값을 예측하는 점입니다.

로지스틱 회귀를 사용해야 하는 이유

로지스틱 회귀는 의료, 금융, 마케팅, 사회과학 등 다양한 분야에서 널리 사용됩니다. 이는 이진 결과와 하나 이상의 예측 변수 간의 관계를 이해하고 싶을 때 특히 유용합니다. 예를 들어, 고객이 제품을 구매할지 여부를 그들의 나이, 소득, 과거 구매 이력을 기반으로 예측할 수 있습니다.

R에서 로지스틱 회귀 모델 생성하기

R에서 로지스틱 회귀 모델을 생성하려면 glm() 함수를 사용합니다. 이는 일반화 선형 모델(Generalized Linear Models)을 의미합니다. 다음은 단계별 안내입니다:

단계 1: 필요한 라이브러리 설치 및 로드

먼저 필요한 라이브러리를 설치하고 로드합니다. tidyverse 라이브러리를 데이터 조작 및 시각화에, caret 라이브러리를 모델링에 사용할 것입니다.

install.packages("tidyverse")
install.packages("caret")

library(tidyverse)
library(caret)

단계 2: 데이터 로드

다음으로 데이터셋을 로드해 보겠습니다. 이 예제에서는 내장된 mtcars 데이터셋을 사용하겠습니다. 이 데이터셋은 다양한 차 모델에 대한 정보를 포함하고 있습니다. 우리는 차가 스포츠카인지 여부를 그들의 무게와 마력을 기반으로 예측하려고 합니다.

data(mtcars)
head(mtcars)

단계 3: 데이터 전처리

로지스틱 회귀 모델을 만들기 전에 데이터를 전처리해야 합니다. 이는 카테고리 변수를 인코딩하고 결측치를 처리하며 기능을 스케일링하는 것을 포함합니다. 우리의 경우, 수치 변수만 있으므로 인코딩이나 스케일링이 필요하지 않습니다. 그러나 새로운 이진 변수 is_sports_car를 만들어 차가 스포츠카인지 여부를 나타내도록 합니다.

mtcars <- mtcars %>%
mutate(is_sports_car = ifelse(hp > 150, 1, 0))

단계 4: 데이터를 학습 세트와 테스트 세트로 나누기

모델의 성능을 평가하기 위해 데이터를 학습 세트와 테스트 세트로 나누는 것이 중요합니다. caret 패키지의 createDataPartition() 함수를 사용하여 파트션을 생성합니다.

set.seed(123)
trainIndex <- createDataPartition(mtcars$is_sports_car, p = 0.8, list = FALSE)
trainSet <- mtcars[trainIndex, ]
testSet <- mtcars[-trainIndex, ]

단계 5: 로지스틱 회귀 모델 빌드

이제 로지스틱 회귀 모델을 만들 준비가 되었습니다. glm() 함수를 사용하고 family 인자를 binomial로 설정하여 로지스틱 회귀를 수행하겠습니다.

model <- glm(is_sports_car ~ wt + hp, data = trainSet, family = binomial)
summary(model)

summary() 함수는 모델의 개요를 제공하며, 계수, 표준 오차, z값, p값을 포함합니다. 이 통계는 각 예측 변수의 중요성과 통계적으로 유의미한지 이해하는 데 도움이 됩니다.

단계 6: 예측하고 모델 평가

모델을 만들었으므로, 테스트 세트에 대한 예측을 하고 성능을 평가해 보겠습니다. predict() 함수를 사용하여 예측 확률을 생성하고, 0.5의 임계값을 사용하여 이진 결과로 변환합니다.

predictions <- predict(model, newdata = testSet, type = "response")
predicted_classes <- ifelse(predictions > 0.5, 1, 0)

이제 테스트 세트의 예측된 클래스와 실제 클래스를 비교하여 모델의 정확도를 계산해 보겠습니다.

accuracy <- mean(predicted_classes == testSet$is_sports_car) * 100
cat("Accuracy:", accuracy, "%")

이제 R에서 glm() 함수를 사용하여 로지스틱 회귀 모델을 성공적으로 만들었습니다! 기본 예제이므로, 특성 선택, 정규화, 모델 튜닝 등 다양한 요소를 고려할 필요가 있지만, 로지스틱 회귀의 세계로의 여정에 좋은 시작점이 되기를 바랍니다.

Credits: Image by storyset