-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #55 from fkdl0048/54-task-코딩테스트-복기-nhn-블루홀
Docs: Reviewing coding tests
- Loading branch information
Showing
2 changed files
with
60 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
# 베이즈 정리 문제 (조건부 확률 문제) | ||
|
||
베이즈 정리는 두 확률 변수의 사전 확률과 사후 확률 사이의 관계를 나타내는 정리로 사전 확률로부터 사후 확률을 구할 수 있는 방법을 제시한다. | ||
|
||
![image](https://github.com/user-attachments/assets/8884f3c3-888b-49a7-bdd3-fa5e047196c8) | ||
|
||
P(A) - 사전 확률: 결과가 나타나기 이전에 정해져 있는 사건 A의 확률 (원인) | ||
P(B|A) - 우도 확률: 사건 A가 발생했다는 전제 하에 사건 B가 발생할 확률 | ||
P(A|B) - 사후 확률: 사건 B가 발생했다는 전제 하에 사건 A가 발생했을 확률 | ||
|
||
베이즈 정리는 조건부 확률을 구하기 위한 정리로 이미 발생한 사건의 확률을 구하기 위한 정리로 **이미 발생한 사건의 확률을 이용해 앞으로 발생하게 될 사건의 가능성을 구할 수 있다.** | ||
|
||
## 베이즈 정리 역확률 문제 | ||
|
||
> A씨가 코로나 진단 키드를 이용한 결과 양성으로 판정 받았을 때, A씨가 실제로 코로나에 걸렸을 확률은 몇 %인가? 단, 코로나 진단 키드의 정확도는 90%이고, 코로나에 걸릴 확률은 5%이다. | ||
코로나에 걸릴 확률 P(코로나) = 0.05, 코로나가 아닐 확률 P(no코로나) = 0.95이고 진단 키트 결과 양성일 때 코로나 확률 P(양성|코로나) = 0.9, 양성이라고 진단 받았지만 실제 코로나가 아닐 확률 P(양성|no코로나) = 0.1이렇게 표현이 가능할 것이다. | ||
|
||
그렇다면 이를 이용하여 진단 키트 결과가 양성일 때 실제 코로나에 걸렸을 확률을 계산해 보자 | ||
P(코로나|양성) = P(양성|코로나) x P(코로나) / P(양성) | ||
P(양성) = 코로나일 때 양성일 확률 + 코로나가 아닐 때 양성일 확률 | ||
= P(양성|코로나) x P(코로나) + P(양성|no코로나) x P(no코로나) | ||
= 0.9 x 0.05 + 0.1 x 0.95 | ||
= 0.14 | ||
|
||
∴ P(코로나|양성) = 0.9 x 0.05 / 0.14 ≒ 0.32 | ||
|
||
이와 같이 계산 되므로 A씨가 코로나 진단 키트 결과 양성일때, 실제 코로나일 확률은 32%인 것이다. 코로나에 걸릴 확률 자체가 5%로 상당히 낮기 때문에, 코로나 진단 키트 결과가 양성이어도 실제 코로나일 확률은 32%로 상당히 낮은 것을 볼 수 있다. | ||
|
||
## 코드 정리 | ||
|
||
```cpp | ||
#include <iostream> | ||
using namespace std; | ||
|
||
int main() { | ||
// 확률 값 입력 | ||
double P_Covid = 0.05; // 코로나에 걸릴 확률 | ||
double P_noCovid = 0.95; // 코로나가 아닐 확률 | ||
double P_Pos_given_Covid = 0.9; // 양성일 때 코로나일 확률 | ||
double P_Pos_given_noCovid = 0.1; // 양성일 때 코로나가 아닐 확률 | ||
|
||
// 전체 양성일 확률 P(양성) | ||
double P_Pos = (P_Pos_given_Covid * P_Covid) + (P_Pos_given_noCovid * P_noCovid); | ||
|
||
// 베이즈 정리를 이용한 P(코로나|양성) | ||
double P_Covid_given_Pos = (P_Pos_given_Covid * P_Covid) / P_Pos; | ||
|
||
// 결과 출력 | ||
cout << "코로나 진단 키트 결과 양성일 때 실제로 코로나에 걸렸을 확률 (P(Covid|Pos)): " << P_Covid_given_Pos * 100 << "%" << endl; | ||
|
||
return 0; | ||
} | ||
``` | ||
|
||
## 참고자료 | ||
|
||
- https://bigsong.tistory.com/40 | ||
- https://namu.wiki/w/%EB%B2%A0%EC%9D%B4%EC%A6%88%20%EC%A0%95%EB%A6%AC#s-2.1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters