Mímisbrunnr知恵の泉

← オペレーションズマネジメント 一覧

🎓 レベル:標準 | 重要度:A(必須)

📎 前提:統計的工程管理(管理状態が能力評価の前提) | 定義・導出(Cp,CpkC_p,C_{pk} と不良率の対応):品質管理(統計) | 不良率の土台:正規分布(標準正規・標準化)(裾確率 Φ\Phi) | 次:シックスシグマと検査設計

要点(BLUF)

1. CpC_pCpkC_{pk}——ばらつきと中心ずれを分ける

規格上限 USLUSL・規格下限 LSLLSL・工程の標準偏差 σ\sigma・平均 μ\mu に対し、

Cp=USLLSL6σ,Cpk=min ⁣(USLμ3σ, μLSL3σ)C_p=\frac{USL-LSL}{6\sigma},\qquad C_{pk}=\min\!\left(\frac{USL-\mu}{3\sigma},\ \frac{\mu-LSL}{3\sigma}\right)

中心が規格中心に一致していれば Cpk=CpC_{pk}=C_p、ずれていれば Cpk<CpC_{pk}<C_pCpC_p は工程の素質、CpkC_{pk} は実戦成績で、両方が要るのは「CpC_p が中心ずれを見逃す」からです(定義の詳しい導出は 品質管理)。

2. 能力 → 不良率(PPM)→ シグマ水準

OM が能力指数を使うのは、それが不良率に翻訳できるからです。工程が正規 N(μ,σ2)N(\mu,\sigma^2) なら、規格外れ確率は両裾の和(正規分布(標準正規・標準化)):

P(不良)=Φ ⁣(LSLμσ)下外れ+1Φ ⁣(USLμσ)上外れP(\text{不良})=\underbrace{\Phi\!\left(\frac{LSL-\mu}{\sigma}\right)}_{\text{下外れ}}+\underbrace{1-\Phi\!\left(\frac{USL-\mu}{\sigma}\right)}_{\text{上外れ}}

これに 10610^6 を掛けると PPM(百万分率)。中心ずれが大きい工程では寄った側の片裾がほぼすべてを占めるので、CpkC_{pk} から最寄り規格までの距離 =3Cpk=3C_{pk} シグマだけで PPM をほぼ言い当てられます。

シグマ水準(最寄り規格まで)=3Cpk,片側 PPM(1Φ(3Cpk))×106\text{シグマ水準(最寄り規格まで)}=3\,C_{pk},\qquad \text{片側 PPM}\approx\bigl(1-\Phi(3C_{pk})\bigr)\times10^6

このシグマ水準 =3Cpk=3C_{pk} が、第7-3のシックスシグマにつながります(ただし 6σ=3.4 DPMO は1.5σシフトの約束で、ここの短期・シフト無しの対応とは別——詳細は シックスシグマと検査設計)。

3. 能力を不良率に翻訳する(コード)

規格 LSL=90, USL=110LSL=90,\ USL=110、目標100。中心一致で σ\sigma を変えた3工程と、μ=104\mu=104 に**+4ずれた**工程を scipy.stats.norm で比較し、Cp,CpkC_p,C_{pk} と PPM を出します。

import numpy as np
import pandas as pd
from scipy.stats import norm

# 規格:下限 LSL=90・上限 USL=110・目標(中心)100
LSL, USL, target = 90.0, 110.0, 100.0

def capability(mu, sigma):
    Cp = (USL - LSL) / (6 * sigma)
    Cpk = min((USL - mu) / (3 * sigma), (mu - LSL) / (3 * sigma))
    p_low = norm.cdf((LSL - mu) / sigma)           # 規格下外れ
    p_high = 1 - norm.cdf((USL - mu) / sigma)       # 規格上外れ
    ppm = (p_low + p_high) * 1e6                     # 不良率(百万分率)
    return Cp, Cpk, ppm

# 中心ずれ・ばらつきを変えた4工程を比較
cases = [
    ("中心一致・ばらつき大", 100.0, 3.0),
    ("中心一致・標準",       100.0, 2.5),
    ("中心一致・ばらつき小", 100.0, 2.0),
    ("中心ずれ +4・標準",    104.0, 2.5),
]
rows = []
for name, mu, sigma in cases:
    Cp, Cpk, ppm = capability(mu, sigma)
    rows.append({"工程": name, "mu": mu, "sigma": sigma,
                 "Cp": Cp, "Cpk": Cpk, "不良率PPM": ppm})
df = pd.DataFrame(rows)
print(df.to_string(index=False, float_format=lambda x: f"{x:.3f}"))

print()
base_Cp, base_Cpk, base_ppm = capability(104.0, 2.5)
same_Cp, same_Cpk, same_ppm = capability(100.0, 2.5)
print(f"中心ずれ工程  : Cp={base_Cp:.3f}  Cpk={base_Cpk:.3f}  PPM={base_ppm:.0f}")
print(f"中心を合わせる: Cp={same_Cp:.3f}  Cpk={same_Cpk:.3f}  PPM={same_ppm:.0f}")
print(f"Cp は同じ {base_Cp:.3f} でも、中心ずれで Cpk {base_Cpk:.3f} -> {same_Cpk:.3f}、PPM {base_ppm:.0f} -> {same_ppm:.0f}")

出力:

        工程      mu  sigma    Cp   Cpk   不良率PPM
中心一致・ばらつき大 100.000  3.000 1.111 1.111  858.121
   中心一致・標準 100.000  2.500 1.333 1.333   63.342
中心一致・ばらつき小 100.000  2.000 1.667 1.667    0.573
中心ずれ +4・標準 104.000  2.500 1.333 0.800 8197.547

中心ずれ工程  : Cp=1.333  Cpk=0.800  PPM=8198
中心を合わせる: Cp=1.333  Cpk=1.333  PPM=63
Cp は同じ 1.333 でも、中心ずれで Cpk 0.800 -> 1.333、PPM 8198 -> 63

出力の意味:中心一致なら σ\sigma323\to2 と縮めるだけで Cp=CpkC_p=C_{pk}1.1111.6671.111\to1.667、PPM は 8580.57858\to0.57桁で改善します。決定的なのは最後の2行——同じ Cp=1.333C_p=1.333 でも、μ\mu が+4ずれただけで CpkC_{pk}1.3330.8001.333\to0.800 に落ち、PPM は 63819863\to8198 と130倍に跳ね上がる。ばらつき(CpC_p)は一級品なのに、中心がずれているせいで不良が大量に出ているわけです。CpC_p だけ見て「良い工程」と判断するとこの片寄りを完全に見逃します

4. 中心ずれ vs ばらつき低減——どちらを直すか

CpC_p が高く CpkC_{pk} が低い(=中心ずれ)工程を改善するとき、打ち手は2つあります。

中心ずれが効いている工程では、案Aが圧倒的に費用対効果が高いのが普通です。次のコードで、Cpk=0.8C_{pk}=0.8(8198 PPM)の中心ずれ工程に対し、案A(再センタリング)と案B(ばらつき20%-20\%)の効きを比べます。

5. 改善意思決定とシグマ水準対応表(コード)

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from scipy.stats import norm

LSL, USL, target = 90.0, 110.0, 100.0

def ppm_of(mu, sigma):
    return (norm.cdf((LSL - mu) / sigma) + (1 - norm.cdf((USL - mu) / sigma))) * 1e6

def cpk_of(mu, sigma):
    return min((USL - mu) / (3 * sigma), (mu - LSL) / (3 * sigma))

mu0, sigma0 = 104.0, 2.5      # 出発点:中心が +4 ずれた工程(Cpk=0.8)
muA, sigmaA = 100.0, 2.5      # 案A:中心を目標へ戻す(設定変更=安い)
muB, sigmaB = 104.0, 2.0      # 案B:中心はそのまま、ばらつき -20%(工程改善=高い)

for tag, mu, sigma in [("出発点(中心ずれ)", mu0, sigma0),
                       ("A:中心を戻す", muA, sigmaA),
                       ("B:ばらつき-20%", muB, sigmaB)]:
    print(f"{tag:14s} mu={mu:5.1f} sigma={sigma:.2f}  Cpk={cpk_of(mu, sigma):.3f}  PPM={ppm_of(mu, sigma):8.1f}")

sigma_needed = (USL - mu0) / (3 * (4.0 / 3.0))   # Bで中心ずれのまま Cpk=1.333 にする sigma
print(f"\nBで中心ずれのまま Cpk=1.333 にするには sigma {sigma0:.2f} -> {sigma_needed:.2f}"
      f"({(1 - sigma_needed / sigma0) * 100:.0f}%削減が必要)")

print("\nCpk    sigma水準(3Cpk)   最寄り規格PPM(片側)")
for cpk in [0.80, 1.00, 1.33, 1.50, 1.67, 2.00]:
    z = 3 * cpk
    print(f"{cpk:.2f}        {z:.2f}          {(1 - norm.cdf(z)) * 1e6:12.4f}")

# 図:3工程の分布と規格限界
fig, ax = plt.subplots(figsize=(11, 5.5))
xs = np.linspace(86, 116, 600)
series = [(f"出発点 Cpk={cpk_of(mu0, sigma0):.2f}{ppm_of(mu0, sigma0):.0f}PPM)", mu0, sigma0, "#d62728"),
          (f"A:中心を戻す Cpk={cpk_of(muA, sigmaA):.2f}{ppm_of(muA, sigmaA):.0f}PPM)", muA, sigmaA, "#1f77b4"),
          (f"B:ばらつき-20% Cpk={cpk_of(muB, sigmaB):.2f}{ppm_of(muB, sigmaB):.0f}PPM)", muB, sigmaB, "#2ca02c")]
for label, mu, sigma, color in series:
    ax.plot(xs, norm.pdf(xs, mu, sigma), color=color, lw=2, label=label)
ymax = ax.get_ylim()[1]
ax.axvline(LSL, color="black", ls="--"); ax.axvline(USL, color="black", ls="--")
ax.text(LSL, ymax * 0.96, "LSL", ha="right"); ax.text(USL, ymax * 0.96, "USL", ha="left")
ax.axvline(target, color="gray", ls=":", label="目標(中心)")
ax.set_xlabel("特性値"); ax.set_ylabel("確率密度")
ax.set_title("中心を戻す(A) vs ばらつき低減(B):中心ずれ工程はまず中心合わせが効く")
ax.legend(); plt.tight_layout(); plt.show()

出力:

出発点(中心ずれ)      mu=104.0 sigma=2.50  Cpk=0.800  PPM=  8197.5
A:中心を戻す        mu=100.0 sigma=2.50  Cpk=1.333  PPM=    63.3
B:ばらつき-20%     mu=104.0 sigma=2.00  Cpk=1.000  PPM=  1349.9

Bで中心ずれのまま Cpk=1.333 にするには sigma 2.50 -> 1.50(40%削減が必要)

Cpk    sigma水準(3Cpk)   最寄り規格PPM(片側)
0.80        2.40             8197.5359
1.00        3.00             1349.8980
1.33        3.99               33.0366
1.50        4.50                3.3977
1.67        5.01                0.2722
2.00        6.00                0.0010

出力の意味:出発点 Cpk=0.8C_{pk}=0.8(8198 PPM)に対し、案A(中心を目標へ戻すだけ)で Cpk=1.333C_{pk}=1.333・PPM 63——不良が130分の1になります。一方、案B(ばらつき20%-20\%)でも Cpk=1.0C_{pk}=1.0・PPM 1350 にしか下がらず、案Aに遠く及びません。しかも案Bで案Aと同じ Cpk=1.333C_{pk}=1.333 を出すには、σ\sigma2.51.52.5\to1.5 と40%も削る必要があり、これは大改造です。中心ずれが効いている工程は、まず中心を合わせる——設定の一手で能力が満額戻るからです。下の対応表は CpkC_{pk} → シグマ水準(=3Cpk=3C_{pk})→ 最寄り規格 PPM の翻訳で、Cpk=1.33C_{pk}=1.33 で約33 PPM、1.671.67 で0.27 PPM、2.02.0 で約0.001 PPM(短期・シフト無し)。図では、赤(出発点)の右裾が USL=110USL=110 を超えて漏れているのに対し、青(再センタリング)は両裾とも規格内に深く収まり、緑(ばらつき低減だが片寄ったまま)は細いが右裾がまだ USLUSL に届いています。「細くする」より「中心に戻す」方が、この工程では裾を断つのに効くことが一目でわかります。

⚠️ よくある誤解

関連ノート