Executable checks for trustworthy business metrics, cohorts, denominators, and analytical populations.
Project description
MetricProof
Executable checks for the assumptions behind business metrics.
MetricProof is a small, dependency-free Python package and CLI for detecting analytical failures that ordinary schema tests can miss: a KPI calculated from the wrong denominator, customers silently lost before evaluation, segment totals that do not reconcile, and malformed retention cohorts.
It was built from a practical SaaS retention problem: a dashboard value can look plausible while still being misleading because its population or denominator changed upstream.
Why this project is different
Most data-quality tools are strong at generic checks such as nulls, types, ranges, and duplicate rows. MetricProof has a narrower purpose: it turns metric definitions into executable evidence.
ratio_consistencyrecomputes a published rate from its numerator and denominator.population_preservedcatches survivorship bias when inactive or unmatched entities disappear before analysis.cohort_integritychecks frozen denominators, period-zero retention, valid rates, and monotonic strict-retention curves.reconciliationproves that headline and segmented totals tie out.unique_grainandnumeric_rangeprotect the table structure and metric bounds supporting those business assertions.
This is a portfolio-distinctive combination, not a claim that no other data-quality framework has related capabilities.
Quick start
MetricProof requires Python 3.11 or newer and has no runtime dependencies.
python -m pip install metricproof
metricproof --help
To run the included SaaS retention audit:
git clone https://github.com/AtomicGlance/metricproof.git
cd metricproof
metricproof audit examples/retention_contract.json
Expected result:
MetricProof: SaaS retention metric audit
Result: PASS | 6 passed, 0 failed, 0 errors
[PASS ] one-headline-per-month (unique_grain)
1 rows match the declared grain.
[PASS ] activation-rate-bounds (numeric_range)
All 1 'activation_rate' values are within range.
[PASS ] activation-rate-recomputes (ratio_consistency)
All 1 reported rates recompute correctly.
[PASS ] segment-mrr-ties-to-headline (reconciliation)
The two sum aggregates reconcile.
[PASS ] eligible-population-survives (population_preserved)
Evaluated population preserves 100.0% of baseline entities.
[PASS ] retention-cohorts-are-valid (cohort_integrity)
All 2 cohort(s) preserve their analytical contract.
Run the intentionally broken example to see the audit expose four subtle failures:
metricproof audit examples/broken_retention_contract.json
The command exits with 0 when critical checks pass, 1 when a critical check
fails, and 2 when the contract or input cannot be read. That makes it useful
as a lightweight CI quality gate.
Analytical contract
Checks live in a readable JSON contract. Dataset paths are resolved relative to the contract file.
{
"title": "SaaS retention metric audit",
"datasets": {
"headline": "data/headline.csv",
"baseline": "data/baseline_accounts.csv",
"evaluated": "data/evaluated_accounts.csv"
},
"checks": [
{
"id": "activation-rate-recomputes",
"type": "ratio_consistency",
"dataset": "headline",
"numerator": "activated_accounts",
"denominator": "eligible_accounts",
"rate": "activation_rate"
},
{
"id": "eligible-population-survives",
"type": "population_preserved",
"baseline": "baseline",
"evaluated": "evaluated",
"key": "account_id"
}
]
}
Reports can be emitted for people or automation:
metricproof audit examples/retention_contract.json --format json
metricproof audit examples/retention_contract.json \
--format markdown --output audit-report.md
Python API
from metricproof import check_population_preserved
eligible = [{"account_id": "A01"}, {"account_id": "A02"}]
evaluated = [{"account_id": "A01"}]
result = check_population_preserved(
eligible,
evaluated,
key="account_id",
)
assert result.status == "fail"
assert result.evidence == [
{"key": "A02", "issue": "missing from evaluated population"}
]
Inputs are sequences of dictionaries, so the package works with standard CSV and JSON data and can also accept records from a dataframe:
rows = dataframe.to_dict(orient="records")
What this demonstrates for a data-analysis portfolio
- Translating KPI definitions into testable business rules
- Retention and cohort-analysis methodology
- Denominator governance and survivorship-bias detection
- Cross-table reconciliation and analytical grain control
- Python package design, type hints, CLI design, and JSON contracts
- Automated tests, CI, machine-readable reporting, and documentation
Suggested CV bullet:
Built MetricProof, a dependency-free Python analytics QA package that audits KPI formulas, cohort denominators, entity-population preservation, and cross-table reconciliation; shipped a JSON contract CLI, actionable evidence reports, automated tests, and multi-version CI.
Design boundaries
MetricProof intentionally stays small:
- CSV and JSON are supported directly; warehouse connections are out of scope.
- Strict retention is expected to be monotonic. Set
"monotonic": falsefor rolling or resurrection-style retention. - The package validates supplied analytical outputs; it does not calculate product KPIs or replace source-system tests.
- This repository is an initial
0.1.0portfolio release, not a claim of production maturity.
Development
$env:PYTHONPATH = (Resolve-Path src).Path
python -m unittest discover -s tests -v
python -m metricproof audit examples/retention_contract.json
python -m metricproof audit examples/broken_retention_contract.json
On macOS or Linux, use export PYTHONPATH="$PWD/src" instead.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file metricproof-0.1.0.tar.gz.
File metadata
- Download URL: metricproof-0.1.0.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36f20d3b7675427309431c6b9de85a2e1a45994caaeb3b6660cbbaad990c403c
|
|
| MD5 |
5641193df7dccfe4f98ad1cf8a83de1f
|
|
| BLAKE2b-256 |
23cbf9a5979fe8504f7c80c242d04983b78bec394c37e5790387ea3e3f6da5e8
|
Provenance
The following attestation bundles were made for metricproof-0.1.0.tar.gz:
Publisher:
publish.yml on AtomicGlance/metricproof
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
metricproof-0.1.0.tar.gz -
Subject digest:
36f20d3b7675427309431c6b9de85a2e1a45994caaeb3b6660cbbaad990c403c - Sigstore transparency entry: 2255507940
- Sigstore integration time:
-
Permalink:
AtomicGlance/metricproof@a7adbe4640826c5e5da14d3ace534148bc3efa61 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/AtomicGlance
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a7adbe4640826c5e5da14d3ace534148bc3efa61 -
Trigger Event:
release
-
Statement type:
File details
Details for the file metricproof-0.1.0-py3-none-any.whl.
File metadata
- Download URL: metricproof-0.1.0-py3-none-any.whl
- Upload date:
- Size: 14.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ce9bd0d17898ff88b227e8502a92602df10dbeecb5d2e516f281a2879a8dcda3
|
|
| MD5 |
c0a9b282d5e7174ebbfd23f17dfcce35
|
|
| BLAKE2b-256 |
0c8c1d61c690f7d2f515ba46ced794057178922deb579cf1a70f8929dbaf6c53
|
Provenance
The following attestation bundles were made for metricproof-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on AtomicGlance/metricproof
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
metricproof-0.1.0-py3-none-any.whl -
Subject digest:
ce9bd0d17898ff88b227e8502a92602df10dbeecb5d2e516f281a2879a8dcda3 - Sigstore transparency entry: 2255507951
- Sigstore integration time:
-
Permalink:
AtomicGlance/metricproof@a7adbe4640826c5e5da14d3ace534148bc3efa61 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/AtomicGlance
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a7adbe4640826c5e5da14d3ace534148bc3efa61 -
Trigger Event:
release
-
Statement type: