통계학 공부

스튜던트t분포, 카이제곱분포, 이항분포, 푸아송분포

myun0506 2026. 1. 10. 22:21

- 스튜던트 t

출처: 위키백과

 

자유도가 커질수록 정규분포에 가까워짐 (여기서 자유도란, 표본의 크기와 관련이 있는 값이라고 이해하기)

t 분포는 모집단의 표준편차를 알 수 없고 표본의 크기가 작은 경우(일반적으로 30미만)에 사용됨

정규분포와 유사하지만, 표본의 크기가 작을수록 꼬리가 두꺼워짐 (표본의 크기가 커지면 정규분포에 가까워짐)

# 스튜던트 t 분포 생성
t_dist = np.random.standard_t(df=10, size=1000)
# for t in t_dist:
#     print(f'{t} -----\n')

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

# 스튜던트 t 분포 곡선 추가
x = np.linspace(-4, 4, 100)
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('student t distribution histogram')
plt.show()

 

  • df는 자유도 (degree of freedom)을 의미하고, t-분포의 모양을 결정하는 파라미터로 표본을 생성하는 개수와는 관계 없음
  • size는 생성할 난수의 개수로 t-분포를 따르는 숫자 1000개를 생성하겠다는 의미
  • stats.t.pdf(): student-t 분포의 확률밀도함수 값을 계산하는 함수. 즉, 특정 값 x에서, 그 분포가 갖는 확률 밀도는 얼마인지 계산해주는 함수(이 샘플이 따라야하는 이상적인 수학적 곡선)

 

- 카이제곱분포

 

여기서 k값은 자유도 (여기서 자유도란 표본의 크기와 관련이 있는 값 정도로 이해하기)

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

자유도에 따라 모양이 달라짐

상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 '완벽하게 서로 다른 질적 자료'일 때 활용

ex) 성별이나 나이에 따른 선거 후보 지지율

  • 독립성 검정
    • 두 범주형 변수 간의 관계가 있는지 확인할 때 사용
    • ex) 성별과 직업 선택 간의 독립성 검토 / 성별이 후보 지지율에 영향을 끼치는지 검토
  • 적합도 검정
    • 관측한 값들이 특정 분포에 해당하는지 검정할 때 사용
    • ex) 주사위의 각 면이 동일한 확률로 나오는지 검토
# 카이제곱분포 생성
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()

 

- 이항분포

결과가 2개가 나오는 상황일 때 사용하는 분포 (ex. 성공/실패)

이항분포는 연속된 값을 가지지 않고, 특정한 정수 값만을 가질 수 있음. 예를들어, 동전을 10번 던질 때 앞면이 나오는 횟수는 0,1,2,...,10과 같은 정수임. 따라서 이항분포가 연속적으로 그려지지 않음

이런 이항분포처럼 연속된 값을 가지지 않는 분포를 이산형 분포라고 지칭하기도 함.

독립적인 시행이 n번 반복되고, 각 시행에서 성공과 실패 중 하나의 결과만 가능한 경우를 모델링하는 분포

성공 확률을 p라고 할 때, 성공의 횟수를 확률적으로 나타냄

# 이항분포 생성 (예: 동전 던지기 10번 중 앞면이 나오는 횟수)
binom_dist = np.random.binomial(n=10, p=0.5, size=1000)

# 히스토그램으로 시각화
plt.hist(binom_dist, bins=10, density=True, alpha=0.6, color='y')
plt.title('이항 분포 히스토그램')
plt.show()

- 푸아송분포

희귀한 사건이 발생할 때 사용하는 분포

 

연속된 값을 가지지 않기 때문에 이항 분포와 같이 푸아송 분포도 역시 이산형 분포에 해당

평균 발생률 λ가 충분히 크다면 정규분포에 근사

평균 발생률 λ란, 주어진 시간이나 공간에서 사건이 몇번 발생했는지 (횟수)

푸아송 분포는 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지를 나타냄

  • 실제 사용 예시
    • 특정 시간동안 콜센터에 도착하는 전화 통화의 수
    • 특정 도로 구간에서 일정 기간 동안 발생하는 교통사고의 수
    • 특정 시간 동안 수신되는 문자 메시지의 수
    • 특정 시간 동안 웹사이트에 도착하는 방문자의 수
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()

# 8번 사건이 발생할 확률 계산
k = 8
prob = poisson.pmf(k,lambda_value)
print(f'λ={lambda_value}일 때 사건이 정확히 {k}번 발생할 확률: {prob:.5f}')

 

  • lambda_value: 일정 시간 또는 공간 동안 발생하는 사건의 평균 횟수 (Mean number of events), x 범위(0~15) 구간에서 평균적으로 4건 정도 발생한다는 뜻

 

- 분포 총 정리

결국 이항분포든, 카이제곱분포든, 스튜던트t분포든, 푸아송분포든 데이터 수가 엄청 많아지면 정규분포에 수렴 (중심극한정리)

but, long tail distribution은 데이터가 많아도 정규분포가 되지 않는 분포!

  • 데이터 수가 충분하다 → (무조건) 정규분포에 근사
  • 데이터 수가 작다 → 스튜던트 t 분포
  • 일부 데이터가 전체적으로 큰 영향을 미친다 → 롱 테일 분포 (파레토 분포)
  • 범주형 데이터의 독립성 검정이나 적합도 검정 →카이 제곱 분포
  • 결과가 두 개(성공 or 실패)만 나오는 상황 → 이항 분포
  • 특정 시간, 공간에서 발생하는 사건 → 푸아송 분포