Al Kindi Analytics · demo project

Follow the stops in order, in the app. Download the demo files first.

Demo project: Seal thickness, from complaint to control

A complete Black Belt project run end to end in Analytics. You load each file, click where this guide says, and you should see the same numbers. If you do, you have learned the app and the method together. If you don't, the If something doesn't match section at the end tells you where to look.

Who this is for. A Green or Black Belt whose training went quickly and who still has questions such as "why am I checking normality?", "my data is text, so what now?" or "the data doesn't say what the team was sure of". Every stop answers those questions for this project, and the answers carry over to yours.

How each stop is laid out

One rule for the whole project. Call the characteristic Seal_Thickness_mm everywhere. The project board matches records by that name, and a different spelling in one study makes the board look broken.


Eight words you will meet

Read these once before you start. Every stop uses them.

Word What it means, in plain words
Specification limits (LSL, USL) What the customer allows for one part. Set by the customer or the design, not by your data.
Control limits What the process does by itself when nothing unusual is happening. Calculated from your data. Never mix them up with specification limits.
Subgroup A few parts made close together (here, 5 in a row). Differences inside a subgroup are short-term noise. Differences between subgroups mean something changed.
Stable (in control) Only ordinary, random variation, with no point outside the control limits. Only a stable process has a capability you can promise.
Within σ and overall σ Short-term spread (inside subgroups) and whole-period spread. Cp and Cpk use within; Pp and Ppk use overall.
p-value If the suspected cause truly had no effect, the p-value is the chance of seeing a difference this large by luck alone. Small (below 0.05) means luck is a poor explanation. It says nothing about how big the effect is.
Confidence interval The range of values the true number could plausibly take, given your data. If the interval contains your goal, your data cannot yet decide.
Effect (in an experiment) How much the Y changes when one factor moves from its low setting to its high setting.

The files

Get them with Download the demo files on the app's front page. They are listed here in the order you use them.

File Phase What it is Rows
DP1_define_reject_log_june.csv Define One row per rejected seal in June, reason typed by the inspector 312
DP2_measure_gauge_study.csv Measure Gage R&R: 10 parts × 3 operators × 3 trials 90
DP3_measure_baseline_june.csv Measure 25 subgroups of 5 seals, one subgroup a day, with die temperature, line speed and shift 125
DP4_analyze_by_subgroup.csv Analyze The same June data, one row per subgroup 25
DP5_improve_doe_july.csv Improve A designed experiment: 3 factors, 2 replicates, 4 centre points 20
DP6_improve_pilot_august.csv Improve One month at the new settings, 30 subgroups of 5 150
DP7_control_before_after.csv Control June and August stacked, with a Phase column 275

DP2 and DP6 are the same data as the Seal thickness worked example, so the numbers in that example and in this guide agree.

The scenario. An injection-moulded gasket line. Seal thickness is the customer characteristic. Specification 2.000 ± 0.150 mm, so LSL 1.850, USL 2.150, target 2.000. About 5,400 seals were made in June.


DEFINE

Stop 1: What is actually going wrong?

Do this. Load DP1_define_reject_log_june.csv. Open Pareto. Category variable = Reject_Reason. Leave the count variable on None (count occurrences). Generate.

You should see eight bars, with "Too thick" appearing twice: 162 in one bar and 9 in another, near the end. (exact)

That's not an app fault. Nine rows were typed as Too thick with a space at the end, and to a computer that is a different word. Go to Reshape, filter and clean → Clean, tick Trim whitespace from text, apply, and use the cleaned data. Run the Pareto again:

Reason Count % Cumulative %
Too thick 171 54.8 54.8
Surface flash 58 18.6 73.4
Short shot 37 11.9 85.3
Edge damage 21 6.7 92.0
Contamination 13 4.2 96.2
Unclassified 11 3.5 99.7
Too thin 1 0.3 100.0

(exact)

Why this step. A project needs one Y. The Pareto chooses it from evidence rather than from whoever complained most recently. Here one reason is more than half of all rejects, so the project is about seal thickness running high. It is not about thickness in general: one seal in 312 was too thin.

What if your data isn't like this.

Show the math. % = count ÷ total = 171 ÷ 312 = 54.8%. Cumulative % adds the bars from the left: 54.8 + 18.6 = 73.4.

The trap. A split bar makes the top reason look smaller than it is. Before trimming, "Too thick" showed 51.9% and 2.9% in two places. Always read the whole category list before trusting the order.

The project card

On the Project (DMAIC board), fill the project card:

Field Value
Y Seal_Thickness_mm
Goal Cpk ≥ 1.33 on seal thickness, and thickness rejects below 0.1%
Sponsor Production manager
Start 2026-06-01

Problem statement (for the report): "In June 2026, 171 of about 5,400 seals (3.2%) were rejected as too thick, over the 2.150 mm upper limit. Too thick is 55% of all rejects. The goal is Cpk ≥ 1.33 and thickness rejects below 0.1% by the end of August."

A good problem statement names what, how much, when and where, and does not name a cause. "Rejects are high because the night shift is careless" is a conclusion wearing a problem statement's clothes. Keep it out, because the data at Stop 6 will disagree with it.


MEASURE

Stop 2: Can I trust the gauge?

Do this. Load DP2_measure_gauge_study.csv. Open the Gage R&R Guide. Part = Part, Operator = Operator, Measurement = Seal_Thickness_mm, tolerance 0.300 (or LSL 1.850 and USL 2.150).

You should see

Source SD % Contribution % Study Var
Repeatability 0.00319 0.18 4.28
Reproducibility 0.00257 0.12 3.45
Total Gage R&R 0.00410 0.30 5.50
Part-to-part 0.07442 99.70 99.85

%GRR 5.50% · %Tolerance 8.20% · ndc 25 · ACCEPTABLE (exact). The part × operator interaction has p = 0.835, so it is pooled into repeatability.

Why this step. Every number from here on is a number the gauge gave you. If the gauge is poor, the process will look worse than it is, and you may spend months "improving" a process that was never the problem.

What if your data isn't like this.

Show the math. %Study Var = GRR SD ÷ total SD = 0.00410 ÷ 0.07453 = 5.50%. The number of distinct categories is ndc = 1.41 × part SD ÷ GRR SD = 1.41 × 0.07442 ÷ 0.00410 = 25.6, truncated to 25. Below 10% is acceptable and ndc of 5 or more lets the gauge tell parts apart. This gauge passes both comfortably.

The trap. %Contribution (0.30%) and %Study Var (5.50%) describe the same gauge on different scales, with different thresholds. Quoting 0.30% against a 10% rule makes a gauge look better than it is. The app keeps them in separate columns for that reason.

Stop 3: Is the process stable?

Do this. Load DP3_measure_baseline_june.csv. Open the Control Chart Guide. Column = Seal_Thickness_mm, group column = Subgroup, rows are in time order. Subgroups of 5 → the guide names X̄-R.

You should see

Chart Lower Centre Upper Points out
R (ranges) 0 0.07816 0.16523 0
X̄ (averages) 2.00916 2.05426 2.09936 5

(exact). The X̄ points out are subgroups 10 and 15 (above) and 12, 21 and 23 (below). Verdict: not stable.

Why this step. Read the range chart first. It shows whether spread within a subgroup is steady. It is (0 out), so the X̄ limits can be trusted. The X̄ chart then says the average moves from day to day far more than five seals made together would suggest. Something changes between subgroups. Find it and the project is largely solved.

What if your data isn't like this.

Show the math. X̄ limits = X̿ ± A2 × R̄ = 2.05426 ± 0.577 × 0.07816 = 2.05426 ± 0.04510, giving 2.00916 to 2.09936. R upper limit = D4 × R̄ = 2.114 × 0.07816 = 0.16523. A2 and D4 are table constants for subgroups of 5.

The trap. Drawing the specification limits on an X̄ chart. The specification is for single seals, but an X̄ chart plots averages of five, which vary much less. Every average can sit inside the spec while individual seals fall outside it. The app does not draw them, deliberately.

Stop 4: What can the process hold today?

Do this. Same file. Open the Capability Guide. Column = Seal_Thickness_mm, LSL 1.850, USL 2.150, target 2.000. Step 2: in time order, readings taken as a group, group column = Subgroup. Leave the within-sigma selector on Pooled standard deviation.

The guide will warn that the process is not stable before it shows any index. That warning is correct and is the point of this stop. Continue to see the numbers, and read them with the warning in mind.

You should see

Value
n 125 in 25 subgroups of 5 exact
Mean 2.05426 exact
Overall SD 0.05162 exact
Pooled within σ 0.03336 exact
Anderson-Darling A² 0.291, p ≈ 0.61, normal close
Cp 1.499 exact
Cpk 0.957, 95% CI 0.812 to 1.102 exact
Pp 0.969 exact
Ppk 0.618 exact
Expected out of spec (overall) ≈ 31,900 ppm (3.2%) close
Observed out of spec 4 of 125, all above USL exact

Why this step, and how to read four indices without getting lost. Ask two questions in turn:

  1. Cp against Pp (1.50 against 0.97): is drift the problem? Cp uses the short-term spread within a subgroup. Pp uses the whole month. The machine's short-term precision is good enough for the job (Cp 1.50), but over the month the product spreads far wider. That gap is the day-to-day movement you saw on the X̄ chart.
  2. Pp against Ppk (0.97 against 0.62): is centring the problem? The process runs at 2.054 against a target of 2.000, so the upper limit is close and the lower one is far away.

So the customer receives Ppk 0.62, the machine is capable of Cp 1.50, and the whole difference is drift plus off-centring. Neither needs a new machine. That one sentence tells the sponsor what kind of project this is.

The expected 3.2% out of spec agrees with the reject log: 171 of about 5,400 seals is 3.2%. When two independent sources agree, you can trust both.

What if your data isn't like this.

Show the math.

The trap. Reporting Cpk 0.96 as "nearly capable". On an unstable process, Cpk describes a process that exists only in short bursts. The customer receives the Ppk process.


ANALYZE

Stop 5: What could cause the drift? Pick the test by the type of X.

The team's fishbone produced three suspects, and each of them has a supporter:

Suspect Recorded as Type of X The right tool
Shift ("night shift is careless") Day or Night Text, 2 groups Two-sample comparison
Line speed ("we run too fast") m/min Number Regression
Die temperature (the maintenance technician's view) °C Number Regression

This table is the most useful thing a shaky belt can learn. The test is chosen by the type of Y and the type of X, never by which test you learned last:

X is text (groups) X is a number
Y is a measurement t-test (2 groups), ANOVA (3 or more) Regression / correlation
Y is pass/fail or a count Chi-square, test of proportions Logistic regression

The Which test? Guide asks you these two questions and names the test.

Why a new file with 25 rows, not 125? Look at DP3. All five seals in a subgroup share one die temperature, one speed and one shift, because they were made together. For temperature, speed and shift, June gives you 25 observations, not 125. Testing on 125 rows counts every day five times and makes weak effects look significant. DP4 holds one row per subgroup, with the average thickness.

This is the assumption called independence. It appears in every test's list of assumptions and is the one belts skip most often. Ask: "Does each row carry new information about the X I'm testing?"

Stop 6: Is the night shift worse?

Do this. Load DP4_analyze_by_subgroup.csv. Which test? Guide:

Y = Avg_Seal_Thickness_mm, group = Shift.

You should see

Day Night
n 13 12
Mean 2.0608 2.0472
SD 0.0454 0.0405

Read it like this. p = 0.44, so the data cannot tell the shifts apart. If anything, the day shift runs slightly thicker, the opposite of the story.

Say it correctly. Not "the shifts are the same". The interval runs from −0.022 to +0.049 mm, and a 0.049 mm difference would matter. The honest sentence is: "June's data gives no evidence that shift matters, and shift cannot explain the day-to-day swings we saw, which are larger than this whole interval." The second half of that sentence is what closes the question.

Why this step. Blaming people is the easiest root cause to reach for and the most damaging one to get wrong. Testing the belief with data, then publishing the result, protects the night shift and keeps the team's trust.

What if your data isn't like this.

Show the math. t = difference ÷ √(s₁²/n₁ + s₂²/n₂) = 0.01355 ÷ √(0.04542²/13 + 0.04051²/12) = 0.01355 ÷ 0.01719 = 0.789.

The trap. Running this test on the 125-row file. Every day counts five times, the p-value shrinks, and a real-looking "shift effect" can appear from nothing.

Stop 7: Is it line speed?

Do this. Same file. Regression & correlation → Regression, simple linear. Y = Avg_Seal_Thickness_mm, X = Line_Speed_m_min.

You should see slope +0.00107 mm per m/min, p = 0.736, R² = 0.5% (exact). Practical significance: EXPLAINS ALMOST NOTHING.

Read it like this. Across June, speed ran from 42 to 50 m/min and thickness did not follow it. Knowing the speed tells you nothing about the thickness. The belief was reasonable, and the data doesn't support it.

The good news in a "no". If speed doesn't affect thickness, speed may be a free lever: the line could run faster without hurting quality. Stop 9 tests that directly.

Stop 8: Is it die temperature?

Do this. Same file and tab. X = Die_Temp_C.

You should see

Value
Equation Avg thickness = −0.1263 + 0.010355 × Die_Temp_C
Slope +0.0104 mm per °C, t = 12.65, p < 0.001
R² / adjusted R² 87.4% / 86.9%
S (residual SD) 0.0155
Practical significance USEFUL FOR PREDICTION: the spread you would quote narrows from ±0.084 to ±0.030 mm

(exact)

Read it like this. Each degree hotter makes the seal about 0.010 mm thicker. June's die temperature wandered from 204.5 to 219.8 °C, which alone moves thickness by 0.16 mm, more than half the whole tolerance. Subgroup 10, the highest point on the X̄ chart, was the hottest day (219.8 °C).

To centre the process at 2.000 mm: (2.000 + 0.1263) ÷ 0.010355 = 205.3 °C. June averaged 210.6 °C.

Why this step, and why it isn't the end. This is June's data as it happened, not an experiment. It shows that temperature and thickness move together. It cannot prove that changing the temperature will change the thickness: something else could drive both. Stop 9 proves it by setting the temperature on purpose.

What if your data isn't like this.

Show the math. Practical significance = 1 − S ÷ SD(Y) = 1 − 0.0155 ÷ 0.0428 = 0.638. The model removes about 64% of the spread you would have to quote. The ±0.030 band is 1.96 × S.

The trap. Stopping at "p < 0.05, root cause found". A p-value says an effect is real, not that it is big. Line speed could have been "significant" with enough data and still been useless. Read R² and the practical-significance verdict alongside p.


IMPROVE

Stop 9: Prove it, and find the settings. A designed experiment.

The team agreed to test three factors on purpose in one day. Each run made five seals and recorded their average.

Factor Low Centre High
Die temperature, °C 200 205 210
Line speed, m/min 40 45 50
Cooling time, s 8 10 12

That is 2³ = 8 combinations, each run twice (16 runs), plus 4 runs at the centre = 20 runs in random order.

Do this. Open the DOE Guide. Under Or bring completed data, upload DP5_improve_doe_july.csv. Map the columns:

Fit the full model.

You should see (full model with the centre-point term)

Term Effect Coefficient p
Die temperature +0.1006 0.0503 < 0.001
Cooling time −0.0430 −0.0215 0.002
Line speed −0.0030 −0.0015 0.786
Temp × Speed +0.0027 0.0013 0.808
Temp × Cooling +0.0080 0.0040 0.477
Speed × Cooling +0.0003 0.0001 0.981
Temp × Speed × Cooling +0.0070 0.0035 0.530
Centre points (curvature) 0.0071 0.567

S = 0.0216, R² = 90.4%. Effects and coefficients are exact. p-values are close, because they depend on which terms are in the model.

Remove the terms that are not significant (by hand, or with backward elimination). The model keeps temperature and cooling:

Thickness = 0.0434 + 0.01006 × Die_Temp_C − 0.01075 × Cooling_s, with S 0.0185 and R² 89.2% (close).

Read it like this.

  1. Temperature is confirmed as a cause. When it was changed on purpose, thickness followed, by 0.0101 mm per °C. June's regression said 0.0104. Two independent methods agree.
  2. Cooling time is a second lever that June's data could not show, because nobody changed it in June. Longer cooling gives a thinner seal.
  3. Speed does nothing to thickness, now tested on purpose. The line can run at 50 m/min.
  4. No curvature (p = 0.57), so straight lines between the settings are good enough.

The new settings: die temperature 205 °C, cooling 10 s, speed 50 m/min. Predicted thickness 1.998 mm. Temperature to be controlled, not just set: June's problem was that it wandered.

Why this step. Data you collect by watching (Stops 7 and 8) shows association. Data from an experiment shows cause, because you set the X and nothing else could have moved it. Tollgate reviewers ask "how do you know?", and this stop answers them.

What if your data isn't like this.

Show the math. Effect of temperature = average at 210 °C − average at 200 °C = 2.04689 − 1.94630 = 0.10059 mm over 10 °C. Coefficient = effect ÷ 2 = 0.0503, because coded units run from −1 to +1, a distance of 2.

The trap. Running the experiment in standard order (all low temperatures first, then all high). If the machine warms up during the day, the warm-up looks like a temperature effect. Randomising the run order is what makes a designed experiment trustworthy.

Stop 10: Did it work? The pilot.

August ran at the new settings with the temperature controller retuned.

Do this. Load DP6_improve_pilot_august.csv. Capability Guide, same entries as Stop 4, group column Subgroup, pooled standard deviation.

You should see

Before (June) After (August)
Mean 2.0543 2.0091
Overall SD 0.0516 0.0339
Pooled within σ 0.0334 0.0333
Cp 1.50 1.50
Cpk 0.96 (0.81 to 1.10) 1.41 (1.22 to 1.60)
Ppk 0.62 1.38
Expected out of spec ≈ 31,900 ppm ≈ 18 ppm
Control chart 5 points out 0 out

(exact, except the ppm, which is close)

Read it like this.


CONTROL

Stop 11: Show the before and after on one chart

Do this. Load DP7_control_before_after.csv. Control Chart Guide, column Seal_Thickness_mm, group Subgroup, and use Phase as the stage column.

You should see two sets of limits, one per phase:

Phase X̄ centre X̄ limits R̄ Points out
1 Before 2.05426 2.00916 to 2.09936 0.07816 5
2 After 2.00914 1.96467 to 2.05362 0.07708 0

(exact). The guide's stage test should report that the stages differ.

For numbers to go with the picture, use the Which test? Guide: two independent groups, More than 40, Y = Seal_Thickness_mm, group = Phase. You should see the difference Before − After = +0.0451 mm (95% CI 0.0345 to 0.0557, Welch p < 0.001) and the spread falling 0.0516 → 0.0339, Brown-Forsythe p < 0.001 (close).

A note on rigour. Before-phase readings share a day's temperature (the independence point from Stop 5), so these p-values are smaller than they should be. The conclusion doesn't depend on them: the staged chart shows the change plainly. The staged chart is the evidence. The p-values are the footnote.

Why this step. A staged chart is the picture a sponsor understands in five seconds: the old process, the change, the new process, each with its own limits. It is also what the next person looks at when someone asks "did that project last?"

Stop 12: Hold the gain

Do this.

  1. Load DP6_improve_pilot_august.csv again. Control Chart Guide → X̄-R → verdict STABLE (0 points out, longest run 5 against a rule of 9).
  2. On Step 4, save these limits as the standard. The card shows centre 2.00914. This also puts the characteristic on the control plan.
  3. Open Control plan & handover. Seal_Thickness_mm carries three chips: gauge, capability and chart.
  4. On Step 2, type the five things no guide can know, and press Save this row:
Field Type this
Who checks it Line operator
How often Every 2 hours
What they take each time 5 consecutive seals, measured with the studied gauge
Where it is recorded The X̄-R chart at the line
Who answers when it signals Shift lead

The row should now read COMPLETE: charted, capable, measured with a studied gauge, and filled in. 5. On Step 3, type the reaction plan below into the table and press Save this reaction plan, then paste the recommendations further down into the Recommendations box and press Save recommendations. 6. Download the handover pack. It should open with HANDOVER READY on the cover and carry the gauge bar, the histogram and the X̄ and R charts.

A reaction plan that works on the shop floor

When you see Do this Who
X̄ above the upper limit Check the die temperature reading. Above 207 °C: reset to 205 °C, hold the last hour's seals, measure 5 of them. Line operator
X̄ below the lower limit Check cooling time is 10 s. Check the die temperature is not below 203 °C. Line operator
R above its limit Stop. Check the gauge against the reference block before touching the process. Shift lead
9 in a row on one side Not urgent. Log it and tell the process engineer the same day. Shift lead

Why this step. Improvements fade because the reason for the new settings leaves with the belt. A control plan written in "when you see, do this" form stays with the line.

Recommendations (this is the text box on the final report):

  1. Collect about 400 readings at the new settings to confirm Cpk ≥ 1.33. The current interval (1.22 to 1.60) cannot yet settle it.
  2. Trial a die temperature set point of 204 °C. The pilot runs 0.011 mm above target, and the slope is 0.010 mm per °C.
  3. Keep the line at 50 m/min. Speed has no effect on thickness, so the extra throughput is free.
  4. Next project: surface flash, 18.6% of rejects and the second Pareto bar.

The project on one page

Phase Question Answer Evidence
Define What's going wrong? Seals too thick, 55% of rejects Pareto, Stop 1
Measure Can we trust the gauge? Yes: %GRR 5.5%, ndc 25 Stop 2
Measure Is it stable? What can it hold? No, 5 points out. Ppk 0.62, Cp 1.50 Stops 3–4
Analyze Night shift? No evidence (p = 0.44) Stop 6
Analyze Line speed? No (R² 0.5%) Stop 7
Analyze Die temperature? Yes: 0.010 mm per °C, R² 87% Stop 8
Improve Proven? Best settings? Yes, by experiment: 205 °C, 10 s, 50 m/min Stop 9
Improve Did it work? Ppk 0.62 → 1.38. Rejects about 3.2% → 18 ppm Stop 10
Control Will it last? Stable, limits saved, reaction plan written Stops 11–12

What the project taught, in five lines

  1. Text data is counted (Pareto). Measurements are tested.
  2. Read the range chart before the X̄ chart, and stability before capability.
  3. Cp against Pp shows drift. Pp against Ppk shows centring.
  4. Choose the test by the type of Y and X. Count your real observations, not your rows.
  5. Watching shows association. An experiment shows cause.

Check yourself

Cover the answers and try these. Each one is a decision a belt makes on a real project.

  1. Your reject log is a column of typed reasons. Which tool?
  2. The range chart has two points outside its limits. Do you read the X̄ chart?
  3. Cp is 1.6 and Ppk is 0.7. What kind of problem is it, and which number splits it further?
  4. You have 30 oven batches, 10 samples from each, and one oven temperature per batch. How many observations do you have about oven temperature?
  5. Cpk is 1.41 with a 95% interval of 1.22 to 1.60, and the goal is 1.33. What do you tell the sponsor?
  6. A regression gives p < 0.001, but the verdict reads TOO SMALL TO PREDICT WITH. Do you build the control plan on it?

Answers

  1. A Pareto. Text is counted, not measured.
  2. No. The X̄ limits are calculated from the average range, so they are wrong until the ranges are steady.
  3. Not machine precision: drift, off-centring, or both. Look at Pp. If Pp is close to Cp, it is centring. If Pp is well below Cp, it is drift.
  4. 30, not 300. The 10 samples of a batch share one temperature.
  5. "The estimate is above the goal, but the data cannot yet prove it." Then say how much more data would settle it.
  6. No. The effect is real but too small to steer the process with. Look for the X that explains more.

If something doesn't match

Work backwards.

Every number here was computed independently of the app, from these same files, with the published formulas. The data were generated once, with a fixed seed, and are plain CSV files, so nothing on your side is random.

© 2025–2026 Dr. Mahmood Al Kindi