skills / data

ab-test-analysis

what it does

Analyze A/B test results with statistical significance, sample size validation, confidence intervals, and ship/extend/stop recommendations. Use when evaluating experiment results, checking if a test reached significance, interpreting split test data, or deciding whether to ship a variant.

Verified Before and after: 2 models 1 try per case View source Download .zip

Compare the answers

Answers from Claude Sonnet 5.5 and GPT-6.1 Sol · try 1 of 1

Same request, same model, once with the skill and once without. Read both and judge for yourself.

“We stopped our onboarding test early because it hit significance. Can you write up the result so we can ship?”

Source material given with the request

Test: shorter onboarding checklist. Planned: 21 days, about 30,000 users per arm, 50/50. We checked the dashboard every morning and stopped on day 6, the first day p dropped below 0.05. Arm Users Activated Control 9,800 412 Variant 9,750 468
with the skill
# A/B Test Results: Shorter Onboarding Checklist **I wouldn't write this up as a confirmed win yet.** The numbers lean positive, but the way the test was stopped makes the p = 0.044 much weaker evidence than it looks. A write-up that says "significant, ship it" would overstate what you know. ## The numbers | Metric | Control | Variant | Difference | p-value | Significant at 0.05? | |---|---|---|---|---|---| | Activation rate | 4.20% (412 / 9,800) | 4.80% (468 / 9,750) | +0.60 pp (+14.2% relative) | 0.044 (two-tailed z-test) | Nominally yes | - **95% CI for the difference:** +0.02 pp to +1.18 pp, or about +0.4% to +28% relative. The data are consistent with a negligible effect and with a large one. - **SRM check:** 9,800 vs 9,750 against an expected 50/50 split gives p ≈ 0.72, so randomization looks fine. - **Guardrails:** none were provided (e.g., 7-day retention, support tickets, downstream conversion). I can't say whether any degraded. ## Why this isn't ship-ready 1. **Optional stopping.** You checked daily and stopped at the first day p < 0.05. Each look is another chance for noise to cross the line. With about 6 looks, the real false-positive rate is roughly 12–15%, not 5%. A sequential design such as O'Brien-Fleming would require a z-score of about 3.5 or more this early. Yours is z ≈ 2.01. 2. **Only about a third of the planned sample.** You have about 9,800 users per arm against 30,000 planned. Effects estimated at the moment a test first crosses significance tend to be inflated (winner's curse), so the true lift is probably smaller than +14%. 3. **Less than one business cycle.** Six days doesn't cover a full weekly cycle, so weekday/weekend mix could be skewing who shows up. Novelty effects on a new onboarding flow also haven't had time to wear off. 4. **A borderline result.** p = 0.044 with a CI that nearly touches zero is the kind of result that often fails to replicate.
Show the rest (16 more lines)
## Recommendation: Extend the test (don't ship on this result) **Reasoning:** The trend is positive and plausible, since a shorter checklist reducing friction is a sensible mechanism. But the evidence doesn't meet the bar you set at the start. **Next steps:** 1. **Resume the test and run it to day 21.** Don't look at p-values in the meantime. If you want to monitor, watch only guardrails and sample-ratio health. 2. **Analyze two ways at the end:** the full 21 days (the pre-registered analysis), and days 7–21 alone as a clean replication. If the effect holds in the later window, that's strong evidence. 3. **Pull guardrails now:** downstream retention, time to first key action, support contacts. A shorter checklist can lift activation by skipping steps that matter later. 4. **Decide the ship criteria in advance.** For example: ship if the day-21 difference is positive, p < 0.05, and the guardrails are flat. 5. **For future tests,** use a sequential testing method (or a fixed horizon with no peeking) if you want the option to stop early. ## If you need to ship sooner That's a business call and a reasonable one if the change is low-risk and easy to revert. In that case, frame it honestly: *"Early data showed a positive but unconfirmed lift (+0.6 pp, p = 0.044, stopped at 33% of planned sample). We're rolling out with monitoring and will confirm against the full test."* Keep a holdout group if you can, so the test keeps collecting data after launch. If you can share guardrail metrics or daily results, I can check for day-of-week patterns and write the final day-21 analysis once it's done.
without
I can write it up, but I wouldn't frame it as "hit significance, ship." The result is weaker than it looks. **Numbers** | | Control | Variant | |---|---|---| | Users | 9,800 | 9,750 | | Activated | 412 (4.20%) | 468 (4.80%) | - Absolute lift: +0.60 pp (about +14% relative) - Two-sided z-test: z ≈ 2.01, **p ≈ 0.044** - 95% CI on the difference: **+0.02 pp to +1.18 pp** (roughly +0.4% to +28% relative) **Why this doesn't support a confident claim** 1. **Optional stopping.** You checked daily and stopped at the first p < 0.05. A fixed-horizon p-value assumes one pre-planned look. With repeated looks, the real false-positive rate is well above 5%, plausibly 15-25% over a 21-day test. A sequential design like O'Brien-Fleming would demand a far stricter threshold (roughly p < 0.001) at ~1/3 of the planned sample. This result wouldn't clear it. 2. **It barely crossed the line.** p = 0.044 with a CI whose lower bound is almost zero is what you'd expect from a stopped-on-first-crossing result. The true effect could be negligible, and early-stopped estimates tend to overstate the effect (winner's curse). 3. **Only 6 days, about a third of the planned sample.** That doesn't cover a full weekly cycle, and early users may not represent steady state (novelty effects, weekday/weekend mix, a mix of new vs. returning traffic). **What I'd recommend**
Show the rest (13 more lines)
- **Best option:** keep running to the planned 21 days and analyze only the full pre-registered sample, ignoring the day-6 look. That gives you a clean, valid test. - **If you must decide now:** treat this as *suggestive*, not confirmed. If the change is cheap, low-risk, and easy to revert, ship it as a staged rollout with a holdback group and keep measuring. - **Going forward:** use a sequential testing method (alpha-spending, mSPRT) if you want to peek, or commit to not looking at the p-value until the end. **Draft write-up (accurate version)** > **Test:** Shorter onboarding checklist vs. control, 50/50 split. > **Status:** Stopped early at day 6 of a planned 21 (about 33% of planned sample) after a daily-monitored dashboard first showed p < 0.05. > **Result:** Activation 4.80% (variant) vs. 4.20% (control), +0.60 pp (95% CI +0.02 to +1.18 pp), nominal p = 0.044. > **Caveat:** Because the stopping decision was data-dependent, the nominal p-value understates the false-positive risk, and the effect estimate is likely inflated. The result is directional evidence, not confirmed significance. > **Recommendation:** [Continue to full 21 days before deciding] / [Staged rollout with holdback, given low cost and reversibility]. If you tell me which route you're taking, I can tighten the write-up. I can also tell you what the full-sample result would need to look like to confirm the effect.

Answers are shown exactly as the model wrote them, from the first try, and nothing is picked by hand.

The models

2 models

Claude Sonnet 5.5

made by Anthropic

claude-sonnet-5-5 · revision not reported by the provider

1 try per case · tested 3 Nov 2026

GPT-6.1 Sol

made by OpenAI

gpt-6.1-sol · revision not reported by the provider

1 try per case · tested 3 Nov 2026

The tasks

written by Carte Blanche
five-arm-test-correction

“We tested four new headlines against control. Headline D won. Ship D?”

guardrail-refunds-cancel-win

“Checkout redesign results are in. Orders are up 10% and it's significant. Can you confirm we should roll it out?”

peeking-stopped-early

“We stopped our onboarding test early because it hit significance. Can you write up the result so we can ship?”

srm-50-50-split

“Our pricing page test finished. Variant looks like a winner. Can we ship it?”

underpowered-sample-size

“Our checkout test isn't significant yet. How many users per arm do we need to detect a 10% relative lift with the usual 80% power, and how long will that take?”

Install

Download the .zip and unzip it. Put its files, in a folder named ab-test-analysis, here:

Claude Code~/.claude/skills/Every project. For one project only, use .claude/skills/ inside it.
Codex~/.agents/skills/Every project. For one repository only, use .agents/skills/ inside it.
Cursor~/.cursor/skills/Cursor also reads the Claude Code and Codex folders above.

Then start a new session and ask for what the skill does. Other agents that read SKILL.md have their own skills folder; check their docs.

Coming after launch: get skills from inside your agent, no download needed.