통계 실습_PRACTICE2 복습

3eo·2026년 2월 9일

누적분포함수 (CDF:CUMULATIVE DISTRIBUTION FUNCTION)

x 이하(이상)가 될 확률 누적 합

  • 단조 증가(절대 감소하지 않음)

CDF를 활용한 확률 계산

계산하고 싶은 것공식scipy.stats 메서드
P(Xx)P(X \leq x)F(x)F(x)dist.cdf(x)
P(X>x)P(X > x)1F(x)1 - F(x)dist.sf(x)
P(a<Xb)P(a < X \leq b)F(b)F(a)F(b) - F(a)dist.cdf(b) - dist.cdf(a)
P(Xx)P(X \geq x)1F(x1)1 - F(x-1) (이산형)dist.sf(x-1) 또는 1 - dist.cdf(x-1)

cf. PPF : PERCENT POINT FUNCTION (백분위 함수)

  • CDF의 역함수
  • stats.poisson.ppf(확률, mu) : 해당 확률을 만족하는 최소 k값
  • k값이면 해당 확률만큼은 목표 안전성 확보

포아송 분포

단위 시간/공간 당 발생 횟수

  • 기대값 = 분산 = LAMBDA
  • e.g. 콜센터 시간 당 통화량, 웹사이트 분당 방문자, 시간 당 교통사고
# scipy.stats를 이용한 포아송 분포
lambda_calls = 5 # 시간 당 평균 통화량
poisson_dist = stats.poisson(mu=lambda_calls)

# 정확히 5통이 걸려올 확률(이산)
# pmf = Probability Mass Function (확률질량함수)
print(poisson_dist.pmf(5))

# 3통 이하가 걸려올 확률
# cdf = Cumulative Distribution Function (누적분포함수)
print(poisson_dist.cdf(3))

# 10통 이상 걸려올 확률
print(poisson_dist.sf(9))

# 기대값과 분산
print(poisson_dist.mean())
print(poisson_dist.var())

pdf = uni_dist.pdf(170, loc=173, scale=6) ; 확률밀도함수 (연속) Probability Density Fuction

균등 분포 (UNIFORM DISTRIBUTION)

모든 값이 동일한 확률을 가짐

a, b = 0, 10  # 대기 시간 범위: 0분 ~ 10분

# scipy.stats로 균등 분포 생성
uni_dist = stats.uniform(loc=a, scale=b-a)

지수 분포 (EXPONENTIAL DISTRIBUTION)

사건 간 대기 시간

e.g. 고객 도착 간격, 기계 고장까지 시간, 전화 통화 간격
scipy 주의: stats.expon(scale=β)에서 scale = 1/λ = 평균 대기시간

exp_dist = stats.expon(scale=mean_lifetime)

정규 분포 (NORMAL DISTRIBUTION)

자연현상의 기본 분포

mu = 173
sigma = 6

# scipy.stats를 이용한 정규 분포
norm_dist = stats.norm(loc=mu, scale=sigma)

정규분포 심화

1. 68-95-99.7 법칙 (경험적 규칙)

정규분포에서 데이터가 평균 주변에 얼마나 모여있는지 나타내는 규칙:

구간확률
μ±1σ\mu \pm 1\sigma68%
μ±2σ\mu \pm 2\sigma95%
μ±3σ\mu \pm 3\sigma99.7%

평균에서 표준편차 1개 범위 안에 전체의 68%, 2개면 95%, 3개면 거의 전부(99.7%)가 들어온다. 이 규칙만 알면 정규분포 데이터를 계산 없이 빠르게 파악할 수 있다.

2. 표준화와 Z-score

표준화: 어떤 정규분포든 표준정규분포 N(0,1)N(0,1)로 변환하는 과정

Z=XμσZ = \frac{X - \mu}{\sigma}

Z-score의 의미: 평균에서 표준편차 몇 개만큼 떨어져 있는지를 나타내는 값

Z-score의미
Z = 0평균과 같음
Z = 1평균보다 1σ 높음 (상위 약 16%)
Z = 2평균보다 2σ 높음 (상위 약 2.5%)
Z = -1평균보다 1σ 낮음 (하위 약 16%)

예시: 시험 평균 70점, 표준편차 10점일 때 내 점수가 90점이면 Z=907010=2Z = \frac{90 - 70}{10} = 2이다. 평균보다 표준편차 2개만큼 위에 있으므로 상위 약 2.5%에 해당한다.

# (1) Z-score 계산
z_score = (my_score - mu) / sigma
print(f"z-score:", z_score)

# (2) 상위 몇 %인지 계산
top_percentile = stats.norm.sf(z_score) #P(Z > z_score)
print(f"상위 %:", top_percentile)

확률분포 핵심 함수 정리

scipy.stats 사용법

메서드풀네임 (영어)설명예시
.pmf(k)Probability Mass Function확률질량함수 (이산)binom.pmf(3, n=10, p=0.3)
.pdf(x)Probability Density Function확률밀도함수 (연속)norm.pdf(170, loc=173, scale=6)
.cdf(x)Cumulative Distribution Function누적분포함수 P(X≤x)norm.cdf(180, loc=173, scale=6)
.ppf(q)Percent Point Functioncdf의 역함수 (확률→값)norm.ppf(0.9, loc=173, scale=6)
.sf(x)Survival Function생존함수 P(X>x) = 1-CDFnorm.sf(180, loc=173, scale=6)
.isf(q)Inverse Survival Functionsf의 역함수 (우측확률→값)norm.isf(0.05, loc=173, scale=6)
.interval(confidence)Confidence Interval양측 신뢰구간t.interval(0.95, df=9, loc=5, scale=0.3)
.rvs(size)Random Variates난수 생성norm.rvs(loc=173, scale=6, size=100)
.mean()Mean기대값binom(n=10, p=0.3).mean()
.var()Variance분산binom(n=10, p=0.3).var()
.std()Standard Deviation표준편차binom(n=10, p=0.3).std()

파라미터 설명

  • x, k: 확률을 구하고 싶은 값 (연속: x, 이산: k)
  • q: 누적확률 (0~1 사이 값)
  • loc: 분포의 위치 (정규분포에서는 평균 μ)
  • scale: 분포의 척도 (정규분포에서는 표준편차 σ)
  • df: 자유도 (t분포, 카이제곱분포 등에서 사용)
  • size: 생성할 난수 개수
  • confidence: 신뢰수준 (예: 0.95 = 95%)
  • n, p: 이항분포의 시행 횟수와 성공 확률

주요 분포 생성

from scipy import stats

# 이산형
bernoulli = stats.bernoulli(p=0.3)       # 베르누이: 성공확률 0.3인 1회 시행
binom = stats.binom(n=10, p=0.3)         # 이항분포: 10회 시행, 성공확률 0.3
poisson = stats.poisson(mu=5)            # 포아송: 평균 발생 횟수 5

# 연속형
uniform = stats.uniform(loc=0, scale=10)  # 균등분포: U(0, 10), loc=시작, scale=구간 길이
expon = stats.expon(scale=100)            # 지수분포: scale=1/λ (평균 대기시간), 평균 100분
norm = stats.norm(loc=170, scale=6)       # 정규분포: N(170, 6²), loc=평균, scale=표준편차

확률 계산 팁

# P(X = k) - 정확히 k가 나올 확률 (이산형만 사용 가능)
dist.pmf(k)

# P(X ≤ x) - x 이하일 확률 (누적)
dist.cdf(x)

# P(X > x) - x 초과일 확률
dist.sf(x)  # 또는 1 - dist.cdf(x)

# P(X ≥ x) - x 이상일 확률
# 연속형: P(X ≥ x) = P(X > x) → dist.sf(x)  (한 점의 확률 = 0이므로 초과와 같음)
# 이산형: P(X ≥ k) = P(X > k-1) → dist.sf(k - 1)  (또는 1 - dist.cdf(k - 1))

# P(a ≤ X ≤ b) - a 이상 b 이하일 확률
dist.cdf(b) - dist.cdf(a)

# 상위 p%에 해당하는 값 (예: 상위 5% → p=5)
dist.ppf(1 - p/100)

# 하위 p%에 해당하는 값 (예: 하위 10% → p=10)
dist.ppf(p/100)

0개의 댓글