How scores are calculated
CareerStar treats each career like a financial asset — weighing expected return against risk — and blends the result with how well the path fits you. Everything below is deterministic: the same inputs always produce the same score. The number is computed by an explicit model, not by an AI language model.
What is this page & how do I use it?
This page is the math behind every CareerStar score — the full model, its weights, the data sources, and the tests it was put through, written so you can check the work rather than take my word for it.
How to use it: skim the section headings and stop where you’re skeptical. If you only read one section, read the back-test — it shows how the model fared against a real decade, including what it got wrong.
The model
Each occupation gets a 0–100 score from three ingredients:
- Return — projected employment growth and median pay, each ranked against every other occupation in the set.
- Risk — AI/automation exposure (dominant) plus a volatility proxy (a field projected to shrink is treated as riskier).
- Fit — how well the occupation’s real skill profile matches your interests, measured in O*NET capability-space (see below).
Return = wGrowth·growth + wPay·pay Risk = wExposure·exposure + wVolatility·volatility RAV = Return · (1 − γ·Risk) (risk-adjusted return) Score = 100 · [ α·RAV + (1 − α)·Fit ]
The weights (wGrowth, wPay, wExposure, wVolatility, γ, α) are explicit and documented in the code, so the model can be tuned and its sensitivity analyzed — raise the pay weight and finance climbs; raise γ and AI-exposed fields sink.
Fit, in O*NET capability-space
Every occupation carries a real 68-dimensional capability vector — the O*NET importance ratings for 35 skills (Critical Thinking, Programming, Mathematics…) and 33 knowledge areas (Economics & Accounting, Engineering, Medicine, Law…). Your stated interests are mapped into the same space through an explicit, documented lexicon, and fit is the overlap of the two.
One subtlety matters: nearly every professional job rates high on the common skills, so a naïve overlap barely distinguishes them. CareerStar instead weights each capability by how distinctive it is across the whole labor market (a z-score per dimension), so a match on a rare, defining skill counts far more than a match on one everybody shares. That is what lets fit tell finance from engineering, not just desk-work from the trades. It remains a modeling choice, stated as one — two quantitatively similar fields can still both score high.
The AI-moat rating
Borrowed from Morningstar’s economic moat: how defensible is a career against AI pressure? It is a fixed, documented formula — not a hand-wave:
defensibility = 0.6·(1 − aiExposure) + 0.4·distinctiveness distinctiveness = clamp( (mean of top-5 z-scored capabilities − 1) / 2 ) Wide moat ≥ 0.70 (~20% of careers) Narrow moat ≥ 0.55 (~50%) No moat < 0.55 (~30%)
Low AI exposure is shelter; distinctiveness asks whether the career’s defining capabilities are rare in the labor market or ones every job shares. The thresholds are calibrated once on the full 730-occupation distribution to a Morningstar-like shape and then fixed. The model makes uncomfortable calls — it gives software developers no moat (extreme LLM exposure) while their risk-adjusted score stays high — and I ship those calls rather than tune them away. For 25 newer SOC codes O*NET hasn’t yet rated (software developers among them), capability vectors are estimated from their SOC-group siblings and flagged as estimates in the data.
Score uncertainty is also stated in words on every card — Low (±5 or less), Medium (±6–8), High (±9–10), Very high (±11+) — wider with high AI exposure or weak fit.
What the rated universe looks like
The real distributions across all 730 occupations at default weights — the forced star-curve is applied on top of the score distribution, and the moat split is calibrated once to a Morningstar-like shape:
Robustness (does the answer survive?)
The weights are a deliberate choice, so the fair test is whether the ranking holds when you disagree with them. For every comparison, CareerStar re-scores the careers across 729 weightings — every weight moved ±20% on a fixed grid — and reports how often each career keeps its rank. A result that holds across all 729 is robust; one that shuffles is flagged as a close call rather than sold as a verdict. You can watch this live by moving the sliders on the results screen.
Five rival models (model risk, made visible)
Any single formula is one opinion about how much AI risk should count. So every comparison is also scored under four rival models — different philosophies, not weight tweaks — and the app shows when they agree (conviction) and when they crown different winners (genuine uncertainty):
| Model | Philosophy | Formula |
|---|---|---|
| Standard | Risk-adjusted return — AI risk discounts the market reward, then fit blends in. The headline model. | 100·[α·(Return·(1−γ·Risk)) + (1−α)·Fit] |
| Growth maximalist | Pure market momentum: growth + pay only. Deliberately ignores AI risk — 'the projections already price it in.' | 0.5·growth + 0.5·pay |
| Defensive | Moat first: in an AI shock, survival beats upside. Defensibility and resilience dominate; reward is secondary. | 0.5·moat + 0.3·resilience + 0.2·pay |
| Sharpe-style | Efficiency: reward per unit of risk, as a ratio — a high-return career must also be low-risk to score high. | 100·Return / (Return + Risk) |
| Naive 1/N | The control: an equal-weight average of everything. If a clever model can't beat this, that's worth knowing. | (growth + pay + resilience + fit) / 4 |
The naive equal-weight model is deliberately included as a control — a model that can’t distinguish itself from 1/N isn’t earning its complexity.
Data sources
- Growth & pay — U.S. Bureau of Labor Statistics, Employment Projections 2024–2034 (public domain) — ~730 occupations across every field.
- AI exposure — Eloundou et al. 2023, “GPTs are GPTs” (occupation-level exposure, β measure; MIT-licensed).
- Skills & knowledge — O*NET 29.0 Database (U.S. DOL/ETA, CC BY 4.0), Skills and Knowledge importance ratings.
- Occupations are keyed by O*NET-SOC code.
Does “AI exposure” just mean “decline”?
A fair objection: maybe the risk score is redundant — maybe exposed jobs are simply the shrinking ones. The data says no. Across all 730 occupations, AI exposure and projected growth are almost uncorrelated (Spearman ρ = 0.075). Sorting jobs into exposure quartiles, average projected growth stays flat — Q1: 0%, Q2: 1.6%, Q3: 3.6%, Q4: 1.3% — with no downward trend.
So exposure carries information growth doesn’t, which is why a risk-adjusted score beats ranking on growth alone — and why “exposure ≠ displacement” is literally true here, not just a slogan. (And this isn’t left as an assertion — the model was run against a real decade of history. See the back-test below.)
The back-test: 2014 → 2024, a real decade
The strongest test I could run: score the 2014 labor market with today’s model (using the archived BLS 2014–24 projections vintage, recovered from the Internet Archive) and compare against what actually happened by 2024 — 647 occupations joined across the decade.
Read it honestly. The score tracked a real decade (rank correlation 0.39; decliners flagged at 48% vs a 33% base rate — a 1.45× lift). The raw BLS projection alone scored ρ 0.411 — slightly better — because the AI-risk adjustment added nothing for 2014–24 (exposure ρ ≈ 0.099). That is exactly what the model claims: 2014–24 was a pre-LLM decade, and exposure is a forward-looking bet the past cannot score. The back-test validates the part of the model that history can test, and says so about the part it can’t.
The misses, named: the model liked oil-and-gas roles in 2014 (rotary drill operators, oil and gas, score 64) that fell 52% when oil prices crashed — a systemic shock no occupation-level model catches. And it under-rated couriers (+166% on the e-commerce boom). Some extreme outliers also reflect SOC reclassification rather than real change. Full numbers, misses, and false alarms: data/backtest.json.
Check my math — download the data
Every rating on this site is in one open CSV: careerstar-ratings.csv — all 730 occupations with the default-weight score, stars, percentile, AI-moat, all five model scores, consensus, growth, pay, exposure, and a flag for the 25 careers whose capability vectors are estimated. If a number looks wrong, the formulas are on this page and the code is on GitHub — auditing it is encouraged. Derived ratings are CC BY 4.0 (cite CareerStar); upstream data keeps its own licenses (BLS public domain, O*NET CC BY 4.0, Eloundou MIT).
Limitations (read these)
- Exposure is not job loss. AI exposure measures the share of tasks a model could touch — not whether the job disappears.
- It’s an estimate, not a prediction. No one can see the future of the labor market; this is a grounded, transparent snapshot.
- Fit is a model, not a verdict. It uses real O*NET skill and knowledge vectors, but the interest→capability lexicon is hand-authored, so fit is a defensible estimate — and two quantitatively similar fields (say finance and engineering) can score alike.
- The volatility term is a proxy. No public dataset measures career volatility directly, so it is constructed from projected growth.
Built with an AI-native workflow. The language model only writes the plain-English explanations — it never computes a score.