이 문제는 이항분포(Binomial Distribution) 를 기반으로 확률을 계산해야 한다. 이항분포에서 특정 횟수만큼 성공할 확률은 확률 질량 함수(PMF, Probability Mass Function) 를 이용하여 계산한다.
1. 이항분포의 확률 질량 함수 (PMF)
이항분포 X∼Bin(n,p) 에서 정확히 k 번 성공할 확률은 다음 공식으로 계산됩니다.
여기서:
- n= → 총 시행 횟수 (동전 던지기 100번)
- k= → 목표 성공 횟수 (앞면이 60번 나오는 경우)
- p= → 한 번 던질 때 앞면이 나올 확률
파이썬 코드를 작성해서 실행해보았는데 오류가 나왔다. 파이썬 코드를 짠 다음 아래 커맨드 화면에서 python binom_test1.py를 실행하니 아래처럼 ModuleNotFoundError: No module named 'scipy'라고 나왔다. scipy 모듈을 아래 나오는 명렁으로 설치했다.
>pip install scipy
그후 다시 실행하면 답이 나왔다. 0.010843866711637958
3. 왜 확률이 1.08%밖에 안 되나?
- 가장 확률이 높은 값(중앙값)은 50번 앞면이 나오는 경우이다.
- 60번 이상이 나오려면 상당히 편향된 결과가 나와야 하므로 확률이 낮아진다.
- 확률 분포가 대칭적이므로 40번 나오는 경우(앞면 40, 뒷면 60)도 비슷한 확률을 가지게 된다.
즉, 100번 던질 때 앞면이 정확히 60번 나올 확률은 1.08%로 매우 희귀한 사건임을 알 수 있다.
4. 파이썬 코드 뜯어보자
from scipy.stats import binom
- scipy.stats 모듈에서 binom (이항 분포 관련 함수)을 가져온다.
- 이를 통해 이항 분포의 확률 질량 함수(PMF) 및 누적 분포 함수(CDF)를 사용할 수 있다.
n = 100 # 시행 횟수
p = 0.5 # 앞면이 나올 확률
x = 60 # 앞면이 60번
prob_60 = binom.pmf(x, n, p)
- binom.pmf(k, n, p) 함수는 P(X = k), 즉 정확히 k 번 성공할 확률을 계산합니다.
- 여기서 binom.pmf(60, 100, 0.5) 는 동전을 100번 던졌을 때 정확히 60번 앞면이 나올 확률을 계산합니다.
- PMF(확률 질량 함수, Probability Mass Function)는 개별 확률 값을 반환한다.
print(prob_60) # 계산된 확률 값을 출력
※ python3 명령어로 python3 binom_test1.py 로 하면 당연히 모듈이 없다고 오류가 나는데 이런 경우에는
python3 -c "import sys; print(sys.executable)" 입력해서 C:\Users\YourName\AppData\Local\Programs\Python\Python39\python.exe 이런 식으로 python3 명령문이 참조하는 위치의 영역을 찾고 여기에 scipy 모듈을 다운로드해서 넣어주거나 아니면 간편하게 cmd상에서
python3 -m pip scipy를 하면 된다.
그러면 이렇게 python3 명령문으로도 잘 작동된다.
'수학' 카테고리의 다른 글
중앙화(Centering)과 척도화(Scaling)을 통한 표준화 파이썬 코드 예시(2) (0) | 2025.03.03 |
---|---|
중앙화(Centering)과 척도화(Scaling)을 통한 표준화 파이썬 코드 예시 (0) | 2025.03.03 |
중심화와 척도화를 통한 표준화 (0) | 2025.03.03 |
동전던지기와 이항분포(Binomial Distribution) 그리고 중앙극한정리 (0) | 2025.02.27 |