How we predict admissions chances
Honest doesn't mean precise. This tool gives you a probability range, not a point, because nobody — including us — can predict admissions decisions with one number. Below we lay out exactly what we measure, what we don't, and how we check whether we're being honest. Jump to calibration evidence.
Inputs the model uses
SAT or ACT composite
We compare your test score to each school's published 25th–75th band to get your relative position in that school's applicant pool.
Unweighted GPA (preferred)
When a school publishes an average admit GPA, your distance from that average shifts the prediction.
Weighted GPA + scale
If your school only reports weighted, we normalize back to a 4.0 scale (with a documented limitation — the conversion is coarse).
Class rank + class size
Optional. We don't condition on rank in v1; we collect it for future model versions.
State of residence
Triggers a small positive boost at public universities in your state — calibrated against published in-state vs. out-of-state admit rates.
First-generation status
A small positive at selective need-blind-proxy schools. NEVER lowers your chance at any school.
Your college list (1–12)
We score each school you list. The order of the list doesn't matter to the math.
How the model works
We fit a separate logistic model per college, anchored on each school's published admission rate and SAT distribution. Your inputs are compared to those distributions and we report a probability range that accounts for two things: how confident the model can be given the data it has (statistical uncertainty), and how much your application's holistic factors might move the prediction (out-of-model uncertainty).
More technical
Statistical component.A Wilson 95% confidence interval on each school's admission rate, propagated through the per-college logistic. The bound accounts for the school's applicant-pool size — small schools get wider bands.
Out-of-model component.A tier-aware ±pp envelope covering the factors we can't see. Magnitudes: ±5pp at safeties, ±8pp at targets, ±12pp at reaches, ±15pp at ultra-reaches. We add +5pp on top when you're applying test-optional.
ACT → SAT. 2018 College Board / ACT joint concordance table. Below ACT 11 we extrapolate linearly.
Band clamps. Honesty contract: p_hi ≤ 0.95, p_lo ≥ 0.01. We don't claim guaranteed admits or guaranteed rejects — those aren't true claims about any admissions process.
What we don't model
- essays
- recommendations
- legacy / family alumni status
- recruited athlete status
- demonstrated interest
- personal-statement hooks (extraordinary circumstances, etc.)
Repetition is intentional — these are the same factors the result page calls out. They're where your application gets to do work.
Calibration evidence
Last successful calibration: June 6, 2026 at 6:30 AM
Brier score: 0.0010
Smaller is better. This number measures how close our predictions land to the published admit rates we're calibrating against — not how often individual applicants get admitted (we don't have that data).
Predicted vs. published admit rate, by decile bin. Points near the dashed y=x line mean the model recovers the school's rate; points off the line indicate miscalibration.
463 colleges scored this run.
v1 back-fit consistency check, not a real holdout test against admitted-student outcomes. We compare each school's predicted admit probability for a synthetic median applicant against the school's published admission rate. A more rigorous calibration story ships when we have enough self-reported admissions decisions from our users to back-test honestly.
Version history
| Model version | Deployed | Notes |
|---|---|---|
| admissions_chance_v1 | 2026-05-15 | Initial v1 model — per-college logistic, Wilson 95% statistical CI, tier-aware out-of-model envelope, 2018 College Board / ACT concordance. |
Privacy & data
This tool is anonymous-first. We don't require signup, we don't collect your name, and we don't ask for an email unless you opt into lead capture. Your inputs and the resulting prediction are stored in a 30-day Redis session keyed by an opaque ID; nothing leaves that scope. We do not condition the model on race, ethnicity, or any protected class. See our privacy policy for the full picture.