More
- n124 강의 노트에 못다한 그래프와 베이지안 신뢰구간, 베이지안 유도 과정 함수들 찾아보며 이해하기. (stats.bayes_mvs(coinflips, alpha = .95)/ BayesianOptimization( ) )
To-do
- 우도 함수 개념 → 수리통계학 찾아보기
가능도 함수 : 우리가 추정하고자 하는 세타(파라미터)에 대한 함수로 보는 방법. → 이후 최대우도추정법을 통하여 함수를 최대/최소로 만드는 세타(파라미터)값을 찾는다.
- MLE → 수리통계학 찾아보기
최대우도추정법 : 함수를 최대로 만드는 세타(파라미터)를 찾는 방법으로 로그를 씌워 미분을 한 후 0이 되는 지점(최대값)을 찾는 것으로 기억함.
- 베이지안 → 윈벅을 통한 베이지안 통계학 찾아보기
조건부 확률과 전확률법칙으로 유도한 베이지안 공식의 증명 과정이 렉쳐노트보다 쉽게 잘 나타나있음.
- 학습목표 설명할 수 있게 공부하기.
베이지안 추론
기존의 통계 방식과는 조금 다른,
사전의 지식을 이벤트에 반영하는 추론 방식 입니다.
이 강의 이후에 여러분이 기억해야할 핵심 키워드들은 아래와 같습니다 .
조건부 확률
(conditional probability
)
- 베이지안 추측의 사용 예시
베이지안 통계 개론 (Bayesian Inference)
🏆 학습 목표
-
조건부 확률에 대해서 이해 할 수 있다.
어떤 사건이 일어난 것을 조건으로 한 확률, 공식 : p(A|B) = p(AB) / p(B)
- 베이지안 통계가 어떤 개념인지 이해 할 수 있다.
통계적 추론에서 (주관적 견해를 바탕으로 한 추론 방법으로 구한)사전 확률로 사후 확률을 구하는 방법으로 여러번 시행을 반복하여 사후 확률의 정확도를 높여나간다.
[n124] Lecture Note 요약
총 확률의 법칙
: 다더하면 1
- 공식:
P(A)=∑nP(An)=1P(A) = \sum_n P(A_n) = 1
- 예시) B가 일어난 상황에서의, A에 대한 확률 P(A)는?
- 두 변수가 연관이 있는 경우 → P(A|B) (: 조건부)
- 연관이 없는 경우 → P(A) * P(B) (:곱의 법칙)
조건부 확률 (The Law of Conditional Probability)
P(A∣B)=P(A∩B)P(B)P(A|B) = \frac{P(A \cap B)}{P(B)}p(B)를 양변에 곱하면,
P(A∣B)P(B)=P(A∩B)P(A|B)P(B) = P(A \cap B)P(A∣B)=∑nP(A∩Bn)P(A|B) = \sum_n P(A \cap B_n)베이지안 이론 (Bayes Theorem)
[베이지안 공식 유도 과정]
강의 노트
P(A∣B)=P(A∩B)P(B)/P(B∣A)=P(B∩A)P(A)P(A|B) = {{P(A \cap B)} \over {P(B)}} /P(B|A) = {{P(B \cap A)} \over {P(A)}}Since
P(A∩B)=P(B∩A),P(A \cap B) = P(B \cap A),A와B의 교집합이나 B와 A의 교집합은 같은 말이다.
그러므로 위의 두 공식을 아래처럼 조건부 확률 공식처럼 만든 다음
P(A∣B)P(B)=P(A∩B)P(A|B)P(B) = P(A \cap B)교집합 대신에 조건부 확률을 이용한 두 공식을 같다고 놓으면 아래의 베이지안 공식을 유도할 수 있다.
P(A∣B)⋅P(B)=P(B∣A)⋅P(A)−>P(A∣B)=P(B∣A)P(A)P(B)P(A|B) \cdot P(B) = P(B|A) \cdot P(A) -> P(A|B) = \frac{P(B|A)P(A)}{P(B)}- p(A|B) → 사후 확률. (B라는 정보가 업데이트 된 이후의 사(이벤트)후 확률)
- p(A) → 사전 확률. (B라는 정보가 업데이트 되기 전의 사전확률)
- p(B|A) → likelihood(우도 함수)
Warm-up 예시
일때, 초콜릿을 준 여성이 나에게 호감이 있을 확률은
p(A)=p(A∣B)⋅p(B)+p(A∣notB)⋅p(notB)p(A) = p(A | B) \cdot p(B)+ p(A | not B) \cdot p(not B) 이므로
(A : 호감 여부 / B : 초콜릿을 받았는지 여부)
💉 베이지안 테스트를 반복하여 사용 (repeated testing)
다음은 Wikipedia로 부터의 예시입니다.
가정 : 약물을 실제 사용 하는 경우 결과가 양성일 확률은 99%일때
실제 분석을 위해, 전체 인구에서 0.5%(1/200) 만이 실제로 약물이 신체에 포함되어 있다고 가정해보도록 하겠습니다.
단순히 생각하면, False positive를 제외한 99%라고 생각 할 수 있습니다만 우리는 이제 사전확률과 사후확률을 사용 할 수 있기 때문에 베이지안을 통해 검증해보도록 하겠습니다.
다음 계산 결과에서,User는 실제 약물이 발견 되는 사람, + 는 양성반응입니다.
즉, 오직 33.2% 정도 만이 양성반응이 나왔다고 해도 실제로 약물을 포함 하는 경우입니다.
실제 계산
- TPR : True Positive Rate (= 민감도, true accept rate) 1인 케이스에 대해 1로 잘 예측한 비율.(암환자를 암이라고 진단 함)
- FPR : False Positive Rate (= 1-특이도, false accept rate) 0인 케이스에 대해 1로 잘못 예측한 비율.(암환자가 아닌데 암이라고 진단 함)
이전 계산의 사후확률을 새로운 계산의 사전확률로 사용한다
파이썬 코드
# 베이지안 계산을 위해서는 4개의 변수가 필요합니다. p_pos_used = 0.99 # True positive rate (TPR, Sensitivity) p_used = 0.005 # prior probability p_pos_not_used = 0.01 # False positive rate (FPR) p_not_used = 1 - p_used # 1 - p_used numerator = p_pos_used * p_used denominator = (p_pos_used * p_used) + (p_pos_not_used * p_not_used) posterior_probability = numerator / denominator posterior_probability
Out[1]:
0.33221476510067116
In [2]:
# 앞에서 나온 사후 확률을 다시 사전 확률로 반복 실행 p_pos_used = 0.99 # TPR p_used = 0.332 # prior probability p_pos_not_used = 0.01 # FPR p_not_used = 1 - p_used # 1 - p_used numerator = p_pos_used * p_used denominator = (p_pos_used * p_used) + (p_pos_not_used * p_not_used) posterior_probability = numerator / denominator posterior_probability
Out[2]:
0.980081106870229
In [3]:
p_pos_used = 0.99 # TPR p_used = 0.98008 # prior probability p_pos_not_used = 0.01 # FPR p_not_used = 1 - p_used # 1 - p_used numerator = p_pos_used * p_used denominator = (p_pos_used * p_used) + (p_pos_not_used * p_not_used) posterior_probability = numerator / denominator posterior_probability #99.979% # p_value = 1 - posterior_probability
Out[3]:
0.9997947404084419
→ 반복 할 수록 사전 확률과 비슷해짐을 확인.
몬티홀 with 베이지안
이러한 이유로 인해 실제 상황에서는 여러번 반복해서 실험을 합니다.
만약 2번을 반복 해서 모두 양성이 나오는 경우, 3번을 반복하는 경우... 에 따라서, 양성반응이 실제 약물로 부터 나온 결과일 확률은 매우 높아집니다.
몬티홀 with 베이지안
Applications
과제 1번
1. Multiple Choice Test
객관식 문제를 푸는 과정에서, 학생은 답을 이미 알고 있거나 찍어야 합니다.
학생이 답을 알 확률은 𝑝이고, 답을 찍어서 맞출 확률이 1𝑚 이라고 할 때 𝑚과 𝑝를 입력받아 학생이 문제의 답을 알고 맞췄을 확률을 계산하는 함수를 작성하세요.
문제에 따르면
A:답을맞춤<−>Ac:답을틀림A : 답을 맞춤 <-> A^c : 답을 틀림B:답을알다↔Bc:답을모른다(찍는다)B : 답을 알다 ↔ B^c : 답을 모른다(찍는다)라고 정의 했을 때, 문제에 주어진 정보에 따르면
P(답을알다)=P(B)=pP(답을 알다) = P(B) = pP(답을찍어서맞춤)=P(맞춤∣모른다)=P(A∣Bc)=1mP(답을 찍어서 맞춤) = P(맞춤 | 모른다) = P(A|B^c) = \frac{1}{m}이고 문제에서 구하고자 하는 바는
P(맞춤∣알다)=P(A∣B)=P(B∣A)∗P(A)P(B)=P(B∣A)∗P(A)P(B∣A)∗P(A)+P(B∣AC)∗P(Ac)P(맞춤 | 알다) = P(A|B) = \frac{P(B|A)*P(A)}{P(B)} \\ = \frac{P(B|A)*P(A)}{P(B|A)*P(A) + P(B|A^C)*P(A^c)}입니다.
- 그런데 레퍼런스 파일에 따르면 왜 답을 맞출 확률p(A)를 p라고 두는 건가요?
- 그리고 왜 답을 알 확률을 p라고 정의 해 놓고 분모에 풀어서 계산하나요..?
- P(B|A)를 1이라고 쳐도 답을 찍어서 맞출 확률이었던 1/m이 P(B|A^c)와 같은 확률이 되는 것이 이해되지 않습니다. 자세한 설명 부탁드립니다.
https://github.com/codestates/help-desk-ds/issues/692# 학생이 문제의 답을 알고-> 맞췄을 확률을 구하는 함수 def correct(p, m): p_corr = 1 / 5 # 사전확률 : 맞출 확률 # p_uncorr = 4 / 5# 1 - 사전확률 denominator = p # 답을 알 확률 tpr = 1 - (1/m) # 맞추고 보니 알 확률 numerator = tpr * p_corr posterior_p = numerator / denominator return posterior_p # 코드를 작성하세요
'코드스테이츠 Ai Boostcamp' 카테고리의 다른 글
[선형대수] rank, span, projection (0) | 2021.06.12 |
---|---|
[n12x] Sprint Challenge (0) | 2021.06.12 |
[통계학] chi-square-test(범주형 가설 검정) (0) | 2021.06.12 |
[통계학] Confidence Interval(신뢰구간, 중심극한 정리) (0) | 2021.06.12 |
[통계학] hypothesis-test(가설 검정) (0) | 2021.06.12 |
댓글