[파이썬] scipy에서 확률 분포

확률 분포는 통계학과 확률 이론에서 중요한 개념입니다. 주어진 사건이 발생할 확률을 모델링하고 예측하는데 사용됩니다. Python은 많은 과학 및 통계 계산에 널리 사용되는 강력한 도구로서, scipy 라이브러리를 사용하여 다양한 종류의 확률 분포를 손쉽게 다룰 수 있습니다.

scipy 라이브러리

scipy는 과학 및 통계 계산에 사용되는 파이썬 기반의 라이브러리입니다. 이 라이브러리에는 확률 분포, 최적화, 선형 대수, 신호 및 영상 처리 등 다양한 기능이 포함되어 있습니다. 확률 분포를 다루기 위해 scipy.stats 모듈을 사용할 수 있습니다.

정규 분포 (Normal Distribution)

정규 분포는 연속형 확률 분포의 가장 잘 알려진 예입니다. 이 분포는 중심 극한 정리에 따라 많은 경우에 적용됩니다. scipy에서는 norm 클래스를 사용하여 정규 분포를 모델링할 수 있습니다.

import numpy as np
from scipy.stats import norm

# 평균이 0이고 표준편차가 1인 정규 분포 생성
normal_dist = norm(loc=0, scale=1)

# 확률 밀도 함수(PDF)의 예시
x = np.linspace(-5, 5, 100)
pdf = normal_dist.pdf(x)

# 확률 밀도 함수 그래프
plt.plot(x, pdf)
plt.xlabel('x')
plt.ylabel('PDF')
plt.title('Normal Distribution')
plt.show()

이항 분포 (Binomial Distribution)

이항 분포는 독립적인 반복 시행에서 두 가지 결과 중 하나가 나타나는 경우에 사용됩니다. scipy에서는 binom 클래스를 사용하여 이항 분포를 모델링할 수 있습니다.

from scipy.stats import binom

# 성공 확률이 0.5인 이항 분포 생성 (10번 시행)
binomial_dist = binom(n=10, p=0.5)

# 확률 질량 함수(PMF)의 예시
x = np.arange(0, 11)
pmf = binomial_dist.pmf(x)

# 확률 질량 함수 그래프
plt.stem(x, pmf)
plt.xlabel('x')
plt.ylabel('PMF')
plt.title('Binomial Distribution (n=10, p=0.5)')
plt.show()

적합도 검정 (Goodness-of-fit test)

확률 분포를 사용하여 데이터가 해당 분포에 적합한지 확인할 수 있습니다. 이를 적합도 검정이라고 합니다. scipy에서는 chisquare 함수를 사용하여 카이제곱 검정을 수행할 수 있습니다.

from scipy.stats import chisquare

# 예측 값
expected_values = [10, 20, 30]

# 실제 값
observed_values = [8, 22, 35]

# 적합도 검정 수행
test_statistic, p_value = chisquare(observed_values, expected_values)

print(f"Test statistic: {test_statistic}")
print(f"P-value: {p_value}")

이상적인 경우, 적합한 분포일 때 예측 값과 실제 값이 일치하므로, 검정 결과의 p-value는 0.05보다 크거나 같아야 합니다.

scipy에서 제공하는 다른 분포에 대한 자세한 내용은 공식 문서를 참조하세요.

이제 scipy를 사용하여 확률 분포를 조사하고 모델링할 수 있는 능력을 갖추었습니다. 이를 통해 데이터 분석 및 통계 모델링에 유용하게 사용할 수 있습니다.