統計的工程管理:品質の基盤
管理図は統計的工程管理(SPC)の要であり、標準偏差を用いて工程の安定性を時間経過とともに監視します。1920年代にベル研究所のウォルター・シューハートが開発したこの強力なツールは、偶然原因による変動(工程に固有のもの)と特殊原因による変動(対処が必要な問題を示すもの)を区別します。
管理図の優れた点はそのシンプルさにあります。時間経過とともに測定値をプロットし、標準偏差に基づく管理限界を追加し、問題を示す点やパターンを監視するだけです。このリアルタイム監視は、事後の検査で欠陥を見つけるのではなく、発生前に欠陥を防止します。
現代の製造業、医療、サービス業は品質維持に管理図を活用しています。ナノメートル精度が求められる半導体製造から病院の感染率まで、SPCは工程改善の普遍的なフレームワークを提供します。
偶然原因と特殊原因
管理図の種類
データの種類によって異なる管理図が必要です。正しい図を選ぶことで正確な工程監視が可能になります。
| 図の種類 | データの種類 | 用途 |
|---|---|---|
| X̄-R(X-barと範囲) | 連続データ、サブグループn≤10 | 製造測定 |
| X̄-S(X-barと標準偏差) | 連続データ、サブグループn>10 | 大量バッチのサンプリング |
| I-MR(個別値-移動範囲) | 個別測定値 | 高価/破壊的な検査 |
| p管理図 | 不良品率 | 合格/不合格の検査 |
| c管理図 | 欠陥数 | 1単位あたりの欠陥数 |
連続データ(長さ、重量、温度などの測定値)には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 |
問題検出のためのウエスタンエレクトリックルール
管理限界の外側の1点だけが問題のシグナルではありません。ウエスタンエレクトリックルールは、管理図を標準偏差に基づくゾーンに分割し、より微妙なパターンを検出します。
- ゾーンC:中心線から1σ以内
- ゾーンB:中心線から1σ〜2σの範囲
- ゾーンA:中心線から2σ〜3σの範囲
4つの基本ルール
ルール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)