この記事でわかること
- numpy・pandasでCp・Cpkを計算する手順とコード
- 片側規格しかない場合のCpu・Cplの求め方
- CpとCpkが食い違う理由と、管理図とセットで見るべき順序
📌 前提知識:工程能力指数(Cp・Cpk)の計算とExcelでの求め方を読んでいると理解しやすくなります
客先から「工程能力を提出してください」と言われて、月ごと・特性ごとにCpkを出し直す。品質保証の担当者にとっては定番の作業ですが、対象が20特性もあると、Excelで1つずつ計算するだけで半日が消えます。
工程能力指数の計算は式が完全に決まっているため、Pythonに置き換えると効果が出やすい作業です。この記事では、軸径の測定データを例にCp・CpkをPythonで求める手順を整理します。
Pythonで工程能力を求める場面
- 多数の特性について定期的にCpkを出すとき(月次報告・客先提出)
- 測定データが自動で蓄積され、そこから直接集計したいとき
- 管理図の作成と工程能力の評価を一続きの処理にしたいとき
NG例(△): 1つの特性について一度だけ計算するなら、Excelのほうが確実に早く終わります。手順は工程能力指数(Cp・Cpk)の計算とExcelでの求め方で解説しています。
もうひとつのNG例が、工程が安定していない状態でCpkを計算してしまうことです。日によって平均が動いている工程の数値をまとめて計算しても、その値は現在の実力を表しません。順序としては管理図が先です(後述)。
例題|軸径の測定データ
Pythonで管理図を作る|X-R管理図の手順と同じデータを使います。旋盤工程の軸径を1日5個ずつ、5日間測定した25個です。規格は10.00±0.10mm(下限9.90/上限10.10)とします。
import numpy as np
import pandas as pd
data = [
[10.02, 10.05, 9.98, 10.01, 10.04],
[9.99, 10.03, 10.01, 9.97, 10.00],
[10.04, 10.06, 10.02, 10.05, 10.03],
[9.96, 10.00, 9.98, 10.02, 9.99],
[10.01, 10.02, 10.00, 10.03, 9.99],
]
x = pd.DataFrame(data).values.flatten() # 25個を1次元に
USL, LSL = 10.10, 9.90
平均と標準偏差を求める
ここで注意したいのが標準偏差の種類です。numpyの std は既定で母標準偏差(n で割る)を返します。工程能力では標本標準偏差(n−1 で割る)を使うため、ddof=1 を指定します。
mu = x.mean()
sigma = x.std(ddof=1) # ddof=1 が必須
print(f"mean = {mu:.5f}")
print(f"sd = {sigma:.5f}")
結果は平均 10.012mm、標準偏差 0.02614mm です。ExcelのSTDEV.S関数と同じ値です。ddof を指定し忘れると標準偏差が小さく出て、工程能力を実際より良く見積もってしまうため注意してください。
Cpを計算する
Cpは規格の幅が、工程のばらつき6σの何倍あるかを表します。
\[C_p = \frac{USL – LSL}{6\sigma}\]
cp = (USL - LSL) / (6 * sigma)
print(f"Cp = {cp:.4f}")
計算すると次のとおりです。
\[C_p = \frac{10.10 – 9.90}{6 \times 0.02614} = \frac{0.20}{0.15684} \approx 1.275\]
Cp = 1.275。ただしCpは平均が規格の中心にあると仮定した値で、中心からのずれを見ていません。実力を判断するにはCpkが必要です。
Cpkを計算する
Cpkは、上側と下側それぞれの余裕を計算して、小さいほうを採用します。
\[C_{pu} = \frac{USL – \bar{x}}{3\sigma}, \quad C_{pl} = \frac{\bar{x} – LSL}{3\sigma}\]
\[C_{pk} = \min(C_{pu},\ C_{pl})\]
cpu = (USL - mu) / (3 * sigma)
cpl = (mu - LSL) / (3 * sigma)
cpk = min(cpu, cpl)
print(f"Cpu = {cpu:.4f}")
print(f"Cpl = {cpl:.4f}")
print(f"Cpk = {cpk:.4f}")
実際の数値を入れます。
\[C_{pu} = \frac{10.10 – 10.012}{3 \times 0.02614} = \frac{0.088}{0.07842} \approx 1.122\]
\[C_{pl} = \frac{10.012 – 9.90}{3 \times 0.02614} = \frac{0.112}{0.07842} \approx 1.428\]
小さいほうを取って Cpk = 1.122 です。
CpとCpkの差が意味すること
この例では Cp=1.275 に対し Cpk=1.122 と、Cpkのほうが小さくなりました。この差は平均が規格中心からずれている量を表しています。
規格中心は10.00mmですが、実際の平均は10.012mmで、0.012mmだけ上限側に寄っています。そのため上側の余裕(Cpu=1.122)が下側(Cpl=1.428)より小さく、そちらが足を引っ張っています。
ここから読み取れる対策の方向は明確です。ばらつきを減らす前に、まず平均を規格中心へ寄せるほうが効率的です。刃物の位置補正で平均を10.00mmに合わせられれば、σがそのままでもCpkはCpと同じ1.275付近まで上がります。
一般的な目安である1.33を下回っているため、この工程は「規格は満たしているが余裕が十分ではない」状態です。判定基準の詳細は工程能力指数の目安一覧|Cp1.33が合格基準とされる根拠で解説しています。改善の進め方はCp・Cpk改善の手順にまとめています。
片側規格しかない場合
「上限だけ」「下限だけ」が決まっている特性では、存在する側のみを計算します。
def capability(x, usl=None, lsl=None):
mu = x.mean()
sigma = x.std(ddof=1)
if usl is not None and lsl is not None:
cp = (usl - lsl) / (6 * sigma)
cpk = min((usl - mu), (mu - lsl)) / (3 * sigma)
return cp, cpk
if usl is not None:
return None, (usl - mu) / (3 * sigma)
return None, (mu - lsl) / (3 * sigma)
片側規格ではCpが定義できないため、返り値をNoneにしています。表面粗さの上限や、強度の下限のように片側だけの特性は実務でよく出てきます。
管理図とセットで見る
工程能力指数は工程が安定していることを前提にした指標です。日によって平均が動いていたり、突発的なばらつきが混ざっていたりする工程の全データをまとめて計算しても、出てきた数値は現在の実力を表しません。
正しい順序は次のとおりです。
- 管理図で工程が安定状態にあることを確認する
- 安定していれば、そのデータで工程能力を計算する
- 安定していなければ、まず異常の原因を取り除く
今回のデータは管理図の記事で全群が管理限界内に収まることを確認済みなので、そのまま工程能力を計算して問題ありません。この順序を飛ばすと、不安定な工程の数値を「実力」として客先に提出してしまいます。
よくある質問
Q. numpyのstdでExcelと値が合いません。
ddof の指定が原因です。numpyの std は既定で ddof=0(母標準偏差)ですが、ExcelのSTDEV.S関数は標本標準偏差です。x.std(ddof=1) と書けば一致します。指定を忘れると標準偏差が小さく出るため、工程能力を過大評価してしまいます。
Q. CpkとPpkはどちらを計算すべきですか?
用途が違います。Cpkは群内のばらつきから短期の実力を、Ppkは全体のばらつきから長期の実績を評価します。客先要求がどちらを指しているかを確認してください。違いはCpkとPpkの違いで解説しています。
Q. Cpkがマイナスになりました。
平均が規格の外に出ている状態です。計算自体は誤りではなく、工程の平均そのものが規格を外れていることを示しています。この場合はばらつきの議論より先に、平均を規格内へ戻す調整が必要です。
まとめ
- 標準偏差は
x.std(ddof=1)。既定のddof=0のままだと工程能力を過大評価する - Cp=規格幅÷6σ、Cpk=上下の余裕のうち小さいほう。今回の例はCp=1.275/Cpk=1.122
- CpとCpkの差は平均の中心からのずれ。差が大きいなら、ばらつき削減より先に中心合わせが効く
- 片側規格ではCpは定義できず、存在する側のCpuまたはCplだけを計算する
- 工程能力は安定状態が前提。管理図で確認してから計算する
1特性を一度だけならExcel、多数の特性を定期的に出すならPython、という使い分けです。工程能力を計算する前に、まずPythonで管理図を作る|X-R管理図の手順で工程が安定しているかを確認してください。さらに体系的に学びたい方向けに、レベル別のおすすめ書籍を統計学・実験計画法のおすすめ本まとめで紹介しています。

