728x90
반응형
1. 기계학습 (날씨 데이터 최고 온도 예측)
활용 데이터 : https://drive.google.com/file/d/1pko9oRmCllAxipZoa3aoztGZfPAD2iwj/view
*데이터에 대한 간략한 설명
temp_1 : 전날 최고온도
temp_2 : 전전날 최고온도
friend : 친구의 예측온도
- 데이터 확인 및 전처리
- 데이터 EDA 수행
library(data.table)
library(dlookr)
library(tidyverse)
data <- fread("temps.csv")
# 데이터 EDA 수행
# 단순 확인
dlookr::diagnose(data)
# 검정 통계량 확인
dlookr::describe(data)
# 아웃라이어 확인
dlookr::diagnose_outlier(data)
# 결측치 확인
# 단, 이는 실기용 데이터가 아닌 인터넷에서 받은 데이터로 결측치 없음
# 실제 필요 시 아래와 같이 각 컬럼에 대해 확인해볼 수 있고,
# 위에서 diagnose 과정에서 각 컬럼별 비율이 확인됨
which(is.na(data$컬럼))
-
- 결측 데이터 예측, 예측 근거 및 처리
# 결측치를 확인하고 처리 방안에 대해 논의하라
# 결측치를 처리하는 방법은
# 1) 갯수가 많지 않다면, 삭제 처리할 수 있음.
# 2) imputation이 필요하다면, 컬럼의 특성에 따라 knn imputation, 평균대치 등을 수행할 수 있음.
# 다만, 데이터를 확인해보면, 시계열 데이터임.
# 따라서 시계열 데이터의 결측치 처리 방법에 따라 수행해야함.
# 시계열 데이터는 그 특성상 비정상성으로 인해 시간의 흐름에 따라 데이터의 평균과
# 분산이 변함
# 이에 맞춘 imputation 방법은
# Last observation carried forward(LOCF) : 직전 관측치 값으로 결측치를 대체
# Next observation carried backward(NOCB) : 직후 관측치 값으로 결측치를 대체
# Moving Average / Median : 직전 N의 time window의 평균치 / 중앙값으로 결측치를 대체
# 조금 더 심화된 방법으로 linear interpolation 방법이 있음.
# 이는 결측값이 인접한 두 데이터 점 사이의 직선에 있다고 가정하고 작동함.
# 간단한 예시는 아래와 같음
#########################################################################
# Load the zoo package
library(zoo)
# Create a sample time series data with missing values
data <- zoo(c(1, 2, NA, 4, NA, 6, 7))
# Impute missing values using linear interpolation
imputed_data <- na.approx(data)
# View the imputed data
print(imputed_data)
########################################################################
- 데이터 분할 방법 설명
시계열 데이터에서는 데이터 분할 시 시계열의 흐름을 고려하여 나누어야 하기 때문에 홀드아웃 기법과 크로스밸리데이션 기법을 사용할 수 있음.
여기서는 간단히 홀드아웃 기법을 활용한 데이터 분할을 보임.
# 데이터 분할 방법 설명
# 시계열 데이터를 분할하는 방법에는 홀드아웃 방법과 cross validation방법이 있음
# 홀드 아웃 기법을 통해 train set은 80%, test set은 20%로 비율을 맞춤
# 홀드아웃 세트 크기 지정
holdout_size <- 0.2
# 홀드아웃 인덱스 생성
holdout_index <- round(nrow(data) * (1 - holdout_size))
# 홀드아웃 데이터 분할
train <- data[1:holdout_index, ]
test <- data[(holdout_index + 1):nrow(data), ]
- 최종 데이터셋 제시
최종 데이터셋은 train 80%, test 20%로 나눈 데이터 형태임. 이때 year, month, day 컬럼을 결합하여 Date 형식으로 변환하였고, 데이터가 자연현상인 날씨 관련 데이터이므로 요일에 따른 구별(ex. 평일 vs. 주말, 각 요일별 특성 등)은 고려하지 않았음.
2. Random Forest 모델 적합 및 검증
- 예측 기준선 수립 및 근거 제시
- Random Forest 학습 및 예측 결과 해석
- 예측 결과 검정 해석, 중요변수 도출
- 변수 중요성 분석 및 그래프 출력
3. SVM(Support Vector Machine) 모델 적합 및 검증
- 예측 기준선 수립 및 근거 제시
- SVM 학습 및 예측 결과 해석
- 예측 결과 검정 해석, 중요변수 도출
- 변수 중요성 분석 및 그래프 출력
※ 문제의 정확한 의미파악이 제한되어 시계열 데이터에 대해 각각 SVM, Random Forest 모델에 대한 일반 사항에 대해 기술함.
- 시계열 데이터에 대한 예측 문제였을 것으로 판단하고 풀이 작성
- 이때 예측 정확도는 test data에 대해 예측한 값과 실제값의 차이의 제곱으로 계산함(MSE, 낮을수록 정확한 것)
# SVM 모델
svm_model <- svm(y_train ~ ., data = x_train)
svm_pred <- predict(svm_model, newdata = x_test)
# Calculate the mean squared error of the predictions
svm_mse <- mean((svm_pred - y_test)^2)
# Print the mean squared error
print(paste0("SVM Mean squared error: ", svm_mse))
# Random forest 모델
rf_model <- randomForest(x = x_train, y = y_train)
rf_pred <- predict(rf_model, newdata = x_test)
# Calculate the mean squared error of the predictions
rf_mse <- mean((rf_pred - y_test)^2)
# Print the mean squared error
print(paste0("Random Forest Mean squared error: ", rf_mse))
4. 모델 비교 및 향후 개선 방향 도출
- Random Forest, SVM 모델의 결과 비교 후 최종 모델 선택
- MSE 비교 후 더 낮은 모델 선택 - 두 모델의 장단점 분석, 추후 운영 관점에서 어떤 모델을 선택할 것인가?
SVM과 Random forest는 모두 분류 및 회귀 작업에 사용할 수 있는 기계 학습 알고리즘이나 각각의 장단점이 있음.
SVM은 데이터를 두 클래스로 분리하는 하이퍼플레인을 찾는 데 사용할 수 있는 선형 모델임. 이에 따라 따라서 데이터를 선형으로 분리할 수 있는 문제에 적합함. 다만 특이치에 민감할 수 있으며 훈련하는 데 계산 비용이 많이 들 수 있음.
랜덤 포레스트는 의사 결정 트리 모음으로 구성된 앙상블 모델이기 때문에 데이터를 선형으로 분리할 수 없는 문제에 적합함. 랜덤 포레스트는 또한 SVM보다 특이치에 덜 민감하고 훈련하는 데 계산 비용이 덜 들게됨.
일반적으로 random forest가 SVM보다 더 다양하고 강력한 모델이나, 데이터를 선형으로 분리할 수 있는 문제에는 SVM이 더 나은 선택이 될 수 있음. - 모델링 관련 추후 개선 방향 제시
개선 방향성에 대해서는 합리적으로 작성하면 배점을 주는 걸로 알고 있음.
728x90
반응형
'ADP 준비 > 머신러닝' 카테고리의 다른 글
ADP 실기 준비 - 머신러닝 (1) 회귀분석 패키지/함수 정리 (2) | 2023.06.01 |
---|---|
지도학습 > 의사결정나무 : CART, C5.0, C4.5, CHAID - R code (0) | 2023.02.01 |
차원 분석 - 주성분 분석, 요인 분석, 다차원 척도법 (0) | 2023.01.15 |
댓글