더북(TheBook)

업 샘플링, 다운 샘플링

업 샘플링은 해당 분류에 속하는 데이터가 적은 쪽을 표본으로 더 많이 추출하는 방법이며, 다운 샘플링은 데이터가 많은 쪽을 적게 추출하는 방법이다.

예를 들어, 총 6개의 데이터가 있고 각각의 분류가 ‘0, 0, 0, 0, 1, 1’이라고 하자. 이 데이터를 그대로 쓰면 0을 예측할 확률이 큰 모델이 만들어지므로, 그대로 쓰지 않고 표본을 추출한다. 복원 추출 방식으로 분류 0과 1에서 각각 표본을 4개씩 뽑으면 ‘0, 0, 0, 0, 1, 1, 1, 1’이 되어 각 분류에 해당하는 데이터의 개수가 같아진다. 이것이 업 샘플링 방법이다. 반대로 다운 샘플링에서는 총 2개씩의 데이터를 0과 1에서 표본으로 뽑아 ‘0, 0, 1, 1’이 된다.

caret 패키지의 upSample( ), downSample( )이 이러한 표본 추출 방법을 지원한다.

표 10-10 업 샘플링, 다운 샘플링

caret::upSample : 업 샘플링을 수행한다.

caret::upSample(
  x, y  # 데이터
)

반환 값은 업 샘플링된 결과다.

caret::downSample : 다운 샘플링을 수행한다.

caret::downSample(
  x, y  # 데이터
)

반환 값은 다운 샘플링된 결과다.

upSample( )과 downSample( )의 사용법은 유사하므로 여기서는 upSample( )의 예만 살펴보자. upSample( )은 인자로 설명 변수(X)와 예측 대상이 되는 분류(Y)를 인자로 받아 변환된 데이터를 결과로 출력한다.

다음은 BreastCancer 데이터를 대상으로 upSample( )을 수행한 예다.

> x <- upSample(subset(BreastCancer, select=-Class), BreastCancer$Class)
> table(BreastCancer$Class)
  benign malignant
     458       241
> table(x$Class)
  benign malignant
     458       458

분할표(교차표)를 살펴보면 업 샘플링 이전에는 458:241의 비율이던 데이터가 458:458로 균형 잡히게 변한 것을 볼 수 있다. upSample( )은 이를 위해 단순히 적은 쪽에 해당하는 분류의 데이터를 중복하여 추출하는 방식을 사용한다. 이는 다음을 통해 확인할 수 있다.

> NROW(x)
[1] 916
> NROW(unique(x))
[1] 691

x 내 행의 수는 916이지만 이들 중 상당수는 중복된 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.