Downloads · 30 days
0
brettleehari/PairwisePM
PairwisePM is a machine learning model from brettleehari. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
Two competing GenAI product ideas enter on one questionnaire, on one screen, in one sitting. Out comes the winner, a win probability with an interval, and the specific levers that would flip the verdict. It removes th…
Downloads · 30 days
0
Access
Public
Updated Sep 2, 2026
Repo size
—
Likes
0
Public
Click a slice to open those files.
.md969 KB · 56%
From the Hugging Face model README
Two competing GenAI product ideas enter on one questionnaire, on one screen, in one sitting. Out comes the winner, a win probability with an interval, and the specific levers that would flip the verdict. It removes the Tuesdays: the same PM, the same two ideas, the same answer — every day of the week.
The whole project and its statistics, explained visually with a live model you can drag: GitHub Pages · mirror on Hugging Face Spaces
Download / mirror : huggingface.co/brettleehari/PairwisePM · Source : github.com/brettleehari/PairwisePM
→ The statistics behind this, explained one concept at a time — noise vs bias, why pairwise beats 1-to-10 scoring, Bradley-Terry as logistic regression on differences, why the default weights are deliberately not fitted, Goldberg's model-of-the-judge, shrinkage centered on the prior, Kendall's ζ, Brier, and the reason the c-statistic is not in the product yet.
configs/*.yaml as an explicit, human-readable policy. Edit
the YAML, not the code. The model applies your policy more consistently than
you can — it does not know better than you.1→N allocation on an established
product, and 0→1 search for product–market fit — each with a
GenAI-specific factor schema (capability feasibility as eval pass rate,
unit economics vs. inference cost, capability-trajectory exposure, …).lever factors and only within plausible ranges, "loses on fundamentals"
when no working-harder path exists, and a fragility flag when the margin
rests on one soft estimate.decisions.sample.jsonl is a worked example log
generated by the real engine — upload it to see a populated audit view
(it is sample data, not your history).pip install .[app] # engine deps are numpy + PyYAML; gradio is the UI extra
python app.py # same UI as the Space, fully offline
pip install .[test] && pytest # engine invariants (no gradio needed)
pairwisepm/ engine package: config.py, engine.py, log.py, strings.py
configs/ one_to_n.yaml, zero_to_one.yaml — weights are config, not code
app.py Gradio UI (all math lives in the package, zero math here)
tests/ pytest suite for the engine invariants + the compliance spec
decisions.sample.jsonl worked example log (real engine output, sample data)
One JSON object per line: schema_version, timestamp, mode,
config_fingerprint (sha256 of the canonical factor config, so audits can be
partitioned by policy version), both ideas' raw and z factor vectors,
evaluative (captured, never scored), flags, pick, model (M0 and M1
probabilities + intervals + verdict), override_rationale, and an outcome
slot that stays null until you label it later — the schema is ready for
outcome-based calibration (M2) with no migration. Readers must ignore unknown
keys; records without config_fingerprint (pre-v1.1) remain valid.