랜덤포레스트가 뭐길래? 회의에서 당당하게, 수식없이 알아보자

회사에서 분석가와 미팅이 있다. 분석가가

이 분류 모형은 랜덤포레스트 방법을 사용해서 blah blah..

라는 말을 들었을 때 어떤 생각이 드는가?

Random.. Forest.. 랜덤도 아는 단어고, 포레스트도 아는 단어인데.. 무작위.. 숲..? 도대체 무슨 얘기하는 건지?
물론 분석가들도 좀 더 쉬운 용어를 쓰는 것이 중요하겠지만, 그에 못지 않게 용어를 들었을 때 대충이라도 어떤 의미인지는 알고 커뮤니케이션 하는 게 중요하겠다.

그래서 현업의 분류 문제에서 많이 쓰는 머신러닝 방법 중 하나인 랜덤포레스트에 대해서 설명해 보고자 한다. 최대한 수식이 없이 실생활에 비추어 설명하였으니, 비전문가도 이해할 수 있는 설명이면 좋겠다.


회의때 알면좋은
뭔진 알고 살자
예찬
수식없이 개념만, 랜덤포레스트
왜 랜덤포레스트 쓰나요?

먼저 랜덤포레스트가 나오게 된 배경인 의사결정나무에 대해서 설명해보겠다.

논리적 사고에 대한 문서나 수업을 조금이라도 접해 보았다면 '로직 트리Logic Tree'라는 개념은 많이 들어보았을 것이다. 복잡한 한 가지 현상(결과)를 잘게 쪼개서 가지를 쳐 나가다 보면 근본 문제(원인)를 확인할 수 있고, 이를 해결해서 문제를 해결한다는 방법론이다.

의사결정나무는 이와 비슷한 모양으로 우리가 예측을 하고 싶은 문제(결과)를 여러가지 설명할 수 있는 현상(변수)을 통해 트리구조로 해석해서 해결하는 방법이다.

뭔가 사람이 의사결정하는 구조와 비슷하다고 생각되지 않은가? 이런 이유로 머신러닝 기법 중에서 보통의 회귀분석보다 이런 의사결정나무가 사람이 친숙하게 생각하는 방법이 아닐까 한다. 복잡한 수식보다 이렇게 그림으로 표현하면 이해하기도 쉬워 보인다.

의사결정나무의 원리

그럼 이런 그림은 어떻게 만드는 것일까? 아래와 같이 어떤 상품(ex. 자동차)의 구매 데이터가 있다고 해 보자. (우리가 모형을 만들기 위해서 사용하는 이런 데이터를 모형을 학습시키기 위한 훈련Training 데이터라고 한다)

가장 좋은 방법은 모든 가능한 나무를 그린 후에 데이터를 잘 설명하는 것을 고르는 것이겠다. 하지만 이는 변수의 수, 데이터의 수가 많아지면 거의 불가능한 일이기 때문에 가장 잘 나누는 변수 → 그 다음 변수 → 그다음 변수… 해서 결론이 나올 때까지 반복하여 나무를 그리는 방법을 사용한다. 단계별로 당장의 최선을 찾아간다는 의미로 욕심쟁이Greedy 방법이라고 한다.

위의 그림에서 처음 변수인 '결혼여부'를 결정하는 방법만 살펴보자.

  • 변수들 중 제일 잘 분류하는 변수 후보로, 결혼여부가 O일 때와 통근거리>20km가 O일 때 구매/비구매를 완전히 구분하는 것 같다.
  • 그런데 X일 경우를 살펴보면, 결혼여부가 X일 때는 1:3 으로 나눠지지만, 통근거리>20km가 X일 때는 2:3 으로, 결혼여부가 좀 더 잘 구분하는 것으로 보인다.
  • 그래서 결혼여부를 처음 의사결정의 가지치기 변수로 택한다.

이를 좀 더 그럴듯한 표현으로 바꾸면, 각 변수로 데이터를 둘로 나눴을 때, 가장 불순도가 줄어드는 변수를 선택한다고 한다. 결혼여부로 가지를 치니까 각 구분에서 데이터들이 순도가 가장 높은 것 같지 않은가? 물론 이렇게 눈으로 계산할 수는 없으니까, 불순도를 계산하는 정해진 식을 이용하게 되는데, 여기저기서 많이 들어봤을 듯한 지니계수(Gini Index)나 엔트로피(Entropy) 등을 이용한다. (수식은 여기(매운맛 버전)에)

단계별로 가장 불순도가 많이 줄어드는 변수들을 계속 선택하면 위의 그림과 같은 의사결정 나무가 만들어진다.

하지만, 이렇게 쉬운 의사결정나무는 현실에서 잘 사용하지 않는다. 대신 이 의사결정나무를 조금 발전시킨 오늘의 주제인 랜덤포레스트 방법을 많이 사용한다.

설명도 쉽고 만드는 방법도 어려워보이지 않는 의사결정나무 한 가지 방법은 예측의 성능이 떨어진다. 이를 현실세계에 빗대어 보면 아무리 뛰어난 전문가라도 한명이 예측하는 미래는 틀릴 가능성이 높다는 것과 비슷하다.

전문가 한명이 틀린 예측을 하게되는 이유는 과도한 확신 등 심리학적 요인도 있겠지만, 예측에 사용되는 정보(훈련 데이터)와 판단 기준(특성, 변수) 측면에서 아래와 같기 때문이다.

  • 한 명의 전문가가 모든 정보를 가지고 판단을 할 수 없다.(ex. 미래 예측을 위해 모든 과거 데이터를 볼 수는 없다)
  • 전문가가 가지는 성향 등으로 서로 다른 판단 기준을 가진다. (ex. 어떤 사람은 금융시장을, 어떤 사람은 실업률을 기준 삼아 경기를 예측한다.)

사회학 분야에서는 이런 문제 때문에 '델파이 기법' 또는 '전문가 합의법'이라는, 여러 전문가의 의견을 모아 취합하는 방식을 사용한다. '델포이 신전'의 신탁 처럼 예측을 위한 방법이라고 할 수 있다.

이와 비슷하게 랜덤포레스트 기법의 아이디어는, '델파이 기법'의 전문가 한명을 의사결정나무 하나에 빗대어 예측 모형을 만들도록 하는 것이다. 기본적으로 잘 틀릴 수 밖에 없는 여러 의사결정나무 들을 모아서의 관점에서 결과를 예측하는 방법이라고 할 수 있다.

그럼 여러개의 의사결정 나무를 어떻게 만들 수 있을까? '잘 틀리는' 전문가를 흉내내어

  • 가지고 있는 훈련 데이터에서 무작위로 일부분만을 사용하고, (정보를 제한)
  • 설명변수들 중에서도 무작위로 일부분만을 사용하여, (판단 기준을 제한)

'잘 틀리는' 의사결정나무들을 많이 만들어내어 투표를 한다(회귀문제의 경우는 평균). 그래서 이름이 무작위(랜덤)로 만든 나무들(포레스트) 이다.


각기 다른 정보와 판단기준으로 예측하는 전문가들이 투표를 하듯이, 랜덤포레스트는 각기 다른 설명(도형의 모양, 변수)과 데이터를 이용하는 나무들의 투표를 통해 예측을 한다.

통계적인 용어를 사용하자면, 펼쳐서 보기

현실에서 많이 쓰는 모형이니까 많은 장점이 있을 것이다.

그 전에 미리 알아두어야 할 것은, 모든 머신러닝 방법은 Trade-off 관계가 있다는 것이다. 모든 문제에 무조건 다 잘 들어맞는 모형은 아직까지는 세상에 존재하지 않는다는 것을 알아야 한다. 성능이 좋은 모형은 대부분 복잡한 방법을 사용하고, 계산 시간이 늘어나거나 설명하기가 어려워진다. 반대로 간단한 모형은 계산이 빠르거나 설명이 쉬우나 성능이 못 미친다. 이 점을 염두하고 실제 풀고자 하는 문제와 목적에 맞는 모형을 사용하는 것이다.

성능이 좋다(잘 맞춤) ↔ 사람이 이해하기 쉬움, 계산이 빠름

아래의 장단점도 특정 문제나 목적에 따라서 달라질 수 있기 때문에 분석가들이 모형 선택에 고민을 하는 것이다.

성능이 좋다

간단한 모형인 의사결정나무나 회귀모형보다 당연히 더 좋다.

게다가 보통 랜덤포레스트 모형을 쓰는 경우는, 일반적인 고객 데이터를 통해 고객을 분류하거나 구매의사를 예측하는 등 일반적으로 정제된 데이터를 대상으로 한다. 이런 문제에서 랜덤포레스는 다른 더 복잡한 모형과 비교해도 손색없는 성능을 보여준다. 딥러닝이나 SVM 등 복잡한 모형이 더 성능이 좋을 수 있으나, 랜덤포레스트도 어느정도 성능을 보장해 주는 방법이다.

설명하기 좋다

보통의 비즈니스 문제에서는 모형의 사용자나 의사결정자가 이해할 수 있는 모형을 쓰는 것이 좋기도 하고, 어떤 변수들이 어떻게 영향을 미치는지 설명이 가능한 것이 모형의 성능보다 더 유용한 경우가 많다.

랜덤포레스트는 의사결정자에게 설명하기에 수식을 안쓰고도 '의사결정나무를 무작위로 많이 만들어서 평균 투표하는 것'이라는 상대적으로 간단한 설명을 할 수 있고, 분류에 쓰이는 몇 가지 방법 중에서 설명하기 쉬운 편이다.

변수 중요도를 바로 산출해준다

그럼 어떻게 설명하는가? 설명이 가능하다는 것은 어떤 변수가 예측을 하기 위해 얼마만큼의 영향을 끼쳤느냐를 의미하기도 한다.

의사결정나무처럼 한장의 그림으로 그려서 알기는 어렵지만, 변수별로 중요도를 계산해서 순서를 알려준다. 어떤 변수가 예측에 가장 큰 기여를 했는지를 알려준다는 이야기다.

여러가지 의사결정나무에서 무작위로 선택된 서로 다른 변수들을 사용해서 예측을 했기 때문에, 그 의사결정나무들을 서로 비교해보면 어떤 변수가 예측에 큰 기여를 했는지를 확인해볼 수 있다. 보통은 모형을 다 만든 후에 중요도를 따로 계산해줘야 하지만, 랜덤포레스트는 이런 특징으로 모형 훈련 과정 중에 중요도까지 같이 계산할 수 있다. 중요도를 계산하기 위해 따로 시간을 낼 필요 없이, 데이터 수와 변수가 많을 때 시간을 어느정도 절약해줄 수 있다.

결측치에 대해서 안전하다

훈련 데이터 내에 결측치가 있는 변수에 대해서도, 무작위로 추출하는 과정에서 쓰지 않으면 되니까(변수 A의 값이 없는 데이터라도, 변수 A를 사용하는 의사결정나무에서만 제외하면 된다) 결측치에 대해서 안정적인 편이다.

계산이 빠르다, 튜닝이 쉽다

딥러닝이나 SVM, KNN 등 다른 방법에 비해 상대적으로 계산이 빠른편이다.

데이터 전처리 작업에서도 이점이 있는데, 보통 모형을 학습시키기 위해서 질적변수(남/여 처럼 숫자가 아닌 변수)의 경우, 남=0,여=1 같이 컴퓨터가 계산할 수 있는 숫자로 따로 변환해주어야 한다(이를 변수코딩Coding 작업이라고 한다). 그런데 의사결정나무 종류의 경우 모형 자체가 수식 계산보다는 집단별 개수를 세는 방법을 사용하기 때문에 따로 데이터로 정리 하지 않고도 바로 학습을 할 수도 있다.

또한 튜닝이 쉬운 편이다. 튜닝이라고 함은, 모형을 만들 때 우리가 정해줘야 하는 몇가지 옵션이라고 할 수 있는데, 랜덤포레스트에서는 각 의사결정나무를 만들 때 1) 변수를 몇개를 쓸까, 2) 각 의사결정나무의 깊이를 얼마나 할까, 3) 몇 개의 나무를 만들까 정도 밖에 없다. 그리고 보통 패키지에서 기본옵션으로 정해진 것을 적용 해도 성능에 크게 영향을 받지 않기 때문에 튜닝이 상대적으로 쉬운 편이다.

모든 모형에는 단점이 있다. 위의 장점들도 어떤 문제나 상황에서는 틀린 말이 되는 경우도 많다.

1) 매우 차원이 높고 희소한 데이터(ex. 텍스트 데이터 등 단어의 가지수(차원)은 많으나 각 단어들이 많이 등장하지 않는(희소한))에는 잘 작동하지 않는다. 데이터를 따로 축약하는 과정을 하지 않고, 각 나무마다 무작위로 뽑힌 일부분의 데이터만을 사용하기 때문이다.

2) 설명이 쉽다고 말했으나, 의사결정나무나 회귀모형에 비해 설명이 어려운 단점이 있다. 임시방편의 방법이긴 하지만, 변수중요도에서 높은 중요도를 보이는 변수들을 이용해서 단일 의사결정나무를 그려서 어느정도 인사이트는 얻을 수 있을 것이다.

3) '랜덤' 포레스트이기 때문에 큰 차이는 아닐지라도 훈련할 때마다 결과 값이 달라질 수 있다.

4) 변수의 수가 늘어나면, 특히 예측과 크게 상관없는 변수들이 많으면 성능이 떨어지는 문제점이 있다. 모형 내에서 따로 변수선택의 과정을 거치지 않기 때문이다. 그래서 변수선택 과정을 사전에 거쳐야 하는데, 이는 거의 대부분의 모형을 학습할 때 해야하는 과정이다. 하나의 나무를 만들 때 사용하는 변수의 수를 늘리면 어느정도 해결이 가능하지만, 그러면 또 계산속도가 느려진다.

5) 많은 수의 나무를 사용해서 투표하는 방식이기 때문에, 실제 현실에서 예측을 할 때 계산이 조금 느린 편이다. 실시간 예측보다는 배치나 Near-time에 어울리는 모형이다.

이런 몇가지 단점이 있기 때문에, 정규화된(Regularized) 로지스틱 회귀나 낮은깊이의 인공신경망 등과 한번 더 투표해서(앙상블Ensemble이라고 한다) 결과값을 내는 경우도 많다.

요즘 머신러닝의 트렌드는 누가뭐래도 딥러닝이라고 할 수 있다. 하지만 보통 현업의 문제에서 이미지,음성,영상,자연어처리 등 문제가 아니면 딥러닝은 닭잡는 데 소잡는 칼을 쓰는 격이 될 가능성이 높다. 말했듯이 계산속도와 연관되는 시간이나 컴퓨팅 비용등의 자원도 생각하면서, 도구보다는 문제와 목적에 맞는 적절한 방법을 쓰는 것이 중요하겠다. 다른 모형들과 몇가지 면에서 비교를 해보면 아래와 같다.

다음부터 회의에서 랜덤포레스트를 사용했다고 하면 다음과 갈이 질문을 해보도록 하자.

딥러닝같은 방법은 안쓰나요? ⇒ X
변수가 다 의미가 있는건가요? 변수선택은 어떻게 해서 성능문제를 해결했나요? ⇒ O
텍스트 데이터 등은 어떻게 차원 축소 과정을 거쳤나요? ⇒ 'O'
되도록 모형에 대한 질문보다 변수와 데이터에 대한 질문을 해보도록 하자

Tree-based Model, Bagging 수식있는 매운맛 버전
An Introduction to Statistical Learning, Gareth M. James 外, Springer, 2014
The Elements of Statistical Learning, Trevor Hastie 外, Springer, 2001
Computer Age Statistical Inference, Bradley Efron 外, Cambridge University Press, 2016
https://dohk.tistory.com/170
ratsgo

More

2020/06/18 20:34
2020/06/07 23:03
2020/06/04 00:30
2020/05/28 19:29
2020/05/12 18:03
2020/05/07 18:27
2020/05/01 01:54
2020/04/29 19:52
2020/04/20 20:12
2020/04/17 00:23
2020/04/15 16:21
2020/04/11 10:41
2020/04/08 15:49
2020/04/01 18:43
2020/04/01 09:55
2020/03/21 22:43
2020/03/20 20:53
2020/03/15 20:11
2020/03/07 16:35
2020/03/07 13:46
2020/03/02 01:09
2020/02/29 13:52
2020/02/29 13:52
2020/02/29 13:52
2020/02/29 13:52
2020/02/29 13:52
2020/02/29 13:49
2020/02/16 18:11
2020/02/06 21:58
, 2020/04/08 00:55
의사결정나무 트리구조 설명 예시에서 웃었습니다
저같은 비전공자 혹은 비전문가가 보기에 어려운 용어들도 있고 전부 이해하지는 못했지만 관련하여 알고 싶어졌지는 설명글이고 개념정도 이해하는것에 무리없이 설명이 술술 읽혀져 좋았습니다
근데 중간 제목중 '딥러닝 안쓰나요'이것만 존대어로 부조화인데 아주 밉지만은 않습니다ㅎ
Enter your comment:
A L I X B