데이터분석/Machine Learning

나이브 베이즈 이해하기.

늘근이 2017. 8. 11. 23:48

나이브.

Naive.

인터넷에서 가끔씩 날카롭다고 달리는 리플중에는 ' 참 나이브 하군요 ' 라는 문구를 종종 본다. 결국 순진하다는 말과 1:1로 동치되는 단어임에도 불구하고 왜이리 자주 쓰이는지는 나이브 라는 영단어가 주는 시크함과 화자가 나타내고 싶은 우위를 잘 나타내주는 단어임에 다름이 없기 때문일것이다.

그러니, 단어가 주는 시크함에 속지말자.

나이브 베이즈는 수학자 Bayes라는 사람으로 부터 유래된것으로,

그냥 고등학교 (혹은 중학교?) 때 배운 조건부 확률을 이용할때 (Bayes기법)

조건이 여러개 있으면 정확히 계산하기에 너무 시간이 기하급수적으로 늘기때문에 몇가지 가정을 포기하고 대충 계산(Naive)하는 방법을 말한다.

 

나이브 베이즈는 스팸분류기로 보통은 설명을 하는듯보이니 한번 따라가본다. 스팸은 스팸이냐 아니냐 결국에는 기다 아니다 확실히 말해줘야한다. 아니 스팸메일이 왔는데, 스팸인거 한 80% 같은데 확인해봐.... 아니면 60%같은데 미안한데 확인해볼래? 이렇게 컴퓨터가 분류할수는 없는 노릇이다.

컴퓨터는 기다 아니다를 확실히 해서 스팸으로 옮겨놓든지 그냥 놔두든지 선택을 하기는 해야하는 것이다. 요즘에는 아다스인지 (ADAS) 아디다스인지가 유행이라고 하니, 비슷한 상황을 찾자면 컴퓨터가 빨간불을 보았는데 이것을 보고 멈추어야하는지 말아야하는지를 결정하는 상황을 가정해본다.

빨강불을 보기전에는 항상 가도되는 상황이 8:2로 이긴다. 그렇다면 이 상황이 빨간불을 보고 난 이후에는 어떻게 의사결정을 해야하는 것인가? 분명 빨간색이 보이는 조건에서는 멈춰야하는 상황일것만 같다.

이 조건부 확률은 다음과 같이 고등학교 수학에 잘 나온다.

P(멈춤 | 빨강불)

이걸 좀만더 풀어 쓰면,

P(멈춤이고 빨강이 나오는 교집합) / P(빨강일 확률)

좀만 더 풀어쓰면

P(멈춰야할 상황에서의 빨강불이 나타나는 확률) * P(멈춤) / P(빨강일 확률)

머리가 아프니 한번 표로 만들어본다.

  빨강(5%) 노띵(95%)  
멈춤(20%) 4 16 20
안멈춤(80%) 1 79 80
  5 95  

결국 빨강을 봤을때는 멈추어야할 상황의 확률은 4:1로 멈추는것이 맞다.

그렇지만, 문제는 길거리의 교통상황이 빨강불이냐 아니냐라는 단순한 논리로는 판단이 안된다는것이다. 빨간불이여도 우회전하는 차량은 건널목에 사람이 없는걸로 판단되면 일단 우회전해서 빠져줘야 하는것이 인지상정이고, 아무것도 없는것으로 판단되더라도 길거리에 짐수레를 끈 노인분이 길을 건널랑말랑하면 일단 멈춰보고 상황을 판단하는게 드라이버의 상식적인 운전 습관이다.

그렇다면 우회전하는것에 대한 판단을 좌우하는 조건은

1) 빨강불

2) 우회전하는 건널목의 사람여부

3) 길거리의 갑툭튀 사람 여부

등등등 고려해야할 상황이 많다. 아니, 좀더 생각해보면 3)번은 2)번에 영향을 받을수도있다. 1)에 영향을 받을수도있다. '아니 시방 저기 횡단보도에서 사람 건너니께 나도 건너야겄어 ' 라고 생각하고 3)의 경우가 생길수도 있고 심지어는 1)번의 여부에 따라 3)번이 결정될수도 있다.

아오 지금 조건이 세개만 되도 고려해야할 조합이 엄청나온다. 아니근데 몇개 조건더 추가되기 시작하면 이제는 비트코인 채굴하는 그래픽카드를 가지고 와도 머리아프기 시작한다. 10개만 되도 동시에 고려하게 된다면 아마 집컴퓨터는 터지고 100개가 되면 기상청 컴도 터질수 있다.

그래도 동시에 영향주는 것들은 무시하기로 한다. 1)번이 일어나는건 2)번과는 상관이 없고 이건 모두 마찬가지다.

이렇게 대충계산하는것이 순진계산, 나이브베이즈라고 한다. 사건들은 독립시행으로 가정한다.

즉 1),2),3)을 따로따로 계산한다. A와 B의 교집합은, 단순히 P(A) * P(B)로 이루어진다고 가정한다.

  빨강 노띵  
멈춤 4 16 20
안멈춤 1 79 80
  5 95  
  건널목 노띵  
멈춤 0 19 20
안멈춤 7 72 80
  7 91  
  갑툭튀 노띵  
멈춤 12 8 20
안멈춤 23 57 80
  35 65  

어떤 상황이 주어졌을때, 이제 멈춰야할 상황에 대한 Likelihood (우도) 는 다음과 같다.

빨강불, 건널목사람여부, 갑툭튀

(4/20) * (0/20) * (12/20) = 0

멈추지 않아야될 상황은?

(1/80) * (7/80) * (23/80) = 0.003

밑에것이 눈곱만큼 크기 때문에 멈추지 않아야될 상황이라고 판단해버린다! 이러면 사고나고 난리가 난다. 중간에 0이 하나 끼어들어가서 모든 확률을 0으로 만들어버리는 파국에 치닫는것이다.

이러한 현상을 막아버리려면, 그냥 분자에 일괄적으로 작은 값을 더해주면 상황이 달라진다. 여기선 소심하게 1만더해줘본다

(5/20) * (1/20) * (13/20) = 0.008

(2/80) * (8/80) * (24/80) = 0.0008

멈춰야한다! 라는 결론으로 바뀌어버렸다.

이러한 숫자가 조금 너무 작아 불편하다면 둘의 값을 비율로 나누면 대략 90% / 10%가 될것이다. 즉, 멈춰야될 확률은 90%로 이 자동차는 가다가 꼭 멈춰야한다.