반응형

원본 링크



A Step by Step CHAID Decision Tree Example

CHAID는 가장 오래된 결정 트리 알고리즘 중 하나로 1980년 Gordon V. Kass에 의해 알려졌고 CART는 1984년에 ID3는 1986년 그리고 C4.5는 1993년에 발표되었다. CHAID는 CHi-square Automatic Interaction Detection(카이제곱 자동 상호작용 감지)의 머리글자 이다. 여기서 카이제곱(chi-square)은 특성의 중요도를 찾기 위한 지표(metric)이다. 높은 값일수록 더 높은 통계적 중요성을 갖는다. 다른 것과 유사하게 CHAID는 분류 문제에 대한 결정 트리를 구성한다. 이는 범주형 목표 변수(target variable)를 갖는 데이터셋을 사용한다는 의미이다.


Living trees in the Lord of the Rings (2001)

CHAID in Python

이글에서는 CHAID 알고리즘에 대해 깊게 알아보고 단계별로 문데를 해결해 본다. 여기에 CHAID 알고리즘을 파이썬으로 구현한 것을 찾을 수 있다.


CHAID in chefboost for python



Objective

특성의 카이제곱값으로 결정 규칙을 찾는다.




수식(Formula)

CHAID는 가장 지배적인 특성을 찾기위해 카이제곱(chi-square) 테스트를 사용하지만 ID3는 정보 이익(information gain)을 C4.5는 이익 비율(gain ration), CART는 GINI Index를 사용한다. 카이제곱 테스트는 [Karl Pearson]https://en.wikipedia.org/wiki/Karl_Pearson)에 의해 발전되었다. 그는 또한 상관관계(correlation)의 창시자이다. 오늘날 대부분의 컴퓨터 라이브러리(예를 들면, Pandas)는 기본적으로 상관관계에 Pearson 지표를 사용한다.

카이제곱의 수식은 쉽다.

$\sqrt{\frac{(y - y')^2}{y'}}$

  • y : 실제값
  • y' : 예측값


Data set

아래 데이터셋으로 결정 규칙을 구성한다. 결정(Decision) 컬럼은 몇가지 특성을 기초로 찾기를 바라는 목표(target)이다.

아무튼, 여기서는 날(day) 컬럼이 단순히 라인 번호이기 때문에 무시한다.

Day Outlook Temp. Humidity Wind Decision
1 Sunny Hot High Weak No
2 Sunny Hot High Strong No
3 Overcast Hot High Weak Yes
4 Rain Mild High Weak Yes
5 Rain Cool Normal Weak Yes
6 Rain Cool Normal Strong No
7 Overcast Cool Normal Strong Yes
8 Sunny Mild High Weak No
9 Sunny Cool Normal Weak Yes
10 Rain Mild Normal Weak Yes
11 Sunny Mild Normal Strong Yes
12 Overcast Mild High Strong Yes
13 Overcast Hot Normal Weak Yes
14 Rain Mild High Strong No

이 데이터셋에서 가장 지배적인 특성을 찾아야 한다.



전망 특성(Outlook feature)

전망 특성은 맑음(sunny), 흐림(overcast), 비(rain)의 3가지 분류(class)를 갖고 'Yes'와 'No' 2가지 결정(decision)이 있다. 우선 각 분류에 대한 'Yes'와 'No' 결정의 수를 정리한다.

Yes No Total Expected Chi-square Yes Chi-square No
Sunny 2 3 5 2.5 0.316 0.316
Overcast 4 0 4 2 1.414 1.414
Rain 3 2 5 2.5 0.316 0.316

Total 컬럼은 각 열(row)에서 Yes와 No 결정의 합이다. Expected 값은 결정이 Yes와 No의 2가지 분류가 있기 때문에 total 컬럼의 절반이다. 이 테이블로 카이제곱 값을 구하는 것은 쉽다.

예를 들어 맑음 전망에 대한 Yes의 카이제곱은 다음과 같다.

$\sqrt{(2 - 2.5)^2 \div 2.5} = 0.316$

여기서 실제값은 2, 예측값은 2.5이다.

전망의 카이제곱값은 카이제곱 Yes와 카이제곱 No 컬럼의 합이다.

$0.316 + 0.316 + 1.414 + 1.414 + 0.316 + 0.316 = 4.092$


이제 다른 특성에 대한 카이제곱값도 알아보자. 최대 카이제곱 값을 갖는 특성이 결정 지점(decision point)가 된다.

온도 특성(Temperature feature)

온도 특성은 더움(hot), 포근함(Mild), 추움(Cool)의 3가지 분류가 있다. 다음은 이들 분류에 대한 카이제곱 값을 정리한 것이다.

Yes No Total Expected Chi-square Yes Chi-square No
Hot 2 2 4 2 0 0
Mild 4 2 6 3 0.577 0.577
Cool 3 1 4 2 0.707 0.707

온도 특성에 대한 카이제곱 값은 다음과 같다.

$0 + 0 + 0.577 + 0.577 + 0.707 + 0.707 = 2.569$

이 값은 전망의 카이제곱 값보다 작다. 이는 카이제곱 테스트로 전망 특성이 온도 특성보다 더 중요하다는 것을 의미한다.



습도 특성(Humidity feature)

습도는 높음(High), 보통(Normal)의 2가지 분류가 있다.

Yes No Total Expected Chi-square Yes Chi-square No
High 3 4 7 3.5 0.267 0.267
Normal 6 1 7 3.5 1.336 1.336

온도 특성의 카이제곱 값

$0.267 + 0.267 + 1.336 + 1.336 = 3.207$

이 값도 전망의 카이제곱값보다 작다.



바람 특성(Wind feature)

바람 특성은 약함(Weak), 강함(Strong)의 2가지 분류이다.

Yes No Total Expected Chi-square Yes Chi-square No
Weak 6 2 8 4 1 1
Strong 3 3 6 3 0 0

바람 특성의 카이제곱 테스트 값은 2이다. (원문에서는 weak|Yes의 개수가 하나 적어 다른 값으로 계산되었다.)

여기까지 모든 특성애 대한 카이제곱 값을 구했다.

Feature Chi-square value
Outlook 4.092
Temperature 2.569
Humidity 3.207
Wind 2

보이는 것과 같이 전망 특성이 가장 높은 카이제곱 값을 갖으므로 가장 중요한 특성이 된다. 따라서 전망 특성을 루트 노드로 놓는다.


CHAID 트리의 초기 형태

위 그림에서 전망 분류로 원시데이터를 나눴다. 예를 들면, 흐림(overcast) 분기는 하위 데이터셋에 'Yes' 결정만을 갖는다. 이것은 CHAID 트리가 흐림일 경우 'Yes'를 반환한다는 의미이다.

맑음과 비 분기 모두는 Yes와 Ne를 갖는다. 이 하위 데이터셋에 카이제곱 테스를 적용한다.



Outlook = Sunny 분기(branch)

이 분기에는 5개의 데이터(instance)가 있다. 이제 가장 지배적인 특성을 찾아보자. 여기서는 전망(outlook) 컬럼은 모두 동일하기 때문에 무시한다. 즉, 온도, 습도 그리고 바람 중에서 가장 중요한 특성을 찾는다.

Day Outlook Temp. Humidity Wind Decision
1 Sunny Hot High Weak No
2 Sunny Hot High Strong No
8 Sunny Mild High Weak No
9 Sunny Cool Normal Weak Yes
11 Sunny Mild Normal Strong Yes


맑음 전망에서 온도 특성

Yes No Total Expected Chi-square Yes Chi-square No
Hot 0 2 2 1 1 1
Mild 1 1 2 1 0 0
Cool 1 0 1 0.5 0.707 0.707

$\text{Chi-square value(Outlook=Sunny|Temperature)} = 1 + 1 + 0 + 0 + 0.707 + 0.707 = 3.414$



맑음 전망에서 습도 특성

Yes No Total Expected Chi-square Yes Chi-square No
High 0 3 3 1.5 1.225 1.225
Normal 2 0 2 1 1 1

$\text{Chi-square value(Outlook=Sunny|Humidity)} = 1.225 + 1.225 + 1 + 1 = 4.449$



맑음 전망에서 바람 특성

Yes No Total Expected Chi-square Yes Chi-square No
Weak 1 2 3 1.5 0.408 0.408
Strong 1 1 2 1 0 0

$\text{Chi-square value(Outlook=Sunny|Wind)} = 0.408 + 0.408 + 0 + 0 = 0.816$

맑음 전망에 대한 카이제곱 값을 정리하면 다음표와 같다.

Feature Chi-square value
Temperature 3.414
Humidity 4.449
Wind 0.816

맑음 전망에서는 습도가 가장 지배적인 특성으로 결정 규칙으로 트리에 넣는다.


CHAID 트리의 두번째 단계

위 그림과 같이 맑음 전망에 대한 양쪽 습도 분기는 하나의 결정만을 갖는다. CHAID 트리는 맑고 습도가 높으면 No를 맑고 보통 습도면 Yes를 반환한다.



Outlook = Rain 분기(branch)

비 전망 분기는 여전히 Yes와 No 결정을 모두 가지고 있다. 정확한 결정을 찾기 위해 이 분기에 카이제곱 테스트를 적용해야 한다.

Day Outlook Temp. Humidity Wind Decision
4 Rain Mild High Weak Yes
5 Rain Cool Normal Weak Yes
6 Rain Cool Normal Strong No
10 Rain Mild Normal Weak Yes
14 Rain Mild High Strong No

비 전망에서 온도 특성

이 특성은 아래와 같이 2가지 분류이다. (** 원래 온도는 Hot, Mild, Cool 3가지 분류지만, 비 전망에서는 Mild와 Cool 데이터만이 나타나고 있다.)

Yes No Total Expected Chi-square Yes Chi-square No
Mild 2 1 3 1.5 0.408 0.408
Cool 1 1 2 1 0 0

$\text{Chi-square value(Outlook=Rain|Temperature)} = 0.408 + 0.408 + 0 + 0 = 0.816$



비 전망에서 습도 특성

이 특성은 아래와 같이 2가지 분류이다.

Yes No Total Expected Chi-square Yes Chi-square No
High 1 1 2 1 0 0
Normal 2 1 3 1.5 0.408 0.408

$\text{Chi-square value(Outlook=Rain|Humidity)} = 0 + 0 + 0.408 + 0.408 = 0.816$



비 전망에서 바람 특성

이 특성은 아래와 같이 2가지 분류이다.

Yes No Total Expected Chi-square Yes Chi-square No
Weak 3 0 3 1.5 1.225 1.225
Strong 0 2 2 1 1 1

$\text{Chi-square value(Outlook=Rain|Wind)} = 1.225 + 1.225 + 1 + 1 = 4.449$



비 전망에 대한 카이제곱 값을 정리해 보자.

Feature Chi-square value
Temperature 0.816
Humidity 0.816
Wind 4.449

바람 특성이 비 전망 분기에서의 승자이다.


CHAID 트리의 세번째 단계

위와 같이 모든 분기는 하나의 결정을 갖는 하위 데이터셋으로 구성된다. 따라서 아래와 같이 CHAID 트리를 구성할 수 있다.


CHAID 트리의 최종 형태
반응형

+ Recent posts