🎓 レベル:標準 | 重要度:A(必須)
📎 前提:第2章 予測誤差の評価と追跡信号(追跡信号=予測の管理図・同じ運用思想) | 確率の土台(3σ・係数 の導出):品質管理(統計) | 誤警報=第一種過誤:第一種の過誤・第二種の過誤・検出力(2種類の誤りとトレードオフ・サンプルサイズ設計) | 次:工程能力指数
要点(BLUF)
- 統計的工程管理(SPC)は、工程を監視して管理状態(in control)——偶然のばらつきだけが効いている安定状態——に保つ運用です。道具が管理図。
- 工程のばらつきを2つに分けます。偶然原因(common cause)=避けられない自然なゆらぎ(放置する)、異常原因(special cause)=工具摩耗・設定ミスなど突き止めて取り除くべき特定の原因(手を打つ)。管理図の仕事は、この2つを区別することだけです。
- - 管理図は、一定間隔で大きさ の群(サブグループ)を採り、群平均 (位置)と群範囲 (ばらつき)を別々に打点します。管理限界は係数を掛けるだけ: 図 、 図 。 の根拠と係数 の導出は 品質管理 に譲り、本稿は標準値を使って運用に集中します。
- これは第2章の追跡信号(予測誤差の評価と追跡信号)とまったく同じ思想です。基準(管理状態)を作り → 限界 を引き → 外れたら「偶然では片付かない=異常原因」と判断して原因に手を打つ。追跡信号は予測のバイアスを、- 管理図は工程の平均・ばらつきを見張る、対象が違うだけです。
1. 偶然原因と異常原因——管理図が分けるもの
工程から出る製品の特性値(寸法・重量・濃度)は必ずばらつきます。シューハート(Shewhart)はこれを2種類に分けました。
- 偶然原因(common / chance cause):原料の微小な差・室温のゆらぎ・測定誤差など、たくさんの小さな原因が重なった避けられないばらつき。これだけが効いている状態が統計的管理状態(in control)。一つひとつ潰しても割に合わないので、放置します。
- 異常原因(special / assignable cause):工具の摩耗・段取りミス・原料ロットの切り替え・オペレータ交代など、突き止めて取り除くべき特定の原因。これが混ざると工程は管理外れ(out of control)。手を打つ対象です。
flowchart LR
M["管理図に打点して監視"] --> Q{"管理限界の外 or 非ランダムな並び?"}
Q -->|"はい"| SP["異常原因あり<br/>原因を突き止めて除去"]
Q -->|"いいえ"| CC["偶然原因だけ(管理状態)<br/>そのまま継続・手を出さない"]
SP --> M
CC --> M
肝心なのは、この2つに正反対の対応をすること。安定した工程(偶然原因のみ)にいちいち調整を加えると、かえってばらつきが増えます(後述の tampering)。逆に異常原因を放置すると不良が流れ続けます。管理図は「いま手を打つべきか、放っておくべきか」を判定する装置です。これは追跡信号(予測誤差の評価と追跡信号)が「予測を直すべきか、ノイズだから据え置くか」を判定するのと同型の問題です。
2. - 管理図——位置とばらつきを別々に見張る
計量値(連続量)の監視で最もよく使うのが - 管理図です。一定間隔で大きさ (例 )の群を採り、各群について次の2つを別の図に打点します。
- 群平均 :工程の中心位置がずれていないか。
- 群範囲 :工程のばらつきが広がっていないか。
母標準偏差 は普通わからないので、群範囲の平均 から推定します。すると管理限界は を直接使わず、 に係数を掛けるだけの形になります。
ここで は群平均の総平均、 は群範囲の平均です。係数 は群サイズ ごとに表で与えられる標準値で、たとえば なら ()。
係数の正体は 品質管理 へ. ・・ という形と、 限界が誤警報(第一種過誤)両側約0.27%になる導出は、統計テキスト 品質管理 が扱います。OM 側はこの標準値を与えられた道具として使い、「チャートで異常を検知して工程を立て直す運用」に集中します。()で 図に下方限界を引かないのも標準どおりです。
図と 図を両方見るのが要点です。平均は規格内でも、ばらつき()が広がっていれば不良予備軍が増えています。位置()とばらつき()は別の異常で、別々に監視します。
3. 管理状態の工程で管理図を作る(コード)
目標100・工程の標準偏差 の管理状態の工程から、 のサブグループを25群採り、 で - 管理図を引きます。あわせて、 で を代用すると がちょうど に等しいことを数値で確かめます。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
rng = np.random.default_rng(7)
# 管理状態の工程:目標100・工程の標準偏差 sigma=2。大きさ n=5 のサブグループを25群採取
mu_true, sigma_true = 100.0, 2.0
n, k = 5, 25
samples = rng.normal(mu_true, sigma_true, size=(k, n))
xbar = samples.mean(axis=1) # 各群の平均(位置)
R = samples.max(axis=1) - samples.min(axis=1) # 各群の範囲(ばらつき)
xbarbar = xbar.mean() # 総平均 Xbarbar
Rbar = R.mean() # 範囲の平均 Rbar
# n=5 の管理図係数(標準値・導出は統計テキスト 09-31 へ)
A2, D3, D4 = 0.577, 0.0, 2.114
ucl_x = xbarbar + A2 * Rbar
lcl_x = xbarbar - A2 * Rbar
ucl_r = D4 * Rbar
lcl_r = D3 * Rbar
print(f"総平均 Xbarbar = {xbarbar:.3f}")
print(f"範囲の平均 Rbar = {Rbar:.3f}")
print(f"Xbar管理図: CL={xbarbar:.3f} UCL={ucl_x:.3f} LCL={lcl_x:.3f}")
print(f"R管理図 : CL={Rbar:.3f} UCL={ucl_r:.3f} LCL={lcl_r:.3f}")
# Rbar/d2 で工程の sigma を逆算(A2*Rbar が 3*sigma/sqrt(n) に対応するか確認)
d2 = 2.326
sigma_est = Rbar / d2
print(f"Rbar/d2 による sigma 推定 = {sigma_est:.3f}(真値 {sigma_true:.1f})")
print(f"A2*Rbar = {A2 * Rbar:.3f} vs 3*sigma_est/sqrt(n) = {3 * sigma_est / np.sqrt(n):.3f}")
out_x = np.where((xbar > ucl_x) | (xbar < lcl_x))[0]
out_r = np.where((R > ucl_r) | (R < lcl_r))[0]
print(f"Xbar管理図の管理限界外の群 = {out_x.tolist()}(管理状態なら空)")
print(f"R管理図の管理限界外の群 = {out_r.tolist()}")
# 図:Xbar管理図とR管理図
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(11, 7), sharex=True)
g = np.arange(1, k + 1)
ax1.plot(g, xbar, "o-", color="#1f77b4")
ax1.axhline(xbarbar, color="green", label="CL")
ax1.axhline(ucl_x, ls="--", color="#d62728", label="UCL/LCL")
ax1.axhline(lcl_x, ls="--", color="#d62728")
ax1.set_ylabel("群平均 Xbar"); ax1.set_title("Xbar管理図(位置の監視)"); ax1.legend()
ax2.plot(g, R, "s-", color="#ff7f0e")
ax2.axhline(Rbar, color="green", label="CL")
ax2.axhline(ucl_r, ls="--", color="#d62728", label="UCL")
ax2.set_xlabel("サブグループ番号"); ax2.set_ylabel("群範囲 R")
ax2.set_title("R管理図(ばらつきの監視)"); ax2.legend()
plt.tight_layout(); plt.show()
出力:
総平均 Xbarbar = 99.659
範囲の平均 Rbar = 4.236
Xbar管理図: CL=99.659 UCL=102.103 LCL=97.214
R管理図 : CL=4.236 UCL=8.956 LCL=0.000
Rbar/d2 による sigma 推定 = 1.821(真値 2.0)
A2*Rbar = 2.444 vs 3*sigma_est/sqrt(n) = 2.444
Xbar管理図の管理限界外の群 = [](管理状態なら空)
R管理図の管理限界外の群 = []
出力の意味:総平均 、 から、 図の限界は =[97.214, 102.103]、 図の上限は (下限は なので0)。25群はすべて限界内=管理状態で、誤検知は出ていません。注目は** が にぴたり一致している点: で推定した から 。つまり「 に を掛ける」は「 を引く」の言い換え**で、係数表は 限界を実務で計算しやすくしただけ——根拠は (品質管理)です。
4. ウェスタンエレクトリック・ルール——「限界超え」だけではない
異常のサインは「1点が を超える」だけではありません。点が限界内でも、並び方が偶然らしくないパターンは異常を疑います。古典的なウェスタンエレクトリック・ルール(ゾーン A/B/C を 刻みで分ける)では、たとえば次を異常とします。
- 1点が (管理限界)を超える……最も基本。
- 連続する点が中心線の同じ側に並ぶ(連/run、目安9点)……平均がずれた疑い。
- 連続する点が上昇または下降を続ける(傾向/trend、目安6点)……工具摩耗などのじわじわ変化。
- 連続する点が規則的に上下する(周期性)。
要するに「限界を超えなくても、同じ側に偏る・一方向に動き続けるなど偶然では起きにくい並びが出たら手を打つ」。これらは単独点の 超えでは拾えない緩やかな工程変化を早めに捉える補助ルールです(具体的なルール集合は規格改訂で変わるため要最新確認。判定ルールの一覧は 品質管理)。第2章の追跡信号で「±4は経験則・運用で±3〜±6」と幅があったのと同じく、ここも見逃しと誤検知のバランスをどう取るかの設計判断です。
5. 異常原因を検知する(コード)
管理状態の基準群(Phase I、最初の20群)から限界を引き、その後を監視します。第21群から工程平均が ずれる異常原因(段取りミスなど)を注入し、 管理図がいつ点を弾くかを見ます。追跡信号が水準シフトを検知したのと同じ運用です。
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
rng = np.random.default_rng(20)
mu0, sigma, n = 100.0, 2.0, 5
k_base = 20 # 管理状態の基準群(Phase I:ここから限界を引く)
k_total = 32
shift_at = 20 # 第21群(index 20)から工程平均が +1.5*sigma ずれる(異常原因)
shift = 1.5 * sigma
mu_series = np.full(k_total, mu0)
mu_series[shift_at:] = mu0 + shift
samples = rng.normal(mu_series[:, None], sigma, size=(k_total, n))
xbar = samples.mean(axis=1)
R = samples.max(axis=1) - samples.min(axis=1)
# Phase I(基準群=管理状態)から管理限界を推定し、その後を監視
A2, D3, D4 = 0.577, 0.0, 2.114
xbarbar = xbar[:k_base].mean()
Rbar = R[:k_base].mean()
ucl_x = xbarbar + A2 * Rbar
lcl_x = xbarbar - A2 * Rbar
out = np.where((xbar > ucl_x) | (xbar < lcl_x))[0]
first = int(out[0]) if out.size else None
print(f"工程平均シフト = 第{shift_at + 1}群から +1.5*sigma(= +{shift:.1f})")
print(f"Phase I 推定: Xbarbar={xbarbar:.3f} UCL={ucl_x:.3f} LCL={lcl_x:.3f}")
print(f"管理限界を最初に破った群 = 第{first + 1}群 Xbar={xbar[first]:.3f}")
print(f"検知の遅れ = {first - shift_at + 1} 群(シフト発生からの群数)")
print(f"シフト後に管理限界外となった群 = {[int(i + 1) for i in out if i >= shift_at]}")
fig, ax = plt.subplots(figsize=(11, 5))
g = np.arange(1, k_total + 1)
ax.plot(g, xbar, "o-", color="#1f77b4", label="群平均 Xbar")
ax.axhline(xbarbar, color="green", label="CL")
ax.axhline(ucl_x, ls="--", color="#d62728", label="UCL/LCL")
ax.axhline(lcl_x, ls="--", color="#d62728")
ax.axvline(shift_at + 0.5, ls=":", color="purple", label=f"第{shift_at + 1}群:工程平均シフト")
ax.plot(first + 1, xbar[first], "*", color="black", ms=18, label=f"検知(第{first + 1}群)")
ax.set_xlabel("サブグループ番号"); ax.set_ylabel("群平均 Xbar")
ax.set_title("異常原因(平均シフト)を Xbar管理図が検知:点が管理限界を突破")
ax.legend(loc="upper left"); plt.tight_layout(); plt.show()
出力:
工程平均シフト = 第21群から +1.5*sigma(= +3.0)
Phase I 推定: Xbarbar=99.614 UCL=102.745 LCL=96.484
管理限界を最初に破った群 = 第21群 Xbar=102.923
検知の遅れ = 1 群(シフト発生からの群数)
シフト後に管理限界外となった群 = [21, 22, 23, 26, 28, 29]
出力の意味:基準群から 図の限界は [96.484, 102.745]。工程平均が ずれた第21群(シフト直後)の が即座に UCL を突破——検知の遅れは1群でした。図では、紫の点線(第21群のシフト)の直後に青い点が赤い限界線を超え(★印)、その後も高い側に張り付きます。これは「ばらつきが大きくなったのか、平均がずれたのか」を現場に知らせ、原因(段取り・工具)を探す引き金です。第2章の追跡信号が需要シフトを第19期に検知したのと運用は同じ——基準を作り、外れを検知し、原因に手を打つ。違いは、追跡信号が予測のバイアスを、 管理図が工程の平均を見張ることだけです。
検知は確率的(ARL). 程度のシフトは1群で弾けましたが、 のような小さなずれは数群〜十数群かかることもあります。「管理状態でも約370群に1回は誤って鳴る( の誤警報0.27%)」「シフトを平均何群で検知するか(ARL)」のトレードオフは、 の設計思想そのもの(品質管理・第一種の過誤・第二種の過誤・検出力(2種類の誤りとトレードオフ・サンプルサイズ設計))。小さなシフトを早く拾いたいなら CUSUM や EWMA を使います(要最新確認)。
⚠️ よくある誤解
- 「管理限界と規格限界は同じ」ではない(最重要):管理限界 は工程の実際のばらつき()から決まる「工程がいつも通りか」の線、規格限界 は顧客・設計が要求する「製品が合格か」の線です。出どころも目的も別物で、管理図に規格線を引いてはいけません。工程が管理状態(管理限界内)でも規格を満たすとは限らず、その判定は工程能力(工程能力指数)の仕事です。
- 「管理状態=良い工程」ではない:管理状態は「予測可能なほど安定している」だけで、その安定したばらつきが規格に収まるかは別問題。管理状態かつ能力不足(限界内でも規格外品を出す)はふつうにあり得ます。安定(本稿)→能力(07-02)の順に評価します。
- 「点が中心からずれたら毎回調整する」ではない(tampering):偶然原因だけの揺らぎにいちいち反応して設定をいじると、かえってばらつきが増えます(デミングの漏斗実験=over-adjustment)。管理状態の点には手を出さないのが正解。調整するのは異常原因(限界超え・非ランダムな並び)を検知したときだけです。
- 「3σにした明確な理論的根拠がある」わけではない: は誤警報(第一種過誤、約0.27%)と見逃しのバランスを取った経験的な設計値で、理論から一意に決まる数字ではありません。導出と設計思想は 品質管理 へ。
関連ノート
- 予測誤差の評価と追跡信号(追跡信号=予測の管理図。基準→検知→対応の同じ運用思想)
- 品質管理(統計・ の根拠/係数 の導出/p・c管理図/判定ルールの理論。本章が運用、こちらが理論)
- 第一種の過誤・第二種の過誤・検出力(2種類の誤りとトレードオフ・サンプルサイズ設計)(統計・誤警報=第一種過誤、見逃し=第二種過誤。 のトレードオフの土台)
- 工程能力指数(次のトピック・管理状態を前提に「規格を満たせるか」を測る)
- 第8章 制約理論とリーン(源流で品質を作り込む=検査でなく工程で。SPC は自工程の異常を即検知する仕組み)
- オペレーションズ・マネジメント 全体目次