목차
2023.02.25 - [NLP-writing] - 1. 자연어 처리란 무엇일까?
2023.03.20 - [NLP-writing] - 2 정규표현식을 익히자 Regular Expression with Python
Intro
머신러닝과 인공지능 분야에서 베이스가 되는 확률 중 하나가 베이지안 확률입니다. 그 외의 로지스틱 회귀 분석, 정규 분포, 이항, 푸아송, Likelihood 추정 등이 모두 중요하지만, 오늘 주요하게 다루고 싶은 주제는 베이지안 확률입니다.
베이지안 확률이 왜 필요한지?
일단 why 를 중요하게 생각합니다. 무언가를 배울 때 이건 도대체 왜? 탄생을 했고, 도대체 왜 필요할까? 란 질문을 던지면 나름 대답을 해보면서 이해하기가 수월해집니다.
확률에는 일반적으로 추론(Inference Statistics)하는 확률이 맨 처음 등장했습니다. t 분포, T-test 분석, f 분포, ANOVA 와 같이 고전적인 확률 통계 이론이 추론입니다. 추론(Inference Statistics)는 모집단을 추정하는 것을 의미합니다.
맨 처음 추론 이론이 발달했던 이유는, 일단 데이터 자체가 얻기가 어려웠습니다. 그 때 당시엔 지금의 빅데이터의 시대가 아니라 한 사람 한 사람의 데이터를 모으는데에도 마차를 끌고 다니고, 말을 타고 다니면서🎠🐴 의견을 물어보거나 세금을 한 명 한 명 찾아가며 징수하는 면대면의 시대였으니까요. 그래서 소규모라도. 작지만 소중한 내 데이터(sample data)를 가지고 모집단(population data)의 규모와 니즈를 추정(Inference)하는 것입니다.
즉, 사전에 통계적 모형에 대한 가설을 세우고, 이 가설을 기각할 지 아닐지를 데이터를 통해 판단합니다.
예를 들어, A집단의 평균 아이큐 점수가 100점, B집단의 평균 점수가 120점이라고 할 때. 이 차이가 통계적으로 유의미할지 안할지에 대해서 가설을 세우고, t-distribution 이나 F-distribution 그래프에서 해당하는 위치의 값을 계산하여 판단합니다.
그래서 이 데이터가 모집단 추정치에 비교해서 어떤 위치에 있는지. 이 차이들의 통계적으로 유의미한지 아닌지를 평균(mean)으로 비교하거나(t-test), 분산(variance) 값을 바탕으로 비교(Analysis of Variance; ANOVA)하였습니다.
하지만 A와 B의 결과 데이터를 비교하는 것 이외에, A가 있다면 B가 주어질 확률, B가 있다면 A가 주어질 확률을 구하는 게 필요합니다.
사전에 통계적인 모형을 세우는 것보다, 이전 데이터를 기반으로 사후 확률을 추정하는 것이 필요해졌습니다. 이것이 베이지안 확률입니다. 과거의 데이터를 기반으로 확률 모형을 만듭니다.
예를 들어, 오늘 날씨가 좋다. 어제 날씨가 좋다. 등등의 구절이 계속 있었다면,
'날씨가' 란 단어가 나왔을 때 '좋다' 라는 단어가 등장할 확률 을 계산할 수 있습니다.
사후 확률을 기반으로 검색 창에 한 단어만 쳐도 그 다음에 이어질 단어들이 주르륵 나오는 것을 볼 수 있습니다.
현재 상용화 되고 있는 서비스들의 배경에는 Bayse의 이론이 바탕이 되어 있습니다.
베이지안 확률이란?
대니얼 카너먼은 노벨 경제학 상을 받은 심리학자입니다. 다음과 같은 문제를 내었습니다.
스티브란 사람이 있는데, 이 사람은 수줍음이 강하고, 내성적입니다.
무척 협조적인 사람이지만, 사람에 대해서는 거의 관심이 없습니다.
정리 정돈을 좋아하는 사람이라서, 디테일에 강하고, 규칙을 세우고 구조를 세우는 것을 선호합니다.
이 스티브의 직업은 사서입니까? 농부입니까?
대부분의 사람이 스티브의 직업은 사서라고 대답했습니다.
with the result that judgments and choices often deviate substantially from the predictions of normative statistical and economic models
(대니얼 카너먼은 Thinking, Fast and slow 라는 책에서 사람들의 비합리성에 대해서 다루었습니다. 책 내용을 간단하게 요약하면, 사람은 fast processing 또는 slow processing 의 두 가지 기능을 가지고 있는데. 대체로 fast processing을 선호합니다. fast processing은 습관, 자동화된 작업들이라서 에너지가 많이 필요하지 않거든요. slow processing은 책을 읽고, 분석하는 작업들을 많이 하다보니 느리고, 시간도 많이 필요하고, 힘이 듭니다. 사람은 최대한 fast processing을 사용하고, slow processing을 덜 사용하도록 진화되어 왔습니다. 즉시 직관적인 감정을 담당하는 편도체와 고민이 많은 의사결정을 하는 전전두 피질의 관계처럼요. 하지만 fast processing 과정에서 오류가 자주 나타납니다.)
그런데 미국을 기준으로 사서와 농부의 비율이 1:20 정도라고 합니다. 농부일 확률이 훨씬 높다는 거죠. 물론 사서일 수 있습니다.
사서와 농부가 직업인 사람을 210명으로 잡고, 1:20 해당 비율로 나눈 다음, (10명 / 200명)
수줍음, 내성적, 정리정돈을 좋아하는 성격인 비율을 40%, 10% 라고 할 때, (4명 / 20명)
베이지안 정리에 따르면
P(스티브의 해당 조건에 맞는 사서라는 직업일 확률) = 4 / (20 + 4) = 4 / 24 = 1 / 6 =16.7%
이 확률은 해당 조건이 어떻게 업데이트 하는 가에 따라서 바뀔 수 있습니다. 일찍 일어나는 성격이다, 부지런하다 등의 성향이 더 추가되면 해당 조건에 맞도록 다시 update할 수 있습니다. 이 베이지안 정리는 현상에 따라서 확률을 update할 수 있는 장점이 있습니다. 현상 중심적이라고도 합니다.
즉, 해당 성향인 사람 중에서 직업이 사서인 확률을 구하려고 할 때, (P(사서 | 성향) 을 구하려고 할 때)
직업 중에서 해당 성향인 비율을 가지고 도출해 낼 수 있습니다.
P(사서) = 10/ 210 = 1/21 이고,
P(성향 | 사서) = 0.4 입니다. 사서 중에서 내향적이고 수줍고 정리정돈을 좋아하는 사람의 비율.
P(성향 | 사서가 아닌 사람) = 20/200 = 1/10 = 0.1 . 사서가 아닌 사람 중에서 내향적이고 수줍고, 정리정돈을 좋아하는 사람의 비율
다음과 같은 비율만 도출해도,
해당 성향 중에서 사서인 비율을 도출해 낼 수 있습니다.
베이지안 공식은
P(사서 | 성향) = P(사서) * P(성향 | 사서) / ( P(사서) * P(성향 | 사서) + P(사서가 아닌 사람) * P(성향 | 사서가 아닌 사람) )
또는 간단하게 (P(A) * P(B | A)) / P (B) 으로 나타냅니다.
이러한 공식들은 조건부 확률을 계산하는데 유용합니다
P(x1) * P(x2|x1) * P(x3|x2) * ... * P(x k | xk-1)
영화 * 개봉 | 영화 * 일자 | 개봉 .... 로 확률을 구하고, 추후 추가적인 데이터가 업로드 되면 지속적으로 update할 수 있습니다.
베이지안 확률의 문제 해결
다음과 같은 문제가 있습니다.
1000명을 대상으로 건강검진을 했습니다. 모든 걸 다 아는 신의 눈을 기준으로 봤을 때, 이 중 실제 암인 사람은 10명, 암이 아닌 사람은 990명입니다. 건강검진에서는 실제 암인 사람 중에서 양성 판정을 받은 사람은 9명, 암이 아닌 사람 중에서 음성 판정을 받은 사람은 901명입니다. 이 건강검진에서 자신이 양성 판정을 받았을 때 실제로 암일 확률은 얼마입니까?
여기에서 Sensitivity(또는 Recall이라고도 함)는 실제 암인 사람 중 양성 판정을 받은 비율을 말합니다. 9명 / 10명 이니 90%이고,
Specificity는 실제 암이 아닌 사람 중 음성 판정을 받은 비율을 말합니다. 901명 / 990명 이니 약 91% 입니다.
그렇다면, 의사의 정확도가 90% 라고 말할 수 있을까요?
민감도와 정확도는 많이 헷갈리는 개념입니다.
실제 암인 사람 중, 제대로 암 판정을 받은 건 90%이니. 그럼 건강검진에서 암 양성 진단을 받았다고 해서, 그게 정말로 암이 90% 의 확률이라고 할 수 있을까요.
P ( 암 | 양성 ) = P ( 암 ) * P ( 양성 | 암 ) / ( P ( 암 ) * P ( 양성 | 암 ) + P (~암) * P ( 양성 | ~암 ) )
= (1/100) * (9/10) / ((1/100 * 9/10) + (990/1000 * 89 / 990)) = 0.009 / (0.009 + 0.089) = 0.009 / 0.098 = 대략 0.09
이렇게 베이지안 공식으로 풀어도 상관이 없고,
실제 문제 값에서 전체 1000명중 실제 양성 판정을 받은 사람은 9 + 89 = 98명이고 이중 실제로 암인 사람은 9 명이니
P (암 | 양성) = 9 / (9 + 89) = 9 / 98 = 0.09 이니 대략 1 /11 이라고 판단해도 좋습니다.
즉, 90% 로 암 판정이 아니라, 해당 문제에서 양성 판정을 내릴 때 실제 암이 확률은 9% 밖에 되지 않습니다.
(이걸 용어로는 Precision이라고 하며, 판정을 양성으로 내린 것 중 실제 암인 경우를 의미합니다)
이런 걸 표로 나타낸 값이 아래와 같은데, 사실 행과 열 값이 바뀌는 경우엔 헷갈리는 경우가 꽤 있습니다🥹 문제 출제하기 좋은 표.
예측 | |||
positive | negative | ||
실제 | positive | true positive (TP) | false negative (FN) |
negative | false positive (FP) | true negative (TN) |
머신 러닝에서는 다음과 같이 표현하는 경우가 많죠. 원은 모델이며, 모델이 양성이라고 판정한 값을 나타냅니다. 머신러닝 모델의 양성 판정(1) 중 실제 양성(1)이면 true positive, 실제는 음성(0)이면 false positive.
베이지안 저 공식은 솔직히 헷갈립니다. 복잡하구요.
베이지안의 장점은 사전 확률 (prior 값)이 주어지고, 이를 기반으로 사후 확률 (posterior 값)을 계산할 수 있습니다.
예시의 유병률을 각각 다른 경우, 머신 러닝 모델의 sensitivity와 specificity가 일정하다고 하고, precision 값을 구하면? 즉, 양성 판정을 받았을 때 실제 암일 확률은?
유병률 : 1% Sensitivity : 90% Specificity : 91% |
유병률 : 10% Sensitivity : 90% Specificity : 91% |
유병률 : 0.1% Sensitivity : 90% Specificity : 91% |
유병률과 같이 이미 사전에 주어진 값을 prior 확률 값이라고 합니다.
베이지안 probability 확률을 구할 때처럼 직접 손으로 계산해서 풀어 볼 수도 있고,
Bayes factor 값을 계산해서 구할 수 있습니다. Bayes factor는 실제 암일 때 암으로 판정 받은 확률 / 실제로 암이 아닐 때 암으로 판정 받은 값입니다. = P(양성 | 암) / P (양성 | ~암)
Sensitivity와 Specificity는 일정하므로,
Sensitivity / (1 - Specificity) = 0.9 / 0.09 = 10 이 나옵니다. 혹은 90% / 9% ... 또 다르게 계산하면 (9명 / 10명) / (89명 / 889명) = 10
Odd확률 값 O(암 | 양성) = O(암) * P(양성 | 암) / P(양성 |~암) 이라고도 하며,
이 때 대응비 인 Odds의 개념을 활용해서 계산할 수 있습니다.
Probability 는 1 / 100 = 1% 라고 하면, Odds 는 1 : 99
Probability가 10% 이면 Odds는 1 : 9
Probability가 20%이면 Odds는 1 : 4
Probability 가 0.1% 이면 Odds는 1 : 999
Prior probability : 1% Odds = 1 : 99 |
Prior Probability : 10% Odds = 1 : 9 |
Prior Probability : 0.1% Odds = 1 : 999 |
Bayes' factor값이 10이라고 한다면, 각 값을 앞단에 곱해주고
10 : 99 | 10 : 9 | 10 : 999 |
해당 비율 값을 구하면 posterior 값을 구할 수 있습니다. 여기에선 양성 판정일 때 실제로 암일 확률입니다.
10 / 199 = 0.05 = 5% | 10 / 19 = 0.52 = 52% | 10 / 1009 = 0.009 = 0.9% |
마무리
머신 러닝과 인공지능이라고 쓰고 통계학이라고 읽는다🥲란 말이 있습니다. 그런데 통계학의 경우 한글 단어가 너무 어렵게 되어 있다는 겁니다. 그리고 지나친 공식 맹신은 피하려고 했습니다. 표준 편차, 분산... 이거 영어로 하면 standard deviation, variance 이고, deviation의 경우 떨어져있다. standard하게 떨어져 있다. 분산을 standard하게 표준화한 게 표준 편차이구나. 이런 식으로... 이해하기 쉽게 찾아가면서 정리했습니다✍️ 주로 찾아본 건 유튜브. 유튜브엔 고수분들이 많이 계십니다🙏🏻
추가로 여기에선 precision을 주요하게 다루었는데, 모델 평가할 때 데이터의 목적에 따라 recall값(sensitivity)를 기준으로 모델을 선택하는 경우도 봤었습니다. 아무튼 여기까지 작성 끝.
베이지안 이론과 관련하여 좀 더 자세한 내용은 하단의 영상으로...
https://www.youtube.com/watch?v=bFZ-0FH5hfs&t=1118s
Reference
1. Beysian Odds Ratio 관련
https://www.youtube.com/watch?v=lG4VkPoG3ko
2. Baysian theorem 관련
https://www.youtube.com/watch?v=HZGCoVF3YvM&t=771s
'NLP-writing' 카테고리의 다른 글
미적분 - 경사 하강법(gradient descent) (0) | 2023.04.27 |
---|---|
Linear Algebra 선형대수학 with NLP (0) | 2023.04.09 |
2 정규표현식을 익히자 Regular Expression with Python (0) | 2023.03.20 |
1. 자연어 처리란 무엇일까? (0) | 2023.02.25 |
[글또] NLP writing - 일정 (0) | 2023.02.11 |