Cpk is the process capability index. It tells you whether your manufacturing process can consistently produce units within specification limits, accounting for how centered the process mean is between those limits. A Cpk of 1.33 or higher is the standard minimum for production processes.
The Formula
Cpk takes the worse of two ratios: the distance from the process mean to each spec limit, divided by 3 times the process standard deviation.
Cpk = min((USL - X̄) / 3σ, (X̄ - LSL) / 3σ)
Where:
- USL is the upper specification limit
- LSL is the lower specification limit
- X̄ is the process mean
- σ is the sample standard deviation (n-1 divisor)
The "min" is what makes Cpk useful. It always reports the worst side. If your process drifts toward one limit, Cpk drops even if the other side has plenty of room.
What Cpk Values Mean
| Cpk | Interpretation | Approx. Defect Rate |
|---|---|---|
| < 0.67 | Poor. Significant portion of units out of spec. | > 45,500 ppm |
| 0.67 | Process spread equals spec width on the worst side. | ~45,500 ppm |
| 1.0 | Barely capable. The 3σ edge touches the spec limit. | ~2,700 ppm |
| 1.33 | Standard minimum for production. 25% buffer for drift. | ~63 ppm |
| 1.67 | Good. Required for safety-critical parameters. | ~0.6 ppm |
| 2.0 | Excellent. Process uses half the spec window or less. | ~0.002 ppm |
Most automotive (IATF 16949) and aerospace (AS9100) standards require Cpk >= 1.33 for production parameters. Safety-critical dimensions typically need 1.67.
Cpk vs Cp
Cp measures potential capability (how much of the spec window your variation uses) but ignores centering. Cpk accounts for centering.
When Cp equals Cpk, the process is perfectly centered. When Cpk is much lower than Cp, the process mean has drifted off-center. Fix the centering (a calibration issue) and Cpk rises to match Cp.
Cpk vs Ppk
Cpk uses the sample standard deviation (n-1 divisor), which reflects short-term variation. Ppk uses the overall standard deviation (n divisor), which captures long-term variation across batches, shifts, and operators.
If Ppk is much lower than Cpk, something is changing between production runs that your short-term samples don't capture. Investigate batch-to-batch variation, operator differences, or environmental shifts.
How TofuPilot Calculates Cpk
Define measurements with upper and lower limits in your test code. TofuPilot computes Cpk automatically from the accumulated production data.
import openhtf as htf
from openhtf.util import units
from tofupilot.openhtf import TofuPilot
@htf.measures(
htf.Measurement("output_voltage")
.in_range(minimum=2.45, maximum=2.55)
.with_units(units.VOLT),
htf.Measurement("leakage_current")
.in_range(maximum=0.001)
.with_units(units.AMPERE),
)
def validate_output(test):
test.measurements.output_voltage = 2.501
test.measurements.leakage_current = 0.00042
def main():
test = htf.Test(validate_output)
with TofuPilot(test):
test.execute(test_start=lambda: "UNIT-0042")
if __name__ == "__main__":
main()Open the Process Control page for your procedure, select a measurement, and switch to the Capability tab. TofuPilot shows Cpk alongside Cp, Cpl, and Cpu, with hover tooltips for each formula.
The Cpk trend chart tracks daily Cpk over time so you can see whether capability is improving or degrading. Reference lines at 0.67, 1.0, and 1.33 make it easy to spot when the process crosses a threshold.
Common Pitfalls
Not enough data. Cpk from 10 units is unreliable. Wait for 30+ data points before making process decisions.
One-sided specs. When you only set a maximum (like leakage current), TofuPilot computes a one-sided capability index (Cpu only). That's correct. You can't calculate a two-sided Cpk without both limits.
Mixing populations. Calculating Cpk across data from two stations with different calibrations inflates σ and underestimates capability. Filter by station first.