ds@mcpanalytics.aiEmail your data and your question and get an answer about your own data, with the method shown.Email your data and question. Get an answer.
Pipeline Case Studies: analyses built to order | MCP Analytics
Pipeline Case Studies

Analyses built to order

By MCP Analytics Team | Published , updated

Our own team commissioned these on public datasets, the way a customer would: a question described in plain language, then the build pipeline chose the method, wrote the R, checked the output and rendered the report you can open below. Commissioned builds become modules their owners can re-run on new data while active.

Commission your own Check one figure by hand →

How these differ from Library Case Studies

These are commissioned. You bring a question we have never seen and get an analysis built for it, which is yours to keep and re-run. Library case studies are the opposite: prebuilt: already written, always available, ready to run. Most people start with the library and commission a build when they need something specific.

Worked example

Which employee attributes actually predict attrition? (asked in plain English of the public IBM HR attrition dataset)

The data. card_data.json, the numbers file published with the delivered report IBM HR Employee Attrition Drivers. The underlying data is the public IBM HR attrition dataset.

The calculation. Python, standard library only. This exact code ran against the file when this page was built, and printed the output below it.

import json
from math import exp, sqrt
card = json.load(open("card_data.json"))
table = card["rf_data"]["summary_table"]["tables"]["attrition_by_segment"]
ot = {r["segment_value"]: r for r in table if r["segment"] == "Overtime"}
yes, no = ot["Yes"], ot["No"]
p1 = yes["attrited"] / yes["headcount"]
p0 = no["attrited"] / no["headcount"]
rr = p1 / p0
se = sqrt(1 / yes["attrited"] - 1 / yes["headcount"]
          + 1 / no["attrited"] - 1 / no["headcount"])  # log risk ratio
print("overtime:", yes["attrited"], "of", yes["headcount"], f"left ({p1:.1%})")
print("no overtime:", no["attrited"], "of", no["headcount"], f"left ({p0:.1%})")
print("risk ratio", round(rr, 2), "95% interval",
      round(rr * exp(-1.96 * se), 2), "to", round(rr * exp(1.96 * se), 2))
overtime: 127 of 416 left (30.5%)
no overtime: 110 of 1054 left (10.4%)
risk ratio 2.93 95% interval 2.33 to 3.68

What it says. The delivered report's own table shows 30.5% of employees who worked overtime left, against 10.4% who did not: overtime workers left about 2.9 times as often, with a 95% interval of 2.33 to 3.68. Recomputing a headline figure from the published table is a check anyone can repeat on this report.

What it does not say. This is a raw comparison of two groups. Overtime goes with job role and level, which the report's logistic regression adjusts for; there the odds ratio for overtime is 5.97 (95% interval 4.20 to 8.55). An odds ratio is not a risk ratio and runs larger when the outcome is common, so the two figures are not meant to match. Neither is proof that overtime causes attrition.

Open the full report to see the methods the build chose and the diagnostics behind them.

Sources

Further reading on the method in the worked example. Each reference was looked up and its authors, title, year and venue confirmed on 27 October 2026.

  1. Cox D (1958). The Regression Analysis of Binary Sequences. Journal of the Royal Statistical Society Series B: Statistical Methodology. https://doi.org/10.1111/j.2517-6161.1958.tb00292.x
  2. Chen T, Guestrin C (2016). XGBoost. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. https://doi.org/10.1145/2939672.2939785

By MCP Analytics Team. Updated November 2026.