[개념정리]-Naive Bayes` Model
어린시절 우리의 지루한 시간을 달래주었을 스무고개 놀이를 기억하는가?
머나먼 길을 떠나던 중이라도, 말동무 한 명만 있다면 시작할 수 있으며
흥미진진하게 상대방의 생각을 읽고 문제를 추리해나가다보면
시간이 훌쩍 지나서 어느새 목적지에 도착해있곤 했다.
이러한 스무고개 게임은 너무나도 쉽게 시작할 수 있지만 혼자서는 할 수 없다는 큰 약점이 있다.
그러나 우리의 새로운 친구, 인공지능과 함께한다면 우리는 혼자서도 스무고개 게임을 즐길 수 있지 않을까?
스무고개 세계의 거룩한 계Bot
실제로 혼자서 스무고개를 할 수 있도록, 우리 주변에서 손 쉽게 스무고개 봇들을 만나볼 수 있다.
그렇다면 스무고개 봇들은 어떤 머신러닝 알고리즘으로? 어떤 과정을 거쳐 학습되었을까??
이 질문에 대한 한 가지 방안은 카카오에서 공개한 포스트를 통해 확인할 수 있었다.
카카오미니는 어떻게 스무고개 정답을 맞출까
뜬금없이 말해본다면 요 브런치에 기고되는 카카오 정책산업연구 포스팅은 품질도 품질이거니와 재미난 주제들을 가지고 풀어낸 이야기들이 많다.
사실 오늘의 주제도, 이전에 정리했던 Tree 기반 모델들에 대한 적절한 사진을 찾던 중 발견한 포스팅에서 유래되었다.
(그러니 여러분들도 제 블로그를 멀리하고 갓카오 포스트에 구독 박는게 낫습니다)
위의 포스팅을 들어가보면 카카오 게임즈에서 스무고개봇을 학습시키기 위해 어떤 모델을 적용했는지,
또 어떤 방식으로 학습 알고리즘이 설정되었는지 등 현업에서 하나의 서비스를 위해 어떻게 머리를 굴리는지 사고방식까지도 엿볼 수 있다.
아무튼, 위 포스팅의 결론부터 말하면 나이브 베이즈 모델
을 사용하여 스무고개 봇을 학습시켰다는 사실을 알 수 있다.
그렇다면 오늘의 주인공, 나이브 베이즈 모델
은 무엇인가?
나이브 베이즈 모델
나이브베이즈 분류모델을 알기위해선 그 기초가되는 조건부확률을 알아야한다.
A,B 두가지 종류의 사건이 있을 때, A 사건이 발생할 확률과 B사건이 발생할 확률처럼 단일 사건에 대한 확률이 있을 것이다.
하지만 이세상에서 발생하는 대부분의 일들은 대체로 다른 일들에 영향을 끼치고 만다.
(그렇기에 세상일은 예측하기가 어렵다)
예를들면 치킨 1마리를(8조각) 시켰을때, 어떤 부위가 나올지 모르는채 무작위로 하나씩 꺼내서 먹는다고 가정해보자.
처음 뽑은 치킨조각이 다리일 경우(A사건), 그 다음 뽑는 치킨조각이 날개(B사건)일 확률을 알고싶은 것이다.
우리는 이럴 때 조건부확률을 적용할 수 있다.
수식으로는 이렇게 나타내고, 의미는 B사건이 발생할 때, A가 발생할 확률
로 이해하면 된다.
아까 치킨조각의 사례를 적용해본다면, P(A|B)
는 날개 조각을 뽑았을 때(B사건) 그 다음으로 다리 조각을 뽑는(A사건) 확률값을 가르키게된다.
이러한 조건부확률에 대한 개념을 토대로 18세기 통계학자 토머스 베이즈 가 정리한 베이즈 정리를 이해할 수 있다.
베이즈정리는 위의 조건부확률을 이용하여 유도해낸 정리식으로써, 여기에 A와 B가 독립적으로 시행되었을 때라는 가정이 필수적으로 들어간다.
그렇다면 맨 앞에 붙은 나이브는 무엇일까?
나이브(Naive)의 사전적 의미는 ‘순진한/천진난만한’이며, 머신러닝에서 이러한 나이브하다는 의미는 문제에서 발생할 여러가지 돌발상황을 생략하여 단순한 상황으로 가정하여 학습을 실행한다는 의미를 가진다.
쉽게 설명하기 위해 앞서 들었던 치킨조각 사례를 들어보겠다.
앞서 P(A|B)
확률은 날개 조각을 뽑았을 때, 다음으로 다리 조각을 뽑는 사건을 가르킨다.
상식적으로 생각해본다면 치킨 1마리는 2개의 날개와 2개의 다리를 가진다.
그렇다면 날개 조각을 뽑았을 때, 다리 조각을 뽑을 확률은 $\frac{2}{7}$이 될 것이다. ($\frac{남은 다리개수}{남은 전체조각개수}$)
그러나 현실은 녹록치 않게도, 다양한 돌발상황들이 그 확률을 지배하게 된다.
예를들어 치킨이 원래부터 다리 하나가 결손된 치킨이었다던지(그렇다면 $\frac{1}{7}$)
아니면 주방 조리과정의 실수로 다리가 하나 더 들어있었다던지(그럴땐 $\frac{3}{7}$)
이처럼 현실세계에서는 하나의 문제속에서도 다양한 상황이 발생할 수도 있다는 것이다.
그리고 나이브베이즈는 이러한 돌발상황들을 ‘Naive(순진한)하게’ 순수한 확률적 사건이 발생하는 확률세계를 가정하고 문제에 접근하는 방식을 가르키는 것이다.
이제 이 나이브 베이즈 모델을 실제로 계산해보기위한 연습문제로, 위 카카오 포스팅에 나타난 문제를 직접 계산하는 방식으로 풀이를 해보고자 한다.
편리하게도 카카오가 이미 계산에 필요한 확률값들을 제공하고 있다.
각 확률값들을 수식에 대입하기에 앞서 나이브 베이즈 모델 수식을 구성하는 부분들을 정의하자.
그 전에 먼저, 참고사항으로는
-
이번 연습문제에서는
∑P(A)
를 0.8로 가정하였다 (스무고개 정답지에서 나타나지 않았을 이 세계의 어떤 동물을 몫을 위하여) -
각각의 질문으로 인해 발생하는 사건들은 베이즈 정리의 독립성 가정을 따른다
-
질문에 대해 N라고 대답하는 것에 대한 확률은 질문에 대해 Y라고 대답할 확률을 1에서 뺀 값이다
-
Class Prior Probability ( P(A) ) : 전체 동물중 A에 해당되는 동물이 정답으로 나타날 확률
-
Predictor Prior Probability ( P(B) ) : B 질문에 Y라고 대답할 확률
-
Likelihood (우도) : A에 해당되는 동물이 정답일때, B질문에 대해 Y라고 대답할 확률 (미리 사전에 조사하여 이 값을 확보해 놓는것이 관건)
-
Posterior Probability (사후확률) : 우리가 구하고자 하는 정답. 즉, B질문에 Y라고 답했을 때 해당 동물이 정답인 확률
이렇게 계산할 수 있는 부분들이 세팅되고 나면, 초기에 준비된 데이터로 모델을 돌려본 뒤, 서비스가 운영되며 계속 확률값이 업데이트 된다.
그러면 업데이트된 내용을 다시 모델에 반영하고, 그렇게 그렇게 차차 스무고개 봇은 정확한 정답을 맞추는 방향으로 학습하게되는 것이다.
이제 카카오 포스팅에 공개된 토끼가 정답일 때 첫번째 질문에 대한 계산식을 확인해보자.
P(다리가 있다고 대답|토끼)
= [P(토끼|다리가 있다고 대답) * P(토끼) / P(다리가 있다고 대답) ] * 현재전체동물 중 정답지에 있는 동물 확률(0.8)
= [P(토끼|다리가 있다고 대답) * P(토끼) / {∑P(특정동물일확률)*P(다리가 있다고 대답)} ] * 현재전체동물 중 정답지에 있는 동물 확률(0.8)
= [(0.9*0.2) / {(0.2*0.9) + (0.2*0.9) + (0.1*0.1) + (0.1*0.9) + (0.1*0.1) + (0.1*0.1)}] * 0.8
위에서 헷갈릴 수 있는 점은, P(B)인 P(다리가 있다고 대답) 에 대한 확률값을 구하는 부분이다.
해당 값은 각 동물별로 다리가 있느냐에 대한 1번질문에 Y라고 대답할 확률을 구하면 된다.
즉 P(A)
에서 보았던 각 동물들에 해당하는 값들과 각 동물별 P(다리가 있다고 대답할 확률)
을 각각 곱해준 결과를 전부 더한 값이 P(B)
의 값이 된다.
그러면 토끼가 정답일 때 첫번째 질문에 이어, 두번째 질문에까지 대답을 완료한 상황의 확률값을 계산해보았다.
단 여기서 먼저 주목하고 넘어가야할 사실은, 두번째 질문에서 대답한 사건이 첫번째 질문에 질문과 독립적인 사건이라는 점이다.
그러면 질문 한가지가 늘었을 뿐이지만 계산식은 퍽 복잡해지기 때문에 집중해서 따라오시길 바란다.
P(다리가 있다고 대답∩고양이와 크기가 비슷|토끼)
= [P(토끼|다리가 있다고 대답∩고양이와 크기가 비슷) * P(토끼) / P(다리가 있다고 대답∩고양이와 크기가 비슷)] * 현재전체동물 중 정답지에 있는 동물 확률(0.8)
= [P(토끼|다리가 있다고 대답) *P(토끼|고양이와 크기가 비슷) * P(토끼) / P(다리가 있다고 대답∩고양이와 크기가 비슷)] * 현재전체동물 중 정답지에 있는 동물 확률(0.8)
= [P(토끼|다리가 있다고 대답) *P(토끼|고양이와 크기가 비슷) * P(토끼) / {∑P(특정동물일확률)*P(다리가 있다고 대답)*P(고양이와 크기가 비슷)} ] * 현재전체동물 중 정답지에 있는 동물 확률(0.8)
= [(0.9*0.9*0.2) / {(0.2*0.9*0.8) + (0.2*0.9*0.9) + (0.1*0.1*0.1) + (0.1*0.9*0.2) + (0.1*0.1*0.1) + (0.1*0.1*0.2)}] * 0.8
역시 헷갈릴 수 있는 점이, 두 개의 질문에 대한 P(B)
를 구하는 방식일 것이다.
나도 이 부분이 헷갈리는 터라, 미리 공개되어있는 결과값을 토대로 역으로 계산해내어 P(B)를 구해내었다.
계산을 통해 확인한 결과 첫번째 질문과 두번째 질문이 독립적이라는 가정 덕분에 식이 단순해 졌음을 알 수 있었다.
즉,P(다리가 있다고 대답∩고양이와 크기가 비슷)
은 각 동물별로 다리가 있느냐에 대한 1번질문에 Y라고 대답할 확률과 2번질문에 Y라고 대답할 확률을 곱한 값을 구하면 된다.
그 이상의 질문들에 대한 대답에 따른 확률은, 이제 위와 같은 계산을 반복하여 구해나가면 될 것이다.
오늘 알아본 나이브 베이즈 모델 포스팅은 그간 썼던 포스트글들 통틀어 가장 길고 복잡한 글이 아닐까 싶다.
특히 어려운 내용을 쉽게 쓰고자 하다보니, 또 재미없는 내용을 무미건조하게 쓰는게 뭔가 자존심이 허락하지 않다보니,
이것저것 붙이다보니.. 나도 더 이상 뭐가뭔지 모를 결과물이 나온 것 같다.
이런 글을 매주 쓰기에는 나의 깜냥이 아직 모자르게만 느껴진다.
그런점에서 최근에 감명깊게 봐두었던 이말년 작가님이 김성모 작가님을 인터뷰한 영상,
거기에서 근성의 작가 김성모님이 남긴 명언을 끝으로 오늘의 긴 포스팅을 마무리 하고자 한다.
작가에게 가장 최고의 작품이 뭔지알아?
바로 신작이야
최고의 작품은 신작이라 생각하고 가야하는거야. - 만화의신 (漫神)
그러면 다음 최신작으로 찾아뵙길 기대하면서.. 이만 총총
Comments