본문 바로가기
IT관련

R로 배우는 데이터 분석: 데이터 분할과 시각화

by aostory77 2025. 5. 19.

데이터 분석에서 가장 중요한 과정 하나는 데이터 분할(Data Splitting)입니다. 좋은 모델을 만들기 위해선 단순히 정확도가 높은 것보다 일반화 성능, 새로운 데이터를 예측하는 능력이 중요합니다.
R활용하여 데이터를 훈련/테스트로 나누고, 간단한 모델링과 시각화를 통해 성능을 확인해보겠습니다.


1️⃣ 실습 데이터: 꽃의 품종을 분류하는 iris

iris 데이터셋은 머신러닝 입문에서 자주 사용되는 예제로,
가지 품종의 붓꽃(Species)4가지 특성(Sepal, Petal 길이/너비)으로 구분합니다.

 

# 데이터 불러오기
data(iris)
head(iris)


2️⃣ Hold-out 방식으로 데이터 분할 ( 7 : 3 )

Hold-out 방식데이터를 나누고, 훈련용 데이터로 모델을 학습한 테스트 데이터로 성능을 평가하는 가장 간단한 방법입니다.

 

set.seed(123)  # 재현성을 위한 시드 고정

# 데이터 인덱스 무작위로 추출 (70%)
index <- sample(1:nrow(iris), size = 0.7 * nrow(iris))

# 훈련/테스트 데이터 분할
train_data <- iris[index, ]
test_data <- iris[-index, ]

# 데이터 크기 확인
cat("훈련 데이터 수:", nrow(train_data), "\n")
cat("테스트 데이터 수:", nrow(test_data), "\n")


3️⃣ 훈련 데이터 시각화: 품종별 분포 확인

ggplot2 패키지를 이용해 훈련 데이터에서 품종별 분포를 시각화해 봅니다.

 

library(ggplot2)

ggplot(train_data, aes(x = Petal.Length, y = Petal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.8) +
  labs(title = "훈련 데이터의 꽃잎 특성 분포", x = "Petal Length", y = "Petal Width") +
  theme_minimal()

 

📌 시각화 해석

  • setosa명확하게 versicolor virginica와 구분됩니다.
  • versicolorvirginica다소 겹치는 부분이 있어 분류가 어려울 있습니다.

4️⃣ 모델 학습: 랜덤 포레스트(Random Forest)

library(randomForest)

# 랜덤 포레스트 모델 학습
set.seed(123)
rf_model <- randomForest(Species ~ ., data = train_data)

# 훈련 결과 출력
print(rf_model)


5️⃣ 테스트 데이터로 예측 성능 평가

# 테스트 데이터에 대해 예측
pred <- predict(rf_model, newdata = test_data)

# 혼동 행렬로 정확도 확인
library(caret)
confusionMatrix(pred, test_data$Species)

 

📌 혼동행렬 해석

  • 정확하게 예측된 대각선에 위치합니다:
    • setosa: 1414정확히 예측 (100%)
    • versicolor: 1717정확히 예측 (100%)
    • virginica: 1413정확히 예측 (1개를 versicolor잘못 예측)

대부분의 데이터를 정확히 분류했으며, virginica 1개만 오분류됨.

📊 Overall Statistics

  • Accuracy (정확도): 0.9778
    전체 테스트 데이터 97.8%정확히 예측했음.
  • 95% CI (신뢰구간): (0.8823, 0.9994)
    정확도는 88%~99.9% 범위 내에 있을 확률이 높음.
  • No Information Rate (NIR): 0.4
    가장 많은 클래스만 무조건 예측했을 얻을 있는 정확도 (여기선 versicolor가장 많음).
  • P-Value [Acc > NIR] < 2.2e-16
    모델의 정확도가 NIR보다 유의하게 높다것을 의미 (즉, 성능이 의미 있음).
  • Kappa: 0.9664
    범주형 분류의 일치도 지표. 1가까울수록 좋음 (0.8 이상이면 아주 훌륭함).

 

종합 평가

항목결과해석
Accuracy 97.8% 매우 높은 전체 정확도
Kappa 0.966 강한 일치도
민감도/정밀도 모두 우수 클래스 균형잡힌 성능
오분류 virginica 1 문제 없음
 

모델은 iris 데이터셋에 대해 거의 완벽에 가까운 분류 성능보여주며, 실전 프로젝트의 기본 모델로 매우 적합합니다.

 

2025.04.26 - [IT관련] - 영화 흥행 분석 프로젝트( Kaggle 영화 데이터셋 )

 

영화 흥행 분석 프로젝트( Kaggle 영화 데이터셋 )

🎥 "영화가 성공하려면 무엇이 필요할까?"여러분은 영화가 히트하는 데 무엇이 가장 중요한 요소라고 생각하시나요?막대한 제작비? 유명 배우? 아니면 뛰어난 감독?이런 궁금증을 데이터로 풀

aostory.co.kr

 

2025.04.24 - [IT관련] - R로 배우는 회귀분석 실습 ( 베이징 미세먼지(PM2.5) 데이터 분석 )

 

R로 배우는 회귀분석 실습 ( 베이징 미세먼지(PM2.5) 데이터 분석 )

R로 배우는 회귀분석 실습 ( 베이징 미세먼지(PM2.5) ) [ 목차 ] 분석목적 데이터개요 분석방법 R코드 - 데이터 불러오기 - 변수 추출 및 전처리 - 다중회귀 모델 생성 및 결과 요약 - 시각화 결론 및

aostory.co.kr

 

2025.04.09 - [IT관련] - 수면 시간과 스트레스가 수면의 질에 어떤 영향을 줄까? ( + R 회귀분석 )

 

수면 시간과 스트레스가 수면의 질에 어떤 영향을 줄까? ( + R 회귀분석 )

수면 시간과 스트레스가 수면의 질에 어떤 영향을 줄까?   [ 목차 ]      프로젝트 개요     사용한 데이터       R코드 분석       분석 결과 요약       시사점 및 마무리   1. 프로젝트

aostory.co.kr