확률
확률은 어떤 사건이 일어날 확실성을 측정하는 이론적 연구 분야이다. 어떤 사건이 일어날 것이라고 믿는 정도를 말하며, 종종 백분로 확률을 표현한다.
확률의 예
- 동전을 10번 던져서 앞면이 7번 나올 확률
- 선거에서 승리할 가능성
- 비행기 스케줄이 지연될 확률
- 제품에 결함이 있는지 얼마나 확신하는가
위의 예 중 하나인, 동전을 10번 던져서 앞면이 7번 나올 확률이 만약 10% 라고 한다면, 여기서 확률은 P(X) 라고 하며, X는 관심 대상인 사건이다. 확률은 주로 0.0에서 1.0 사이의 소수로 값을 표시하는데, 이 경우에는 확률이 10% 라고 언급했기 때문에 이는 0.1이 된다.
◆ 확률과 가능도의 차이 - 1
- 확률: 아직 일어나지 않은 사건에 대학 예측을 정량화하는 것. (미래)
- 가능도(likelihood): 이미 발생한 사건의 빈도를 측정하는 것. (과거)
▶ 통계와 머신러닝에서는 확률(미래)을 예측하기 위해 데이터 형태에 대한 가능도(과거)를 사용한다.
◆ 확률과 가능도의 차이 - 2
- 확률을 모두 더하면 1.0 또는 100% 가 되어야 하며, 오즈(odds) O(X) 로 나타낼 수 있다.
- 가능도는 이 규칙이 적용되지 않는다.
※ 오즈(odds): 어떤 사건이 일어날 확률(P)을 사건이 일어나지 않을 확률(1-P)로 나눈 값.
오즈가 2.0이라면 어떤 사건이 일어날 확률이 일어나지 않을 확률보다 두 배 더 높다는 뜻이다.
[오즈 O(X)를 확률 P(X)로 바꾸는 공식]
만약 오즈가 5/3 이라면, 아래와 같이 확률로 바꿀 수 있다.
이를 파이썬으로 구현해보자.
# 오즈를 확률로 바꾸기. 오즈는 5/3
odds_numerator = 5 #오즈 분자
odds_denominator = 3 #오즈 분모
# 오즈를 확률로 변환
odds = odds_numerator / odds_denominator
probability = odds / (1 + odds)
# 결과
print(f"오즈: {odds_numerator}/{odds_denominator}")
print(f"확률: {probability:.4f}")
반대로, 사건이 발생할 확률을 발생하지 않을 확률로 나누면 확률을 오즈로 바꿀 수 있다.
# 확률을 오즈로 바꾸기. 확률은 0.625
from fractions import Fraction
# 분수 표현위한 모듈 불러오기
p_x = 0.625 #확률
o_x = p_x / (1 - p_x) #오즈
o_x_fraction = Fraction(o_x).limit_denominator()
print(f"오즈: {o_x:.3f}")
print(f"오즈(분수): {o_x_fraction}")
확률 계산
◆ 주변 확률과 결합 확률 (+곱셈 정리)
주변 확률 (marginal probability) 사건 P(X)의 단일 확률을 다룰 때의 확률 개념은 매우 간단하나, 서로 다른 사건의 확률을 결합하기 시작하면 직관적으로 이해하기 어렵고, 이를 결합 확률(joint probability) 라고 부른다.
예를 들어, 동전과 6면으로 구성된 주사위가 있을 경우, 동전 앞면과 주사위 눈이 6이 나올 확률을 구해본다고 가정한다면
- 결합 확률을 AND 연산자에 대입하여 '앞면 AND 6' 의 확률을 구한다.
- 앞면이 나올 확률: 1/2, 6이 나올 확률: 1/6
▶ 두 사건이 모두 발생할 확률은 단 순히 두 개를 곱하면 된다. (곱셈 정리)
◆ 합 확률
사건 A 또는 B가 발생할 확률, 확률로 OR 연산을 수행할 때를 말한다.
[상호 배타적인 경우 - 동시에 발생할 수 없는 사건]
예를 들어 주사위를 한 번 굴리면 1과 6이 동시에 나올 수 없으며 둘 중 하나만 나온다. 이러한 경우에 확률은 단순히 더하는 방식으로 쉽게 구할 수 있다.
[상호 배타적이지 않은 경우 - 동시에 발생할 수 있는 사건]
예를 들어, 동전의 앞면이 나오거나 주사위 눈이 6이 나올 확률은 동시에 발생할 수 있는 사건이기 때문에, 이를 계산하면
그런데, 앞면과 6이 나올 확률을 더하면 다른 값을 얻는다.
이는, 확률을 더할 때 6이 나올 확률을 두 번 계산했기 때문인데, 합 확률에서 이중 계산을 제거하는 방법은 결합 확률을 빼는 것이며, 이를 확률의 덧셈 법칙이라고 한다. (모든 결합 사건이 한 번만 계산되도록 한다)
앞서 예제를 예로 들면, 합 확률에서 앞면과 6이 나올 결합 확률을 빼야 한다.
즉, 상호 배타적이지 않은 두 개 이상의 사건 간에 합 확률을 계산할 때에는 확률이 이중으로 계산되지 않도록 결합 확률을 빼야 한다.
조건부 확률과 베이즈 정리
조건부 확률(conditional probability): 사건 B가 발생했을 때 사건 A가 발생할 확률.
P(A GIVEN B) 또는 P(A|B)
조건부 확률을 쉽게 혼동하는 이유는 조건의 방향이 중요한데, 두 조건이 동일하다고 혼동하기 때문이다.
대한민국 내에서 암 진단을 받은 사람의 비율(보건복지부 발표 4.7%, 0.047)과 커피를 마시는 사람의 비율(연합뉴스 기사 76%, 0.76)을 비교해 본다.
P(커피) = 0.76
P(암) = 0.047
P(커피|암) = 0.85
라는 식의 맥락에 상관없이 중요해 보이도록 착각하게 만들 수 있으며, 이를 악용할 수 있다. ('암환자의 85%가 커피를 마신다' 라는 식으로) 물론, 이것은 일반적인 속성(커피를 마신다는 것)을 흔하지 않은 속성(암에 걸렸다는 것)과 연관시킨 엉터리 내용이다.
'커피를 마시는 사람이 암에 걸릴 확률' 은 '암에 걸린 사람이 커피를 마시는 확률'과는 다르다.
만약, 커피가 암에 연관이 있는지 연구하려면 커피를 마시는 사람이 암에 걸릴 확률, 즉 조건부 확률을 살펴봐야 한다.
이때에는 베이즈 정리(Bayes' Theorem) 라는 공식을 사용하면 된다.
이를 파이썬으로 계산하면,
# 파이썬에서 베이즈 정리 사용하기
p_coffee_drinker = 0.76
p_cancer = 0.047
p_coffee_drinker_given_cancer = 0.85
p_cancer_given_coffee_drinker = (p_coffee_drinker_given_cancer * p_cancer) / p_coffee_drinker
print(p_cancer_given_coffee_drinker)
위 계산에 의하면 커피를 마시는 사람이 암에 걸릴 확률은 5.26%에 불과하며, 이 수치는 앞서 언급한 암에 걸린 사람이 커피를 마실 확률인 85%와는 매우 다르다. (물론, 이 85%의 수치는 임의의 수치이다.)
결합 및 합 조건부 확률
전체 인구 중 암에 걸렸으면서 커피를 마시는 사람의 확률을 구할 때, 아래 두 개의 식 중 어떤 것을 사용해야 할까?
공식1: P(커피) * P(암) = 0.76 * 0.047 = 0.03572
공식2: P(커피|암) * P(암) = 0.85 * 0.047 = 0.03995
암에 걸린 사람에게만 이 확률이 적용된다면 '공식2'를 사용하는게 더 구체적이며 현재 조건에 부합된다. (결합 확률에 이미 P(암)이 포함되어 있으므로)
<어떤 사람이 암에 걸렸으면서 커피를 마실 확률>
P(커피 AND 암) = P(커피|암)*P(암) = 0.85*0.047 = 0.0399
<커피를 마시는 사람이 암에 걸릴 확률>
P(암|커피)와 P(커피)를 곱하면 커피를 마시는 사람이 암에 걸릴 확률을 구할 수 있다.
P(암|커피)*P(커피) = 0.0526 * 0.76 = 0.0399
조건부 확률이 없다면 P(커피)와 P(암)을 곱하는 것이 최선이다.
P(커피) * P(암) = 0.76 * 0.047 = 0.03572
◆ 사건 B가 사건 A에 영향을 미치지 않는 경우 조건부 확률
이는 P(A|B) = P(A) 이며 사건 B가 발생해도 사건 A의 발생 가능성에 아무런 차이가 없다는 의미이다.
이때에는 결합 확률 공식이 아래와 같다.
P(A AND B) = P(A|B) * P(B)
◆ 합 확률과 조건부 확률
사건 A 또는 B가 발생할 확률을 계산하고 싶지만, A가 B의 확률에 영향을 미칠 수 있는 경우 덧셈 법칙을 아래와 같이 수정한다.
P(A OR B) = P(A)+P(B)-P(A|B)*P(B)
[출처]
개발자를 위한 필수 수학
나무위키
위키백과
보건복지부
연합뉴스
'[파이썬 Projects] > <파이썬 - 수학 | 통계학>' 카테고리의 다른 글
[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.2) - 1 (0) | 2024.10.04 |
---|---|
[개발자를 위한 수학] 확률 - 이항 분포, 베타 분포 (+파이썬) (0) | 2024.10.04 |
[통계학] 자료 정리 - 2 (1) | 2024.10.03 |
[통계학] 자료 정리 - 1 (4) | 2024.10.02 |
[개발자를 위한 수학] 미분, 적분 (+파이썬) (5) | 2024.10.02 |