「うちの工程、Cpは1.67もあるんですよ。優秀ですよね!」
……ちょっと待ってください。その言葉、Cpkも確認してから言っていますか?
もしCpだけ見て喜んでいるなら、それはまるで「車のエンジン性能は抜群だけど、ハンドルが10度曲がっている」状態を見逃しているのと同じ。いくら速く走れても、まっすぐ進めなければ意味がないんです。
今回は、製造現場で「当たり前のように使われているけど、実はちゃんと理解されていない」工程能力指数の世界を、数式・コード・シミュレーションの3方向からガッツリ掘り下げます。
ざっくり本質――「広さ」と「真ん中」、どっちが大事?
工程能力指数を一言で表すならこうです。
Cpは「規格に対して、どれだけ余裕を持ってばらついているか」
Cpkは「規格に対して、どれだけ安全な位置に平均があるか」
たとえば、駐車場の枠(規格)に車(製品)を停める場面を想像してみてください。
- Cpが高い = 車体がコンパクトで、枠内に余裕で収まるサイズ
- Cpkが高い = 車が枠のど真ん中に停まっている
Cpが高くても、枠の端っこに寄せて停めていたら(平均がずれていたら)、Cpkは低くなります。駐車スペースに余裕があるのに、なぜかギリギリに停める――現場あるあるですね。
数式で理解する――たったこれだけの式に全てが詰まっている
工程能力指数の心臓部は、以下の3つの式です。
C_p = \frac{USL-LSL}{6\sigma}
C_{pk}= \min\!\left(\frac{USL-\mu}{3\sigma},\frac{\mu-LSL}{3\sigma}\right)
C_{pm}= \frac{USL-LSL}{6\tau},\quad \tau = \sqrt{\sigma^2+(\mu-T)^2}
それぞれの意味を日本語に翻訳すると:
- USL(上限規格):「ここまでならOK」という上限
- LSL(下限規格):「ここからならOK」という下限
- μ(平均):今の工程の中心位置
- σ(標準偏差):工程のばらつきの大きさ
- T(目標値):本来あるべき中心位置
Cpは「規格の幅 ÷ 6σ」つまり規格に対してばらつきがどれだけ小さいかだけを見ています。平均の位置は無関係。
Cpkは「上限までの余裕」と「下限までの余裕」のうち、小さい方を採用します。これで平均のズレも加味されるわけです。
Cpmはさらに「目標値Tからのズレ」も考慮した、より厳しい指標。現場ではCp/Cpkが主流ですが、Cpmを知っておくと「本当に工程は狙い通りか?」を確認できます。
コードで実装する――ブラウザで動く!工程能力指数計算機
ここからが本番。上の式をそのままJavaScriptで書いてみます。このコードは、今回のシミュレーターのコアロジックを完全再現したものです。
/**
* 工程能力指数 計算関数
* @param {number[]} data - 測定データ配列
* @param {number} usl - 上限規格
* @param {number} lsl - 下限規格
* @param {number} [target] - 目標値(省略可、Cpm計算用)
* @returns {Object} Cp, Cpk, Cpm, Pp, Ppk, 不良率ppm など
*/
function calcProcessCapability(data, usl, lsl, target = null) {
const n = data.length;
// 基本統計量
const mean = data.reduce((a, b) => a + b, 0) / n;
const variance = data.reduce((sum, x) => sum + (x - mean) ** 2, 0) / (n - 1);
const stdDev = Math.sqrt(variance);
// 規格幅
const specWidth = usl - lsl;
// ★ Cp: 短期工程能力(グループ内ばらつき前提だが、ここでは全体σで代用)
const cp = specWidth / (6 * stdDev);
// ★ Cpk: 平均ズレ考慮
const cpu = (usl - mean) / (3 * stdDev);
const cpl = (mean - lsl) / (3 * stdDev);
const cpk = Math.min(cpu, cpl);
// ★ Cpm: 目標値からのズレも考慮
let cpm = null;
if (target !== null) {
const tau = Math.sqrt(stdDev ** 2 + (mean - target) ** 2);
cpm = specWidth / (6 * tau);
}
// ★ Pp/Ppk: 長期工程能力(全体標準偏差を使う点は同じだが、
// 本来は時系列データの全体σを使う。ここではデータ全体σで代用)
const pp = cp; // 全体σ = グループ内σ の仮定
const ppk = cpk;
// 不良率ppm(正規分布仮定)
function normCdf(x) {
// 近似式(Abramowitz and Stegun)
const a1 = 0.254829592, a2 = -0.284496736, a3 = 1.421413741;
const a4 = -1.453152027, a5 = 1.061405429, p = 0.3275911;
const sign = x < 0 ? -1 : 1;
x = Math.abs(x) / Math.sqrt(2);
const t = 1 / (1 + p * x);
const y = 1 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x);
return 0.5 * (1 + sign * y);
}
const zUpper = (usl - mean) / stdDev;
const zLower = (mean - lsl) / stdDev;
const defectRate = (1 - normCdf(zUpper)) + normCdf(-zLower);
const ppm = defectRate * 1e6;
return {
mean: mean.toFixed(3),
stdDev: stdDev.toFixed(3),
cp: cp.toFixed(3),
cpk: cpk.toFixed(3),
cpu: cpu.toFixed(3),
cpl: cpl.toFixed(3),
cpm: cpm ? cpm.toFixed(3) : 'N/A',
pp: pp.toFixed(3),
ppk: ppk.toFixed(3),
ppm: Math.round(ppm)
};
}
// 使用例
const sampleData = [10.1, 10.3, 9.8, 10.0, 10.2, 9.9, 10.1, 10.0, 9.7, 10.4];
const result = calcProcessCapability(sampleData, 10.5, 9.5, 10.0);
console.log(result);
// 出力例: { mean: '10.05', stdDev: '0.213', cp: '0.783', cpk: '0.704', ... }
このコード、たった40行で工程能力指数の計算が完結しています。ポイントは:
- 標準偏差は不偏分散(n-1で割る) で計算。サンプル数が少ない場合にバイアスを補正
- Cpkはcpuとcplの小さい方。これで「弱点側」が評価される
- 不良率ppmは正規分布の累積分布関数を近似式で計算。シミュレーターと同じロジック
数値例で確かめる――「え、そんなに違うの?」を数字で体感
実際に、ある部品の寸法データで計算してみましょう。
条件:
- 上限規格(USL):10.5 mm
- 下限規格(LSL):9.5 mm
- 目標値(T):10.0 mm
- 測定データ:
[10.1, 10.3, 9.8, 10.0, 10.2, 9.9, 10.1, 10.0, 9.7, 10.4]
計算過程:
Step1:基本統計量
- 平均 μ = (10.1+10.3+9.8+10.0+10.2+9.9+10.1+10.0+9.7+10.4) / 10 = 10.05 mm
- 分散 = 各データと平均の差の二乗和 ÷ (10-1)
- 差の二乗和 = (0.05²)+(0.25²)+(-0.25²)+(-0.05²)+(0.15²)+(-0.15²)+(0.05²)+(-0.05²)+(-0.35²)+(0.35²)
- = 0.0025+0.0625+0.0625+0.0025+0.0225+0.0225+0.0025+0.0025+0.1225+0.1225 = 0.425
- 分散 = 0.425 / 9 = 0.0472
- 標準偏差 σ = √0.0472 = 0.217 mm
Step2:Cpの計算
- Cp = (10.5 - 9.5) / (6 × 0.217) = 1.0 / 1.302 = 0.768
Step3:Cpkの計算
- CPU = (10.5 - 10.05) / (3 × 0.217) = 0.45 / 0.651 = 0.691
- CPL = (10.05 - 9.5) / (3 × 0.217) = 0.55 / 0.651 = 0.845
- Cpk = min(0.691, 0.845) = 0.691
Step4:PPMの計算
- 上限側Z値 = (10.5 - 10.05) / 0.217 = 2.07σ
- 下限側Z値 = (10.05 - 9.5) / 0.217 = 2.53σ
- 上限超え確率 = 1 - Φ(2.07) ≈ 1 - 0.9808 = 0.0192
- 下限割れ確率 = Φ(-2.53) ≈ 0.0057
- 合計不良率 = 0.0192 + 0.0057 = 0.0249 = 2.49%
- PPM = 0.0249 × 1,000,000 = 約24,900 ppm
結果の解釈:
- Cp = 0.768 → 規格幅に対してばらつきが大きい(1.0未満なので「能力不足」)
- Cpk = 0.691 → 平均も上限側に0.05mm偏っている
- PPM = 24,900 → 1万個中249個が不良品
「Cp=0.77、Cpk=0.69」――この数値を見て、あなたの現場はどう動きますか?
シミュレーターで遊ぶ――「もしも」を3回試してみよう
ここからは、実際に工程能力指数 Cp/Cpk シミュレーターを開いて、一緒に実験してみましょう。
実験1:平均をずらすとCpkだけが激変する
設定:
- USL=10, LSL=0, σ=1(固定)
- μを5(中心)→ 7(右にズレ)→ 9(限界ギリギリ)と変化
結果:
| μ | Cp | Cpk | 備考 |
|---|---|---|---|
| 5 | 1.67 | 1.67 | 理想的な状態 |
| 7 | 1.67 | 1.00 | Cpは変わらないのにCpkは低下! |
| 9 | 1.67 | 0.33 | ほぼ規格外れ |
何が起きたか?
Cpは「ばらつきの小ささ」だけを見るので、σが変わらなければ一定。でもCpkは「上限までの距離」を見るので、平均が上限に近づくほど悪化します。
現場での教訓: 「Cp=1.67だから安心」は大間違い。平均がずれていると、Cpkはガタ落ちします。
実験2:ばらつきを減らすとCpもCpkも上がるが……
設定:
- USL=10, LSL=0, μ=6(中心から+1ズレ)
- σを2 → 1 → 0.5 と減少
結果:
| σ | Cp | Cpk | PPM |
|---|---|---|---|
| 2.0 | 0.83 | 0.67 | 約22,800 |
| 1.0 | 1.67 | 1.33 | 約66 |
| 0.5 | 3.33 | 2.67 | 約0.0003 |
何が起きたか?
ばらつきを半分にすると、Cpは2倍、Cpkも約2倍に。不良率ppmは3桁以上改善します。
現場での教訓: 平均のズレを直すのも大事ですが、ばらつきを減らす方が効果が劇的。ただし、ばらつきを減らすには設備の精度向上や材料の安定化が必要で、コストがかかることも。
実験3:Cpmで「狙い通り感」を測る
設定:
- USL=10, LSL=0, T=5(目標値)
- ケースA:μ=5, σ=1(理想)
- ケースB:μ=6, σ=1(平均ズレ)
- ケースC:μ=5, σ=2(ばらつき大)
結果:
| ケース | Cp | Cpk | Cpm |
|---|---|---|---|
| A | 1.67 | 1.67 | 1.67 |
| B | 1.67 | 1.33 | 1.18 |
| C | 0.83 | 0.83 | 0.83 |
何が起きたか?
Cpmは「目標値からのズレ」も評価するので、平均がズレているBではCpやCpkよりさらに低い値になります。これは「工程が狙いから外れている」ことを鋭く指摘しています。
現場での教訓: 「Cpk=1.33あるからOK」ではなく、Cpmも見ることで「本当に目標値に合わせられているか」をチェックできます。特に多工程で累積誤差が問題になる場合、Cpmは強力なツールになります。
現場でハマるポイント――「数字の罠」に騙されるな
ここまで読んで「よし、さっそくCpk計算してみよう!」と思ったあなた。ちょっと待って。以下の落とし穴を知らずに使うと、誤った判断をしてしまうかもしれません。
落とし穴1:データが正規分布じゃないと、指数は意味をなさない
Cp/Cpkの計算は、データが正規分布に従うことが大前提。でも実務では:
- 二山分布(異なるロットや設備のデータが混ざっている)
- 裾野が長い分布(たまに極端な値が出る)
- 打ち切り分布(検査で規格外れを除去した後のデータ)
……こんなデータで計算すると、Cpk=1.33でも実際の不良率はもっと高いかもしれません。
対策: 必ずヒストグラムを確認しましょう。シミュレーターでもヒストグラムが表示されます。「きれいな釣り鐘型」から大きく外れていたら、まずは工程を安定させることから始めます。
落とし穴2:サンプル数が少なすぎると、指数の信頼性がガタ落ち
「とりあえず5個だけ測ってCpk計算してみました」――これ、ほぼ無意味です。
標準偏差の推定精度はサンプル数に大きく依存します。n=5だと、真の標準偏差に対して最大で約2倍の誤差が出ることも。
目安:
- n=20〜30:実用的な最低ライン
- n=50以上:まずまず信頼できる
- n=100以上:かなり安定
シミュレーターの説明にも「最低20〜30個」とあります。少ないデータで出したCpkを過信しないこと。
落とし穴3:Cp/Cpkが高くても「不良ゼロ」ではない
Cpk=1.33(4σ相当)でも、片側で約33ppm、両側で約66ppmの不良が確率的に発生します。
「え、Cpk=1.33もあるのに不良が出るの?」
そうです。これは確率の話。「Cpk=1.33」は「不良が絶対に出ない」という意味ではなく、「不良が出るリスクが低い」という意味です。
特に量産品で数千万個単位の生産がある場合、66ppmでも年間数百個の不良が発生する計算になります。
落とし穴4:規格値そのものが間違っているかもしれない
「うちの規格は±0.5mmだから、Cpkを1.33以上にしなきゃ」
……その規格、本当に必要ですか?
機能上は±0.8mmまで許容できるのに、無理に狭い規格で管理しているケースは少なくありません。規格を広げられれば、Cpkは一気に改善します。
対策: まずは「その規格値は、製品の機能や顧客要求から本当に必要か?」を検証しましょう。無駄に厳しい規格は、現場のコストを増やすだけです。
まとめ――「なんとなくCpk」から「ちゃんとCpk」へ
今日のポイントを3つに絞ります。
- Cpは「ばらつきの小ささ」、Cpkは「ばらつきの小ささ+平均の位置」。両方見ないと工程の本当の姿は見えない
- Cpkが低いときの改善策は「平均を規格中心に合わせる」か「ばらつきを減らす」の2択。効果が大きいのは後者だが、コストとのバランスが重要
- 数字を盲信しない。正規分布の仮定、サンプル数、規格値の根拠――これらの前提条件を常に確認する習慣を
そして、実際に手を動かして試せるのが、今回紹介したシミュレーターです。
▶ 工程能力指数 Cp/Cpk シミュレーター — ブラウザで即動作、登録不要
あなたの現場のデータを入力して、CpとCpkの関係を自分の目で確かめてみてください。「思っていたのと違う」という発見があるかもしれません。
NovaSolverでは、今回のシミュレーターを含む1,600以上の工学シミュレーターを無料で公開しています。品質管理だけじゃなく、材料力学や流体力学、制御工学まで。気になったら覗いてみてください。
「え、うちの工程、Cpは高いのにCpkが低い?」
その違和感、ちゃんと向き合う価値があります。今日からあなたも、「Cpkファースト」 で工程を見てみませんか?