다음은 upSample( )을 훈련 데이터에 적용한 경우와 그렇지 않은 경우 각각 의사 결정 나무의 성능을 비교한 코드다.

    > library(party)
    > # Id는 식별자므로 피처로는 적절치 않아 제외한다. 그렇지 않으면 Id에 따라 예측을 수행하는
    > # 의미 없는 모델이 만들어진다.
    > data <- subset(BreastCancer, select=-Id)
    > parts <- createDataPartition(data$Class, p=.8)  # 80%의 훈련 데이터와 20%의 테스트 데이터
    > data.train <- data[parts$Resample1,]
    > data.test <- data[-parts$Resample1, ]
    > m <- rpart(Class ~., data=data.train)
    > confusionMatrix(data.test$Class,
    +                 predict(m, newdata=data.test, type="class"))
    Confusion Matrix and Statistics
               Reference
    Prediction  benign malignant
     benign         86         5
     malignant       3        45
    
                   Accuracy : 0.9424
                     95% CI : (0.8897, 0.9748)
        No Information Rate : 0.6403
        P-Value [Acc > NIR] : <2e-16
    
                      Kappa : 0.874
     Mcnemar's Test P-Value : 0.7237
    
                Sensitivity : 0.9663
                Specificity : 0.9000
             Pos Pred Value : 0.9451
             Neg Pred Value : 0.9375
                 Prevalence : 0.6403
             Detection Rate : 0.6187
       Detection Prevalence : 0.6547
    
           `Positive' Class : benign
    
    
    > data.up.train <- upSample(subset(data.train, select=-Class),
    +                           data.train$Class)
    > m <- rpart(Class ~., data=data.up.train)
    > confusionMatrix(data.test$Class,
    +                 predict(m, newdata=data.test, type="class"))
    Confusion Matrix and Statistics
    
               Reference
    Prediction  benign malignant
      benign        83         8
      malignant      2        46
    
                   Accuracy : 0.9281
                     95% CI : (0.8717, 0.965)
        No Information Rate : 0.6115
        P-Value [Acc > NIR] : <2e-16
    
                      Kappa : 0.8455
     Mcnemar's Test P-Value : 0.1138
    
                Sensitivity : 0.9765
                Specificity : 0.8519
             Pos Pred Value : 0.9121
             Neg Pred Value : 0.9583
                 Prevalence : 0.6115
             Detection Rate : 0.5971
       Detection Prevalence : 0.6547
    
           `Positive' Class : benign
    

    분할표에서 볼 수 있듯이 원본 데이터를 사용한 경우 malignant로 예측한 수는 45개였으나, upSample( ) 이후에는 46개로 늘었다. 이로 인해 Sensitivity도 0.9663에서 0.9765로 올랐으며, 대신 Specificity는 0.9000에서 0.8519로 내렸다.

    createDataPartition( )은 훈련 데이터와 검증 데이터의 분리를 위해 사용했으며, 이 예에서는 80%의 데이터를 훈련 데이터, 나머지 20%를 검증 데이터로 사용하기 위해 p=0.8을 지정했다.

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