[업무 지식]/Statistics

[분포] 분포 정리하기

에디터 윤슬 2024. 11. 11. 22:54

정규분포

  • 대부분의 데이터가 평균 주변에 몰려 있으며, 평균에서 멀어질수록 빈도가 줄어듦
# 정규분포 생성
normal_dist = np.random.normal(170, 10, 1000)

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

# 정규분포 곡선 추가
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = stats.norm.pdf(x, 170, 10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('normal distribution histogram')
plt.show()

긴 꼬리 분포

  • 대부분의 데이터가 분포의 한쪽 끝에 몰려 있고, 반대쪽으로 긴 꼬리가 이어지는 형태의 분포
  • 정규분포와 달리 대칭적이지 않고 비대칭적
  • 특정한 하나의 분포를 의미하지 않으며 여러 종류의 분포(예: 파레토 분포, 지프의 법칙, 멱함수)를 포함
  • 소득 분포, 웹사이트 방문자 수, 베스트셀러 판매량 등에서 관찰
  • 예시) 잘 팔리는 상위 20%가 전체 매출의 80%를 차지
# 긴 꼬리 분포 생성 (예: 소득 데이터)
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()

스튜던트 t - 분포

  • 스튜던트 t 분포
    • t분포는 모집단의 표준편차를 알 수 없고 표본의 크기가 작은 경우(일반적으로 30 미만)에 사용되는 분포
    • 정규분포와 유사하지만, 표본의 크기가 작을수록 꼬리가 두꺼워지는 특징
    • 표본 크기가 커지면 정규분포에 가까워진다
  • 데이터가 적은 경우 사용
    • 두 그룹의 평균 시험 점수를 비교할 때 t검정을 사용하여 두 그룹의 평균이 유의미하게 다른지 검토
# 스튜던트 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축 범위 설정
x = np.linspace(-4, 4, 100)

# 자유도(df = 10)를 가진 스튜던트 t 분포의 확률 밀도 함수 값을 계산
# 확률밀도함수(pdf)
# 'k' Matplotlib에서 검은색을 의미
p = stats.t.pdf(x, df=10)
plt.plot(x, p, 'k', linewidth=2)
plt.title('student t distribution histogram')
plt.show()

 

PDF, 확률밀도함수
  • PDF(Probability Density Function)는 확률 밀도 함수를 의미합니다. 이는 연속 확률 분포에서 특정 값이 나올 확률을 나타내는 함수입니다.
  • PDF는 특정 값 자체의 확률을 직접적으로 제공하지 않지만, 해당 값 주변의 구간에서 확률을 계산할 수 있도록 도와줍니다. 예를 들어, 스튜던트 t 분포에서 x 값이 특정 범위에 있을 확률은 PDF 곡선 아래의 면적을 계산하여 구할 수 있습니다.
  • 위 그래프에서 검은색 곡선이 바로 스튜던트 t 분포의 PDF입니다. 이 곡선은 평균을 중심으로 대칭적인 종 모양을 가지며, 자유도(df)에 따라 모양이 달라집니다.
linespace
  • np.linspace(start, stop, num) 함수는 NumPy에서 제공하는 함수로, 지정된 범위 내에서 균등하게 분포된 숫자들을 생성합니다.
    • start: 시작 값 (여기서는 -4)
    • stop: 끝 값 (여기서는 4)
    • num: 생성할 숫자의 개수 (여기서는 100)

카이제곱분포

  • 범주형 데이터의 독립성 검정이나 적합도 검정에 사용되는 분포
  • 자유도에 따라 달라지는 모양
  • 상관관계나 인과관계를 판별하고자 하는 원인의 독립변수가 '완벽하게 서로 다른 질적 자료'일 때 활용
    • 성별이나 나이에 따른 선거 후보 지지율
  • 범주형 데이터 분석에 사용
  • 독립성 검정
    • 두 범주형 변수 간의 관계가 있는지 확인할 때 사용
    • 예시) 성별과 직업 선택 간의 독립성을 검토
  • 적합도 검정 
    • 관측한 값들이 특정 분포에 해당하는지? 검토할 때
    • 예시) 주사위의 각 면이 동일한 확률로 나오는지 검토
# 카이제곱분포 생성
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개 나오는 상황일 때 사용하는 분포
  • 연속된 값을 가지지 않고, 특정한 정수 값만을 가질 수 있다(이산형 분포)
  • 성공/실패와 같은 두 가지 결과를 가지는 실험을 여러 번 반복했을 때 성공 횟수의 분포
  • 독립적 시행이 n번 반복되고, 각 시행에서 성공과 실패 중 하나의 결과만 가능한 경우를 모델링하는 분포
  • 실험 횟수(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()

푸아송 분포

  • 단위 시간 또는 단위 면적 당 발생하는 사건의 수를 모델링할 때 사용하는 분포
  • 푸아송 분포는 평균 발생률 λ를 가진 사건이 주어진 시간 또는 공간 내에서 몇 번 발생하는지를 나타낸다
  • 푸아송 분포는 단위 시간 또는 단위 면적당 희귀하게 발생하는 사건의 수를 모델링하는 데 적합
  • 연속된 값을 가지지 않기 때문에 이산형 분포에 해당
  • 평균 발생률 λ가 충분히 크다면 정규분포에 근사
  • 평균 발생률이란 주어신 시간이나 공간에서 사건이 몇번 발생했는지?
    • ex) 한 시간동안 콜센터에 전화오는 건수가 10건이면 λ는 10
  • 문자 메시지
    • 특정 시간 동안 수신되는 문자 메시지의 수.
  • 웹사이트 트래픽
    • 특정 시간 동안 웹사이트에 도착하는 방문자의 수.
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()