Latest

How It Works

Complete documentation of the Lifetime Earnings Forecast: the mathematical formulas behind every projection, all BLS data sources with file-level references, the full SOC code mapping for every career, statistical methods used in analysis articles, and the auto-update system that keeps data current.

Latest Update

  • BLS Median Anchor: Both user and peer lines use BLS OEWS annual median wages. Peer uses the raw median with the same career curve — no arbitrary discounts.
  • Input Validation: Checks age/education consistency and career-specific requirements. Blocks impossible inputs; warns on unusual ones.
  • Auto-BLS Updates: Cloudflare Worker proxy pulls latest BLS OEWS wages via the Public Data API. Calculator wage anchors stay current automatically.
  • 3,200+ Articles: Career earnings analyses, salary guides, and profession comparisons. All BLS government data with inline source citations.
  • Web Worker: Calculator engine runs off the main thread. UI stays responsive during computation.

BLS median anchor. Validated inputs. Auto-updating wages. 3,200+ articles with government-only data.

1

What the tool is (and is not)

It is an educational, interactive estimator that translates a set of inputs (career field, education, age, experience, current income) into a plausible year-by-year earnings trajectory, plus a comparable peer baseline. It uses BLS OEWS May 2024 wage data as the foundation for every projection, covering 800+ occupations mapped to specific SOC codes. The model applies a Hill S-curve for career growth, lognormal distributions for percentile bands, and BLS Employment Projections 2024–2034 for growth rates.

It is not a guarantee, employment offer, or financial advice. Real-world earnings depend on many factors the model cannot fully observe: local labor markets, negotiation outcomes, employer quality, health, career changes, industry shifts, and chance. Typical individual accuracy is ±30–50%. The model uses national averages; your metro area, company, and role may differ significantly from BLS aggregates.

What the data covers: Wage and salary income only (W-2 earnings). Does not include equity compensation, bonuses beyond what BLS captures in mean wages, benefits, freelance income, rental income, or investment returns. BLS top-codes percentile wages at ~$239,200; mean wages above this threshold are reported and used where available (e.g., physician specialties).

What the model assumes: Continuous employment in one career field from entry to retirement. No career breaks, layoffs, or field switches. A single education level throughout. Inflation-adjusted (real) dollars. These assumptions simplify the math but do not reflect most people's actual career paths.

2

Inputs & timeline

The tool creates a realistic career timeline so projections don't do impossible things (like starting a full-time career before graduation).

  • Student vs. not a student: determines whether early years are school years vs. work years.
  • Highest degree: influences typical workforce entry age and the baseline level.
  • Experience in-field: anchors how far into the career you are today. Also used to estimate past earnings for a true lifetime total.
  • Retirement age: defines the projection horizon.
3

Input validation system

The calculator validates inputs to prevent mathematically impossible scenarios and ensure projections start from realistic conditions.

What gets validated

  • Age + Education Consistency: You must be old enough to have completed your stated degree.
  • Career Requirements: Physicians require MD/DO + residency (min age 29–31), lawyers require JD (min 25), advanced practice nurses require graduate degrees, finance/consulting require bachelor's minimum.
  • Experience Math: Years of experience cannot exceed (age − degree completion age).
  • Income Reality Checks: Warns (but doesn't block) if income seems unusually high for age/experience.
  • Hours Per Week: Must be 1–80 hours. Warns if extremely high (60+) or part-time (<20).

Errors (blocking) prevent generation for impossible inputs. Warnings (non-blocking) flag unusual but possible scenarios and ask for confirmation.

4

Peer baseline

The peer line answers: "What does a typical person in a comparable category earn over time?"

  • Peers are matched on career field, education level, and years of experience.
  • The peer uses BLS median wages directly with the same career curve — no additional scaling or discount is applied.
  • Peers have their own estimated past earnings for fair lifetime comparison.

The peer represents the median worker in your field with the same education and experience, working 40 hours/week, with no GPA or school tier boost. Your line rises above the peer through your personal advantages.

5

Your projection path

Your line starts from your inputs (especially current income, hours, and experience) and evolves using a realistic growth shape:

  • Early-career ramp: faster growth when skills and opportunities compound.
  • Mid-career plateau: growth slows as you approach a mature earning level.
  • Role specialization: adjusts the speed vs. ceiling tradeoff (deep specialists ramp slower but can reach a higher peak).

The tool keeps the path smooth and consistent year-to-year, avoiding unrealistic spikes unless inputs imply a major transition.

6

GPA & school tier effects

For student users, GPA and school tier create two distinct effects on the projection:

Early-career placement boost

Higher GPA and more prestigious schools tend to yield stronger starting positions. A 4.0 GPA at a target school can produce up to ~38% higher initial placement compared to a low GPA at a non-target school. This effect fades over approximately 10 years as career performance takes over.

Persistent school premium

Graduates from selective institutions tend to retain a modest 5–12% wage premium through mid-career, driven by network effects, brand signaling, and career trajectory sorting. This effect decays slowly but never fully vanishes.

The peer line receives neither of these effects. It has no GPA or school tier boost applied. Non-student users are not affected by GPA or tier.

7

Uncertainty band

The shaded band expresses that earnings are not deterministic. It represents the 15th to 85th percentile range of plausible outcomes.

  • Wider early: early careers vary a lot (first job quality, internships, switching fields).
  • Narrower later: once a path stabilizes, outcomes cluster more tightly.
  • The band is not a promise, it's a model-based "reasonable range."
8

Lifetime totals & percentiles

Lifetime totals are computed by summing estimated past earnings (based on work experience) plus projected future annual values across your timeline, producing true lifetime earnings, not just future projections.

Percentiles locate your cumulative outcome relative to the peer distribution. "53rd percentile" means slightly above typical for the peer baseline framing.

Percentile accuracy (v2.0+)

Distributions now use realistic variance (sigma 0.50–0.90 vs. old 0.28–0.48), making rankings ~15–20 points more accurate. "61st percentile" instead of the old "78th" = the fix working correctly.

Note: Percentiles are sensitive to dispersion assumptions. Interpret as directional, not precise.

9

Data sources & transparency

The calculator relies on U.S. government data as its primary source.

Primary data sources

  • BLS OEWS (Occupational Employment and Wage Statistics), U.S. government survey of 1M+ establishments covering ~1,400 detailed occupations with median, mean, and percentile wages
  • BLS Employment Projections 2024–2034: 10-year employment outlook, growth rates, annual openings, and typical education requirements
  • OPM General Schedule Pay Tables: federal government pay grades and step rates
  • Data baseline: BLS OEWS May 2024 (auto-updated fields reflect latest BLS release)
  • Limitation: BLS wage data is top-coded at approximately $239,200 annually

How wage anchors work

Every career field in the calculator starts with a wage anchor: the BLS OEWS annual median wage for the closest matching SOC code. This anchor is the foundation of every projection. Auto-updated fields pull the latest anchor via the BLS Public Data API every 24 hours. For top-coded physician specialties where BLS doesn't report median (above ~$239K), the calculator uses common-sense estimates derived from BLS mean data.

On top of the anchor, the model applies three trajectory parameters:

  • Shape parameters: peak earning age, early-career growth rate, mid-career plateau rate, and maximum career multiplier. These control the curvature of the year-by-year trajectory.
  • Role modifiers: for fields with multiple subspecialties under the same SOC code (e.g., BigLaw vs. public interest law both map to "Lawyers" SOC 23-1011), role modifiers adjust the level, ceiling, and volatility relative to the base anchor.
  • Education baseline (baseEdu): for careers that already assume a specific degree (physicians, lawyers, pharmacists, dentists), this prevents the education multiplier from double-counting the degree premium.

Shape parameters are calibrated from BLS CPS age–earnings lifecycle profiles. Role modifiers are common-sense adjustments for subspecialties that BLS groups under a single SOC code, reflecting well-known industry pay differences.

BLS top-coding and physician specialties

BLS top-codes annual median wages at approximately $239,200. For most career fields this is not an issue — median wages are well below the threshold and auto-update works normally. For high-compensation physician specialties, three have medians below the threshold and auto-update directly:

  • Family Medicine (SOC 29-1215): $238,380 median, direct BLS
  • Internal Medicine (SOC 29-1216): $236,350 median, direct BLS
  • Pediatrics (SOC 29-1221): $210,130 median, direct BLS

Six physician specialties have medians above the BLS top-coding threshold. For these, the calculator uses common-sense estimates derived from BLS mean data (which BLS does report above $239K):

  • Emergency Medicine (SOC 29-1214): estimated from $320,700 BLS mean
  • Psychiatry (SOC 29-1223): estimated from $269,120 BLS mean
  • Anesthesiology (SOC 29-1211): estimated from $336,640 BLS mean
  • Radiology (SOC 29-1224): estimated from $359,820 BLS mean
  • Surgery (SOC 29-1249): estimated from $371,280 BLS mean
  • Cardiology (SOC 29-1212): estimated from $432,490 BLS mean

All physician career trajectory adjustments reflect common-sense growth differences by specialty, calibrated from BLS CPS age–earnings lifecycle data.

Finance and law subspecialties

BLS does not publish separate SOC codes for investment banking, private equity, or hedge funds. These fields are subsets of broader BLS categories:

  • Investment Banking, Private Equity, Hedge Funds: all use the BLS median for Financial Analysts (SOC 13-2051): $101,350. Role modifiers of 1.30×–1.60× adjust for the higher compensation typical in these subspecialties.
  • BigLaw: uses the BLS median for Lawyers (SOC 23-1011): $151,160. A role modifier of 1.35× reflects that large-firm compensation exceeds the all-lawyers average. Other law subspecialties use the same base with lower modifiers (government law at 0.52×, public interest at 0.42×).
  • Management Consulting (Strategy): uses the BLS median for Management Analysts (SOC 13-1111): $101,190 with a 1.20× modifier.

The BLS base anchors are government data. The role modifiers that differentiate subspecialties are common-sense adjustments reflecting well-known industry pay differences (e.g., BigLaw pays more than government law, ML engineers earn more than frontend developers). Users can override any default by entering their actual current income.

What is and is not government data

  • Government data: Every wage anchor (the dollar amount each career starts from), employment counts, growth projections, annual openings, education requirements, state-level wages, and occupational separation rates.
  • Mathematical framework and common-sense parameters (not government data): Career trajectory shapes (peak age, growth rate, plateau) calibrated from BLS CPS age–earnings profiles, role modifiers that apply common-sense adjustments for subspecialties within the same SOC code, uncertainty band width (lognormal distribution), GPA/school tier effects, the education multiplier system (approximating well-known BLS education–earnings premiums), and financial planning heuristics (15% savings rate, 4% real return, 70% sustainable spend rate, 4% withdrawal rate). A small number of career anchors (product manager, research scientist, public sector, nonprofit, journalist) are composites rather than direct BLS SOC values; see SOC code reference for details.

In short: the data foundation is government (BLS). Career curve shapes are calibrated from BLS CPS lifecycle data. Subspecialty adjustments are common-sense differentiations. Statistical distributions use standard mathematical formulas (Hill S-curve, lognormal).

10

Randomize feature

The "Randomize" button provides quick access to 24 pre-validated career scenarios spanning diverse outcomes, professions, ages, and education levels.

  • Explore different paths: See how various careers, education levels, and experience combinations affect lifetime earnings.
  • Compare outcomes: Scenarios range from high earners (surgeons, BigLaw, PE, tech) to modest earners (retail, nonprofit, paramedics), some beat their peers, some fall behind.
  • Every life stage: Ages 17–55 including students, early-career starters, mid-career professionals, and workers nearing retirement.
  • Pre-validated: All scenarios use correct age/education/experience combinations and won't repeat twice in a row.
11

Limitations

  • No model can fully capture promotions, layoffs, entrepreneurship, or extreme outliers.
  • Local cost of living, taxes, benefits, and equity compensation can materially change "true" earnings.
  • The tool focuses on earnings, not happiness, fulfillment, or life quality.

If your situation is unusual (career breaks, switching fields, startups/equity), treat results as a starting point, not an endpoint.

12

Article data & AI disclosure

In addition to the calculator, this site publishes salary guides, career earnings analyses, and profession comparison articles. Every article follows a strict government-data-only policy.

How article content is created

This website is built with AI tools. All salary data, employment figures, growth projections, and career outlook information are sourced exclusively from U.S. government data. No private or commercial salary surveys are used.

Government data sources used in articles

  • BLS OEWS May 2024 (Occupational Employment and Wage Statistics), median, mean, and percentile wages (10th, 25th, 75th, 90th) plus total employment counts for every occupation covered. This is the primary wage data source for all articles.
  • BLS Employment Projections 2024–2034: 10-year employment growth rates, projected annual openings, typical education and training requirements, and self-employment rates for each occupation.
  • BLS Occupational Separations (Table 1.10): annual exit rates and transfer rates showing workforce turnover patterns by occupation.
  • OPM General Schedule Pay Tables 2026: federal government pay grades and step rates, used for government worker salary data.
  • BLS OEWS State Data May 2024: state-level median wages, employment counts, and location quotients for state-by-state salary comparisons.

All BLS and OPM data is public domain. No copyright restrictions apply.

Inline citation approach

Every data point in every article includes an inline source note directly below the paragraph or table it supports. For example:

Source: BLS OEWS May 2024, SOC 29-1141.

No figures are presented without attribution. Each source note identifies the specific BLS dataset and SOC code (Standard Occupational Classification) so readers can verify every number independently at bls.gov/oes.

Scope and limitations of article data

  • Articles use only government data, no private salary surveys, commercial compensation platforms, or industry association reports
  • Every salary figure comes from a specific government data file, not AI estimates
  • BLS OEWS captures wages only; articles do not include non-wage compensation
  • Non-data descriptions are limited to widely known facts about each profession (e.g., physicians complete residency training, lawyers pass a bar exam)

Data verification

All article figures are extracted directly from downloaded BLS Excel data files (not rounded website figures). The site uses national_M2024_dl.xlsx for wage data and occupation.xlsx for employment projections. Every figure can be independently verified by downloading these same files from bls.gov/oes/tables.htm and bls.gov/emp/tables.htm.

13

Important disclaimers

Educational Tool Only: This calculator is for educational and informational purposes only. It is NOT financial advice, career advice, or a guarantee of future earnings.

Accuracy Limitations: Typical accuracy is ±30–50% due to inherent variance in career outcomes. Individual results vary significantly based on performance, market conditions, employer, location, negotiation ability, career choices, and countless other factors.

No Guarantees: Past results do not guarantee future outcomes. The calculator cannot predict layoffs, promotions, career changes, entrepreneurship, health issues, economic changes, or life events.

Not Professional Advice: This tool does not provide career counseling, financial planning, investment advice, or tax guidance. Consult qualified professionals for personalized advice.

Use at Your Own Risk: All projections are estimates based on statistical models and historical data. Your actual lifetime earnings may be significantly higher or lower than projections.

Data Sources: Calculator projections based on Bureau of Labor Statistics data (BLS OEWS May 2024, BLS Employment Projections 2024–2034) and statistical modeling. Auto-updated fields reflect the latest available BLS release. Economic data is published with delays.

Built with AI tools: This website is built with AI tools. All salary data, employment figures, and career projections in articles are sourced exclusively from U.S. government data (BLS, OPM) with inline citations. See section 12 above for full details.

14

Mathematical framework

This section documents the exact formulas the calculator uses to generate year-by-year earnings trajectories, peer baselines, uncertainty bands, and lifetime totals. Every formula below is implemented in client-side JavaScript. Salary data is kept fresh via a Cloudflare Worker proxy that fetches updated BLS figures and caches them at the edge.

Step 1, Wage anchor

Every career field starts from a wage anchor: the BLS OEWS annual median wage for the closest-matching SOC code. The anchor is the only external data input; everything else is model math.

The effective starting anchor for any user is:

anchorBase = anchor₀ × eduMult × roleMod.level

  • anchor₀: BLS OEWS annual median wage (auto-updated via BLS API every 24 hours; top-coded physician specialties use estimates from BLS mean data)
  • eduMult: relative education multiplier: EDU_MULT[userEdu] / EDU_MULT[baseEdu]. This avoids double-counting for careers whose anchors already assume a specific degree. Education multiplier table: No credential 0.70×, HS 0.78×, Associate's 0.88×, Bachelor's 1.00× (baseline), Master's 1.12×, Doctoral/Prof. 1.24×
  • roleMod.level: subspecialty adjustment within the same SOC code (e.g., BigLaw 1.35× vs. public interest law 0.42×, both under Lawyers SOC 23-1011)

Step 2, Career curve

Annual earnings evolve along a smooth bounded career curve indexed by years since career start (not age). The curve combines three components:

Hill S-curve ramp (early career):

halfLife = 0.693 / earlyK × 1.4

ramp = y² / (y² + halfLife²)

This produces a sigmoidal growth from 0 → 1, pushed 40% further into mid-career than a pure exponential, so visible growth extends through mid-career rather than saturating too quickly.

Peak transition (logistic):

peakT = clamp((y − peakY) / 8, −2, 3)

post = 1 / (1 + e−peakT)

A logistic function that transitions from 0 (pre-peak) to 1 (post-peak) over approximately 16 years centered at the peak career year.

Post-peak drift:

drift = 1 − plateau × max(0, y − peakY) / 18 (clamped to [0.90, 1.02])

A mild linear decline after peak, not a cliff, typically 1–2% per year depending on the career field's plateau rate.

Combined curve factor:

base = 1 + (maxMult − 1) × ramp

curveFactor = lerp(base, base × drift, post) (clamped to [0, maxMult × 1.02])

Where maxMult = shape.maxMult × roleMod.ceiling. This is the maximum multiplier the career can reach relative to the base anchor (typically 1.45× to 2.68× depending on field).

Step 3, Shape parameters

Each career field has four shape parameters that control its trajectory curvature:

  • peak: the age at which the career curve reaches maximum velocity (not maximum value). Ranges from 38 (paramedics) to 52 (physicians, pilots). The effective peak year = peak − typicalEntryAge + roleMod.delay
  • earlyK: early-career growth speed. Higher values = faster ramp. Ranges from 0.070 (education) to 0.120 (consulting). Mapped to Hill curve half-life via 0.693 / earlyK × 1.4
  • plateau: post-peak annual decline rate. Ranges from 0.008 (hospitality) to 0.015 (data science). The annual drift multiplier = 1 − plateau × (yearsPostPeak / 18)
  • maxMult: career ceiling as a multiple of the base anchor. Ranges from 1.28 (cardiology) to 2.68 (real estate). At peak, the career curve reaches approximately anchor × maxMult × roleMod.ceiling

These parameters are calibrated from BLS CPS age–earnings lifecycle profiles and common-sense industry knowledge. They produce career trajectories consistent with known patterns of how earnings evolve over a career.

Step 4, Role modifiers

Within each SOC code, subspecialties are differentiated by four role modifier parameters:

  • level: starting salary multiplier relative to the SOC anchor (e.g., ML Engineer 1.12×, Data Analyst 0.85×). Applied at year zero.
  • ceiling: peak multiplier adjustment. Scales maxMult to differentiate career ceilings (e.g., BigLaw ceiling 1.50× vs. public interest 0.80×)
  • volatility: scales uncertainty band width and the percentile distribution sigma. Higher volatility careers (hedge funds 1.45×) have wider outcome ranges than stable careers (psychiatry 0.88×)
  • delay: years added to the peak year, reflecting longer ramp-up for senior or delayed-gratification career paths (e.g., private equity 1.5 years, engineering management 2.2 years)

Careers with no subspecialty distinction use neutral modifiers: { level: 1.00, ceiling: 1.00, volatility: 1.00, delay: 0 }.

Step 5, Annual earnings formula

For each year from career start to retirement:

earn(year) = anchorBase × curveFactor(y) × hoursMult

  • hoursMult = clamp((hours/40)0.55, 0.62, 1.25), compressed power function that prevents hours from dominating the projection

A hard cap of anchor₀ × 6.0 prevents any single year from producing unrealistic values.

Step 6, Income calibration

If the user provides current annual income, the model calibrates so year zero matches exactly:

calibFactor = statedIncome / modeledIncome

All future years (and the uncertainty band) are scaled by this factor. Past earnings estimates also use the calibration factor for consistency. Calibration is disabled for students, their future trajectory should not be anchored to part-time school-year earnings. Instead, GPA and school tier handle student-specific differentiation.

Step 7, Student placement effects

For student users, GPA and school tier produce two mathematically distinct effects:

Early placement factor (fades over ~10 years):

gpaMult = lerp(0.88, 1.14, GPA/4)

tierMult = target: 1.14, semi-target: 1.06, non-target: 1.00

earlyPlacement = clamp(gpaMult × tierMult, 0.85, 1.38)

earlyFade = clamp(1 − yearsInField/10, 0, 1)

earlyEffect = 1 + (earlyPlacement − 1) × earlyFade

Persistent school premium (decays slowly, never vanishes):

gpaPersist = lerp(0.96, 1.06, GPA/4)

tierPersist = target: 1.08, semi-target: 1.03, non-target: 1.00

persistMult = clamp(gpaPersist × tierPersist, 0.94, 1.12)

persistFade = 0.40 + 0.60 × e−y/18 (half-life ~12 years, floors at 40% of initial)

persistEffect = 1 + (persistMult − 1) × persistFade

The final placement factor is earlyEffect × persistEffect. The peer line receives neither effect, it uses neutral defaults (GPA 3.2, semi-target).

Step 8, Peer baseline

The peer line represents a typical full-time worker in the same field, matched on career field, education, and experience. It is computed identically to the user path except:

  • Hours fixed at 40 (standard full-time)
  • Income set to null (no calibration, pure model estimate)
  • No GPA or school tier boost (these only apply to the user line)

No post-processing discount. Both user and peer use BLS median wages as the anchor. The peer line uses the raw median with the same career curve — no arbitrary multiplier is applied. The gap between user and peer comes entirely from the user's personal advantages (GPA, school tier, hours, calibration).

Step 9, Uncertainty band

The shaded band represents the 15th–85th percentile range of plausible outcomes:

baseVol = 0.26 × roleMod.volatility

z = 1.0364 (the standard normal quantile for 15th/85th)

For each year at career age y:

earlyFactor = clamp(1.6 − y/15, 0.75, 1.6), wider band early career, narrower later

sigma = baseVol × earlyFactor

bandLo = earn × e−z×sigma

bandHi = earn × e+z×sigma

The lognormal formulation ensures the band is always positive and proportionally symmetric in log-space. Typical band width is ±30–50% in early career, narrowing to ±15–25% by mid-career.

Step 10, Lifetime totals & percentiles

Past earnings: Estimated by running the same career curve backward from career start to current age, using standard 40-hour weeks and the user's calibration factor.

lifetimeTotal = pastEarnings + Σ(futureAnnualEarnings)

Percentile computation: Lognormal distribution centered on the peer lifetime total:

sigma = clamp(0.68 × roleMod.volatility, 0.50, 0.90)

z = (ln(userLifetime) − ln(peerLifetime)) / sigma

percentile = Φ(z) (standard normal CDF, clamped to [1%, 99%])

For current-year percentile, the formula is the same but uses annual earnings and a tighter sigma: clamp(0.42 × volatility, 0.30, 0.55).

Step 11, Lifestyle tier

The lifestyle snapshot uses the average of the last 5 non-zero working years:

sustainableSpending = 0.70 × averageLateCareeerEarnings

Tiers: Below $30K → Survival, $30–60K → Modest, $60–100K → Comfortable, $100–180K → Upper-Middle, $180–350K → Affluent, $350K+ → Wealthy.

Financial assumptions (model parameters, not government data): 15% savings rate, 4% real annual return (after inflation), 70% sustainable spending rate, and 4% withdrawal rate. These are standard financial planning heuristics widely used in retirement modeling, not sourced from any specific data vendor or commercial platform. They are stated assumptions, not empirical claims.

15

BLS data file reference

All data on this site comes from downloaded U.S. government data files. This section documents every file, its source, and the specific columns used.

national_M2024_dl.xlsx, BLS OEWS May 2024

Source: bls.gov/oes/tables.htm → "National" → May 2024

What it contains: Occupational Employment and Wage Statistics for ~1,400 detailed occupations nationwide. Based on a survey of 1.1 million+ business establishments.

  • OCC_CODE: Standard Occupational Classification (SOC) code (e.g., 29-1215 for Family Medicine Physicians)
  • OCC_TITLE: Occupation name
  • TOT_EMP: Total employment (number of jobs nationwide)
  • H_MEAN / A_MEAN: Hourly / annual mean wage
  • H_MEDIAN / A_MEDIAN: Hourly / annual median wage
  • H_PCT10, H_PCT25, H_PCT75, H_PCT90: Hourly wage percentiles (10th, 25th, 75th, 90th)
  • A_PCT10, A_PCT25, A_PCT75, A_PCT90: Annual wage percentiles

Top-coding: BLS replaces percentile values above ~$239,200 with "#". The calculator uses annual median wages as anchors for all fields. For the six physician specialties where median is top-coded, the calculator uses common-sense estimates derived from BLS mean wages (which BLS does report above the threshold).

Used for: All calculator wage anchors, all article salary data, percentile distributions, employment counts.

state_M2024_dl.xlsx, BLS OEWS May 2024 (State)

Source: bls.gov/oes/tables.htm → "State" → May 2024

What it contains: Same wage and employment data as the national file, broken down by state (50 states + DC + territories).

  • AREA_TITLE: State name
  • OCC_CODE / OCC_TITLE: SOC code and occupation name
  • TOT_EMP: State-level employment count
  • A_MEDIAN: State-level annual median wage
  • LOC_QUOTIENT: Location quotient (state concentration relative to national average)

Used for: State-by-state salary comparisons in articles, teacher-by-state analysis, geographic wage variation analysis.

occupation.xlsx (Table 1.2), BLS Employment Projections 2024–2034

Source: bls.gov/emp/tables.htm → Table 1.2

What it contains: 10-year employment projections for ~832 detailed occupations.

  • 2024 National Employment Matrix code: SOC-based occupation code
  • Employment, 2024 / Employment, 2034: Current and projected employment (thousands)
  • Employment change, percent, 2024–34: Projected growth rate
  • Occupational openings, 2024–34 annual average: Average annual job openings (growth + replacement)
  • Typical education needed for entry: One of 8 tiers: no formal credential, high school, some college, postsecondary nondegree, associate's, bachelor's, master's, doctoral/professional
  • Median annual wage, 2024: Cross-referenced with OEWS

Used for: Growth rate data in articles, annual openings, education tier analysis, employment projections.

occupation.xlsx (Table 1.10), BLS Occupational Separations

Source: bls.gov/emp/tables.htm → Table 1.10

What it contains: Annual separation rates for ~800 occupations, decomposed into exits and transfers.

  • Total separations rate: Percentage of workers leaving the occupation annually
  • Occupational exits rate: Workers leaving the labor force entirely (retirement, disability, career change to non-work)
  • Occupational transfers rate: Workers switching to a different occupation

Used for: Turnover and stability analysis, career longevity assessments, exit vs. transfer decomposition in articles.

matrix.xlsx, National Employment Matrix

Source: bls.gov/emp/tables.htm → National Employment Matrix

What it contains: 113,473 industry-by-occupation records showing where each occupation's jobs are concentrated across industries.

  • Industry code / Industry title: NAICS-based industry classification
  • Occupation code / Occupation title: SOC-based occupation
  • Employment, 2024 / Employment, 2034: Current and projected employment in that industry-occupation cell

Used for: Industry concentration analysis, identifying which industries employ each occupation.

2026-general-schedule-pay-rates.xlsx, OPM GS Pay Tables

Source: opm.gov → 2026 General Schedule

What it contains: Federal government pay grades (GS-1 through GS-15) with 10 steps each, plus locality adjustments.

Used for: Government worker salary articles, GS pay grade references.

16

Analysis article methodology

The site publishes 40+ data-driven analysis articles that apply statistical, mathematical, and economic frameworks to BLS wage and employment data. This section documents the exact formulas, computational approaches, and methodological assumptions used in each analysis type. All computations use the raw BLS data files listed in section 15. Every result can be independently reproduced by downloading the same files from BLS.

Wage inequality analysis (Gini coefficients)

Intra-occupation wage inequality is measured using the Gini coefficient, computed from BLS OEWS percentile data (10th, 25th, median, 50th, 75th, 90th) for each occupation.

Method: Trapezoidal Lorenz curve integration. Given BLS percentiles {P10, P25, P50, P75, P90}, the income shares at population fractions {0.10, 0.25, 0.50, 0.75, 0.90} are computed. The Lorenz curve is constructed by plotting cumulative income share against cumulative population share, then:

Gini = 1 − 2 × ∫₀¹ L(p) dp

The integral is approximated using the trapezoidal rule across the 5 known points plus the endpoints (0,0) and (1,1). This produces an approximation, true Gini would require the full income distribution, but BLS percentile data provides a reasonable 5-point proxy.

Limitation: BLS top-codes percentile wages above ~$239,200. For occupations where P75 or P90 are top-coded, the Gini estimate understates true inequality because the upper tail is censored.

Education ROI break-even analysis

Break-even analysis determines when additional education pays for itself in cumulative earnings relative to the next-lower tier.

Employment-weighted median wages: Each education tier's representative wage is computed by matching BLS Employment Projections education requirements with OEWS median wages by SOC code, then weighting by employment count:

tierWage = Σ(medianWagei × employmenti) / Σ(employmenti)

831 of 832 occupations are successfully matched across the two BLS datasets by SOC code.

Opportunity cost model: The break-even point is computed as:

breakEvenYears = opportunityCost / annualPremium

Where opportunityCost = years of foregone earnings during additional education × the reference tier wage, and annualPremium = the wage difference between the higher and reference tier. The model assumes full-time enrollment with zero earnings during education years.

Cumulative earnings curves: For each education tier, cumulative earnings begin at the typical workforce entry age (HS: 18, Associate's: 20, Bachelor's: 22, Master's: 24, Doctoral: 26) and accumulate at the employment-weighted median wage. Break-even occurs where the higher-tier cumulative curve crosses the lower-tier curve.

Growth-wage correlation analysis

The relationship between BLS projected employment growth rates (2024–2034) and current wages is measured using Pearson correlation.

Method: For each of ~809 detailed occupations with both growth rate data (Table 1.2) and wage data (OEWS), compute:

r = Σ((xi − x̄)(yi − ȳ)) / √(Σ(xi − x̄)² × Σ(yi − ȳ)²)

Where x = median annual wage and y = projected 10-year employment change (percent). An employment-weighted variant also computes the weighted correlation using employment counts as weights.

Wage quartile analysis: Occupations are sorted by median wage into four equal-size groups, and the mean growth rate is computed for each quartile. This reveals whether low-wage or high-wage occupations are growing faster, without assuming a linear relationship.

Geographic wage variation analysis

Interstate wage variation is analyzed using BLS OEWS state-level median wages for all occupations reported in 40 or more states.

Spread ratio: For each occupation: ratio = maxStateMedian / minStateMedian. A ratio of 2.0× means the highest-paying state pays double the lowest-paying state for the same occupation.

Coefficient of variation (CV): CV = σ / μ across all states reporting the occupation. Higher CV indicates more geographic wage dispersion.

Filtering: Occupations must be reported in at least 40 of 51 state-level areas (50 states + DC) to be included, ensuring sufficient geographic coverage for meaningful comparisons. This yields ~579 occupations.

Turnover & stability analysis

Occupational stability is measured using BLS Table 1.10 separation rates, matched with OEWS wage data by SOC code.

Turnover-wage correlation: Pearson correlation between total separation rate and median annual wage across ~780 matched occupations.

Exit/transfer decomposition: Total separations = exit rate + transfer rate. Exits represent workers leaving the labor force (retirement, disability). Transfers represent workers switching occupations. The exit share (exitRate / totalRate) reveals whether turnover in an occupation is driven by retirement (high exit share, typical of stable careers like surgery) or job-hopping (high transfer share, typical of entry-level occupations like food service).

Wage quartile stacking: Occupations are sorted into four wage quartiles, and the mean exit rate and transfer rate are computed for each quartile. This reveals the structural pattern: low-wage occupations have high transfer rates, while high-wage occupations have higher exit-share turnover (retirement-dominated).

Theil index decomposition

Article: Wage Inequality: Gini & Theil Decomposition

The Theil T index complements the Gini coefficient by offering exact additive decomposability into between-group and within-group components.

Theil T index: T = (1/n) Σ​(yᵢ/ȳ) × ln(yᵢ/ȳ)

Where yᵢ is the wage of individual/occupation i and ȳ is the mean wage. T = 0 indicates perfect equality; higher T indicates more inequality.

Decomposition: T_total = T_between + T_within

Between-group inequality uses sector-level or education-tier mean wages weighted by employment. Within-group inequality aggregates intra-sector dispersion. This decomposition answers: “How much wage inequality comes from differences between sectors vs. differences within the same sector?”

Data: BLS OEWS percentile wages (P10, P25, P50, P75, P90) and employment counts for 719+ detailed SOC occupations.

Lorenz curve construction

Article: Lorenz Curve Occupation Wage Inequality

Lorenz curves visualize the cumulative share of total wages earned by the cumulative share of workers, ordered from lowest to highest paid.

Construction: For n occupations sorted by median wage ascending:

x_k = Σ​empᵢ / Σ​emp (cumulative employment share up to occupation k)

y_k = Σ​(empᵢ × wageᵢ) / Σ​(empᵢ × wageᵢ) (cumulative wage share)

The area between the Lorenz curve and the 45-degree line of perfect equality equals Gini/2. Multiple Lorenz curves (by sector, education tier, decade) can be overlaid to compare inequality across subgroups.

Data: BLS OEWS employment counts (TOT_EMP) and median wages (A_MEDIAN) for all occupations.

Coefficient of variation & career risk mapping

Article: Coefficient of Variation Career Risk Map

The coefficient of variation (CV) quantifies wage dispersion relative to the mean, enabling cross-occupation risk comparison regardless of salary level.

CV = σ / μ

For each occupation, σ is estimated from BLS percentiles using the robust estimator σ ≈ (P90 − P10) / 2.564 (based on normal distribution quantile spread). The CV is plotted against median wage to create a risk-return landscape where each occupation is a point. High-CV occupations (sales, real estate) have wide outcome ranges; low-CV occupations (nursing, teaching) have compressed ranges.

Data: BLS OEWS percentile wages (A_PCT10, A_PCT90) and median wages for 719+ occupations.

Mean-median skew & wage asymmetry

Articles: Mean-Median Skew Wage Asymmetry, Mean-Median Wage Gap

The mean-median gap reveals the direction and magnitude of wage distribution skewness within occupations.

Pearson’s second skewness coefficient: Sk2 = 3 × (mean − median) / σ

Percentage gap: gap% = (mean − median) / median × 100

For most occupations, mean > median (positive skew), indicating a right-tail of high earners pulling the mean upward. The magnitude of this gap reveals how concentrated upper-end compensation is. Occupations with gaps exceeding 20% typically have superstar dynamics (a few very high earners). BLS provides both A_MEAN and A_MEDIAN for each SOC code, enabling direct computation without distribution fitting.

Wage compression ratio & floor-ceiling range

Articles: Wage Compression Ratio Analysis, Wage Floor-Ceiling Range Analysis

Compression ratio: CR = P90 / P10

A ratio of 3.0x means the 90th percentile earner makes 3x the 10th percentile earner in the same occupation. Additional ratios: IQR ratio = P75 / P25, upper ratio = P90 / P50.

Dollar range: range = P90 − P10 (absolute spread), IQR = P75 − P25.

Low-compression occupations (CR < 2.0) include regulated/unionized fields. High-compression occupations (CR > 4.0) include performance-driven fields with bonus structures. All from BLS OEWS percentile data.

Wage premium ladder & earnings velocity

Articles: Wage Premium Ladder, Earnings Velocity & Wage Ceilings, Hundred Thousand Dollar Threshold

Education wage premium: For each consecutive education tier: premium = (wageTier(k+1) − wageTier(k)) / wageTier(k) × 100%

Employment-weighted median wages per tier are computed by matching BLS Employment Projections education requirements with OEWS median wages, weighted by employment count.

Earnings velocity: The rate of wage growth across percentiles within an occupation: v = (P(k+1) − P(k)) / P(k) between consecutive BLS percentile breakpoints. Wage ceilings are identified where velocity approaches zero (P75 ≈ P90).

$100K threshold analysis: Binary classification of occupations by whether median or mean wage exceeds $100,000, cross-tabulated by education tier, sector, and employment volume. Reveals labor market polarization patterns.

Shannon entropy & information theory

Articles: Occupation Entropy & Information Theory, Career Entropy & Uncertainty

Shannon entropy quantifies the “uncertainty” or “diversity” of employment and wage distributions.

Employment entropy: H = −Σ pᵢ × log₂(pᵢ)

Where pᵢ = empᵢ / Σemp is the employment share of occupation i. Maximum entropy H_max = log₂(n) occurs when all occupations have equal employment. The entropy ratio H/H_max measures how evenly distributed the labor force is across occupations.

Wage entropy: Computed analogously using wage-weighted shares. Comparing employment entropy to wage entropy reveals whether wage mass is more or less concentrated than employment.

Conditional entropy: H(wage|sector) = Σ P(sector) × H(wage|sector), measuring residual wage uncertainty after conditioning on sector.

Kullback-Leibler divergence

Article: Kullback-Leibler Wage Distribution Divergence

KL divergence measures how one wage distribution differs from another.

D_KL(P || Q) = Σ pᵢ × ln(pᵢ / qᵢ)

Applied to occupational wage distributions: P and Q are discretized wage distributions (using BLS percentile bins) for two occupations. D_KL is asymmetric. The symmetrized Jensen-Shannon divergence JSD = ½D_KL(P||M) + ½D_KL(Q||M) where M = ½(P+Q) is also computed. Large KL divergence indicates fundamentally different wage structures; small divergence indicates similar compensation patterns.

Pareto tails & power law analysis

Article: Pareto Tails & Superstar Occupations

The upper tail of the occupational wage distribution is tested for Pareto (power law) behavior.

Pareto distribution: P(X > x) = (x_m / x)^α for x ≥ x_m

Hill estimator: α̂ = n / Σ ln(xᵢ / x_m)

Where x_m is the threshold above which power-law behavior is hypothesized (typically P75 or P90), and {xᵢ} are observations above this threshold. Lower α indicates heavier tails (more extreme high earners). “Superstar” occupations with α < 2.0 have infinite variance in the theoretical limit, a signature of winner-take-all dynamics.

Limitation: BLS top-coding at ~$239,200 censors the upper tail, potentially biasing α estimates upward.

Zipf’s law & employment concentration

Articles: Zipf’s Law Occupation Employment Concentration, The Pareto Labor Market

Zipf’s law tests whether occupational employment follows a power-law rank-size relationship.

emp(r) ∝ r^(−s)

In log-log space: ln(emp) = −s × ln(r) + C. The Zipf exponent s is estimated via OLS regression on log-rank vs. log-employment for all BLS occupations. s ≈ 1.0 indicates classic Zipf’s law; s > 1.0 indicates extreme concentration.

Pareto labor market: The share of total employment held by the top K occupations: share_K = Σ empᵢ / Σemp. If the top 20% of occupations hold 80%+ of employment, the labor market exhibits an 80/20 Pareto structure.

Benford’s law salary testing

Article: Benford’s Law & Salary Distributions

Benford’s law predicts the frequency distribution of leading digits in naturally occurring numerical datasets.

Expected frequency: P(d) = log₁₀(1 + 1/d) for d = 1, 2, ..., 9

BLS salary data (mean, median, percentile wages across all occupations) is tested against Benford’s expected distribution using the chi-squared goodness-of-fit: χ² = Σ (O_d − E_d)² / E_d

Conformity to Benford’s law is expected in unmanipulated data spanning multiple orders of magnitude. Deviations may indicate data artifacts (BLS top-coding, rounding conventions) rather than fabrication. The mean absolute deviation (MAD) test provides an alternative conformity measure.

Herfindahl-Hirschman Index (geographic concentration)

Article: Herfindahl-Hirschman Occupation Geography

HHI = Σ sᵢ²

Where sᵢ = state employment / national employment for that occupation. HHI ranges from ~196 (perfectly even across 51 state-level areas) to 10,000 (all employment in one state). High-HHI occupations are geographically concentrated. Low-HHI occupations are distributed nationally. Location quotients (LQ = state share / state total share) complement HHI by identifying over/under-represented states.

Data: BLS OEWS state-level employment counts for all reported occupations across 50 states + DC.

Kolmogorov-Smirnov wage distribution testing

Article: Kolmogorov-Smirnov Wage Distribution Testing

The KS test measures the maximum distance between two cumulative distribution functions (CDFs).

Two-sample KS statistic: D = sup |F_A(x) − F_B(x)|

Where F_A and F_B are empirical CDFs constructed from BLS percentile data (P10, P25, P50, P75, P90) for occupations A and B. CDFs are linearly interpolated between known percentile points. Large D indicates fundamentally different wage structures; small D indicates similar distributions. The KS test is distribution-free and makes no parametric assumptions.

One-sample application: Testing whether an occupation’s wage distribution follows a theoretical distribution (normal, lognormal) by comparing the empirical CDF to the fitted theoretical CDF.

Stochastic dominance career rankings

Article: Stochastic Dominance Career Rankings

Stochastic dominance provides a partial ordering of career wage distributions stronger than comparing means or medians alone.

First-order (FSD): Career A dominates B if F_A(x) ≤ F_B(x) for all x, meaning A has a higher probability of exceeding any given wage. FSD implies every rational person would prefer A regardless of risk preference.

Second-order (SSD): Career A dominates B if ∫ F_A(t)dt ≤ ∫ F_B(t)dt for all x. SSD implies every risk-averse person would prefer A. SSD allows A to have some worse outcomes if compensated by sufficiently better outcomes elsewhere.

CDFs are constructed from BLS percentile data and integrated numerically. Pairwise dominance relations across all occupations create a partial order that identifies unambiguously superior careers.

Kernel density estimation

Article: Kernel Density Wage Topology

KDE produces smooth probability density estimates from discrete BLS percentile data, revealing distribution shapes (unimodal, bimodal, skewed).

Gaussian kernel: f̂(x) = (1/nh) Σ K((x − xᵢ)/h)

Where K is the Gaussian kernel, h is bandwidth (Silverman’s rule: h = 0.9 × min(σ̂, IQR/1.34) × n^(−1/5)). Since BLS provides only 5 percentile values per occupation, the KDE is constructed by treating percentile values as representative points with interpolated weights. The resulting density functions are compared across occupations to identify structural similarities (e.g., bimodal distributions indicating dual labor markets within a single SOC code).

Extreme value theory & career tail modeling

Article: Extreme Value Theory & Career Tail Modeling

EVT models the probability of extreme wage outcomes using the Generalized Extreme Value (GEV) distribution.

GEV: G(x) = exp{−[1 + ξ((x−μ)/σ)]^(−1/ξ)}

Where μ = location, σ = scale, ξ = shape (tail index). ξ > 0 (heavy tail), ξ = 0 (exponential tail), ξ < 0 (bounded tail).

Generalized Pareto Distribution: For exceedances above threshold u: P(X − u > y | X > u) = (1 + ξy/σ̃)^(−1/ξ)

Applied to BLS data: P90 serves as threshold, and the tail beyond P90 is modeled by GPD. This estimates probabilities of extreme outcomes (e.g., “What fraction of workers earn 3x the median?”) that BLS percentile data alone cannot answer.

Monte Carlo lifetime earnings simulation

Article: Monte Carlo Lifetime Earnings

Monte Carlo simulation estimates the full distribution of lifetime earnings by running thousands of simulated career paths with random wage variation.

Framework: For N = 10,000 simulated careers in occupation j:

  • Draw initial wage: W₀ ~ LogNormal(ln(median), σ) where σ = ln(P90/P10) / 2.564
  • Each year: W_t = W_(t−1) × (1 + g_t + ε_t) where g_t = age-specific real wage growth (from BLS CPS cross-sectional profiles), ε_t ~ N(0, σ_annual²)
  • Lifetime total: L = Σ W_t

Output: Percentile estimates (P5, P25, P50, P75, P95) of lifetime earnings, expected value, and probability of exceeding specific thresholds.

Bootstrap confidence intervals for career rankings

Article: Bootstrap Confidence Intervals for Career Rankings

Bootstrap resampling quantifies uncertainty in occupational wage rankings caused by sampling variability.

Nonparametric bootstrap: For B = 10,000 iterations: resample n occupations with replacement, re-rank by the statistic of interest (median wage, Gini, etc.), record each occupation’s rank.

Confidence intervals: The 2.5th and 97.5th percentiles of each occupation’s bootstrap rank distribution yield 95% CIs. An occupation ranked 15th with CI [8, 24] has substantial ranking uncertainty, while one ranked 15th with CI [13, 17] has a stable ranking.

Rank stability: stability = 1 − (CI_width / n). Values near 1.0 = highly stable; near 0 = essentially noise.

Bayesian career inference & wage updating

Article: Bayesian Career Inference & Wage Updating

Bayesian inference combines prior beliefs about career wages with observed BLS data to produce posterior estimates.

Conjugate normal model:

Prior: μ ~ N(μ₀, σ₀²) | Likelihood: x̄ | μ ~ N(μ, σ²/n)

Posterior: μ_post = (μ₀/σ₀² + n×x̄/σ²) / (1/σ₀² + n/σ²)

The shrinkage factor B = σ²/(σ² + nσ₀²) measures how much data moves the estimate from the prior. Applied to career estimation: prior = pre-data beliefs, posterior integrates BLS OEWS evidence.

Markov chain wage mobility transitions

Article: Markov Chain Wage Mobility Transitions

Markov chain analysis models occupational wage mobility as a discrete-state transition process.

Transition matrix: States = wage quintiles (Q1-Q5 by BLS median). Entries: P_ij = P(state_j at t+1 | state_i at t). Diagonal entries = persistence; off-diagonal = mobility.

Stationary distribution: Long-run equilibrium π satisfying πP = π. Mixing time indicates how quickly mobility achieves its long-run pattern.

Mobility index: M = (n − tr(P)) / (n − 1). M = 0 = perfect persistence; M = 1 = maximum mobility.

Career efficient frontier (mean-variance optimization)

Article: The Career Efficient Frontier

Adapted from Markowitz portfolio theory, the career efficient frontier identifies occupations offering the highest expected wage for each level of wage risk.

Career coordinates: x-axis (risk): σ = ln(P90/P10) / 2.564; y-axis (return): BLS median or mean annual wage.

Efficient frontier: The upper envelope of the risk-return scatter. Occupations on the frontier offer maximum wage for their level of dispersion. Occupations below are “dominated” (a higher-paying occupation exists at the same or lower risk).

Dominance ratio: The fraction of occupations below the frontier. A high dominance ratio indicates most careers are suboptimal from a risk-return perspective.

Career Value at Risk (VaR)

Article: Career Value at Risk

VaR quantifies the worst-case wage outcome at a given confidence level.

Parametric: VaR_α = μ − z_α × σ (z_0.05 = 1.645). VaR 5% answers: “With 95% confidence, annual wages will not fall below this amount.”

Historical: VaR 10% ≈ P10 (the 10th percentile wage from BLS OEWS).

Conditional VaR (Expected Shortfall): CVaR_α = E[X | X ≤ VaR_α], the expected wage in the worst α% of outcomes. CVaR is more conservative than VaR because it averages over the entire tail.

Career Sharpe Ratio & risk-adjusted pay

Articles: Career Sharpe Ratio, Career Arbitrage Theorem

CSR = (P50 − R_f − C) / (σ × P50)

Where: P50 = BLS median wage, R_f = all-occupation median ($48,060, BLS OEWS May 2024), C = annualized education cost (standard estimates by BLS education tier), σ = wage volatility ln(P90/P10) / 2.564. The denominator converts relative dispersion into absolute dollar volatility.

High CSR = high excess returns per unit of wage risk. Occupations with CSR > 2.0 represent potential “career arbitrage” where risk-adjusted returns are anomalously high.

Black-Scholes career optionality

Article: Black-Scholes Career Optionality

The Black-Scholes framework values the “option” embedded in career choices, particularly the option to switch careers or specialize.

Career call option: C = S₀Φ(d₁) − Ke^(−rT)Φ(d₂)

Where: S₀ = current career wage, K = opportunity cost of switching, r = discount rate, T = career horizon, σ = wage volatility.

d₁ = [ln(S₀/K) + (r + σ²/2)T] / (σ√T), d₂ = d₁ − σ√T

High-volatility careers (large σ from BLS percentile spreads) have higher option values because the probability of extreme positive outcomes increases with volatility. This framework values flexibility: a career with low current wages but high volatility may have greater total value than a stable but capped career.

Expected utility & career choice under risk aversion

Article: Expected Utility & Career Choice Under Risk Aversion

Expected utility: EU = Σ u(xᵢ) × pᵢ

CRRA utility: u(x) = x^(1−γ) / (1−γ) for γ ≠ 1, u(x) = ln(x) for γ = 1

Where γ = coefficient of relative risk aversion. At γ = 0 (risk-neutral), ranking = mean wage. At γ = 1 (log utility), geometric mean dominates. At γ = 2+ (highly risk-averse), low-percentile wages dominate. Career rankings computed for multiple γ values show how risk preference changes the optimal career choice. A career ranked #1 for risk-neutral agents may fall to #20+ for highly risk-averse agents if it has high dispersion.

Nash equilibrium in career markets

Article: Nash Equilibrium & Career Markets

Game-theoretic analysis models career choice as a strategic interaction where each worker’s optimal field depends on what others choose.

Wage function: w_j(n_j) = W̄_j × (N̄_j / n_j)^(1/ε_j)

Where W̄ = BLS base wage, N̄ = current BLS employment, n_j = number of entrants, ε = labor demand elasticity. As more workers enter a field, wages decline (congestion effect).

Nash equilibrium: A distribution where no individual can increase expected wage by switching fields. At equilibrium, risk-adjusted wages equalize across occupations. Deviations identify over-supplied (below-equilibrium wages) and under-supplied (above-equilibrium wages) occupations.

Jensen’s inequality & career convexity

Article: Jensen’s Inequality & Career Convexity

For convex f: E[f(X)] ≥ f(E[X]). For concave f: E[f(X)] ≤ f(E[X]).

If career outcomes are a convex function of effort/skill (sales commissions, entrepreneurship), wage uncertainty increases expected value. If outcomes are concave (salaried positions with caps), uncertainty decreases expected value.

Convexity premium: E[w(X)] − w(E[X]) = mean − w(median)

Occupations with large positive convexity premiums (mean >> median) reward variability. The convexity gap (mean − median) / median from BLS data serves as a proxy for career convexity.

Ergodicity economics & career earnings

Article: Ergodicity Economics Applied to Career Earnings

Ergodicity economics distinguishes between the ensemble average (mean across all workers at one time) and the time average (one worker’s mean across time).

Non-ergodicity: time average = lim (1/T) Σ X_t vs. ensemble average = E[X_t]

These differ when multiplicative dynamics dominate. The geometric mean G = exp(E[ln(X)]) captures time-average growth. For multiplicative processes: G = μ × exp(−σ²/2), so higher volatility depresses time-average growth even as ensemble averages remain unchanged.

Implication: Two careers with the same BLS mean wage but different volatilities produce different lifetime outcomes for a single individual. The lower-volatility career delivers higher realized lifetime earnings.

Copula joint career-wage dependency

Article: Copula Joint Career-Wage Dependency

Copula: C(u, v) = P(U ≤ u, V ≤ v) where U = F_X(x), V = F_Y(y) are uniform marginals.

The copula separates marginal distributions from the dependency structure. For pairs of occupations, it captures whether high wages in occupation A coincide with high wages in B across states.

Gaussian copula: C(u,v) = Φ₂(Φ⁻¹(u), Φ⁻¹(v); ρ) where ρ is the correlation parameter. Tail dependence coefficients λ_U and λ_L measure whether extremes co-move (important for career diversification analysis).

Regression to the mean in occupational wages

Article: Regression to the Mean in Occupational Wages

E[X₂ | X₁] = μ + ρ × (X₁ − μ)

Where ρ is the correlation between successive observations. If ρ < 1, observations far from the mean move closer over time. Applied to occupational wages: occupations with extreme wage growth in one period tend to have more moderate growth in the next.

Galton’s regression: Plotting next-period wage rank against current-period wage rank. A slope < 1 confirms regression to the mean. The degree (1 − slope) indicates how much mean reversion occurs.

Wage elasticity of labor supply

Article: Wage Elasticity & Labor Supply Cross-State

ε = (ΔQ/Q) / (ΔW/W) = ∂ ln Q / ∂ ln W

Estimated via log-log regression across states: ln(emp_state) = α + ε × ln(wage_state) + controls. State-level data from BLS OEWS. Occupations with ε > 1 (elastic) show large employment responses to wage changes; ε < 1 (inelastic) indicates wage changes have little employment effect. Healthcare tends to be inelastic (demand-driven); service occupations tend to be elastic.

Occupational half-life & employment decay

Article: Occupational Half-Life & Employment Decay

Exponential decay: N(t) = N₀ × e^(−λt) where λ = annual separation rate (BLS Table 1.10).

Half-life: t½ = ln(2) / λ

The number of years for half the current workers to leave the occupation. Short half-life occupations (food service, ~2 years) have high turnover. Long half-life occupations (surgeons, ~15+ years) retain workers for extended careers. Cross-tabulated with wages to reveal the stability-compensation relationship.

Wasserstein distance (optimal transport)

Article: Wasserstein Distance & Career Wage Similarity

W₁(P, Q) = ∫₀¹ |F_P⁻¹(t) − F_Q⁻¹(t)| dt

The integral is computed numerically using BLS percentile data as quantile anchors. Unlike KL divergence, Wasserstein distance is symmetric and has an intuitive interpretation: the minimum amount of wage mass that must be moved to transform one distribution into another. Pairwise distances across all occupations create a distance matrix for hierarchical clustering of similar careers.

Simpson’s paradox in occupational wages

Article: Simpson’s Paradox in Occupational Wage Aggregation

Simpson’s paradox occurs when a trend in aggregated data reverses in disaggregated subgroups.

Detection: For each pair of groupings (e.g., by sector vs. education tier): compute aggregate statistic, compute subgroup statistics, identify reversal cases where subgroup trends contradict the aggregate.

Mechanism: Arises from unequal subgroup sizes. If low-wage healthcare occupations (CNAs, home health aides) vastly outnumber high-wage ones (surgeons), the aggregate median understates wages available to educated healthcare professionals. Quantified by comparing employment-weighted vs. unweighted statistics.

PCA & correlation matrix analysis

Article: Career Wage Correlation Matrix & PCA

Principal Component Analysis reduces multi-dimensional occupational wage data to primary structural components.

Correlation matrix: For n occupations across m wage attributes (P10, P25, P50, P75, P90, mean, employment, growth rate), the m×m matrix R captures all pairwise linear associations.

Eigendecomposition: R = VΛV’. PC1 typically captures “wage level” (all percentiles load positively). PC2 often captures “wage dispersion” (P90 positive, P10 negative). Variance explained by first k components: Σλᵢ / Σλ. If 2 components explain 90%+ of variance, the occupational landscape is essentially two-dimensional.

Percentile paradox & rank reversals

Article: The Percentile Paradox & Career Rank Reversals

Career rankings change depending on which BLS percentile is used for comparison.

Rank reversal: For occupation pair (A, B), a reversal occurs when A > B at one percentile but A < B at another. The total reversal count quantifies ranking instability.

Severity: |rank_A(P_k) − rank_A(P_j)| for the same occupation across percentiles. High severity = position depends heavily on measurement point.

Crossing point: Where two occupations’ CDFs intersect, estimated by interpolation between BLS percentile breakpoints. Below crossing, one career dominates; above it, the other dominates.

Geographic wage arbitrage

Article: Geographic Wage Arbitrage

Arbitrage spread: spread = (wage_highState − wage_lowState) / wage_lowState

Using BLS OEWS state-level median wages. Cost-of-living adjustment via BLS Regional Price Parities where available. realSpread = nominalSpread − COL_differential. Positive real spreads indicate genuine arbitrage opportunities. Filters to occupations reported in 40+ states.

Human capital ROI & education returns

Article: Human Capital ROI & Education Returns

Mincer equation: ln(w) = α + β₁S + β₂X + β₃X² + ε

Where w = wage, S = years of schooling, X = experience. β₁ is the Mincerian return to education: a 1-year increase in schooling increases log-wages by β₁. Education tiers map to S values (HS=12, Associate’s=14, Bachelor’s=16, Master’s=18, Doctoral=20+). Employment-weighted BLS median wages provide the dependent variable.

Internal rate of return: The discount rate r equating present value of additional lifetime earnings to education cost: Σ (Δwage_t)/(1+r)^t = cost + foregoneEarnings. Solved numerically.

AI job displacement probability

Article: AI Job Displacement Probability

Automation risk scoring combines BLS occupational characteristics with task-level analysis.

Scoring framework: Each occupation receives a composite score based on: routine task intensity (higher = more automatable), education tier (higher education = lower risk), wage level (low-wage historically more susceptible), and BLS employment growth trend (declining projections may reflect anticipated automation).

Probability categories: Low (< 30%), Medium (30-60%), High (> 60%). BLS Employment Projections 2024-2034 provide a forward-looking signal: occupations projected to decline may partially reflect technology-driven displacement.

All analysis data provenance

Every number in every analysis article is computed directly from the downloaded BLS Excel files listed in section 15. No external computational tools, third-party APIs, or private datasets are involved. The computations are performed using Python scripts on the raw BLS data, and every result can be independently reproduced by downloading the same files from BLS.

17

SOC code reference

Every wage anchor in the calculator maps to a specific Standard Occupational Classification (SOC) code. This table documents the complete mapping for verification purposes. Dollar values shown are BLS OEWS reference figures; the calculator auto-updates to the latest BLS annual median via API every 24 hours.

Technology

  • Software Engineers (all specialties), SOC 15-1252: Software Developers ($144,570 mean)
  • Software Engineering Manager: SOC 11-3021: Computer and Information Systems Managers ($187,990)
  • Data Scientists (all specialties), SOC 15-2051: Data Scientists ($124,590)
  • Product Managers (all levels), Management-composite anchor ($145,000)
  • UX/UI Design: SOC 15-1255: Web and Digital Interface Designers ($111,450)
  • Cybersecurity: SOC 15-1212: Information Security Analysts ($127,730)
  • Web Developer: SOC 15-1254: Web Developers ($98,790)
  • Database Admin: SOC 15-1242: Database Administrators and Architects ($107,440)

Healthcare, Physicians

  • Family Medicine: SOC 29-1215 ($256,830)
  • Pediatrics: SOC 29-1221 ($222,340)
  • Internal Medicine: SOC 29-1216 ($262,710)
  • Emergency Medicine: SOC 29-1214 ($320,700)
  • Psychiatry: SOC 29-1223 ($269,120)
  • Anesthesiology: SOC 29-1211 ($336,640)
  • Radiology: SOC 29-1224 ($359,820)
  • Surgery: SOC 29-1249: Surgeons, All Other ($371,280)
  • Cardiology: SOC 29-1212 ($432,490)

Healthcare, Other

  • Registered Nurses (all specialties), SOC 29-1141 ($98,430)
  • Nurse Practitioners: SOC 29-1171 ($132,000)
  • Nurse Anesthetists (CRNA): SOC 29-1151 ($231,700)
  • Physician Assistants: SOC 29-1071 ($136,900)
  • Physical Therapists: SOC 29-1123 ($102,400)
  • Pharmacists: SOC 29-1051 ($137,210)
  • Dentists: SOC 29-1021 ($196,100)
  • Paramedics: SOC 29-2042 ($44,790)
  • Veterinarians: SOC 29-1131 ($140,270)
  • Dental Hygienists: SOC 29-1292 ($93,890)
  • Occupational Therapists: SOC 29-1122 ($98,240)
  • Speech-Language Pathologists: SOC 29-1127 ($95,840)
  • Psychologists: SOC 19-3034 ($93,610)
  • Social Workers: SOC 21-1021 ($62,920)
  • Chiropractors: SOC 29-1011 ($91,830)
  • Optometrists: SOC 29-1041 ($140,940)
  • Dietitians: SOC 29-1031 ($74,770)
  • Healthcare Administrators: SOC 11-9111 ($137,730)

Law

  • All law specialties (BigLaw, corporate, litigation, IP, government, public interest, in-house), SOC 23-1011: Lawyers ($182,760). Differentiated by role modifiers ranging from 0.42× (public interest) to 1.35× (BigLaw)

Business & Finance

  • Investment Banking, Private Equity, Hedge Funds, Financial Analyst, Wealth Management: SOC 13-2051: Financial Analysts ($116,490). IB/PE/HF use role modifiers of 1.30×–1.60×
  • Accounting: SOC 13-2011: Accountants and Auditors ($93,520)
  • Consulting (all types), SOC 13-1111: Management Analysts ($114,710). Strategy consulting uses 1.20× role modifier
  • Business Analyst / Project Management: SOC 13-1111 ($114,710)
  • Actuaries: SOC 15-2011 ($134,990)
  • Logisticians: SOC 13-1081 ($87,600)

Marketing, Sales & Operations

  • Marketing Managers: SOC 11-2021 ($171,520)
  • Sales Representatives: SOC 41-3091 ($81,260). Enterprise sales uses 1.15× modifier
  • Sales Managers: SOC 11-2022 ($160,930)
  • HR Managers: SOC 11-3121 ($160,480)
  • Operations Managers: SOC 11-1021 ($133,120)
  • Insurance Agents: SOC 41-3021 ($81,510)

Engineering

  • Mechanical Engineers: SOC 17-2141 ($110,080)
  • Civil Engineers: SOC 17-2051 ($107,050)
  • Electrical Engineers: SOC 17-2071 ($120,980)
  • Aerospace Engineers: SOC 17-2011 ($141,180)
  • Chemical Engineers: SOC 17-2041 ($128,430)
  • Industrial Engineers: SOC 17-2112 ($107,900)
  • Biomedical Engineers: SOC 17-2031 ($115,020)
  • Environmental Engineers: SOC 17-2081 ($110,570)
  • Architects: SOC 17-1011 ($103,390)

Education & Research

  • K-12 Teachers: SOC 25-2021: Elementary School Teachers ($69,790)
  • College Professors: SOC 25-1199: Postsecondary Teachers, All Other ($94,470)
  • Research Scientists: Composite anchor ($95,000)
  • School Counselors: SOC 21-1012 ($71,520)
  • Librarians: SOC 25-4022 ($64,320)

Skilled Trades

  • Electricians: SOC 47-2111 ($69,630)
  • Plumbers: SOC 47-2152 ($69,940)
  • Construction Laborers: SOC 47-2061 ($51,260)
  • HVAC Technicians: SOC 49-9021 ($62,690)
  • Auto Mechanics: SOC 49-3023 ($55,260)
  • Welders: SOC 51-4121 ($55,100)
  • Carpenters: SOC 47-2031 ($64,040)
  • Truck Drivers: SOC 53-3032 ($58,400)
  • Manufacturing Supervisors: SOC 51-1011 ($74,540)

Public Safety & Other

  • Police Officers: SOC 33-3051 ($79,320)
  • Firefighters: SOC 33-2011 ($63,890)
  • Airline Pilots: SOC 53-2011 ($280,570)
  • Real Estate Agents: SOC 41-9022 ($70,970)
  • Graphic Designers: SOC 27-1024 ($68,610)
  • Urban Planners: SOC 19-3051 ($89,730)
  • Retail Supervisors: SOC 41-1011 ($52,350)
  • Hospitality Managers: SOC 11-9081 ($77,460)
  • Insurance Agents: SOC 41-3021 ($81,510)

Careers mapped to BLS proxy SOC codes

A small number of career fields do not have a single dedicated BLS SOC code but are mapped to the closest BLS occupation(s). All anchors below are BLS OEWS May 2024 annual wages.

  • Product Managers: BLS SOC 11-9199 Managers, All Other ($149,890). The closest BLS occupation for product management roles.
  • Research Scientists: Average of three BLS scientist codes: SOC 19-1042 Medical Scientists ($112,690), SOC 19-2099 Physical Scientists ($123,070), SOC 19-1099 Life Scientists ($101,940) = $112,567. Research roles span multiple disciplines.
  • Public Sector (General): BLS SOC 11-1031 Legislators ($67,390). Represents broad government/public sector roles.
  • Nonprofit: BLS SOC 11-9151 Social and Community Service Managers ($86,100). The primary BLS occupation for nonprofit leadership.
  • Journalist: BLS SOC 27-3023 News Analysts, Reporters, and Journalists ($106,030). Direct BLS occupation match.

All dollar values are BLS OEWS May 2024 annual wages. Values auto-update via the BLS Public Data API every 24 hours when newer data becomes available. Verify any anchor at bls.gov/oes/current/oes_nat.htm.

18

Update schedule & data freshness

This section documents how and when the site's data is updated to maintain accuracy over time.

Automatic updates (no manual intervention)

  • BLS API auto-update: The calculator fetches the latest available BLS OEWS annual median wages via the BLS Public Data API every 24 hours. Updated values are cached in localStorage and applied to all career wage anchors. For top-coded physician specialties, the fallback anchors (derived from BLS mean data) are used. If the API is unavailable, the calculator falls back to the hardcoded defaults.
  • Batch size: The BLS API v2 with a registered key accepts up to 500 series per request. The calculator sends all 80+ series IDs in a single request, fetching data for all mapped careers in under 2 seconds.
  • Staleness detection: A timestamp check determines whether the cached data is more than 24 hours old. Fresh data is used immediately; stale data triggers a background refetch.

Manual update cycle

  • BLS OEWS release: BLS publishes new OEWS data annually (typically March–April for the prior May reference period). When the May 2025 release becomes available, the hardcoded JOB_DATA anchors and downloaded Excel files may be updated.
  • BLS Employment Projections: Updated biennially (last release: 2024–2034 projections published September 2024). The next update may cover 2026–2036.
  • Article data: Article salary figures reflect BLS OEWS May 2024 data. Articles are not automatically updated, they reference a specific data vintage and state so explicitly in their source attributions.

Data vintage labels

Every data point on this site includes its vintage in the attribution:

  • "BLS OEWS May 2024", wage data from the May 2024 survey reference period
  • "BLS Employment Projections 2024–2034", the latest 10-year projection cycle
  • "OPM GS Pay Tables 2026", the current federal pay schedule

If BLS data has been updated since these vintages, the calculator's auto-update system may reflect newer anchors while articles retain their original vintage. This is intentional, articles document a specific analysis with a fixed dataset, while the calculator aims for the most current anchors available.

Known data gaps

  • BLS top-coding: Median wages above ~$239,200 are censored. The calculator uses median anchors for all fields; for six top-coded physician specialties, fallback anchors are derived from BLS mean wages. The uncertainty band for top-coded occupations may understate upper-tail dispersion.
  • Subspecialty differentiation: BLS does not publish separate SOC codes for investment banking, private equity, hedge funds, BigLaw, or strategy consulting. Role modifiers for these subspecialties are common-sense adjustments reflecting well-known industry pay differences, not government data.
  • Supplemental compensation: BLS OEWS covers wages only. It does not capture supplemental pay such as bonuses or non-wage compensation. For some occupations, total compensation may exceed what BLS wage data reflects.
  • Self-employment income: BLS OEWS surveys employer establishments only. Self-employed workers (a significant share in fields like real estate, creative, and dental) are not represented in the wage data.