내일배움캠프

[내일배움캠프] TIL 27일차 26.02.06(금)

nom_de_plume 2026. 2. 6. 15:09

CDF를 활용한 확률 계산

계산하고 싶은 것 공식 scipy.stats 매서드
P(X ≤ x) F(x) dist.cdf(x)
P(X > x) 1 - F(x) dist.sf(x)
P(a < X ≤ b) F(b) - F(a) dist.cdf(b) - dist.cdf(a)
P(X ≥ x) 1 - F(x - 1) (이산형) dist.sf(x-1) 또는 1 - dist.cdf(x-1)
  • "몇 개 이하", "몇 점 이상" 같은 구간 확률이 더 자주 필요 -> CDF 활용 계산

PMF (확률 질량 함수)

pmf_dice = np.ones(6) / 6
  • P(X = x)
  • 각 값의 확률
  • ∑P(X=x) = 1

CDF (누적 확률 계산)

cdf_dice = np.cumsum(pmf_dice)
  • f(x) (특정 값의 확률=0)
  • 확률 밀도 (면적=확률)
  • ∫f(x)dx = 1

 

베르누이 분포 (Bernoulli Distribution)

dist = stats.bernoulli(p)
  • 성공/실패 단 1회 시행
  • X ~ Bernoulli(p)
  • 성공 확률 p를 인자로 받아 베르누이 확률 변수 객체 생성

 

 PMF(확률 질량 함수)

dist.pmf(k)
  • 특정 결과(k)가 발생할 확률 계산 
    • pmf(1) = 성공할 확률 = P(X = 1) = p
    • pmf(0) = 실패할 확률 = P(X = 0) = 1 - p
  • P(X = k) = p^k * (1 - p)^(1-k)

기댓값

dist.mean()
  • E(X) = p
  • 1 * p + 0 * (1-p) = p

분산

dist.var()
  • 기댓값으로부터 얼마나 멀리 떨어져 있는지(변동성) 파악
  • Var(X) = p * (1-p)
  • 확률이 0이나 1에 가까워질수록 결과가 뻔해져 분산이 작아진다.

 

이항 분포 (Binomial Distribution)

dist = stats.binom(n, p)
  • 베르누이 시행(성공/실패)을 여러 번(n번) 반복했을 때 나타나는 분포
    • n: 총 시행 횟수
    • p: 한 번의 시행에서 성공(또는 불량)할 확률

PMF(확률 질량 함수)

dist.pmf(k)

 

  • n번 중 정확히 k번 사건이 발생할 확률 계산

 CDF(누적 분포 함수)

dist.cdf(k)
  • 0부터 k번까지 성공할 확률을 모두 더한 값
  •  P(X ≤ k) --> k개 이하가 나올 확률
dist.sf(k-1)
  • 생존 함수 (Survival Function)
  • 특정 횟수보다 많이 성공할 확률
  • P(X > k)
  • 1 - cdf(k-1)와 동일

기댓값

dist.mean()
  • E(X) = n * p

표준편차

dist.std
  • 분산에 루트를 씌운 값
  • √(n * p * (1-p))

 

포아송 분포 (Poisson Distribution)

dist = stats.poisson(mu=평균값)
  • 평균적으로 몇 번 발생하는지 설정하여 분포 생성
    • mu(λ, lambda): 단위 시간(또는 공간)당 사건의 평균 발생 횟수

PMF(확률 질량 함수)

dist.pmf(k)
  • n번 중 정확히 k번 사건이 발생할 확률 계산
  • 이론적으로 k가 무한대까지 가능

 CDF(누적 분포 함수)

dist.cdf(k)
  • 특정 횟수 이내 혹은 이상의 확률
  •  P(X ≤ k) --> k개 이하가 나올 확률
disf.sf(k-1)
  • 생존 함수 (Survival Function)
  • 특정 횟수보다 많이 성공할 확률
  • P(X > k)
  • 1 - cdf(k-1)와 동일

기댓값

dist.mean()
  • E(X) = μ (또는 λ)

분산

dist.var()
  • Var(X) = μ (또는 λ)
  • **평균과 분산 동일
    • 평균이 클수록 변동 폭(분산)도 같이 커진다는 의미

 

균등 분포(Uniform Distribution)

dist = stats.uniform(loc, scale)
  • 모든 값이 동일할 확률
    • loc : 분포의 시작점 (a)
    • scale : 분포의 범위(길이) (b - a)

CDF(누적 분포 함수)

dist.cdf(k)
  • '범위'의 넓이
  •  P(X ≤ k) --> 왼쪽부터 k까지의 넓이
dist.sf(k)
  • 생존 함수 (Survival Function)
  • 전체(1)에서 왼쪽 넓이(cdf)를 뺀 오른쪽 넓이(sf)
  • P(X > k)
  • 1 - cdf(k)와 동일

기댓값

dist.mean()
  • E(X) = (a + b) / 2
  • 정중앙?

표준편차

dist.std()
  • Std(X) = (b - a) / √(12) 

 

지수 분포(Exponential Distribution)

dist = stats.expon(scale=평균_시간)
  • 포아송 분포와 '실과 바늘 같은 사이'
    • 포아송 : 단위 시간당 발생하는 사건의 횟수
    • 지수 : 사건이 한 번 발생하고 다음 사건이 발생할 때까지 걸리는 시간
  • scale = 1 / λ (람다의 역수)
    • λ : 시간당 사고 발생 건수
    • scale: 사고 사이의 평균 시간

CDF(누적 분포 함수)

dist.cdf(k)
  • k 시간 이내에 사건이 발생할 누적 확률
  •  P(X ≤ k) 
  • 처음에 확률 밀도가 가장 높고 시간이 갈수록 급격히 감소
    • 초반에 확률이 꽤 높게 형성
dist.sf(k)
  • 생존 함수 (Survival Function)
  • k 시간이 지날 때까지 사건이 발생하지 않고 유지하고 있을 확률
  • P(X > k)
  • 1 - cdf(k)와 동일
  • 무기억성(Memoryless): 지금까지 a시간을 버텼어도, 앞으로 b시간을 더 버틸 확률은 처음 시작할 때 b시간을 버틸 확률과 동일

기댓값

dist.mean()
  • E(X) = scale = 1 / λ 

표준편차

dist.std()
  • Std(X) =  scale = 1 / λ 
  • ** 평균과 표준편차 동일 

 

정규 분포 (Normal Distribution)

dist = stats.norm(loc=평균, scale=표준편차)
  • 자연현상의 기본 분포
  • 평균을 중심으로 좌우 대칭
  • 평균 = 중앙값 = 최빈값
  • 종 모양

CDF(누적 분포 함수)

dist.cdf(k)
  • 처음부터 k까지의 넓이
  •  P(X ≤ k)
dist.sf(k)
  • 생존 함수 (Survival Function)
  • 평균보다 큰 k 지점의 오른쪽 꼬리 면적 계산
  • P(X > k)
  • 1 - cdf(k)와 동일

**

dist.cdf(b) - dist.cdf(a)
  • 큰 넓이에서 작은 넓이를 빼 두 지점 사이의 확률 계산
    • cdf(b) : 처음부터 b까지의 전체 넓이
    • cdf(a) : 처음부터 a까지의 넓이
  • P(a ≤ X ≤ b)

역함수

dist.ppf(q=확률값)
  • 누적 확률이 q가 되는 지점의 x값 계산
  • ppf(Percent Point Function): cdf의 반대 역할
    • 상위 10%
      • ppf(1-0.1) = ppf(0.9)
      • 왼쪽부터 쌓았을 때 누적 90% 되는 지점
    • 하위 5%
      • ppf(0.05)
      • 왼쪽 끝에서부터 5% 지점의 키