Methodology · Career advisory

How the recommendations are scored.

Inspired by DOORS · public-data adaptation · descriptive, not causal

What we do

Given your most recent role and skills, we rank Standard Occupational Classification (SOC) codes by a weighted average of two z-scores: an earnings score and a skill-similarity score. Education distance, STEM matching, and a salary-ratio adjustment act as filters or tilts on top of that base.

The architecture mirrors the DOORS system described inHowison, Long & Hastings (2024). Our adaptation swaps DOORS' causal earnings model for a public-data proxy because we don't have access to state Unemployment Insurance wage records. We also intentionally omit DOORS' real-time posting-demand signal — online posting volume isn't something we can capture at the breadth and quality needed for it to matter as a ranking input, so we don't pretend it does.

The two scores

1. Earnings score

Z-score of median_wage[receiver] − median_wage[sender], taken from the BLS Occupational Employment and Wage Statistics (OES) annual table, tilted by 10-year BLS Employment Projections growth.

This is descriptive. It tells you how the median earner in the receiving occupation compares to the median earner in your sending occupation today. It is not a causal estimate of what you would earn after switching, because we lack the matched-individual administrative data required to estimate that effect.

2. Skill similarity

Cosine similarity between the O*NET skill-importance vector for your most recent SOC and the same vector for each candidate SOC. We use the O*NET descriptor list (~35 skills) rather than the 775-skill ontology DOORS derives from 42M postings.

Final score = w_e · z_earnings + w_s · z_similarity + STEM-match bonus + salary-ratio penalty + user-goal boost. The user-goal boost adds a multiple of whichever z-score matches the goal you picked (earnings / similarity).

Filters

  • Receivers whose typical education differs from yours by more than one level on the 7-level scale are dropped — same threshold the paper uses.
  • Your sender SOC is excluded from the candidate set so we never recommend the role you're already in.

Honest limitations

  • Earnings is not causal. A higher OES median for the receiving occupation does not mean you personally would earn more after switching. Confounders — geography, age, prior tenure, whether the people who actually transition are positively selected — are not controlled.
  • Skill similarity is coarser than the paper. The O*NET descriptor list is ~35 dimensions; DOORS uses ~775 derived from millions of full-text postings. Expect more ties and less separation between adjacent occupations.
  • No live demand signal. DOORS uses posting volume; we don't. We couldn't capture postings at sufficient breadth, freshness, or de-duplicated quality to make the signal honest, so we left it out entirely rather than ship a noisy proxy.
  • No outcome feedback. The paper plans to incorporate administrative data on whether users actually transitioned and what they earned afterwards. We don't have that data, so the recommendations can't yet improve based on outcomes.

Data sources

  • O*NET Web Services — SOC taxonomy, skill vectors, typical education, STEM flag
  • BLS OES — annual median wages per SOC
  • BLS Employment Projections — 10-year growth (tilt on the earnings score)
  • CareerOneStop API — on-demand training programs near you (no posting data)
  • Claude — resume → SOC + skills extraction

back to the advisor