Here is exactly how your score is built.
Most “chance me” tools hand you a number and a shrug. We think you deserve better. Below is the real engine — every formula, every weight, every shortcut and every thing we don’t know. Nothing here is pseudo-mathematical fog. If a part is uncertain, we say so.
Our promise: the math on this page is the math in the code. We would rather show you an honest “we’re not sure” than a confident lie dressed up as a probability.
How the score works
AdmitGPT computes one number per college: P(admit), a value between 0 and 1. It is built from five pieces added together on a log-odds scale, then squashed back into a probability. That is the whole idea — not a mystery, an addition.
1Academic strength (Z-scores)
We place you on a bell curve against the college’s own admitted class — and against a clean US 4.0 reference, not the raw mixed-scale corpus mean (that older bug mapped a 2.90 GPA onto a positive Z and inflated everyone).
SAT_Z = (YourSAT − CollegeSATmean) / σcollegeσcollege = (SAT75 − SAT25) / 1.35 // IQR-based; fallback ±100 pts if no college SAT data → SAT_Z = nullGPA_Z = (YourGPA_4.0 − μref) / σrefμref, σref from computeGpaReference(): the corpus’s 4.0-plausible subset (raw GPA in [0, 4.3]), σ floored at 0.50 international non-standard GPA gets +0.4 if below ref (or +2.0 for Game Makers)Academic_Z = SAT_Z present ? 0.55·SAT_Z + 0.45·GPA_Z : GPA_Z − 0.20 // test-optional uncertainty penalty clamp(Academic_Z, [−4, 4])2The “spike” (extracurriculars & awards)
Each activity is scored on six dimensions, then everything is combined with diminishing returns so one mega-achievement can’t run away with the score. Self-reported, unverifiable claims are downgraded one notch so you can’t invent a spike.
itemBase = W × T × R × P × D × V W = tier points (Game Maker 9, Outlier 7, T1 5, T2 3, T3 1.5) T = tier-level multiplier R = rarity factor P = institutional strength D = cognitive load V = validation weightitemContribution = ( itemBase > 10 ? 10 + 2·ln(1 + itemBase−10) : itemBase ) × C C = clamp(confidence/100, 0, 1)S = Σ(itemContribution) / 5.5 // scaled, caps per tier still enforced + diversityBonus (breadth across categories, up to +3.5) + depthBonus (repeat high-tier in one field, up to +1.5)3Protocol selection
Your profile is tagged by what kind of applicant you are. This only changes how much weight the spike gets — never the formulas above.
Game Maker → spike weight 0.175 (academics 0.10, or 0.40 if academically weak) Outlier → spike weight 0.140 (academics 0.65, or 1.00 if weak) Standard → spike weight 0.110 (academics 0.90) International & weak academics → ×1.25 boost on spike weight4Verification discount
A spike you can’t prove keeps a floor of its weight. Anything externally vouched (peer, institution, or professional audit) lifts it back toward full.
verifiedShare = verifiedItems / totalItems (0 if no items)verifiedMult = VERIFIED_SPIKE_FLOOR + (1 − FLOOR)·verifiedShare FLOOR = 0.6 → an all-self-reported profile keeps 60% of its spike weight5Major & international fit
If past applicants to this college in your intended major were admitted at a very different rate than the overall pool, we nudge the score. International applicants at colleges that rarely admit non-residents get a small penalty.
majorMod = ( (majorRate / overallRate) − 1 ) × 0.5 // centred on 0intlMod = ( (nonResidentRate / 0.10) × 0.1 − 0.3 ) × isInternational6The master formula
Everything is added on the log-odds scale, then passed through a logistic (sigmoid) curve. This is the standard, literature-grounded way to model admission probability (Giani & Walling 2020; Lee, Kizilcec & Joachims 2023). The spike is hard-capped so a single achievement can never overpower weak grades.
baseLogit = ln( rate / (1 − rate) )academicTerm = 1.5 × clamp(Academic_Z, [−4, 4])spikeTerm = clamp( S × spikeWeight × verifiedMult, [−2.0, 2.0] )majorMod, intlMod as abovecombinedLogit = baseLogit + academicTerm + spikeTerm + majorMod + intlModcalibratedLogit = 1.0 × combinedLogit + 0.0 // placeholder; see note belowP(admit) = 1 / (1 + e−calibratedLogit)Honest footnote on calibration: the final step is a pass-through today.CALIB_SLOPE = 1.0 and CALIB_INTERCEPT = 0.0, so the output is the raw additive logit, not a calibrated probability. We deliberately rejected Platt scaling because our corpus is a positively-selected cohort (students who applied to selective schools), not a random sample. Standard calibration on non-random samples produces misleadingly confident probabilities. We report the output as an exploratory ordinal signal — a relative ranking you can trust more than the exact percentage.
Does it actually work?
We validated the engine against held-out profiles from our own corpus. The short version: the ranking is solid (AUC ≈ 0.74, meaning it correctly orders “got in” vs “rejected” about three times out of four), and the spike improves calibration (Brier −3.7%) but the exact percentage at the very top is shaky. We’re not going to pretend otherwise.
By school tier (held-out)
| Tier | Predicted | Observed | |
|---|---|---|---|
| Reach (top decile of your list) | 46.2% | 63.2% | ✗ off |
| Match (middle 60%) | 33.0% | 31.0% | ✓ close |
| Safety (bottom 30%) | 89.1% | 93.8% | ✓ close |
By admission-rate decile (the honesty test)
| Decile | Predicted | Observed | |
|---|---|---|---|
| 1 (safest) | 0.972 | 0.967 | ✓ |
| 3 | 0.90 | 0.92 | ✓ |
| 5 | 0.78 | 0.80 | ✓ |
| 7 | 0.58 | 0.61 | ✓ |
| 9 | 0.34 | 0.36 | ✓ |
| 10 (most selective) | 0.015 | 0.231 | ✗ miscalibrated |
Notice decile 10: we predict 1.5%, reality is 23.1%. At the most selective schools, our model under-confidently shrinks toward zero. That is a known limitation of training on a corpus where “got into Harvard” is rare. Take any single-digit percentage here as “very hard, but the true odds are higher than this says.”
What this number is not
- Not an official probability. It is an exploratory, ordinal signal from one student corpus — not a calibrated likelihood and not affiliated with any college.
- Not a guarantee. Admissions involve essays, fit, luck, and factors we don’t model. Use it to strategize, not to decide your worth.
- Biased by its data. Our corpus skews toward a certain kind of high-achieving, internationally-minded applicant. Results for under-represented profiles are less reliable.
- Narrow by design. It only scores schools already in our dataset. A school with no data simply can’t be scored honestly.
Where the data comes from
We are careful to only claim what we can point to.
- Student outcomes —
studentsdata.json: 1,122 self-reported profiles (2017–2023), 692 with an acceptance and 212 with a rejection. Crowd-sourced; noisy by nature. - College stats —
collegesdata.json: 6,273 institutions, primarily from the U.S. Department of Education College Scorecard. - Academic modeling basis — Giani & Walling (2020), Journal of College Access; Lee, Kizilcec & Joachims (2023), arXiv:2302.03610.
We deliberately removed earlier citations we could not verify (an “AdmitMatch technical guide”, a “College Board placement methodology”, and a vague “Fan et al.”). If we can’t link it, we don’t cite it.