python - Cumulative normal distribution
최대 1 분 소요
python - Cumulative normal distribution function
- python에서 누적 정규 분포 함수(CDF, Cumulative normal Distribution Function)을 계산하는 방법을 정리했습니다.
scipy를 이용하면 다음과 같습니다.
from scipy.stats import norm
mu = 0
sigma = 1
# P(z < 1.96)
print(norm.cdf(1.96, mu, sigma))
# 0.9750021048517795
print(norm.cdf(2.58, mu, sigma))
# 0.9950599842422293
mu = 10
sigma = 20
x = 61.6
# X ~ norm(10, 20)
# Z ~ norm(0, 1)
z = (x - mu) / sigma
print(norm.cdf(z, 0, 1))
# 0.9950599842422293
scipy를 사용하지 않고 직접 만들어서 처리하는 경우에는 다음과 같죠.
math.erf는 Error Function을 의미하는데 일단은 sigmoid function라고 생각하면 됩니다. 기본적으로 normal dist.의 CDF와 errof function는 같은 성질을 가지기 때문에, Normal CDF를 구할 때는 erf를 사용하죠.
def cumulative_norm_dist(x, mu, sigma):
from math import erf, sqrt
# erf: Gauss Error functino
# 그냥 sigmoid function이라고 이해하고 있어도 상관없습니다.
r = (x - mu) / (sigma * sqrt(2))
r = 1 + erf(r)
return r * 0.5
print(cumulative_norm_dist(1.96, 0, 1))
# 0.9750021048517796
print(cumulative_norm_dist(2.58, 0, 1))
# 0.9950599842422294
Reference
댓글남기기