본문 바로가기

R/R로 만드는 추천 시스템

추천 시스템에서 사용되는 데이터 마이닝 기법-03

반응형

앙상블 기법

데이터 마이닝 분야에서는 앙상블 기법을 사용한다. 즉, 다양한 통계적 문제를 해결하는 과정에서 더 나은 예츤 성능을 위해 단일의 학습 모델을 적용하기로보다는 다양한 학습 모델을 사용하는 것이다. 여기서는 배깅, 부스팅, 랜덤 포레스트와 같은 널리 알려진앙상블 기법들을 살펴본다.

 

배깅

배깅은 Bootstrap Aggregating의 준말로 머신 러닝 알고리즘의 안정성과 정확도를 향상하기 위해 설계됐다. 배깅 기법은 오버피팅을 피하고 알고리즘의 안정성을 높일 목적으로 사용되며 주로 의사결정 나무와 함께 사용된다.

 

배깅은 데이터 세트로부터 부트스트랩해 샘플 데이터를 임의로 생성하는 과정과 각각의 모델들을 트레이닝하는 과정을 동반한다. 그 후 모든 반응 변수를 집계하는 과정을 동반한다. 그 후 모든 반응 변수를 집계하는 과정과 평균화하는 과정을 통해 예측을 진행한다.

  • i=1 ... n인 n개의 데이터를 포함하는 데이터 세트 (Xi, Yi)를 가정해본다.
  • 이제 부트스트랩 기법을 사용해 원시 데이터로부터 B 샘플을 복원 추출한다.
  • 다음으로는 B 샘플을 회귀 분석이나 분류 모델로 각각 트레이닝한다. 그리고 회귀 분석의 경우 생성된 모델들의 결과 값들은 평균화 과정을 거쳐 테스트 데이터 세트로 예측을 진행한다. 또한 분류 문제의 경우 B 샘플 중 가장 빈번하게 나타나는 모델을 선택해 진행한다.

랜덤 포레스트

랜덤 포레스트는 지도 학습 알고리즘으로 배깅과 비슷한 형태로 설계되지만, 그보다는 간단하게 사용할 수 있는 방법이다. 배깅에서 부트스트랩 기법을 사용해 생성된 B 샘플의 전체 변수를 사용하는 것과 달리, 랜덤 포레스트에서는 B 샘플들 각각의 전체 변수 중 임의의 적은 수의 예측 변수들만을 선택해  사용한다. 이렇게 선택된 변수들은 모델을 트레이닝하는 데 사용된다. 각 샘플의 예측 변수 개수는 m=square(p) (단, p는 원시 데이터의 전체 변수의 수)의 식으로 결정된다.

다음은 랜덤 포레스트의 중요한 부분들이다.

  • 이러한 접근 방식은 매 연산 시 모든 변수를 사용하는 것 대신에 데이터 세트에서 의도적으로 일부 변수들을 선택함으로써 일부 주요 예측 변수들에 큰 영향력을 미치는 문제를 감소시킨다.
  • 또한 이 접근 방식은 변수들 간의 상관관계를 완화해 변동성을 낮추고 모델의 안정성을 높일 수 있다.

CRAN의 randomForest 패키지를 다운로드한 후 사용해 iris 데이터 세트에서 랜덤 포레스트를 R 코드로 구현한 내용을 참조해본다.

#randomForest
library(randomForest)
data("iris")
sample = iris[sample(nrow(iris)),]
train = sample[1:105,]
test = sample[106:150,]
model = randomForest(Species~.,data=train, mtry = 2, importance = TRUE, proximity = TRUE)
model

Call:
 randomForest(formula = Species ~ ., data = train, mtry = 2, importance = TRUE,      proximity = TRUE) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 2

        OOB estimate of  error rate: 6.67%
Confusion matrix:
           setosa versicolor virginica class.error
setosa         36          0         0  0.00000000
versicolor      0         33         3  0.08333333
virginica       0          4        29  0.12121212

pred = predict(model, newdata = test[,-5])
pred

         3         19         30         57         90        107        137        146         97        104          2          4         60 
    setosa     setosa     setosa versicolor versicolor versicolor  virginica  virginica versicolor  virginica     setosa     setosa versicolor 
        88         28         92         87          9         99         46        145        128        118         48        106         94 
versicolor     setosa versicolor versicolor     setosa versicolor     setosa  virginica  virginica  virginica     setosa  virginica versicolor 
       131        147        119        132        136         61         85         43         29         17        133        148         47 
 virginica  virginica  virginica  virginica  virginica versicolor versicolor     setosa     setosa     setosa  virginica  virginica     setosa 
       108         69         75         55         35        143 
 virginica versicolor versicolor versicolor     setosa  virginica 
Levels: setosa versicolor virginica

 

부스팅

부스팅에서는 여러 개의 부트스트랩 샘플들을 생성하는 배깅 기법과는 다르게 데이터 세트에 적합한 새로운 모델들이 만들어지고, 그 후 각각의 모든 모델을 결합해 하나의 예측 모델을 생성한다. 이떄 새 모델은 이전 모델의 정보를 활용해 생성되며 부스팅은 다음의 두 가지 단계를 포함하는 반복적 기법으로 이해될 수 있다.

  • 새로운 모델은 반응 변수 대신 이전 모델의 오차율에 기반을 두고 생성된다.
  • 오차는 해당 단계의 모델에서 계산되고 이전 단계의 모델에 반영한다.

위의 두 단계는 계속해서 반복되며 각각의 새로운 모델들은 이전 단계의 오차를 통해 학습함으로써 궁극적으로 모델의 정확도를 향상시킨다.

 

다음의 실행 코드를보면, predict 함수의 결과 값이 apply 함수에 사용돼 pred의 각 행의 값 중 가장 높은 확률 값을 응답치로 찾아낸다.

 

#위의 요약 내용은 모델의 변수들이 가지는 상대적 중요성을 나타낸다.
pred = predict(model, newdata = test[,-5], n.trees = 5000)
pred[1:5,,]

        setosa versicolor virginica
[1,] -499.4470  -419.2224 -293.3878
[2,] -500.2487  -383.2378 -289.4650
[3,] -251.9000  -458.3514 -472.7648
[4,] -489.8352  -336.2842 -404.0141
[5,] -492.0531  -384.1782 -291.5610

#apply(..,1, which.max) 함수를 실행해 pred 매트릭스로부터 가장 높은 확률을 가진 값을 응답으로 선택한다
p.pred <- apply(pred, 1, which.max)
p.pred

 [1] 3 3 1 2 3 2 3 3 2 2 1 3 1 1 1 3 3 3 2 3 3 1 3 1 2 3 2 1 3 2 3 1 2 3 1 1 2 3 1 3 3 3 2 2 1

 

데이터 마이닝 알고리즘 평가

지금까지 추천 시스템에서 사용되는 다양한 데이터 마이닝 기법들을 살펴봤다. 여기에서는 데이터 마이닝 기법들을 통해 만들어진 모델들을 평가하는 방법들을 살펴본다. 모든 데이터 분석 모델들의 궁극적인 목표는 추후 입력될 데이터들에 대해 잘 작동하는 것이다. 이러한 목표는 오직 개발 단계에서 모델을 효율적이고 강건하게 만들때만 가능할 것이다.

데이터 분석 모델을 평가하면서 고려해야 할 가장 중요한 점들은 다음과 같다.

  • 모델이 오버피팅되거나 언더피팅 됐는지 확인한다.
  • 모델이 얼마나 추후 입력될 데이터들과 테스트 데이터에서 잘 작동하는지를 확인한다.

바이아스(평향)라고도 불리는 언더피팅은 생성한 모델이 트레이닝 데리터에서조차도 잘 작동하지 않는 경우로, 데이터에 적합한 정도가 낮은 모델을 적용하게 되는 것을 의미한다. 예를 들어 데이터가 비선형적으로 분포돼 있고 그러한 데이터에 선형 모델을 적용하는 것이다. 다음 그림은 데이터가 비선형적으로 분포된 것을 확인할 수 있다. 이러한 데이터에 선형 모델을 적용하게 된다면, 모델의 예측력은 매우 낮을 것이다.

 

오버피팅은 모델이 트레이닝 데이터에서는 잘 작동하지만, 실제 테스트 데이터에서는 잘 작동하지 않는 경우를 말한다. 이러한 경우는 모델이 데이터로부터 학습하기보다는 데이터의 패턴을 기억할 때 발생한다. 예를 들어, 데이터가 비선형적으로 분포돼 있을 떄 다음 그림에서 녹색 선과 같이 매우 복잡한 형태로 모델을 생성하는 경우다. 이렇게 생성된 모델은 데이터의 모든 굴곡을 고려하고 데이터 분포 자체와 매우 흡사하므로, 추후 테스트 단계에서 이전에 다루지 않았던 형태의 데이터에서는 좋은 성능을 내지 못하게 된다.

 

위의 그림은 트레이닝 데이터에 매우 단순하거나 매우 복잡하게, 또는 적절하게 생성된 모델들을 보옂고 있다. 녹색 선은 오버피팅을 나타내고 노란색 선은 언더피팅을 나타내며, 검은색과 파란색의 선들은 적절한게 생성된 모델을 나타낸다.

 

오버피팅과 언더피팅을 피하고자 교차 검증(Cross Validation), 정규화(Regularization), 가지치기(Pruning), 모델 비교(Model Comparison), ROC 곡선, 혼동 매트릭스 등을 활용해 생성한 모델을 평가한다.

 

교차 검증 : 대부분의 모델에 사용되는 가장 널리 알려진 모델 평가 기법으로 데이터 세트를 트레이닝 데이터와 테스트 데이터로 나눈 후, 트레이닝 데이터를 사용해 모델을 생성하고 테스트 데이터상에서 평가를 진행한다. 이러한 절차를 여러 번 반복적으로 수행해 매 테스트 단계에서 에러율을 계산하며, 모든 반복 절차를 다 수행한 후 테스트 단계에서 발생한 오차들의 평균을 이용해 모델의 정확도를 일반화한다.

 

정규화 : 이 기법은 비용 함수를 최소화하려는 목적으로 모델의 복잡성을 낮추기 위해 변수들에 불이익을 준다. 릿지 회귀와 라소 회귀가 가장 널리 알려진 정규화 기법들이다. 이 두 기법들 모두 변수의 계수들을 '0'에 가깝게 만들려 노력하며 적은 수의 변수들을 사용할 때 데이터에 더 적합한 모델이 된다.

 

혼동 매트릭스 : 이 기법은 분류 모델의 성능을 평가하는 데 널리 사용된다. 모델의 결과를 사용해 혼동 매트릭스를 생성하며, 그 결과 값들을 이용해 모델을 평가하기 위한 재현력/민감도/특이도 등의 지표들을 계산한다.

 

정확도 : 양성으로 예측한 것 중 실제 양성인 것의 비율(TP/TP+FP)

 

재현력/민감도 : 정확하게 예측한 것 중 양성인 것의 비율(TP/TP+FN)

 

특이도 : 실제 음성인 것의 비율(TN/FP+TN)

 

다음 그림에서 보이는 혼동 매트릭스는 이전에 다뤘던 분류의 결과들을 사용해 만들어진다.

 

    ACTUAL
    POSITIVE NEGATIVE
PREDICTED POSITIVE TRUE POSITIVE FALSE POSITIVE
NEGATIVE FALSE NEGATIVE TRUE NEGATIVE

 

혼동 매트릭스에 대해 좀 더 이해해본다.

 

TP(True Positive) : 실제로 양성이며 양성으로 예측된 값들의 수

FP(False Positive) : 실제로 음성이지만 양성으로 예측된 값들의 수, 오경보(FALSE ALARM) 

FN(False Negative) : 실제로 양성이지만 음성으로 예측되 값들의 수, 놓침(MISS)

TN(True Negative) : 실제로 음성이며 음성으로 예측된 값들의 수

 

민감도와 특이도, 정확도를 수식으로 표현하면 다음과 같다.

모델 비교 : 분류 문제는 한 개 혹은 그 이상의 통계적 모형으로 해결할 수 있다. 예를 들어, 하나의 문제를 로지스틱 회귀 분석, 의사결정 나무, 앙상블 기법, SVM 등의 다양한 방법으로 해결할 수 있다. 그렇다면 어떤 모델이 데이터에 적합한지 선택할 수 있을까? 아카이케 정보 기준(AIC, Akaike information criteria), 베이지안 정보 기준(BIC, Bayesian information criteria), 수정된 R^2(Adjusted R^2)과 같이 다양한 형태의 접근 방식들이 존재하며, 각 모델의 AIC, BIC, 수정된 R^2값들을 게산해 최적의 모델을 선택한다.

 

요약

이번 장에서는 널리 사용되는 데이터 전처리 기법들과 데이터 마이닝 기법들, 그리고 추천 시스템에서 일반적으로 사용되는 평가 기법들을 알아봤다. 다음 장에서는 추천 시스템을 좀 더 자세히 알아볼 것이다.

반응형