본문 바로가기
  • Let's go grab a data
Data/R

[R]3. 결정 트리 Classification

by pub-lican-ai 2016. 2. 10.
반응형

[R]3. 결정 트리 Classification #ctree #결정트리 #classification #지도학습 #모델성능평가 #entropy #IG


[연구 질문]

데이터를 분류하여 고객의 속성을 파악하고 고객의 행동을 예측하고 싶다


[개념]

결정 트리 학습법 Decision tree learning

   : 분류 트리목표 변수 즉, 종속 변수가 유한한 수의 값을 가지는 것 

     쉽게 이야기 하자면 생성된 모델에 의해 0 or 1 또는 0, 1, 2, 3, 4 등 정해진 범주 내에서 결과가 나오는 형태

     회귀 트리 - 목표 변수가 연속하는 값으로 일반적이 실수를 가지는 것

     쉽게 모델이 함수처럼 되어 있고 정해진 결과값 중 하나가 나오는 것이 아닌 독립변수에 의해 다양하게 결과가 나오는 형태




 결정 트리 활용

     결정 트리는 시각적이고 명시적으로 의사결정을 돕는다

     마케팅분야에서도 아래와 같은 다양한 예측을 진행하며, 예측에 의한 추천, 프로모션 등 정교한 고객관계활동을 전개한다

  • 고객 행동 예측

  • 휴면/이탈 예측

  • 등급변동 예측

  • 신규고객 우수가망 예측

  • 상품구매 예측

  •  캠페인 반응 예측

 모델이란? model

  어떤 목적을 달성하기 위해 실세계를 단순하게 표현 한 것.

  과거의 학습 데이터를 이용하여 모델을 만들며 이 모델을 통해 결과를 예측 함


결정 트리 장점

  • 결과를 해석하고 이해하기 쉬움

  • 자료를 가공할 필요가 거의 없음

  • 수치 자료와 범주 자료 모두에 적용 가능

  • 화이트박스 모델: 상황이 관측 가능하다면 조건에 대해 쉽게 이해 가능 <-> 인공 신경망은 블랙박스 설명이 어려움

  • 안정적

  • 대규모의 데이터 셋에서도 잘 동작함


결정 트리 한계점

  • 데이터를 제대로 일반화하지 못할 경우 복잡한 결정 트리를 만들 수 있음

  • 데이터의 특성에 따라 선택할 수 있어야 함

  • 약간의 데이터 차이에 따라 트리의 모양이 많이 달라질 수 있음

엔트로피 entropy : 무질서도
얼마나 데이터가 마구잡이로 섞여있는지 정도 (지니 불순도)
0이 최소값이며 0일때 가장 순수함


정보 획득량 information gain (IG) 

출처:

[필요 패키지]

library(party)

library(caret)


[코드] *파란색은 스크립트, 검정색은 결과값입니다

data(iris)

#iris데이터를 7:3비율로 샘플링

ind<-sample(2,nrow(iris),replace=T,prob=c(0.7,0.3))

#샘플링한 결과 1인 경우를 trainData에 2인 경우에 testData에 넣음 (train:test=7:3)

trainData<-iris[ind==1,]

testData<-iris[ind==2,]

#공식을 만듬 종을 종속변수로, 그이외의 변수들을 독립변수로

myFormula<-Species~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width

library(party)

#trainData에 의해 ctree 모델을 만듬

iris_ctree<-ctree(myFormula,data=trainData)

#학습이 잘 되었는지 확인, 모두 정답이 아닐 수 있다. 현재 모델이 모든 데이터를 설명하지는 못하기 때문

table(predict(iris_ctree),trainData$Species)

           setosa versicolor virginica

  setosa         40          0         0

  versicolor      0         37         4

  virginica        0          1          31


#모델 시각화

plot(iris_ctree)


#테스트 데이터로 바꾸어 예측

testPred<-predict(iris_ctree,newdata = testData)

# 테스트 데이터 정답 확인, 여기서 정확도accuracy와 민감도Sensitivity 특이도 등을 계산해볼 수 있다

http://pubdata.tistory.com/19 참고

table(testPred, testData$Species)

testPred     setosa versicolor virginica

  setosa         10          0         0

  versicolor     0         12         1

  virginica       0          0         14


library(caret)

#confusionMatrix를 이용하면 모델에 대한 성능지표를 자동 계산하여 확인할 수 있다

confusionMatrix(predict(iris_ctree),trainData$Species)

Confusion Matrix and Statistics


            Reference

Prediction   setosa versicolor virginica

  setosa         40          0         0

  versicolor     0         37         4

  virginica       0          1         31


Overall Statistics

                                          

               Accuracy : 0.9558          

                 95% CI : (0.8998, 0.9855)

    No Information Rate : 0.354           

    P-Value [Acc > NIR] : < 2.2e-16       

                                          

                  Kappa : 0.9335          

 Mcnemar's Test P-Value : NA              


Statistics by Class:


                     Class: setosa    Class: versicolor      Class: virginica

Sensitivity                  1.000            0.9737               0.8857

Specificity                  1.000            0.9467               0.9872

Pos Pred Value               1.000            0.9024             0.9688

Neg Pred Value               1.000            0.9861             0.9506

Prevalence                   0.354            0.3363               0.3097

Detection Rate               0.354            0.3274            0.2743

Detection Prevalence         0.354            0.3628         0.2832

Balanced Accuracy            1.000            0.9602           0.9364

                     

안되는 부분이나 궁금한 점이 있으면 댓글 달아주세요 :)

반응형