본문 바로가기
수학

동전던지기를 100번 수행해서 앞면이 60번 나올 확률과 그 이해(1)

by Saltycrocodile 2025. 3. 3.

이 문제는 이항분포(Binomial Distribution) 를 기반으로 확률을 계산해야 한다. 이항분포에서 특정 횟수만큼 성공할 확률은 확률 질량 함수(PMF, Probability Mass Function) 를 이용하여 계산한다.

 

1. 이항분포의 확률 질량 함수 (PMF)

이항분포 XBin(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 명령문으로도 잘 작동된다.