비전공자도 이해할 수 있는 AI지식 -단순한 머신러닝 모델의 강력한 힘-

1. 의사결정나무, 단순하지만 강력하다

 

강남역의 교통 체증을 예측하는 가장 간단한 방법은 조건에 따라 분기하는 모델인 의사결정나무를 만드는 겁니다.

 

우리가 어릴 때 하던 스무고개놀이와 비슷합니다.

 

스무고개놀이란 말 그대로 예 혹은 아니오로 답할 수 있는 질문을 스무번 제시하여 정답을 알아맞히는 놀이입니다.

 

질문의 횟수는 적을수록 좋습니다.

 

그렇다면 가급적 정답을 빨리 맞힐 수 있는 질문을 제시해야겠죠.

 

어떻게 질문을 구성해야 할까요?

 

https://itwiki.kr/w/%EC%9D%98%EC%82%AC%EA%B2%B0%EC%A0%95_%EB%82%98%EB%AC%B4

 

 

2. 정답을 가장 빨리 찾는 질문은...?

 

의사결정나무를 구축할 때는 복잡도인 엔트로피(entropy)를 낮추는 형태로 진행합니다.

 

복잡도는 다르게 표현하면 불확실성의 정도(uncertainty)라 할 수 있습니다.

 

즉 엔트로피가 낮아지면 복잡도와 불확실성이 줄어듭니다.

 

이렇게 엔트로피를 낮춰 덜 복잡하게 하고, 덜 불확실하게 하여 가급적 정답을 빨리 맞히는 것이 의사결정나무의 구축 원리입니다.

 

한 가지 예를 들어보겠습니다.

 

"1994년 미국에서 열린 월드컵에서 어느 나라가 우승했나요?"라는 질문에 브라질, 미국, 호주, 홍콩 축구팀 중 하나를 고른다고 해봅시다.

 

스무고개놀이로 맞혀야 한다면 과연 어느 나라부터 가장 먼저 질문해야 정답을 가장 빨리 맞힐 수 있을까요?

 

가장 우승 확률이 높은 나라부터 질문해야겠죠

 

"브라질인가요?"라는 질문이 가장 합리적으로 보입니다.

 

이처럼 가장 정답이 확실해 보이는 질문은 엔트로피를 낮춥니다.

 

그리고 실제로 브라질이 정답입니다.

 

단 한번에 정답을 맞출 수 있었네요. 매우 훌륭한 결과입니다.

 

그런데 만약 브라질이 정답이 아니라면 그 다음에는 어느 나라를 택해야할까요?

 

마찬가지로 정답 가능성이 높은 나라를 택하는게 불확실성을 가장 낮출 수 있겠죠?

 

"미국인가요?"라고 묻습니다. 그 다음에는 "호주인가요?"라고 질문해야 할거에요.

 

이처럼 의사결정나무는 불확실성을 낮추는 순으로 질문을 이어나갑니다.

 

그러면 가장 빨리 맞출 수 있죠.

 

그렇다면 앞서 소개한 데이터로 강남역의 교통체증을 예측하는 의사결정나무 모델을 만들어보겠습니다.

 

마찬가지로 불확실성을 낮추는 순으로 질문을 구성해봤습니다.

 

 

 

데이터 10건을 이용해 만들어본, 강남역 교통 상황을 예측할 수 있는 의사결정나무 모델입니다.

 

내비게이션이 교통 체증을 예측하는 데 활용할 수 있을 것 같습니다.

 

 

3. 단순함은 좋을때도 있지만 나쁠때도 있다

 

그런데 문제가 있습니다.

 

첫 질문부터 과적합이 보입니다.

 

계절 요일 시각 날씨 강남역 교통체증 예측결과
겨울 주중 9시 맑음 ? 교통 원활(잘못 예측)

 

겨울의 평일 오전 시간대에 강남역의 교통 체증을 예측해봅시다.

 

출근 시간대이니 당연히 교통 체증이 발생할 것 같습니다.

 

그런데 우리가 학습한 데이터에는 겨울의 주중 오전 데이터가 없었습니다.

 

겨울에 교통 체증이 발생한 데이터가 없었고, 그래서 이들 데이터만으로 구축한 의사결정나무는 겨울에는 항상 교통이 원활하다는 판단을 내립니다.

 

학습데이터만을 놓고 봤을때는, 겨울인지 여부로 판단하는 것이 가장 빠르게 불확실성을 낮출 수 있는 방법이기 때문입니다.

 

마치 브라질이 월드컵 우승국인지 가장 먼저 질문했던것처럼, 가장 합리적인 결정은 맞습니다.

 

하지만 불완전한 학습 데이터에 지나치게 과적합한 것이죠.

 

만약 겨울이 아니라면, 현재 시각도 확인하고, 주말인지도 물어보면서 좀 더 꼼꼼하게 정답을 찾습니다.

 

날씨는 교통 체증과는 상관관계를 찾기 어려워서 질문을 생략하기도 합니다.

 

이렇게 학습데이터 10건에 대해서는 완벽한 모델입니다.

 

무엇보다 이렇게 만든 의사결정나무는 판별 과정이 투명하게 보이기 때문에 왜 그렇게 판단했는지 금방 이유를 알 수 있고,

 

겨울에는 교통 체증이 발생하지 않는다고 판단하는 오류도 쉽게 발견할 수 있습니다.

 

이렇게 해석이 쉬운 모델은 해석이 어려운 딥러닝에 비해 오류를 쉽게 발견하고 수정할 수 있는 장점이 있습니다. 

 

단순한 모델의 힘입니다.

 

그렇다고 해도 겨울에는 항상 교통이 원활하다고 잘못 예측하는 오류는 해결해야 합니다.

 

왜 잘못 예측했을까요?

 

공교롭게도 학습데이터에 평일 출근 시간대에 측정한 데이터가 포함되지 않았기 때문입니다.

 

이렇게 한번 잘못된 판단을 내리면 의사결정나무는 이를 스스로 수정할 수 있는 방법이 없습니다.

 

겨울이라면, 항상 교통이 원활하다는 결론을 내려버리면 그만이기 때문입니다.

 

단 한번의 오류에 너무 취약한 모델입니다.

 

만약 겨울이라는 입력이 잘못 들어갔다면, 그 즉시 교통이 원활하다는 결론을 내려버리기 때문에 다른 조건은 살펴볼 기회조차도 주어지지 않죠

 

이처럼 지나치게 엄격한 의사결정나무 모델은 예상 밖의 변화에도 민감하게 반응하므로, 온갖 오류가 넘치는 현실의 데이터로는 정확도를 높이기도 어렵습니다.

 

정확도를 높일 수 있는 좀 더 개선된 방법은 없을까요?

 

 

4. 랜덤포레스트, 대중의 지혜를 모으다

 

 

버클리대학교의 통계학자 레오 브라이만은 2001년에 오류에 견고한 새로운 모델을 제안합니다.

 

데이터와 특징에 제한을 두고 샘플을 추출한 다음 여러개의 의사결정나무를 만들고

 

각각의 결과를 두고 투표해 최종 결과를 정하는 방식이죠.

 

https://www.tibco.com/ko/reference-center/what-is-a-random-forest

 

예를 들어 다음과 같이 여러 개의 의사결정나무를 만들 수 있습니다.

 

 

이렇게 만든 3개의 의사결정나무 모델을 이용해 겨울 출근 시간대의 교통 상황을 다시 한번 예측해보죠.

 

첫번째 모델은 앞서 단일 의사결정나무와 마찬가지로 이번에도 겨울이기 때문에 원활하다는 결론을 내립니다.

 

하지만 두번째 모델은 11시 이전이라 교통 체증이 발생한다는 결론을 내립니다.

 

세번째 모델은 주말이 아니기 때문에, 10시 이전인지 한번 더 조건을 따져보고 마찬가지로 교통 체증이 발생한다는 결론을 내립니다.

 

이렇게 3개 모델의 결과는 교통 원활 1표, 교통 체증에 2표로 다수결에 따라 교통 체증이 발생한다고 결론을 내릴 수 있습니다.

 

계절 요일 시각 날씨 강남역 교통체증 예측결과
겨울 주중 9시 맑음 ? 교통 체증(올바른 예측)

 

 

앞서 단일한 의사결정나무는 잘못된 예측을 했지만, 여러 개의 나무를 활용해 올바르게 예측해낸 거죠.

 

 

5. 랜덤포레스트, 어떻게 만드는가

 

그렇다면 여러개의 의사결정나무를 어떻게 만들 수 있을까요?

 

학습 데이터 10개 중 일부를 제외하고 8개를 무작위로 추출해 만들거나

 

4개의 특징(계절, 요일, 시각, 날씨) 중 일부를 제외하고 어떤 나무는 계절을 빼고 어떤 나무는 날씨를 빼는 등 3개의 특징만 활용해 나무 여러개를 만들어냅니다.

 

이렇게 만들어낸 각각의 의사결정나무는 당연히 단일 의사결정나무에 비해 성능이 훨씬 더 떨어집니다.

 

데이터와 특징을 제한했으니깐요.

 

그러나 이런 의사결정나무가 1개가 아니라 10개, 100개가 되면 엄청난 위력을 발휘합니다.

 

마치 평범한 대중이 모여 "대중의 지혜"를 발휘할 수 있는 거죠.

 

만약 이 중 60개가 교통 체증이 발생한다는 판단을 내렸다면, 과반수를 훨씬 넘으므로 이를 최종 결론으로 택할 수 있습니다.

 

이렇게 하면 데이터의 오류로 일부 의사결정나무가 잘못된 결과를 내리더라도, 나머지 나무들이 올바른 결과를 낼 수 있기 때문에,

 

전체적으로는 오차에 매우 견고해집니다.

 

무엇보다 이 방식은 대중의 지혜를 발휘합니다.

 

엄청나게 똑똑한 의사결정나무가 내린 정답보다 평범한 100개의 나무가 내린 정답을 모두 종합하면, 그 결과가 훨씬 더 훌륭하다는 얘기죠.

 

오류에 견고할 뿐만 아니라 성능 또한 훨씬 더 좋습니다.

 

이 모델의 이름은 랜덤 포레스트(random forest), 나무를 만들기 전에 데이터를 무작위로 샘플링하고, 

 

나무가 여러 개 모여 숲을 이룬다는 의미죠.

 

모델의 원리에 잘 어울리는 멋진 이름입니다.

 

알고리즘을 고안한 브라이먼은 당시 일흔 세살이었고, KFC를 만든 커널 샌더스 할아버지가 예순다섯 살에 창업한 것처럼,

 

브라이만은 본인의 연구 인생에서 가장 위대한 업적을 은퇴할 나이에 남긴 셈입니다.

 

랜덤 포레스트는 마이크로소프트의 게임기 엑스박스의 모션센서가 사람의 동작을 판별하는데 사용한 알고리즘으로도 유명합니다.

 

그렇다면 어떻게 이보다 더 정확도를 높일 수 있을까요?

 

 

6. 그래디언트 부스팅, 정답과의 거리를 점점 줄여나가다

 

통계학에 잔차(residual)라는 개념이 있습니다.

 

오차(error)와 비슷한 개념인데, 잔차는 전체에 대한 오차가 아니라 샘플의 오차라는 차이점이 있죠.

 

훨씬 더 작은 개념으로, 잔차를 줄여나가는 방식으로 모델을 훨씬 더 정교하게 개선할 수 있기 때문에 

 

통계학에서 여러 모델을 만드는 데 중요하게 쓰입니다.

 

잔차의 개념을 의사결정나무에도 활용할 수 있습니다.

 

앞서 랜덤 포레스트에서는 무작위로 여러 개의 나무를 만들었습니다.

 

각각의 나무들은 서로 독립적이었고, 득표수를 기준으로 결과를 판별했죠

 

https://www.researchgate.net/figure/Schematical-representation-of-gradient-boosting-regression-in-regards-to-algorithm_fig3_340524896

 

그러나 여기서는 이전에 만든 나무를 개선해 새로운 나무를 만듭니다.

 

각각의 나무는 이전과 달리 독립적이지 않으며, 오히려 이전의 나무에 크게 영향을 받습니다.

 

먼저 의사결정나무를 하나 만듭니다.

 

그리고 이 나무에서 오류가 발생하면 실수를 바로잡는 새로운 나무를 만듭니다.

 

이 과정을 오류를 최소화할때까지 계속해서 반복합니다.

 

잔차를 계속해서 줄여나가는 거죠.

 

잔차의 기울기(gradient)를 줄여나간다고 하여 그래디언트 부스팅(gradient boosting)이라고 합니다.

 

이 과정은 마치 골프를 치는 것과 비슷합니다.

 

https://www.youtube.com/watch?app=desktop&v=d6nRgztYWQM

 

홀컵에 공을 넣기 위해 여러 차례 공을 치면서 계속해서 거리를 줄여나가는 거죠.

 

우리는 여러 번의 노력 끝에 마침내 홀인을 해냅니다.

 

홀컵을 정답이라고 한다면 그래디언트 부스팅은 정답을 맞히기 위해 계속해서 정답의 거리를 줄여나가는 과정이라고 할 수 있습니다.

 

그래디언트 부스팅 모델은 성능이 매우 좋습니다.

 

마치 골프를 치듯 정답을 향해 여러 번 꾸준히 도전하는 방식이 놀라운 효과가 있었죠.

 

앞서 랜덤 포레스트도 의사결정나무를 하나만 사용했을때보다 성능이 훨씬 더 좋다고 얘기한 바 있는데요.

 

잔차를 줄여나가는 형태로 구축하는 그래디언트 부스팅은 랜덤 포레스트보다도 훨씬 더 뛰어납니다.

 

웬만한 오류는 모두 걸러내며 매우 높은 정확도를 보여주죠

 

우리가 지금까지 살펴본 강남역 교통 체증을 예측하는, 사실상 가장 뛰어난 모델이기도 합니다.

 

 

7. 딥러닝이 정답인가

 

딥러닝이 많은 분야에서 월등히 좋은 성과를 내고 있지만, 이처럼 정형화된 데이터를 예측하는 일에서는 

 

여전히 전통적인 머신러닝 모델이 좋은 성과를 내고 있습니다.

 

특히 그래디언트 부스팅을 응용한 모델은 심지어 딥러닝보다 더 뛰어난 성능을 보이며 여전히 여러 분야에 활발히 활용되죠.

 

캐글이라는 데이터과학경진대회에서 가장 많이 쓰이는 머신러닝 모델도 바로 그래디언트 부스팅입니다.

 

우승을 위해서는 당연히 딥러닝을 써야 할 것 같지만, 경진대회에서조차 딥러닝을 제치고 더 많이 쓰일 정도로 뛰어난 성능을 발휘하고 있다는 얘기입니다.

 

단일 의사결정나무는 단순하지만 성능은 다소 떨어집니다.

 

반면 랜덤 포레스트와 그래디언트 부스팅은 복잡하지만 성능은 매우 뛰어납니다.

 

이처럼 뛰어난 성능 덕분에 비단 교통 체증 예측뿐만 아니라 배차 예측 같은 분야에도 널리 사용합니다.

 

택시의 수요와 공급을 효율적으로 예측하여 승객이 몰리는 지역에 더 많은 택시가 대기하도록 하는 거죠.

 

과거에는 베테랑 운전자의 경험에만 의존해야 했지만, 이제는 그래디언트 부스팅 같은 뛰어난 모델을 활용해 해결할 수 있습니다.

 

 

TAGS.

Comments