기하 분포로 첫 성공 시점과 고장률을 해석하는 방법
기하 분포의 평균, 메모리리스 성질, 위험도와 추정식을 바탕으로 고장률·재시도·전환 데이터를 해석하는 방법
2026-08-14 · 최초 발행 2024-04-29
첫 성공까지의 시도 수를 다루는 분포
기하 분포는 독립적인 베르누이 시행이 반복될 때 첫 성공이 발생할 때까지 필요한 시도 횟수를 표현한다. 성공확률을 (p) ((0 < p ≤ 1)), 첫 성공까지의 시도 수를 (X)로 두며, 여기서는 (X ∈ {1,2,3,…})인 시도 수 표현을 사용한다.
확률질량함수는 다음과 같다.
[ P(X = k) = (1 − p)^{(k−1)}p,\quad k = 1,2,… ]
기대값과 분산은 각각 (E[X] = 1/p), (Var(X) = (1 − p)/p^2)이다. 누적분포함수와 꼬리확률은 다음처럼 쓸 수 있다.
[ P(X ≤ k) = 1 − (1 − p)^k ]
[ P(X > k) = (1 − p)^k ]
일정한 위험도라는 가정
기하 분포는 매 시도에서 실패와 성공의 확률이 바뀌지 않는다는 전제 위에 있다. 이때 이산 시간 위험도는 (h(k) = p)로 일정하다.
또 하나의 핵심은 메모리리스 성질이다.
[ P(X > s + t \mid X > s) = P(X > t) ]
이미 여러 차례 실패했더라도 다음 시도에서의 성공 가능성은 달라지지 않는다는 뜻이다. 그래서 고장률이 일정한 부품이나 프로세스를 이산 시간 단위로 근사할 때 사용할 수 있고, 연속 시간의 지수 분포와도 대응된다.
시도 수와 실패 횟수를 혼동하지 않기
기하 분포에는 두 표현이 함께 쓰인다. 첫 성공까지의 시도 수는 (X ∈ {1,2,…})이고, 첫 성공 전 실패 횟수는 (Y = X − 1 ∈ {0,1,…})이다.
두 표현의 기대값도 다르다.
[ E[X] = 1/p ]
[ E[Y] = (1 − p)/p ]
평균이나 신뢰구간을 보고할 때 어느 정의를 사용했는지 명시하지 않으면 지표 해석이 달라질 수 있다. 보고 체계에서는 시도 수와 실패 수 중 하나를 고정해 두는 편이 낫다.
관측 데이터에서 p를 추정하는 방식
표본 ({x_i}_{i=1..n})이 있을 때 최대우도추정량은 다음과 같다.
[ p̂ = n / Σx_i ]
이 추정량은 대수적 일치성과 비편향성 근사 성질을 가진다. 분산은 다음처럼 근사할 수 있다.
[ Var(p̂) ≈ p^2 (1 − p) / n ]
정규 근사 기반 신뢰구간을 사용할 수 있으며, 부트스트랩이나 프로파일 우도도 적용할 수 있다. 다만 추정 전에 독립성과 상수 (p) 가정이 데이터에 맞는지 확인해야 한다.
런 검정, 시계열 구간별 (p) 추정값 비교, ((1 − p)^k)의 로그-꼬리 직선성 점검이 여기에 사용된다. 위험도가 증가하거나 감소한다면 이산-와이블(Weibull), 혼합 기하 분포 같은 대안을 고려한다.
고장 시점과 신뢰도 곡선
설비 데이터에서는 각 부품의 사이클 단위 최초 고장 시점 ({x_i})를 입력으로 삼을 수 있다. 검출 누락과 검사 간격이 결과에 미치는 영향은 전처리 단계에서 확인한다.
(p̂ = n / Σx_i)를 구한 뒤 신뢰도는 다음 식으로 계산한다.
[ R(k) = P(X > k) = (1 − p̂)^k ]
이 곡선으로 MTTF (= 1/p̂), 특정 보증 사이클 (k)의 생존확률, 예방 교체 주기를 검토할 수 있다.
예시 계산:
- 관측: n = 50개 부품, 최초 고장까지 사이클 합 Σx_i = 100,000
- 추정: q̂ = p̂ = 50 / 100,000 = 0.0005, MTTF = 1/q̂ = 2,000 사이클
- 1,000 사이클 생존확률: R(1000) = (1 − 0.0005)^{1000} ≈ exp(−0.5) ≈ 0.6065
- 해석: 보증 1,000 사이클에서 약 60.7% 생존, 예방 교체 기준 1,500~2,000 사이클 구간 검토 권장
재시도와 전환 데이터에 적용할 때
API 호출에서는 성공확률 (p)를 추정해 기대 재시도 횟수 (1/p)를 구하고, 지연·비용 함수와 함께 최대 재시도 횟수를 정할 수 있다. 지수 백오프를 쓰더라도 호출당 성공확률 (p)가 일정한지 점검해야 하며, 부하에 따라 (p)가 변한다면 구간화 추정을 적용한다.
세일즈나 마케팅에서는 접점마다 독립적인 성공확률을 가정하고 첫 전환까지의 접촉 수를 모델링할 수 있다. 캠페인과 채널별 (p)를 비교해 리소스를 배분할 수 있지만, 메모리리스 전제가 맞지 않으면 단계별 성공확률 모형인 마코프 체인으로 바꿔야 한다.
계산과 정책 설계에 남는 값
기하 분포를 적용하면 평균 고장 또는 성공까지의 시도 수를 (E[X] = 1/p)로 표현할 수 있다. 목표 생존확률 (\alpha)에 대한 보증·교체·재시도 한계치는 다음 식으로 계산한다.
[ k = ⌈log(1 − α) / log(1 − p̂)⌉ ]
데이터 (n)개만으로 (p) 추정의 표준오차 (≈ p√((1 − p)/n))를 구할 수 있어 표본 크기 설계에도 활용된다. 메모리리스 성질은 정책을 단순하게 설명하는 데 도움이 되고, 연속시간 지수 분포와의 매핑은 서로 다른 분야의 논의를 연결한다. 가정 위배가 드러나면 위험도 기반 대안 모형으로 전환할 근거도 마련된다.
자주 쓰는 식
| 항목 | 식/설명 |
|---|---|
| PMF | P(X = k) = (1 − p)^(k−1) p |
| 기대값 | E[X] = 1/p |
| 분산 | Var(X) = (1 − p)/p^2 |
| 꼬리확률 | P(X > k) = (1 − p)^k |
| 위험도 | h(k) = P(X = k | X ≥ k) = p |
| 중앙값 근사 | m ≈ ⌈ log(0.5) / log(1 − p) ⌉ |
적용 전에 확인할 사항
- 첫 성공까지의 시도 수로 데이터를 계수화했는지, 검출 지연과 검열 여부를 표기한다.
- 독립성 테스트와 기간·부하별 (p) 안정성 분할 검정을 수행한다.
- (X)(시도 수, 1부터)와 (Y)(실패 수, 0부터) 중 어떤 정의로 지표를 산출했는지 고정한다.
- 상수 위험도 가정이 맞지 않으면 대안 모델을 검토하고, 정책에는 CI를 반영한다.
p 추정과 신뢰도 곡선 코드
전제: Python 3.10+, numpy>=1.24, scipy>=1.10
import numpy as np
from scipy.stats import norm
# 관측값: 첫 성공까지 시도 수 (X=1,2,3,...) 표본
x = np.array([5, 12, 3, 7, 1, 9, 4, 2, 8, 6]) # 예시 데이터
n = len(x)
p_hat = n / x.sum()
# 표준오차(정규 근사): se ≈ p * sqrt((1-p)/n)
se = p_hat * np.sqrt((1 - p_hat) / n)
z = norm.ppf(0.975)
ci = (max(1e-9, p_hat - z * se), min(1 - 1e-9, p_hat + z * se))
# 신뢰도 곡선: R(k) = (1 - p_hat)^k
k = np.arange(1, 51)
R = (1 - p_hat) ** k
print(f"p_hat={p_hat:.5f}, 95% CI=({ci[0]:.5f}, {ci[1]:.5f})")
print("R(1..50) preview:", R[:10])
(p)가 작고 (n)도 작으면 정규 근사 신뢰구간이 왜곡될 수 있다. 이 경우 부트스트랩 또는 프로파일 우도를 사용한다. 일정 시점까지 고장 나지 않은 검열 데이터가 섞여 있다면 이산 생존분석(로지스틱-해저드, complementary log-log)을 적용한다.