codestates / codestates/ds-blog
[김태헌]_베이지안 통계(Bayesian inference)
- Dominant language
- No language data
- Stars
- 2
- Forks
- 4
- PR merge metrics
- No merged PRs in 30d
Description
수업 내용을 토대로 내가 이해한 방식을 그대로 적어내려가보려한다.
수업에서 정말 이해하기 쉬운 예시를 사용하여서 재미있었는데, 조건부 확률에서

이 공식을 사용하여 확률을 구하는데, B가 이미 주어진 상황이고 A가 주어진 상황에서 추가적으로 발생한 어떠한 상황이라고 생각하면, B의 확률과 A의 확률을 곱한다음 B로 나누면 확률이 나옵니다. 한마디로 B라는 상황에서의 A일 확률을 구하는것이다.
암을 예시로 들었을때, '암이 걸렸다'라는 상황을 (B) 암으로 판정되었다(A) 일때 , '암으로 판정받았을때 정말 암일 확률' 을 구해보자.
```py
true = 0.99 # 암이 맞을 확률
false = 0.03 # 암이 아닐 확률
prior_probability = 0.005 # 사전 확률
prior_probability_not = 1 - prior_probability # 사후 확률
```
이렇게 가정을 하고 계산을 해보자.
여기서 주의해야할 점은 true + false = 1 이 되어야하지 않나 라는 생각을 하는데, 이 계산은 100%를 맞추어야할 이유가 없다.
조금더 풀어서 설명하자면, 병원에서 한번 검사 후에 암이라고 판정을 내렸다고 했을때 상황은 B. 그런데 아주 혹시 기계에 문제가 있거나 진료 방식에 문제가 있어서 아닐 확률도 있을것이 아닌가. 이미 판정을 받았기 때문에 암일 확률이 100 이라고 하더라도, 아닐 확률이 10 이 있을수 있다는 것이다.
그렇기에 우리가 구하고자 하는것도 저러한 변수를 최대한 없애고자 여러번 반복하여 확률을 높이는 과정을 하는것이다.
위의 이유에서 첫번째 과정은 이러하다.
```py
a = true * prior_probability
b = (true * prior_probability) + (false * prior_probability_not)
c = a / b
c
```
위의 식이 조금 펼쳐저 있어서 어려워 보일지 모르지만, 하나하나 뜯어보면 결국 처음에 지정해 놓았던 변수 4개만 가지고 계산한 식이다.
그러면 아래와 같은 결과를 얻을수 있는데
`0.14224137931034486`
쉽게 생각하면 14퍼센트인 셈이다.
이 결과를 보면 또 오해할수 있다. "암이라고 판정 받았는데 암일 확률이 14%면 암이 아닌거 아니냐?". 아니다 물론 가능성은 있지만 이미 전제되어있는 상황이 암으로 판정을 받은 상태이기 때문에 14% 가 나왔다고 해서 암이 아니라고 할수는 없다. 오히려 정확성을 높이기 위해서 100%에 근접할때까지 몇차례 반복적으로 확률을 계산해야한다.~~사실 내용을 쓰면서도 뭔가 의문점이 든다. 이런식이면 100%에 근접할때까지 무한으로 반복해서 100%를 맞추면 되는건가..정말 아니라고 판단할수 없는건가...?~~
그럼 다음 반복의 두번째를 해보자.
```py
true = 0.99 # 암이 맞을 확률
false = 0.03 # 암이 아닐 확률
prior_probability = 0.142 # 사전 확률
prior_probability_not = 1 - prior_probability # 사후 확률
```
처음과 조금 다른것은 prior_probability(사전 확률) 이 바뀌었다.
첫번째에서 나온 확률이 0.142였기때문에 이 확률을 사전확률에 넣어준것이다.
```py
a = true * prior_probability
b = (true * prior_probability) + (false * prior_probability_not)
c = a / b
c
````
그리고 밑의 식은 이전과 동일하게 해준다. 그러면 밑과 같은 결과가 나온다.
`0.8452380952380953`
갑자기 확률이 큰 폭으로 올랐다! 이대로 한번더 반복해보자.
```py
true = 0.99 # 암이 맞을 확률
false = 0.03 # 암이 아닐 확률
prior_probability = 0.845 # 사전 확률
prior_probability_not = 1 - prior_probability # 사후 확률
```
사전확률을 바꿔주는것을 잊지말자.
```py
a = true * prior_probability
b = (true * prior_probability) + (false * prior_probability_not)
c = a / b
c
````
이렇게 하면 값이 `0.994472182596291` 가 나온다. 우리가 구하고자 했던 확률이 3번만에 나온것이다.
그러면 이 암 환자는 3번의 진료를 반복하면 정말 암인지 아닌지 확실하게 알수 있다는 이야기이다.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.