이항 분포로 설계하는 샘플링 검사와 품질 관리
이항 분포의 p와 n, 평균·분산을 바탕으로 샘플링 검사, p/np 차트, 불량률 추정과 품질 의사결정을 설계하는 방법
2026-08-14 · 최초 발행 2024-04-29
불량 개수를 확률 모형으로 다루는 방식
이항 분포는 독립적인 베르누이 시행을 n회 반복했을 때 성공한 횟수 X를 나타내는 이산 확률 분포다. 여기서 성공확률은 p이며, 평균은 np, 분산은 np(1-p)로 정해진다. 품질 관리에서는 성공을 불량으로 정의해 불량률 추정, 샘플링 검사, p/np 차트에 적용한다.
확률질량함수는 다음과 같다.
P(X=k) = C(n,k) p^k (1-p)^(n-k), k=0,1,...,n.
적용 전에 확인할 가정과 대안
이 모형은 시행이 서로 독립이고, 모든 시행의 성공확률이 동일하며, 시행 횟수 n이 고정된다는 가정 위에 놓인다. 유한 모집단에서 비복원 추출을 한다면 하이퍼지오메트릭 분포를 고려해야 한다.
공정 편차나 배치 간 변동처럼 p가 균일하지 않은 경우에는 과산포를 반영하는 베타-이항 모형이 더 적합할 수 있다. 표본의 결과를 계산하기 전에 이 가정이 실제 공정에 맞는지부터 점검해야 한다.
정규 근사는 X ≈ Normal(np, np(1-p))로 둘 수 있으며, np ≥ 5 및 n(1-p) ≥ 5일 때 적용을 권장한다. 이때 연속성 보정(±0.5)도 함께 적용한다. n이 크고 p가 작으며 λ=np가 중소규모인 경우에는 X ≈ Poisson(λ)로 보는 포아송 근사가 드문 결함을 다루는 데 유용하다. 다만 의사결정 경계 근처에서는 가능한 한 정확 이항 계산을 우선한다.
불량률 추정과 관리 한계
불량 개수가 k개인 표본에서 p의 추정량은 p̂ = k/n이다. p̂가 0 또는 1에 가까우면 정규 근사 신뢰구간은 적합하지 않을 수 있다. 이때는 Clopper–Pearson(정확), Wilson, Agresti–Coull 등의 신뢰구간을 사용하며, 규제 대응에서는 보수적 방법을 선호한다.
p-차트는 불량 비율을, np-차트는 불량 개수를 관리한다. 기준 불량률 p0를 사용할 때 p-차트의 관리한계는 다음과 같다.
p0 ± 3·sqrt(p0(1-p0)/n)
np 차트는 다음과 같이 계산한다.
np0 ± 3·sqrt(np0(1-p0))
안정 상태의 데이터로 p0를 산정하고 표본 크기 n의 변동을 관리해야 한다. LCL<0이면 0으로 절단한다. np0, n(1-p0) < 5이면 정규 근사가 적절하지 않으므로 정확 이항 기반 한계, Laney p' 차트 또는 베타-이항 모형을 검토한다.
샘플링 검사의 허용 기준을 정하는 과정
수입·출하 샘플링 검사에서는 목표 AQL, LTPD, 허용 위험(α, β), 공정 추정 p0를 입력으로 둔다. 후보 표본 수 n과 허용불량 수 c를 정한 뒤, P_accept(p)=P(X≤c; n,p)로 운영특성곡선(OC)을 평가한다. α와 β 제약을 만족하는 조합을 찾고 비용·시간 제약을 반영해 최종안을 고른다.
p=1%(0.01), n=200, c=3이면 P_accept는 ≈ 0.857 수준이다. p=3%일 때는 P_accept가 ≈ 0.151 수준이다. 이 차이가 생산자 위험과 소비자 위험의 균형을 판단하는 근거가 된다.
계산 방식은 판단 위치에 맞춰 고른다
| 항목 | 정확 이항 | 정규 근사 | 포아송 근사 |
|---|---|---|---|
| 성능 | n·k 범위 커지면 느림이나 현대 라이브러리로 실용 범위 충분 | 매우 빠름 | 매우 빠름 |
| 확장성 | 배치 계산 시 벡터화로 양호 | 대용량 시 최적 | 희귀 사건 대량 계산에 최적 |
| 일관성 | 모든 p, n에서 정확 | np, n(1-p) 충분 조건 필요 | p 작고 n 큼, λ=np 중소 조건 필요 |
| 안정성 | 경계값에서도 견고 | 극단 p에서 부정확 | λ 매우 작을 때 양호, λ 큼이면 부정확 |
| 운영 편의 | 해석 명확, 규제 친화 | 직관적, 한계 계산 용이 | 드문 결함 시 직관적 |
허용 확률을 계산하는 코드
n=200, c=3에서 P_accept(p)를 계산해 공정 타당성을 점검하는 예시다. Python 3.11+와 SciPy 1.10+를 가정한다.
# pip install scipy==1.11.4
from math import isfinite
from scipy.stats import binom
def accept_prob(n, c, p):
# 누적분포 이용: P(X<=c)
return binom.cdf(c, n, p)
n, c = 200, 3
for p in [0.01, 0.02, 0.03]:
pa = accept_prob(n, c, p)
print(f"p={p:.2%}, P_accept={pa:.3f}")
# 간단한 설계 탐색: c 고정, 목표 AQL=1%에서 P_accept>=0.90, LTPD=3%에서 P_accept<=0.10
AQL, LTPD = 0.01, 0.03
best = None
for n in range(100, 401, 10):
for c in range(0, 8):
pa_aql = accept_prob(n, c, AQL)
pa_ltpd = accept_prob(n, c, LTPD)
if pa_aql >= 0.90 and pa_ltpd <= 0.10:
best = (n, c, pa_aql, pa_ltpd)
break
if best:
break
print("추천안:", best)
이 조건에서 p=1%의 P_accept는 ≈0.86~0.87 수준이고, p=3%에서는 ≈0.15 수준이다. 목표 위험에 맞춰 n과 c를 조정해야 한다.
검사량을 최적화하면 전수검사 대비 n=200 샘플링으로 검사량을 80%+ 절감할 수 있다. 동시에 생산자·소비자 위험을 확률로 관리하고, 의사결정 기준을 문서화해 감사 대응의 근거를 남길 수 있다. 공정 변동 탐지 민감도와 과잉 경보 감소 사이의 균형도 같은 설계 안에서 다룬다.
운영 단계에서는 AQL/LTPD와 위험 수준을 기준으로 n과 c를 설계하고, 사용한 가정과 예외 처리 방식을 절차에 함께 기록한다. 정확 계산을 기본으로 두되, 상황에 따라 정규·포아송 근사를 병행하고 가정이 맞지 않으면 베타-이항이나 하이퍼지오메트릭 분포로 전환한다.