Today I Learned (TIL)/Python

[TIL] 통계학 기초 - 2주차(2)

신짜린 2024. 8. 1. 16:29

4. 정규분포

 종 모양의 대칭 분포로 대부분의 데이터가 평균 주위에 몰려있는 분포를 말한다. 평균을 중심으로 좌우 대칭이며 평균에서 멀어질수록 데이터의 빈도가 감소한다.

 키와 몸무게, 시험점수 등과 같은 상황에서 관찰된다.

 

5. 긴 꼬리 분포

 대부분의 데이터가 분포의 한쪽 끝에 몰려있고 반대쪽은 긴 꼬리가 이어지는 형태의 분포이다. 정규분포와 달리 대칭적이지 않고 비대칭적인 것이 특징이다.

 특정한 하나의 분포를 의미하지 않으며 여러 종류의 분포(파레토 분포, 지프의 법칙, 멱함수)를 포함할 수 있다.

 소득분포, 온라인쇼핑, 도서판매(소량의 베스트셀러 도서 - 다량의 비인기 도서)와 같은 일부가 전체적으로 큰 영향을 미치는 경우에 볼 수 있다. 

# 긴 꼬리 분포 생성 (예: 소득 데이터)
long_tail = np.random.exponential(1, 1000)

# 히스토그램으로 시각화
plt.hist(long_tail, bins=30, density=True, alpha=0.6, color='b')
plt.title('long tail distribution histogram')
plt.show()

 

6. 스튜던트 t분포

 t분포는 모집단의 표준편차를 알 수 없고 표본의 크기가 작은 경우에 사용되는 분포이다. 정규분포와 유사하지만 표본의 크기가 작을수록 꼬리가 두꺼워지는 특징이 있다. 자유도(표본의 크기와 관련 있는 값 v)가 커질수록 정규분포에 가까워진다.

 작은 표본의 평균을 비교하거나 약물 시험과 같은 데이터가 적은 경우에 사용한다.

# 스튜던트 t 분포 생성
t_dist = np.random.standard_t(df=10, size=1000)

# 히스토그램으로 시각화
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()

 

7. 카이제곱분포

 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포이다. 자유도(표본의 크기와 관련 있는 값 k)에 따라 모양이 달라지고 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 '완벽하게 서로 다른 질적 자료'일 때 또는 범주형 데이터 분석에 사용한다.

 두 범주형 변수 간의 관계가 있는지 확인할 때(성별과 직업 선택 간의 독립성을 검토, 성별이 후보 지지율에 영향을 끼치는지 검토)나 관측한 값들이 특정 분포에 해당하는지 검정할 때(주사위의 각 면이 동일한 확률로 나오는지 검토) 사용한다.

# 카이제곱분포 생성
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()

 

8. 이항분포

 연속된 값을 가지지 않고 특정한 정수 값만을 가질 수 있어 이항분포는 연속적으로 그려지지 않는다. 이항분포처럼 연속된 값을 가지지 않는 분포는 이산형 분포라고 지칭하기도 한다.

 성공/실패와 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포이다. 독립적인 시행이 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()

 

9. 푸아송분포

 단위 시간 또는 단위 면적 당 발생하는 사건의 수를 모델링할 때 사용하는 분포로 푸아송 분포는 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지를 나타낸다.

 평균 발생률 λ가 충분히 크다면 정규분포에 근사하며 푸아송분포도 이항 분포처럼 연속된 값을 가지지 않기 때문에 이 분포도 역시 이산형 분포에 해당된다.

 콜센터, 교통사고, 문자 메시지, 웹사이트 트래픽 등과 같은 특정 공간이나 특정 시간에 사건이 발생하는 경우에 사용된다.

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()

 

10. 분포 정리

 데이터 수가 많아지면 정규분포에 수렴(중심극한정리)하게 되어 데이터 수가 많으면 바로 정규분포로 가정한다. 하지만, 데이터가 적은 경우 상황에 맞는 분포를 선택해야 하며 특히 긴 꼬리 분포는 데이터가 아무리 많아도 정규분포가 되지 않는다.

'Today I Learned (TIL) > Python' 카테고리의 다른 글

[TIL] Python 챌린지 - 3, 4회차  (0) 2024.08.02
[TIL] 통계학 기초 - 3주차  (0) 2024.08.02
[TIL] 통계학 기초 - 2주차(1)  (1) 2024.08.01
[TIL] 통계학 기초 - 1주차  (0) 2024.08.01
[TIL] Python 베이직 - 5회차  (0) 2024.07.30