통계적 공정 관리: 품질의 기초
관리도는 표준편차를 사용하여 시간에 따른 공정 안정성을 모니터링하는 통계적 공정 관리(SPC)의 핵심 도구입니다. 1920년대 벨 연구소의 월터 슈하트가 개발한 이 강력한 도구는 일반 원인 변동(공정에 내재된)과 특수 원인 변동(주의가 필요한 문제를 나타내는)을 구별합니다.
관리도의 장점은 단순함에 있습니다: 측정값을 시간 순서로 점으로 찍고, 표준편차 기반의 관리 한계를 추가한 뒤, 문제를 시사하는 점이나 패턴을 관찰합니다. 이 실시간 모니터링은 사후 검사가 아닌 결함 발생 전에 예방합니다.
현대의 제조업, 의료, 서비스 산업은 품질 유지를 위해 관리도에 의존합니다. 나노미터 정밀도가 필요한 반도체 제조부터 병원 감염률까지, SPC는 공정 개선을 위한 보편적 프레임워크를 제공합니다.
일반 원인 vs 특수 원인
관리도의 유형
데이터 유형에 따라 다른 관리도가 필요합니다. 올바른 차트를 선택해야 정확한 공정 모니터링이 가능합니다:
| 차트 유형 | 데이터 유형 | 사용 사례 |
|---|---|---|
| X̄-R (X-bar와 범위) | 연속형, 부분군 n≤10 | 제조 측정 |
| X̄-S (X-bar와 표준편차) | 연속형, 부분군 n>10 | 대규모 배치 샘플링 |
| I-MR (개별값-이동범위) | 개별 측정값 | 고비용/파괴 검사 |
| p-차트 | 불량률 | 합격/불합격 검사 |
| c-차트 | 결함 수 | 단위당 결함 |
연속형 데이터(길이, 무게, 온도 등의 측정)에서는 X̄-R 차트가 가장 일반적입니다. 부분군 샘플을 수집하고, 평균(X̄)을 하나의 차트에, 범위(R)를 다른 차트에 점으로 찍습니다. 두 차트가 함께 공정의 중심과 변동성을 모니터링합니다.
관리 한계 계산
관리 한계는 예상되는 변동의 경계를 정의합니다. 중심선에서 ±3 표준편차에 설정되며, 공정이 관리 상태일 때 99.73%의 점을 포함합니다:
관리 한계
범위 방법을 사용하는 X̄ 차트의 공식은:
X-bar 차트 한계
여기서 X̿는 총평균, R̄는 평균 범위, A₂는 부분군 크기에 따른 상수입니다(예: n=5일 때 A₂ = 0.577).
관리 한계 ≠ 규격 한계
관리 한계 상수
| n | A₂ | D₃ | D₄ |
|---|---|---|---|
| 2 | 1.880 | 0 | 3.267 |
| 3 | 1.023 | 0 | 2.574 |
| 4 | 0.729 | 0 | 2.282 |
| 5 | 0.577 | 0 | 2.114 |
문제 감지를 위한 웨스턴 일렉트릭 규칙
관리 한계를 벗어나는 단일 점만이 문제의 신호는 아닙니다. 웨스턴 일렉트릭 규칙은 차트를 표준편차 기반의 구역으로 나누어 더 미묘한 패턴을 감지합니다:
- C 구역:중심선에서 1σ 이내
- B 구역:중심에서 1σ와 2σ 사이
- A 구역:중심에서 2σ와 3σ 사이
네 가지 기본 규칙
규칙 1: 단일 점
규칙 2: 9연속
규칙 3: 6연속 추세
규칙 4: 구역 패턴
일반적인 패턴 인식
숙련된 실무자는 특정 문제를 나타내는 시각적 패턴을 인식하는 법을 배웁니다:
| 패턴 | 외관 | 가능한 원인 |
|---|---|---|
| 이동 | 갑작스러운 수준 변화 | 새 작업자, 재료 배치, 장비 조정 |
| 추세 | 점진적 상승/하강 | 도구 마모, 온도 표류, 피로 |
| 주기 | 반복되는 상승/하강 패턴 | 교대 변경, 환경 주기, 로테이션 일정 |
| 밀착 | 점들이 중심 근처에 몰림 | 잘못된 한계, 데이터 반올림/편집 |
| 층화 | 점들이 중심을 피함 | 혼합 스트림, 여러 기계 |
Python 구현
자동 규칙 검사가 포함된 X̄-R 관리도를 생성합니다:
import numpy as np
import matplotlib.pyplot as plt
def create_xbar_chart(data, subgroup_size=5):
"""Create X-bar control chart with control limits."""
# Reshape data into subgroups
n_subgroups = len(data) // subgroup_size
subgroups = data[:n_subgroups * subgroup_size].reshape(n_subgroups, subgroup_size)
# Calculate subgroup means and ranges
xbar = subgroups.mean(axis=1)
R = subgroups.max(axis=1) - subgroups.min(axis=1)
# Control chart constants (for n=5)
A2 = 0.577
D3, D4 = 0, 2.114
# Calculate control limits
xbar_bar = xbar.mean()
R_bar = R.mean()
UCL = xbar_bar + A2 * R_bar
LCL = xbar_bar - A2 * R_bar
# Check for out-of-control points
ooc = (xbar > UCL) | (xbar < LCL)
# Plot
plt.figure(figsize=(12, 5))
plt.plot(xbar, 'b-o', markersize=4)
plt.axhline(xbar_bar, color='g', linestyle='-', label='CL')
plt.axhline(UCL, color='r', linestyle='--', label='UCL')
plt.axhline(LCL, color='r', linestyle='--', label='LCL')
plt.scatter(np.where(ooc)[0], xbar[ooc], color='red', s=100, zorder=5)
plt.xlabel('Subgroup')
plt.ylabel('X-bar')
plt.title('X-bar Control Chart')
plt.legend()
plt.show()
return {'xbar': xbar, 'UCL': UCL, 'LCL': LCL, 'ooc': ooc}
# Example: Monitor a manufacturing process
np.random.seed(42)
# Simulate 100 measurements (20 subgroups of 5)
measurements = np.random.normal(100, 2, 100)
# Add a shift at subgroup 15
measurements[75:] += 3
result = create_xbar_chart(measurements)