자료 전처리 (2) 왜도, 분산이 거의 없는 변수
왜도
- 꼬리가 긴 형태
- 예) 소득 및 자산
- 자료가 한쪽으로 기울어져 있는 데이터를 분석에 사용하면 예측력이 떨어짐
- outlier 처리를 하게 되면 그 데이터들을 분실하게 되는 것이므로 좋은 방법이라고 할 수 없음
- 변환 과정을 통해 최대한 대칭으로 만들고자 함
- e1071 library로 왜도를 구할 수 있음
library(e1071)
skewValues <- apply(dat[,-1], 2, skewness)
skewValues
- 왜도 평가 기준
- -1/2 ~ 1/2 : approximately symmetric
- < -1/2 or >1/2 : skewed
히스토그램:
hist(dat$Alcohol) # 13을 기준으로 대칭
hist(dat$Nonflavanoid.phenols) # 오른쪽으로 꼬리가 긴 형태를 띰
hist(dat$Magnesium) # 오른쪽으로 꼬리가 긴 형태를 띰
왜도 보정
log 변환
dat$log_Magnesium <- log(dat$Magnesium) # 로그로 변환
skewness(dat$log_Magnesuim)
# 1.08이었던 왜도 0.59로 줄어듦
Box cox 변환
- 로그 변환에 비해 더욱 정규하게 대칭 분포를 가지는 변환을 찾아주며 left-tailed 자료도 다룰 수 있음
bctrans_Mg <- BoxCoxTrans(dat$Magnesium)
bctrans_Mg
# 178개 포인트가 lambda를 추정하기 위해 사용
# 추정된 lambda는 -1.4
dat$bc_Magnesium <- predict(bctrans_Mg, dat$Magnesium) # 데이터 포인트를 확인
skewness(dat$bc_Magnesium)
# 왜도가 0에 가까워짐
hist(dat$bc_Magnesium)
near-zero variance
분산이 거의 0에 가까운 자료는 그 자체로 정보가가 거의 없다고 볼 수 있으며 예측에 치명적인 오류를 유발하기도 합니다. 이를 알아보기 위해 caret의 기능을 활용해봅시다.
x <- matrix(c(rep(0, 99), 1), rnorm(100, 0, 1), c(rep(1, 99), 2), ncol=3)
View(x)
nearZeroVar(x) # 분산이 0에 가까운 컬럼 번호 반환
nearZeroVar(dat[,-1]) # 분산이 0에 가까운 컬럼은 없음