My Log

[ADsP #11] 데이터 분석 3장 - 정형 데이터 마이닝(1) 본문

자격증 기록/ADsP(데이터분석 준전문가)

[ADsP #11] 데이터 분석 3장 - 정형 데이터 마이닝(1)

My Log 2019. 8. 23. 13:47

* 시작하기에 앞서 본 게시물에 포함된 내용은 한국데이터산업진흥원에서 발행한 [데이터 분석 전문가 가이드, 2019년 2월 8일 개정]

   에 근거한 것임을 밝힙니다.

 

 

1. 데이터 마이닝 개요

     1) 데이터 마이닝이란?

          - 거대한 양의 데이터 속에서 쉽게 드러나지 않는 유용한 정보를 찾아내는 과정

          - 기업이 보유한 고객, 거래, 상품데이터 등과 이외의 기타 외부 데이터를 기반으로 감춰진 지식, 새로운 규칙 등을 발견하고

            이를 비즈니스 의사결정 등에 활용하는 일련의 작업

 

 

     2) 데이터 마이닝의 기능

         ㄱ. 분류(Classification)

            - 새롭게 나타난 현상을 검토하여 기존의 분류, 정의된 집합에 배정하는 것

            - 잘 정의된 분류기준과 선분류되어진 검증 집합이 필요

            - 기법 : 의사결정나무, memory-based reasoning, link analysis 등

 

         ㄴ. 추정(Estimation)

            - '수입, 수준, 신용카드 잔고' 등 연속된 변수의 값을 추정하는 것

            - 주어진 데이터를 활용해 알려지지 않은 결과값을 추정한다

            - 기법 : 신경망 모형

 

         ㄷ. 예측(Prediction)

            - 분류와 추정과 유사하지만, 미래의 값이라는 차이가 있다

            - 예측 작업의 정확성을 알아보는 방법은 기다리고 지켜보는 것 뿐이다.

            - 기법 : 장바구니 분석, memory-based reasoning, 의사결정나무, 신경망 등이 모두 사용될 수 있음

                         (입력 데이터의 성격에 따라 기술의 사용이 결정된다.)

 

         ㄹ. 연관 분석(Association Analysis)

            - '같이 팔리는 물건'과 같이 아이템의 연관성을 파악하는 분석

            - 기법 : 장바구니 분석

 

         ㅁ. 군집(Clustering)

            - 모집단을 동질성을 지닌 그룹으로 세분화하는 것

            - 선분류 되어있는 기준에 의존하지 않는다는 점이 분류와의 차이

            - 레코드 자체가 지니고 있는 다른 레코드와의 유사성에 의해 그룹화되고, 이질성에 의해 세분화된다.

            - 주로 데이터 마이닝이나 모델링의 준비단계로서 사용됨

 

         ㅂ. 기술(Description)

            - 데이터가 가지고 있는 의미를 단순하게 기술하여, 의미를 파악할 수 있도록 함

            - 데이터가 암시하는 바에 대해 설명이 가능해야 하며, 설명에 대한 답을 찾아낼 수 있어야 한다.

 

 

 

 

 

 

     3) 데이터 마이닝 5단계

         ㄱ. 목적 정의

            - 데이터 마이닝을 통해 무엇을 왜 하는지 명확한 목적을 설정해야 함

            - 이해 관계자 모두가 목적에 동의하고 이해할 수 있어야 함

            - 1단계부터 전문가가 참여하여 목적에 맞는 데이터 마이닝 모델, 기법, 필요 데이터를 정의하는 것이 바람직

      

         ㄴ. 데이터 준비

            - 데이터 마이닝 수행에 필요한 데이터 수집

            - IT부서와의 사전 협의, 일정 조율 필요

            - 데이터 준비 -> 정제, 품질보증 -> 데이터 보강 등의 작업을 거친다.

 

         ㄷ. 데이터 가공

            - 모델링 목적에 따라 변수를 정의하고, 소프트웨어 적용에 적합하도록 데이터를 가공한다.

       

         ㄹ. 데이터 마이닝 기법의 적용

            - 데이터 마이닝 기법을 적용하는 단계

            - 어떤 기법을 활용하고 어떤 값을 입력하느냐 등에 따라 성과가 달라지므로 데이터분석에 대한 전문성이 필요

 

         ㅁ. 검증

            - 추출된 정보를 검증하는 단계

            - 테스트 마케팅이나 과거 데이터 활용

            - 검증 후에는 자동화 방안을 협의하여 업무에 적용하도록 함

            - 보고서 작성 및 경영진에게 기대효과(연간 추가수익, 투자대비성과(ROI) 등)를 알림

 

 

2. 분류 분석

     - 알려진 다변량 자료를 이용하여 모형을 구축하고, 이를 통해 새로운 자료에 대한 예측 및 분류 수행이 목적

     - 반응변수가 범주형인 경우 -> 새로운 자료에 대한 분류가 주목적

        반응변수가 연속형인 경우 -> 새로운 자료에 대한 예측이 주목적

 

 

     1) 로지스틱 회귀모형

       - 반응변수가 범주형인 경우 적용

       - 일반화선형모형의 특별한 경우로 로짓(logit) 모형으로도 불림

       - 오즈(odds)의 관점에서 해석될 수 있다는 장점을 가짐

 

       - 새로운 설명변수가 주어질 때, 반응변수의 각 범주에 속할 확률이 얼마인지 추정

       - 설명변수가 한 개인 경우 회귀계수(β)의 부호에 따라 S자(β>0) 또는 역S자(β<0) 모양을 가짐

       - 표준로지스틱 분포의 누적분포함수로 성공의 확률을 추정

 

       - R에서의 로지스틱회귀모형 적용

            ㄱ) glm() 함수를 이용한 로지스틱 회귀모형 수행

                   > a <- glm( Species~Sepal.Length,  data=iris,  family=binomial )

                   # glm() 함수 결과 제공되는 결과는 ls(), str() 함수를 통해 확인할 수 있다.

 

            ㄴ) summary() 함수를 이용한 결과 확인

                   > summary(a)

                       # 회귀계수의 p-값을 통한 유의미 확인

                       # Null deviance 값으로 완전모형으로부터의 이탈도 확인

                       # Residual deviance 값으로 귀무가설 기각여부 확인

 

            ㄷ) fitted() 함수를 통해 적합 결과 확인

                   > fitted(a) [ c(1:5, 96:100) ]

 

            ㄹ) predict() 함수를 이용한 예측

                   > predict( a,  newdata=a[c(1,50,51,100), ] , type="response" )

 

            ㅁ) cdplot() 함수의 그래프를 이용한 탐색적 분석

                   > cdplot( Species~Sepal.Length,  data=a )

                      # 설명변수 변화에 따른 반응변수의 조건부 분포를 보여준다.

 

 

 

 

 

 

 

     2) 신경망 모형

         - 동물의 뇌신경계를 모방하여 분류 또는 예측을 위해 만들어진 모형

 

 

<단층신경망(퍼셉트론)의 구조>

 

         - 가중치 W=(W1, ···, Wd)'는 의사결정 경계의 방향을 나타내는 모수

         - 편의 W0는 의사결정 경계의 위치를 결정하는 모수

         - 가중치와 편의는 학습을 통해 오차제곱합이 최소가 되는 방향으로 갱신된다.

 

         - 은닉층의 수를 정할 때 고려사항

            * 다층신경망은 단층신경망에 비해 훈련이 어렵다.

            * 출력층 노드의 수는 출력 범주의 수로 결정

            * 입력의 수는 입력 차원의 수로 결정

            * 은닉층 노드의 수는 너무 적으면 의사결정 경계를 만들 수 없다.

            * 은닉층 노드의 수가 너무 많으면 네트워크 일반화가 어렵다.

 

         - 장점

            * 변수의 수가 많거나, 입ㆍ출력 변수 간에 복잡한 비선형 관계가 존재할 때 유용

            * 잡음에 민감하게 반응하지 않음

 

         - 단점

            * 결과에 대한 해석이 쉽지 않음

            * 은닉층의 수와 은닉노드 수의 결정이 어려움

            * 초기값에 따라 전역해가 아닌 지역해로 수렴할 수 있음

            * 모형이 복잡하면 훈련과정에 많은 시간 소요

 

 

         - R 패키지 {nnet}의 nnet() 함수를 이용한 분석

            ㄱ) nnet() 함수를 이용한 신경망 모형 적합

                   > nn.iris <- nnet( Species~.,  data=iris,  size=2,  rang=0.1,  decay=5e-4,  maxit=200 )

 

            ㄴ) summary() 함수를 통해 연결선의 방향과 가중치 확인

                   > summary(nn.iris)            # 초기값을 별도로 지정하지 않으면 nnet() 함수 실행마다 다른 결과를 보임

 

            ㄷ) 적합결과의 시각화

                   # plot.nnet() 함수(함수 사용을 위해 url로부터 파일을 가져오는 것이 선행되어야 함)

                   > plot.nnet(nn.iris)

 

                   # plot() 함수

                   > library(clusterGeneration)

                   > library(scales)

                   > library(reshape)

                   > plot(nn.iris)

 

            ㄹ) 정오분류표 확인

                   > table( iris$Species,  predict(nn.iris,  iris,  type="class") )

 

         R패키지 {neuralnet}의 neuralnet() 함수를 이용한 분석

            ㄱ) neuralnet() 함수를 이용한 신경망 모형 적합

                   > net.infert <-  neuralnet( case ~ age+parity+induced,  data=infert,  hidden=2,  err.fct="ce",

                   linear.output=FALSE,  likelihood=TRUE )

                   # neuralnet() 함수는 다양한 역전파 알고리즘을 통해 모형을 적합한다.

                   # hidden=2  :  2개의 은닉노드를 가지는 신경망 모형

 

            ㄴ) plot() 함수를 이용한 시각화

                   > plot(net.infert)

 

            ㄷ) compute() 함수를 이용한 예측

                   > compute(net.infert, test.data)

 

 

 

 

 

 

     3) 의사결정나무 모형

         - 의사결정 규칙을 트리구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석 방법

         - 하위 노드로 분기되는 매 단계마다 (분류변수, 분류기준값)의 선택이 중요

            * 노드 내에서는 동질성이, 노드 간에는 이질성이 커지도록 선택

 

         - 가지분할(split) : 하위노드로 뻗어가는 과정

           가지치기(pruning) : 하위노드를 잘라내어 트리를 단순화하는 과정

 

         - 목표변수가 이산형 → 분류나무

            ㄱ) (분류변수, 분류기준값) 선택방법 : 카이제곱 통계량의 p-값, 지니 지수, 엔트로피 지수 등

                                                                                  * 노드 내 순수도 강화 : p-값 ↑, 지니 지수 ↓, 엔트로피 지수 ↓

           목표변수가 연속형 → 회귀나무

            ㄱ) (분류변수, 분류기준값) 선택방법 : F-통계량의 p-값, 분산의 감소량 등

                                                                                 * 노드 내 순수도 강화 : p-값 ↓, 분산의 감소량 

 

         - 알고리즘 : CHAID(카이제곱 통계량, F-통계량), CART(지니지수, 분산감소량), C4.5(엔트로피지수), C5.0, ID3 등

 

         - 장점

            * 구조가 단순하여 해석이 용이함

            * 유용한 입력변수의 파악

            * 예측변수간의 상호작용 및 비선형성을 고려한 분석 수행

            * 선형성, 정규성, 등분산성 등의 수학적 가정이 불필요한 비모수적 모형

 

         - 단점

            * 분류기준값의 경계선 근방 자료값에 대해 오차가 클 수 있음(비연속성)

            * 각 예측변수의 효과를 파악하기 어려움

            * 새로운 자료에 대한 불안정한 예측

 

         - 분석과정

             단계1) 목표변수와 관련있는 설명변수들을 선택

             단계2) 적절한 분리기준과 정지규칙을 정하여 의사결정 나무 생성

             단계3) 부적절한 부분 가지치기(pruning)

             단계4) 모형평가

             단계5) 새로운 데이터에 대한 분류 및 예측

 

         - R 패키지 {rpart}의 rpart() 함수를 이용한 분석

            ㄱ) rpart() 함수를 이용한 분석 수행

                   > a <- rpart( Species ~. ,  data=iris )

                      # Species : 반응변수

                      # rpart() 결과 제공되는 a$cptable 값을 통해 교차타당성오차를 최소로 하는 트리 형성

 

            ㄴ) plot() 또는 rpart.plot() 함수로 시각화

                   > plot( a,  compress=T,  margin=0.3 )

 

                   > library(rpart.plot)

                   > prp( a,  type=4,  extra=2 )

 

            ㄷ) predict() 함수로 새로운 자료에 대한 예측 수행

                   > predict( a,  newdata=iris,  type="class" )

 

         - R 패키지 {party}의 ctree() 함수를 이용한 분석

            ㄱ) a <- ctree(Species ~. , data=iris)

            ㄴ) plot(a)

            ㄷ) predict(a)

 

 

 

 

 

 

   4) 앙상블 모형

         - 여러 개의 분류모형에 의한 결과를 종합하여 분류의 정확도를 높이는 방법

         - 적절한 표본추출법으로 여러 개의 훈련용 데이터를 만들고, 훈련용 데이터마다 하나의 분류기를 만들어 앙상블하는 방법

 

         - 데이터를 조절하는 방법

            ㄱ) 배깅(bagging)

                   - 원 데이터 집합으로부터 크기가 같은 표본을 여러 번 단순 임의 복원추출하여

                     각 표본(붓스트랩 표본)에 대해 분류기를 생성한 후 그 결과를 앙상블하는 방법

                   - 반복추출 방법으로 동일한 데이터가 여러 번 추출될 수도 있고, 어떤 데이터는 한 번도 추출되지 않을 수 있다.

 

                   - R에서의 분석 수행

                      ① bagging() 함수로 분류 수행

                           > iris.bagging <- bagging(Species~.,  data=iris,  mfinal=10)

 

                      ② plot() 함수로 분류 결과를 트리 형태로 그림

                           > plot(iris.bagging$trees[[10]])

 

                      ③ predict() 함수를 통한 예측 수행

                           > pred <- predict(iris.bagging,  newdata=iris)

 

                      ④ table() 함수를 통한 분류 확인

                           > table(pred$class,  iris[ , 5] )

 

 

            ㄴ) 랜덤포레스트(random forest)

                   - 배깅에 랜덤 과정을 추가한 방법

                   - 붓스트랩 샘플을 추출하고 트리를 만들어가는 과정은 배깅과 유사

                   - 예측변수들을 임의로 추출하고, 추출된 변수 내에서 최적의 분할을 만들어나감

                      cf) 배깅 : 각 노드마다 모든 예측변수 안에서 최적의 분할을 선택

                   - 별도의 검증용 데이터를 사용하지 않더라도, 붓스트랩 샘플과정에서 제외된 자료를 통해 검증을 실시할 수 있다.

 

                   - R에서의 분석 수행

                      ① randomForest() 함수로 분류 수행

                           > iris.rf <- randomForest(Species~.,  data=iris,  ntree=100,  proximity=TRUE)

 

                      ② plot() 함수로 분류 결과를 트리 형태로 그림

                           > plot(iris.rf)

 

                      ③ predict() 함수를 통한 예측 수행

                           > pred <- predict(iris.rf,  newdata=testData)

 

                      ④ table() 함수를 통한 분류 확인

                           > table(pred,  iris$ploidy)

 

                      ⑤ importance()와 varImpPlot() 함수로 각 변수의 중요성 확인

                           > importance(iris.rf)

                           > varImpPlot(iris.rf)

 

                   - R 패키지 {party}의 cforest() 함수를 이용한 분석 수행

                      ① cf <- cforest(Species~.,  data=iris)

                      ② cf.pred <- predict(cf,  newdata=testData,  OOB=TURE,  type="response")

 

 

            ㄷ) 부스팅(boosting)

                   - 배깅과 유사하나 붓스트랩 표본을 구성하는 재표본 과정에서 각 자료에 동일한 확률을 부여하지 않고,

                     분류가 잘못된 데이터에 더 큰 가중을 두어 표본을 추출한다.

                   - 붓스트랩 표본을 추출해 분류기 생성 → 각 데이터의 확률 조정 → 다음 붓스트랩 표본 추출 → 분류기 생성 → ···

 

                   - R 패키지 {adabag}의 boosting() 함수를 이용한 분석 수행

                      ① boosting() 함수로 분류 수행

                           > boo.adabag <- boosting(Species~.,  data=iris,  boos=TRUE,  mfinal=10)

 

                      ② plot() 함수로 분류 결과를 트리 형태로 그림

                           > plot(boo.adabag$trees[[10]])

 

                      ③ predict() 함수를 통한 예측 수행

                           > pred <- predict(boo.bagging,  newdata=iris)

 

                      ④ table() 함수를 통한 분류 확인

                           > table(pred$class,  iris[ , 5] )

 

                   - R 패키지 {ada}의 ada() 함수를 이용한 분석 수행

                      ① ada() 함수로 분류 수행

                           > iris.ada <- ada(Species~.,  data=iris,  iter=20,  nu=1,  type="discrete")

 

                      ② plot() 함수로 분류 결과 그림

                           > plot(iris.ada, TRUE, TRUE)             # 오차와 일치도를 나타내는 카파계수를 그려준다.

 

                      ③ predict() 함수를 통한 예측 수행

                           > pred <- adatest(iris.ada,  iris)

 

                      ④ varplot() 함수를 통한 각 변수의 중요도 파악

                           > varplot(iris.ada)

 

                      ⑤ pairs() 함수를 통한 예측변수 조합별 분류 결과

                           > pairs(iris.ada,  iris,  maxvar=4)

 

 

   5) 분류 모형 평가

         - 구축된 모형이 임의의 모형보다 더 우수한 분류 성과를 보이는지, 고려된 모형들 중 어느 것이 가장 우수한지 등을

           비교 분석하는 과정

 

         - 모형 평가의 기준

            ㄱ) 일반화의 가능성

                   - 데이터를 확장하여 적용할 수 있는지에 대한 평가 기준

                   - 모집단 내의 다른 데이터에 적용해도 안정적인 결과를 제공하는 것을 의미

            ㄴ) 효율성

                   - 얼마나 효과적으로 구축되었는지 평가

                   - 적은 입력변수를 필요로 할수록 효율적

            ㄷ) 예측과 분류의 정확성

                   - 모형의 정확성 측면에서 평가

 

         - 모형 평가 절차

            ① 전체 자료에서 훈련용 자료와 검증용 자료를 추출

                   - 훈련용 자료는 모형 구축용도, 검증용 자료는 모형 검증 용도

                   - 주어진 데이터에서만 성과를 보이는 과적합화를 해결하기 위한 단계

                   - 잘못된 가설을 가정하게 되는 2종 오류를 방지

 

                   - 데이터 추출방법

                      ㄱ) 홀드아웃(hold-out)

                            - 랜덤 추출 방식

                            - 훈련용, 검증용 데이터 비율을 7:3으로 함

                            - R에서 sample() 함수 사용

                               > sample(  2,   nrow(iris),   replace=TURE,   prob=c(0.7, 0.3)  )

 

                      ㄴ) 교차검증(cross-validation)

                            - 데이터를 k개로 나누어 k번 반복측정하고, 그 결과를 평균 내어 최종 평가로 사용

                            - 일반적으로 10-fold 교차 검증이 사용됨

                            - R에서 sample() 함수를 통해 k개의 하부집합을 구성

 

                      ㄷ) 붓스트랩(bootstrap)

                            - 교차검증과 유사하게 평가를 반복하지만, 훈련용 자료를 반복 재선정한다는 점에서 차이가 있음

                            - 관측치를 한번 이상 훈련용 자료로 사용하는 복원 추출법에 기반

                            - 전체 데이터의 양이 크지 않은 경우의 모형 평가에 가장 적합

 

 

 

 

 

 

            ② 모형 학습 및 성능 평가

                   - 훈련용 자료로 모형을 학습한 뒤, 검증용 자료를 사용해 모형의 분류 및 예측 정확도를 평가

 

                   - 분류 모형 평가에 사용되는 방법

                      ㄱ) 오분류표

                            - 정분류율 : ①+④/전체

                            - 오분류율 : ②+/전체

                            - 재현율(민감도) : 예측치 True/실제값 True  == /①+

                            - 특이도 : 예측치 False/실제값 False  == /+

                            - 정확도 : 실제값 True/예측치 True

                            - F1지표 : 재현율과 정확도의 조화평균(재현율과 정확도가 반비례할 높은 가능성을 보정하기 위한 지표)

 

                            - R에서 confusionMatrix() 함수를 사용한 오분류표 도출

                               > library(e1071)

                               > library(caret)

                               > confusionMatrix(pred, testData$Species)

 

                      ㄴ) ROC 그래프

                            - 비교 분석 결과를 가시화할 수 있다는 점에서 유용한 평가 도구

                            - X축에는 FP Ratio(1-특이도), Y축에는 민감도를 나타냄

                            - ROC 그래프의 밑부분 면적(AUC)이 넓을 수록 좋은 모형으로 평가

                            - 아래 그림의 경우 Test A가 더 높은 분류 성과를 가지는 것으로 판단

 

                            - R에서 ROC() 함수를 사용한 그래프 작성

                               > 각 모형 학습 및 검증(예측) 수행

                               > ROC(form=case~neuralnet_predict,   data=testData,   plot="ROC")

                                   # 그래프의 AUC(Area Under the Curve)값을 확인한다.

 

                      ㄷ) 이익도표와 향상도 곡선

                            - 이익도표 : 분류된 관측치가 각 등급에 얼마나 분포하고 있는지 누적으로 연결한 도표

                            - 향상도 곡선 : 랜덤모델과 비교하여 해당 모델의 성과가 얼마나 향상되었는지 각 등급별로 파악하는 그래프

 

                            - R에서 perfomance() 함수를 이용해 향상도 곡선을 그릴 수 있다.(ROC()와 달리 여러 모형을 함께 나타내는 장점)

                               > perfomance(neuralnet_predict,  "tpr",  "fpr" )   

                                           # ROC graph for neural network, x-fase positive ratio, y-true positive ratio

 

                               > perfomance(neuralnet_predict,  "lift",  "rpp" )   

                                           # graph for neural network, x-rate of positive predictionso, y-lift value

            

 

 


Comments