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% 지점의 키
- 상위 10%
'내일배움캠프' 카테고리의 다른 글
| [내일배움캠프] TIL 29일차 26.02.10(화) (0) | 2026.02.10 |
|---|---|
| [내일배움캠프] TIL 28일차 26.02.09(월) (0) | 2026.02.09 |
| [내일배움캠프] TIL 26일차 26.02.05(목) (0) | 2026.02.05 |
| [내일배움캠프] TIL 25일차 26.02.04(수) (0) | 2026.02.04 |
| [내일배움캠프] TIL 24일차 26.02.03(화) (0) | 2026.02.03 |