데이터마이닝 기법, 의사결정나무 2탄

    의사결정나무의 생성 방법


    모든 의사결정나무 알고리즘은 공통점을 가지고 있는데, 바로 부모노드보다 더 순수도가 높은 자식노드를 만든다는 것이다. 


    순수도가 높은 자식노드를 만들면, 또 그 자식노드의 자식노드는 상위 노드보다 순수도가 높고, 이를 반복하여 의사결정나무를 만들게 된다.


    1. 분기의 발견


    의사결정나무 생성의 과정을 위해서, 사전에 분류된 레코드들로 이루어진 Training Set(훈련용 집합)이 필요하다. 훈련용 데이터 집합은 입력변수뿐 아니라 목표변수 값도 알고 있어야 한다.


    어떤 사례에 대해서 학습을 하려면, 입력값 뿐만 아니라 목표변수 값도 알고 있어야 학습이 되는데..

    예를 들자면, 

    어떤 장바구니의 내용에 아래와 같은 물건들이 있다.

    담배, 남성용 팬츠, 와이셔츠 등의 물건(입력값)을 구입했다고 하자, 해당 물품을 구매한 사람이 30대 남성(목표변수)이라고 한다면 앞으로 위와 같은 물품이 동시에 구매가 됐을 경우, 30대 남성이 될 확률이 있다라는 것을 알 수 있을 것이다.


    이런 훈련용 집합이 존재(사례, 경험)해야지, 분류 및 예측등을 수행할 수 있을 것이다.


    훈련용 집합등을 통해서, 이제 의사결정나무를 본격적으로 만든다고 가정을 할 때, 해당 가지 즉 분기들이 올바르게 만들어졌는지 평가해볼 필요가 있다. 이 분기를 평가하는 척도가 순수도(Purity)이다.



    Original Data를 보게 되면, 동그라미와 세모가 현재 적당히 섞여 있는 모습이다. 이를 분기를 통해 나눌려고 할 때, 아래 왼쪽의 Poor Split을 보면, 규모는 적당하지만 동그라미와 세모가 둘다 섞여 있다.

    이는 순수도가 높지 않기 때문에 좋은 케이스는 아니다.


    우측의 Poor Split을 보면, 한쪽에 동그라미만 존재하지만, 왼쪽에는 동그리마와 세모가 섞여있다. 이 역시 순수도가 높지 않기 때문에 좋은 케이스는 아니다.


    아래의 Good Split을 보면, 동그리마와 세모가 완전히 분리가 된 경우를 볼 수 있다. 이는 동그라미, 세모의 각각의 순수도가 모두 높기 때문에 좋은 케이스가 된다.


    결국 좋은 분할이라고 하는 것은 비슷한 규모의 자식노드가 생성이 되며, 부모보다 순수도가 높아야 한다.


    범주형 타겟변수의 경우에는 지니척도, 정보 이득, 카이제곱 등의 방법들을 사용하고, 연속형 목표변수의 경우에는 F테스트, 분산 축소같은 것들을 사용하게 된다.



    2. 입력변수별 분할 방법

    가. 수치형 입력변수 기반


    대표적인 수치형 입력변수로 나이, 점수 등이 존재한다.

    나이를 예로 들면, 20대, 30대, 40대 등으로 나눈다던지, 30세 이하, 35세 이상 등의 값으로도 분할할 수 있다. 상황 및 사이트등에 따라 어느것이 좋은지는 직접 테스트, 결과를 보면서 판단해야 하기 때문에 데이터마이너의 역량에 따라 분류값이 달라진다.


    나. 범주형 입력변수 기반


    대표적인 범주형 입력변수로 성별, 색 등이 존재한다.

    성별같이 가지수가 적을 경우 분류하기 용이하지만, 색 같은 경우 가지수가 많아지면, 배정되는 개체수들이 적어지기 때문에 다음 단계의 분리가 어려워진다. 


    색같은 경우 실제로 많이 사용되고 있는 부분이지만, 부실한 결과를 종종 내놓기 때문에 유사한 결과를 예측하는 클래스들을 하나의 집단으로 묶는 것을 권장한다.


    이런 것을 결정할 때, 카이제곱검정 같은 것들을 써서 비슷한 소스를 갖는 유사한 결과를 갖는 것들을 묶어줄 수 있다.


    다. 결측(Null)값이 존재하는 경우


    일반적으로 데이터마이닝을 할 때, NULL값들은 분석에서 제외를 하는 경우가 종종있다. 하지만, 의사결정나무에서는 NULL값도 훌륭한 분류수단이 될 수가 있다.

    예를 들어, 어떠한 사람이 설문조사를 할 때 거부를 하여 해당 설문조사란이 NULL값이 들어갈 경우 우리는 이 사람은 "설문조사를 거부하는 사람"이라는 분류를 할 수가 있다.


    이런 사람들은 별도의 타게팅으로 관리를 하거나, 혹은 관리에서 제외를 시킬 수가 있기 때문에 의사결정 부분에서 중요하다고 볼 수 있다.


    이 결측값을 컨트롤 할 수 있다는 것은 의사결정나무의 장점에 될 수 있다.



    3. 최대 나무(Full Tree)의 생성(분할 시도의 중단 지점)

    • 주어진 노드의 순수도를 증가시키는 분할이 없을 경우
    • 미리 설정한 한계 도달했을 경우(레코드 수, 나무의 깊이)


    최대 나무 즉, Full Tree를 만들었다고 성능이 뛰어난 베스트 트리는 아니다, 그래서 정제 작업인 "가지 치기"를 통해서 베스트 트리에 가깝게 반복작업을 수행해야 한다.



    4. 의사결정트리의 효과 측정


    의사결정나무를 모두 만들었다면, 효과에 대해서 측정을 수행해야 한다.

    테스트 데이터(Training Set)을 넣어서, 데이터의 분류율 등을 측정해야 한다.


    • 노드의 들어오는 레코드 수
    • 클래스 내의 레코드 비율
    • 말단노드라면 어떻게 분류되는지에 대한 정보
    • 노드에서 정확히 분류된 레코드의 비율
    • 훈련 집합과 테스트 집합 간의 분포에 대한 분산

    실제 업무에 투입하기 전에 의사결정트리를 제대로 측정하려면, 테스트 데이터를 적당히 배분해야 한다.
    즉 모든 테스트 데이터를 Training에 사용하게 되면, 검증용 데이터는 존재하지 않게 된다.
    이미 트레이닝에 썼기 때문에 해당 검증용 데이터 역시 기 트레이닝되어 있기 때문이다.

    그래서 테스트를 수행 시, 데이터 일부를 검증용 데이터로 남겨둬야 하고, 이러한 검증용 데이터를 통하여 최종 효과를 측정할 수 있겠다.





    포스팅 내용은 위 교재 및 K-MOOC의 한양대학교 데이터 마이닝 강좌를 통하여 정리하였습니다.




    댓글

    Designed by JB FACTORY