[통계/인강] 챕터2(4) - 카이제곱분포 | 이항분포 | 푸아송분포 | 분포 정리하기

💡 카이제곱 분포

1) 카이제곱 분포 : 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포

  • 자유도에 따라 모양이 다름
  • 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 '완벽하게 서로 다른 질적 자료'일 때 활용
    예: 성별이나 나이에 따른 선거 후보 지지율
✅ 카이제곱 분포에서도 "데이터의 개수가 많아질수록 정규분포를 따른다!"

카이제곱 분포 : 어떻게 사용되나?

1) 독립성 검정이나 적합도 검정이 필요할 때

  • 독립성 검정 : 두 범주형 변수 간의 관계 확인
    • 예: 성별과 직업 선택 간의 독립성을 검토 | 성별이 후보 지지율에 영향을 끼치는지 검토
  • 적합도 검정 : 관측한 값들이 특정 분포에 해당하는지 검정
    • 예: 주사위의 각 면이 동일한 확률로 나오는지 검토 | 노란색 완두와 녹색완두가 3:1의 비율이 나오는지 검토 등
# 카이제곱분포 생성
chi2_dist = np.random.chisquare(df=2, size=1000)

# 히스토그램으로 시각화
plt.hist(chi2_dist, bins=30, density=True, alpha=0.6, color='m')

# 카이제곱분포 곡선 추가
x = np.linspace(0, 10, 100)
p = stats.chi2.pdf(x, df=2)
plt.plot(x, p, 'k', linewidth=2)
plt.title('카이제곱 분포 히스토그램')
plt.show()



💡 이항분포

1) 이항분포 

  • "두 가지의 결과를 가지는 실험"을 여러 번 반복했을 때 성공 횟수의 분포
  • 동전의 앞면/뒷면, 성공/실패 등
  • 성공 확률을 p라 할 때, 성공의 횟수를 확률적으로 타나냄!  ** 실험횟수(n)와 성공확률(p)로 정의
✅ 이항분도 에서도 "데이터의 개수가 많아질수록 정규분포를 따른다."

이항분포 : 어떻게 사용될까?

  • 동전 던지기 : 동전 앞면과 뒷면
  • 품질 관리 : 제조업체가 제품의 불량률을 모니터링 할 때, 무작위 선택 100개의 제품 중 불량품의 수 ➡️ 이항분포를 따름
# 이항분포 생성 (예: 동전 던지기 10번 중 앞면이 나오는 횟수)  
binom_dist = np.random.binomial(n=10, p=0.5, size=1000)     #🔍 p는 무조건 0.5 일까?
 
# 히스토그램으로 시각화
plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
plt.title('이항 분포 히스토그램')
plt.show()



💡 푸아송 분포

1) 푸아송 분포 : "단위 시간 또는 단위 면적 당 발생하는 사건의 수"를 모델링 할 때 사용

  • 평균 발생률 λ 인 사건이 "단위 시간 또는 단위 면적 내에서 몇 번 발생"하는지
  • 희귀하게 발생하는 사건의 수

푸아송 분포 : 실제로 어떻게 사용돼?

  • 콜센터 : 특정 시간 동안 콜센터에서 도착하는 전화 통화의 수
  • 교통사고 : 특정 도로 구간에서 일정 기간 동안 발생하는 교통사고의 수
  • 문자 메세지 : 특정 시간 동안 수신되는 문자 메세지의 수
  • 웹사이트 트래픽 : 특정 시간 동안 웹사이트에 도착하는 방문자의 수
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson

# 푸아송 분포 파라미터 설정
lambda_value = 4  # 평균 발생률
x = np.arange(0, 15)  # 사건 발생 횟수 범위

# 푸아송 분포 확률 질량 함수 계산
poisson_pmf = poisson.pmf(x, lambda_value)

# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.bar(x, poisson_pmf, alpha=0.6, color='b', label=f'Poisson PMF (lambda={lambda_value})')
plt.xlabel('Number of Events')
plt.ylabel('Probability')
plt.title('Poisson Distribution')
plt.legend()
plt.grid(True)
plt.show()


📌 분포 마무리 정리


▶ 분포를 어떻게 고르면 될까?

✅ 데이터 수가 충분하다 ➡️ (무조건) 정규분포에 근사

✅ 데이터 수가 적다 ➡️ 스튜던트 t 분포

✅ 일부 데이터가 전체적으로 큰 영향을 미친다 ➡️ 롱 테일 분포 (파레토 분포)

✅ 범주형 데이터의 독립성 검정이나 적합도 검정 ➡️ 카이 제곱 분포

✅ 결과가 두 개(성공 or 실패)만 나오는 경우 ➡️ 이항 분포

✅ 특정 시간, 공간에서 발생하는 사건 ➡️ 푸아송 분포

✍️ 연습문제 

1. 모집단(population)과 표본(sample)의 차이에 대한 설명으로 옳은 것을 고르세요.

  1. 모집단은 연구 대상 전체를 의미하고, 표본은 모집단의 일부를 의미한다.
  2. 모집단은 표본의 일부이며, 표본은 모집단 전체를 의미한다.
  3. 모집단과 표본은 같은 의미를 가진다.
  4. 모집단은 표본보다 항상 작다.

➡️ 정답 및 해설

더보기

정답 1번

  1. 모집단은 표본의 일부이며, 표본은 모집단 전체를 의미한다.
  2. 모집단과 표본은 같은 의미를 가진다.
  3. 모집단은 표본보다 항상 작다.

1) 모집단은 연구 대상 전체를 의미하고, 표본은 모집단의 일부를 의미한다.

모집단은 연구 대상 전체를 의미하고, 표본은 그 모집단에서 선택된 일부를 의미합니다.

 

2. 어떤 표본의 평균이 50이고, 표본 표준편차가 10인 경우, 95% 신뢰구간을 구하세요. (표본 크기는 충분히 크다고 가정)

  • 95% 신뢰구간은 표본 평균 ± (1.96 * 표본 표준오차)로 계산됩니다.
  • 표본 표준오차는 표준편차를 표본 크기의 제곱근으로 나눈 값입니다.
더보기
# 문제2번
# 표본 평균과 표본 표준편차 계산
sample_mean = 50
sample_std = 10

# 95% 신뢰구간 계산
conf_interval = stats.t.interval(0.95, df=len(sample)-1, loc=sample_mean, scale=sample_std/np.sqrt(len(sample)))
print(f'표본 평균: {sample_mean}')
print(f'95% 신뢰구간: {conf_interval}')

>>> 결과: 표본 평균: 50
         95% 신뢰구간: (np.float64(48.015783048491315), np.float64(51.984216951508685))

 

5. 긴 꼬리 분포(Long Tail Distribution)의 특징으로 옳지 않은 것을 고르세요.

  1. 데이터의 대부분이 낮은 빈도 값을 갖는다.
  2. 꼬리 부분에 많은 데이터가 분포되어 있다.
  3. 꼬리가 길어질수록 정규분포에 가까워진다.
  4. 일부 항목이 매우 높은 빈도 값을 가진다.
더보기

정답 및 해설

  • 정답은 3번
    1. 데이터의 대부분이 낮은 빈도 값을 갖는다.
    2. 꼬리 부분에 많은 데이터가 분포되어 있다.
    3) 꼬리가 길어질수록 정규분포에 가까워진다.
    1. 일부 항목이 매우 높은 빈도 값을 가진다.
  • 긴 꼬리 분포는 데이터의 대부분이 낮은 빈도 값을 가지며, 꼬리 부분에 많은 데이터가 분포되어 있습니다.
  • 긴 꼬리 분포는 꼬리가 길어진다고 해서 정규분포에 가까워지지 않습니다.

 

6. 스튜던트 t 분포를 사용하는 이유는 무엇인가요?

  1. 표본 크기가 작을 때 사용한다.
  2. 모집단이 정규분포가 아닐 때 사용한다.
  3. 모집단 표준편차를 알 때 사용한다.
  4. 모집단 평균을 알 때 사용한다.
더보기

정답 및 해설

  • 정답은 1번
    1. 모집단이 정규분포가 아닐 때 사용한다.
    2. 모집단 표준편차를 알 때 사용한다.
    3. 모집단 평균을 알 때 사용한다.
  • 1) 표본 크기가 작을 때 사용한다.
  • 스튜던트 t 분포는 표본 크기가 작고, 모집단 표준편차를 모를 때 사용됩니다.

끝.