Radiant

Decision tree (결정트리) 만들기

daisy9 2022. 3. 22. 22:31

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 을 보면 결정트리를 시각적으로 확인할 수 있다.

 

plot

 

여기서 Initial, Final, Left-right, Top-down 과 같은 옵션으로 어떤 식으로 보여줄 지 결정할 수 있다.

특히, 'Final' 을 선택하면 최종적으로 어떤 옵션이 가장 좋은지 보여준다. 결정노드에서 어떤 선택을 해야 하는지 굵은 선으로 표시된다.

 

'Final' 옵션

 

 

+++Sensitivity : 위에서 언급했던 변수를 바꿔가며 결과를 확인할 수 있다.

예를 들면, 이 경우에는 legal fee 가 변수로 설정되어 있었는데, 이 legal fee 의 값을 바꾸면 결과가 어떻게 달라지는지 보여준다.

 

먼저 내가 어떤 Decision 을 볼 지 선택한 후, 값을 바꿀 변수를 선택한다.

다음으로 아래 박스에서 최소, 최댓값을 설정하고 step 으로 간격을 설정한 후 Add variables: 에서 '+' 를 클릭하면 자동으로 변수가 추가된다. 수동으로 코딩하는 것도 물론 가능하다.

Sensitivity 변수 설정

 

다음으로 Evaluate sensitivity 초록 박스를 클릭하면 변수 값의 변화에 따라 결과가 어떻게 달라지는지 확인할 수 있다.

 

max = 70000

 

 

??? 에러가 나는 경우

간혹 Calculate tree 를 누르면 아래와 같은 에러가 뜨기도 한다.

Error : invalid regular expression '[€-y]', reason 'Invalid character range'

 

두 가지 해결방법이 있다.

1. 컴퓨터 설정 언어를 '영어'로 바꾸기

- 설정 - 언어 - Windows 표시 언어 : 영어로 바꾸기  (기본 언어 설정이 아니라 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