TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 - 수학 | 통계학>

[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.6)-2

by 기록자_Recordian 2024. 10. 11.
728x90
반응형
★ 시작에 앞서 

 

해당 내용은 '<현대통계학-제6판>, 다산출판사, 2024' 에 나와있는 챕터별 연습문제를 교재를 응용하여 풀이하고, 수학적인 문제에 대한 답변을 파이썬으로 구현해보기 위해 작성하는 글이다.

해당 답변을 구현하는 방식은 답안지 없이 필자가 스스로 구현하는 것이므로, 정확한 (혹은 가장 효과적인) 답변이 아닐 수 있다. 이 글의 목적은 통계학 공부와 파이썬 프로그래밍 언어 공부를 동시에 하고자 함이며, 통계학을 공부하고 싶으신 분들은 해당 교재를 구매하는 것을 추천한다.

또한, 연습문제 번호 및 문제 내용은 필자가 임의대로 작성하였으며, 교재와는 다를 수 있다.

 

잘못된 부분이 있다면 언제든 피드백 부탁 드립니다! 감사합니다


이전 내용
 

[파이썬+통계학] 현대통계학 연습문제 파이썬 구현(ch.6)-1

★ 시작에 앞서 ★ 해당 내용은 ', 다산출판사, 2024' 에 나와있는 챕터별 연습문제를 교재를 응용하여 풀이하고, 수학적인 문제에 대한 답변을 파이썬으로 구현해보기 위해 작성하는 글이다.해

puppy-foot-it.tistory.com


챕터6 주요 개념: 베르누이시행, 이항분포, 다항분포, 초기하분포

 

챕터6 연습문제2

 

Q. 모 인터넷 사이트에서 진행하는 경품 응모 행사에서 경품에 당철될 확률이 20%고, 중복응모가 가능하여 4번을 응모한다고 하면,

1) 한 번도 당첨되지 않을 확률은?

2) 2번 이내로 당철될 확률은?

# 인터넷 사이트 응모
import numpy as np
from math import comb 

# 성공 확률, 시행 횟수, 성공 횟수 정의
p = 0.2  # 성공 확률
n = 4    # 시행 횟수 (응모 수)

# 실패 확률
q = 1 - p

# 2번 이내로 당첨될 확률을 저장할 변수
total_prob = 0

# 성공 횟수를 0부터 2까지 반복
for x in range(0, 3):
    p_x = comb(n, x) * (p ** x) * (q ** (n - x))  # 이항 확률 계산
    total_prob += p_x #0~2회의 확률 더함
    print(f'성공 횟수 {x}일 때의 확률: {p_x:.4f}')

print('성공 횟수 2회 이내의 확률:{:.4f}'.format(total_prob))

- for x in range(0, 3): 성공 횟수 : x를 0, 1, 2로 반복.
- 이항 확률 계산: 각 성공 횟수에 대해 이항 계수를 구하고, 이항분포 공식을 사용하여 확률을 계산.

- 성공 횟수 2회 이내의 확률은 0회~2회의 확률을 모두 더한 값.


챕터6 연습문제3

 

Q. 어떤 주머니에 10개의 공이 들어 있는데, 그중에 빨간 공이 3개, 파란 공이 4개, 노란 공이 3개가 들어있다고 하자. 이대 복원추출의 방법으로 1개씩 총 6번에 걸쳐 공을 선택했을 때, 순서와 상관없이 빨간 공, 파란 공, 노란 공을 각각 2번 씩 선택했을 확률을 계산하라.

각각 공이 나타날 확률 - 빨간 공: 0.3, 파란 공: 0.4, 노란 공: 0.3

 

▶ k1, k2, k3 = 각각 2 (각각의 사건이 발생하는 횟수)

p1 = 0.3, p2=0.4, p3=0.3 (각각의 공이 뽑힐 확률)

n = 6 (시행횟수)

# 빨강, 파랑, 노랑 공 뽑을 확률
import math

# 각 공을 뽑을 확률
p_red = 0.3
p_blue = 0.4
p_yellow = 0.3

n = 6 # 시행횟수

# 사건 발생 횟수
k_red = 2
k_blue = 2
k_yellow = 2

# 다항분포 확률 계산
prob = (math.factorial(n) /
        (math.factorial(k_red) * math.factorial(k_blue) *math.factorial(k_yellow))) * (p_red ** k_red) * (p_blue ** k_blue) * (p_yellow ** k_yellow)

print('각각의 공을 2번씩 선택할 확률:{:.4f}'.format(prob))

 

scipy.stats의 multinomial.pmf 함수를 사용하면 다항분포 확률을 쉽게 구할 수 있다.

# scipy 이용하여 더 간단하게
from scipy.stats import multinomial

k = [2, 2, 2]
p = [0.3, 0.4, 0.3]
n = 6

proba = multinomial.pmf(k, n, p)
print('사이파이를 이용한 확률:{:.4f}'.format(proba))


챕터 6 연습문제 4

 

Q. 교양과목을 듣는 어느 강의실의 학생 수는 100명이다. 이들 중 1학년은 20명, 2학년은 20명, 3학년과 4학년은 각각 30명이라고 한다. 복원추출의 방법으로 1명씩 총 12번에 걸쳐 학생을 선발할 때 순서와 상관없이 각 학년 학생이 3명씩 뽑힐 확률은?

import math
# 각 학년 비율
p_1 = 0.2
p_2 = 0.2
p_3 = 0.3
p_4 = 0.3

k_1 = 3
k_2 = 3
k_3 = 3
k_4 = 3

n = 12

# 다항분포 확률 계산
prob = (math.factorial(n) /
        (math.factorial(k_1) * math.factorial(k_2) *math.factorial(k_3) *math.factorial(k_4))) * (p_1 ** k_1) * (p_2 ** k_2) * (p_3 ** k_3) * (p_4 ** k_4)

print(prob)

 

이 역시 scipy,stats 를 사용하여 간단하게 풀어본다.

# 교양과목 학생
from scipy.stats import multinomial

k = [3, 3, 3, 3]
p = [0.2, 0.2, 0.3, 0.3]
n = 12

proba = multinomial.pmf(k, n, p)
print ('각 학년 학생이 3명씩 뽑힐 확률:{:.4f}'.format(proba))


scipy.stats
출처: 사이파이 커뮤니티 

 

SciPy는 여러개의 서브 패키지로 구성되어 있는데 그 중 scipy.stats 서브패키지는 여러가지 확률 분포 분석을 위한 기능을 제공한다. 이 모듈에는 다수의 확률 분포, 요약 및 빈도 통계, 상관 함수 및 통계 검정, 마스크 통계, 커널 밀도 추정, 준 몬테카를로 기능 등이 포함되어 있다.

통계는 매우 큰 영역이며, SciPy의 범위를 벗어나 다른 패키지에서 다루는 주제가 있다. 가장 중요한 주제 중 일부는 다음과 같다.

 

  • 통계 모델 : 회귀, 선형 모델, 시계열 분석, .에서도 다루는 주제에 대한 확장 scipy.stats.
  • 판다스 : 표 형식 데이터, 시계열 기능, 다른 통계 언어와의 인터페이스.
  • PyMC : 베이지안 통계 모델링, 확률적 기계 학습.
  • scikit-learn : 분류, 회귀, 모델 선택.
  • Seaborn : 통계 데이터 시각화.
  • rpy2 : Python에서 R로의 브리지.

보다 자세한 내용은 하단의 링크 확인

 

Statistical functions (scipy.stats) — SciPy v1.14.1 Manual

Statistical functions (scipy.stats) This module contains a large number of probability distributions, summary and frequency statistics, correlation functions and statistical tests, masked statistics, kernel density estimation, quasi-Monte Carlo functionali

docs.scipy.org


다음 내용

 

728x90
반응형