Decision tree (결정트리) 만들기
Decision tree (결정트리) 는 여러 변수와 선택이 있는 상황에서 의사결정을 보다 쉽게 할 수 있도록 도와주는 툴이다.
Radiant 에서 decision tree 를 만드는 방법은 간단하지만 에러가 날 수도 있으니 차근차근 알아보자.
1. Model 탭에서 Decision analysis 를 선택
그러면 Radiant 가 제공하는 기본 형태의 Decision tree 를 보여준다.
2. 원하는 변수과 값으로 코드 바꾸기
이 코드를 내가 원하는 대로 바꿔주면 되는데, 몇 가지 주의사항과 규칙이 있다. 생각보다 헷갈릴 수 있으니 제공되는 코드를 참고하면서 보길 바란다.
1) 첫 줄: tree 이름
내가 만들 트리 이름으로 먼저 바꿔주자
name:
2) 두 번째줄: 변수 (생략 가능)
다음에 변수를 넣을 수 있다. 내가 결정트리 모델을 돌릴 때, 값을 바꾸고 싶은 부분을 변수로 설정할 수 있다.
코딩은 variables: 이라고 하고 그 아래 줄에 들여쓰기를 꼭 해줘야 한다!
variables:
(변수명):
주어진 코드에서는, sign with movie company 하면 legal fee 가 cost 로 발생한다고 해석할 수 있다.
변수 부분은 헷갈리기도 하고 여러가지로 사용될 수 있으므로 다른 예시를 더 보도록 하겠다.
Ex1) 확률을 변수로 설정할 수도 있다.
여기서 중요한 것은, 확률의 합이 1이 되어야 한다는 점! (1 - 확률) 으로 조정한 것을 볼 수 있다.
Ex2) 변수에 다른 결정트리의 결과를 넣을 수도 있다.
결정트리를 만들다보면, 같은 부분을 반복적으로 활용하기도 한다. 이 때, 해당 부분을 독립적인 결정트리로 만들고, 결과만 사용하면 보다 간단하게 최종 결과를 확인할 수 있다.
나중에 이 변수를 바꿔가며 결과를 확인할 수 있는데, 뒷부분에서 자세히 다루도록 하겠다.
또 이 변수 파트는 생략해도 되니 억지로 쓰려고 하지 않아도 된다!
3) 노드 타입
내가 사용하는 노드가 decision node 인지, chance node 인지를 먼저 정의해야 한다.
- decision node (결정 노드) : 보통 사각형으로 표시되며, 이후 내가 '선택'해야 하는 옵션들이 가지처럼 이어진다.
type: decision
- chance node (기회 노드) : 보통 원으로 표시되며, 이후 여러 경우의 수에 대한 '확률' 과 'payoff' (이득) 가 계산된다
type: chance
4) 노드 이름
노드 타입 바로 아래 줄에는 항상 노드 이름이 와야 한다.
type:
(노드이름):
5) cost
어떤 노드를 실행했을 때 부가되는 cost 가 있다면 명시해주면 된다. 이 때, cost 는 기본적으로 음수로 설정되어 있음을 주의하자! 예를 들어, 여기서 cost : legal fees 인데 이 legal fee 는 -5000 이 아니고 5000 으로 한 것을 볼 수 있다.
또 다른 예시로, 여기서 slide cost 는 음수로 되어있는데, 이 값은 곧 양수이므로 payoff 의 값으로 사용할 수 있다.
cost 는 노드 이름 다음에 적으며 들여쓰기를 해야 한다.
6) p (probability, 확률)
chance node 일 경우, 해당 노드가 발생할 확률을
p: 0.7
처럼 다음 줄에 적어주는데, 들여쓰기를 해야 한다.
type : chance
(노드이름) :
p : 0.7
7) payoff (이득)
end node (마지막 노드) 에는 항상 payoff 가 와야 한다. 이 때, payoff 는 들여쓰기를 해야 한다.
type: decision
(노드이름):
payoff: 1000
8) 기타
#~~~ : 샵 뒤에 쓰는 것들은 코드 계산에 포함되지 않는다. 기타 설명이나 중간에 제목 등을 명시하고 싶을 때 사용하면 유용하다.
3. Calculate tree 클릭
Calculate tree 를 클릭하면 오른쪽에 결과가 정리되어 나온다.
****주의할 점
! 모든 줄은 콜론(:) 이 있어야 함
! 노드 이름 다음 줄부터는 들여쓰기를 해야 한다.
! chance node 일 경우, end node 에는 p & payoff 둘 다 있어야 한다.
type: chance
(노드이름):
p:
payoff:
! cost : 자체가 음수 ( - value)
! payoff : 자체가 양수 ( + value)
+++ Plot
Plot 을 보면 결정트리를 시각적으로 확인할 수 있다.
여기서 Initial, Final, Left-right, Top-down 과 같은 옵션으로 어떤 식으로 보여줄 지 결정할 수 있다.
특히, 'Final' 을 선택하면 최종적으로 어떤 옵션이 가장 좋은지 보여준다. 결정노드에서 어떤 선택을 해야 하는지 굵은 선으로 표시된다.
+++Sensitivity : 위에서 언급했던 변수를 바꿔가며 결과를 확인할 수 있다.
예를 들면, 이 경우에는 legal fee 가 변수로 설정되어 있었는데, 이 legal fee 의 값을 바꾸면 결과가 어떻게 달라지는지 보여준다.
먼저 내가 어떤 Decision 을 볼 지 선택한 후, 값을 바꿀 변수를 선택한다.
다음으로 아래 박스에서 최소, 최댓값을 설정하고 step 으로 간격을 설정한 후 Add variables: 에서 '+' 를 클릭하면 자동으로 변수가 추가된다. 수동으로 코딩하는 것도 물론 가능하다.
다음으로 Evaluate sensitivity 초록 박스를 클릭하면 변수 값의 변화에 따라 결과가 어떻게 달라지는지 확인할 수 있다.
??? 에러가 나는 경우
간혹 Calculate tree 를 누르면 아래와 같은 에러가 뜨기도 한다.
Error : invalid regular expression '[€-y]', reason 'Invalid character range'
두 가지 해결방법이 있다.
1. 컴퓨터 설정 언어를 '영어'로 바꾸기
- 설정 - 언어 - Windows 표시 언어 : 영어로 바꾸기 (기본 언어 설정이 아니라 Windows 표시 언어이다!)
주의해야 하는 점은, Windows 표시 언어를 영어로 바꾸려면 컴퓨터를 로그아웃해야 한다 (껐다가 켜야 함). 그래서 조금 번거롭고 이렇게 하면 말 그대로 windows 가 모두 영어로 표시되기 때문에 불편하고 낯설다...
이 경우 Knit report 는 Decision tree 이외에 다른 것들도 되지만, 한국어로 타이핑이 되지 않는다. 왜 그런지는 모르겠지만.. 언어 설정에서 기본언어 설정, 워드에서 인식 언어 등을 바꾸어 보아도 전혀 먹히지 않는다... 이 글도 Windows 표시 언어를 다시 한국어로 바꾼 다음에 쓰는 중이다. 한국어로 문서를 바로 작성해야 한다면 크리티컬한 문제일 듯하다.
또 Knit report 할 때, .html 은 문제 없이 잘 되지만, .docs (word) 형태로 할 때는 일부 에러가 생기고 .pdf 로는 아예 report 가 만들어지지 않으며 Radiant 작동이 멈추는 문제가 있었다.
고로 이 방법을 사용할 때는 한국어로 문서 작성할 일이 없어야 하고 무조건 html 로 레포트를 만들 생각을 하고 있어야 한다.
2. 온라인 Radiant 사용하기
https://vnijs.shinyapps.io/radiant/?SSUID=280b29f32a
Radiant
vnijs.shinyapps.io
이 방법은 간편하지만 knit report 기능을 쓸 수 없다. Decision tree 말고 다른 것들도 아예 knit report 가 안 된다. 다음과 같은 에러가 생기는데 아직 해결방법은 모르겠다...
추가적으로 유튜브 참고자료를 남긴다.
https://www.youtube.com/watch?v=7sk_OIDyyrQ