A falling headline. Two rising groups.
Separate changes within groups from changes in the mix.
Import a count-table image
English OCR runs locally after downloading the runtime and model from jsDelivr. No image is uploaded. Use synthetic or non-sensitive tables for this prototype. Read every count before applying.
Each row: group before_success before_total after_success after_total. Use a single-word label such as First-time. OCR may confuse letters and digits; corrections are manual.
Decomposition of the change (percentage points)
How the split works
(After rate − Before rate) = (Within groups) + (Change in mix).Inspect exact audit
First replace the group rates, then the shares. Repeat in the other order. The displayed split averages each contribution over both orders; it does not identify causes.
Exact identity
Per-group arithmetic
| Group | Before rate | After rate | Within (pp) | Mix (pp) |
|---|
Limits, sources and AI assistance
Use matched, consistently defined groups. Each total must be positive; missing groups are not imputed. Use 2–12 groups and at most 1,000,000 observations per period. A success must be a subset of its total. These arithmetic checks do not verify your data, a causal effect, statistical significance or a confidence interval. Audit exports contain every input label and count: review them before sharing.
This is a new educational implementation of established rate-decomposition ideas. See US Census: Standardization and Decomposition of Rates and Kitagawa (1955). No algorithm invention or measured learning improvement is claimed. All examples are synthetic.
OpenAI Codex assisted code, tests, explanations and design prompting; built-in Image Gen produced a visual concept. Optional Tesseract.js OCR runs in your browser; its runtime and English model are downloaded from jsDelivr when requested. The app has no paid inference API, accounts or analytics. Inputs stay in memory unless you download an audit.