Skip to content
Methods

How scores are computed

One section per score. For each: where the data comes from, how it is collected, what it represents, and how the pieces are assembled into the number you see.

Every number on this site is built from named public sources, and every section below names them. Each section also says plainly what its score cannot tell you. If a piece of data we collect doesn't feed one of these scores yet, it gets a one-line mention in Other data we collect at the bottom — nothing more. The sources themselves are catalogued on Data Sources.

How we compute AI exposure

Feeds the National Pulse exposure tile and map layer, the community tables, and the occupation ranking.

The data. We measure what people actually do with AI, not what a model predicts they could do. The source is Anthropic's Economic Index: the published usage data from all six quarterly releases so far (February 2025 through June 2026) — about 3.7 million rows of real people using Claude on real tasks. Every release is stored as published, so the score is a trend, not a one-off snapshot.

The assembly. Each release tells us how much Claude is used on specific work tasks. We match those tasks to the official O*NET task list — the Labor Department's inventory of what each occupation actually does — and weight each task by how much of the job's time it occupies, using O*NET's own importance and frequency ratings (per DEC-18). That gives a per-occupation score: the share of a job's task time that AI is actually used for. We compute it separately for automation-style use (directing AI to do the task) and augmentation-style use (learning, iterating, getting feedback — working with AI). The score is then mapped onto places: metros with federal occupation data (BLS OEWS) get the employment-weighted mean over their own occupation mix; every county gets a synthetic mix — county employment by industry (BLS QCEW) spread across occupations using the OEWS industry staffing patterns (per DEC-21).

Integrity check: our occupation rankings correlate at ρ = 0.85 with Anthropic's own published rankings for the same release. The mapping to geography is validated separately: the synthetic county mixes reproduce metro occupation mixes with a mean correlation of 0.944, and the resulting exposure scores correlate with the direct metro estimates at r = 0.693 (0.80 among the 50 largest metros). That exposure-level gap is the honest cost of estimating county mixes from national patterns — it is documented, accepted, and tracked as a known limitation, and a shrinkage estimator is a committed follow-up (per DEC-21).

What you see. Places are shown as a national-mean index: 1.0 is exactly the national average, 1.20 means 20% more exposed, 0.80 means 20% less (per DEC-21). The map's bands — LOW below 0.8, MODERATE 0.8–1.25, HIGH at 1.25 and above — are a working definition for relative comparison, not a calibrated scale (per DEC-32). Every metro is published with a 90% interval (a bootstrap over the federal data's own sampling error and the choice of underlying measure, per DEC-22), and metros whose interval crosses zero are hatched as not significant rather than drawn as confident (per DEC-32). The National Pulse exposure trend shows the share of U.S. jobs in the top exposure quartile; alongside the raw series, a fixed-basket series holds the latest release's top-quartile occupation set constant and recomputes the share backwards across all six releases, so a dip in the raw series can be read against definitional churn in which occupations were measured — the fixed basket is essentially flat, confirming the raw dips were definitional (per DEC-43).

The theoretical comparison measures. Alongside the measured score, the occupation ranking shows published academic estimates — Felten's AI Occupational Exposure index, Eloundou et al.'s "GPTs are GPTs" ratings, and Eisfeldt et al.'s postings-based measure. These are theory-based: they estimate how exposed a job could be given its tasks, not how much people use AI. They are shown as separate columns next to the observed score and never blended into it — the two often disagree, and the disagreement is the point (per DEC-32). The career composite that blends them is a separate, theory-based number, described under the formulas behind the composites.

What it can't tell you: exposure measures use, not job loss. A highly exposed occupation is one where a lot of AI-assisted work happens — it says nothing by itself about whether employment there will fall. And nothing on this site shows that AI caused any labor-market change.

How we compute adoption

Feeds the National Pulse adoption section — the hero series and the sector, firm-size and state breakdowns — and the Phase 5 diffusion model.

The data. The Census Bureau's Business Trends and Outlook Survey (BTOS) asks a sample of U.S. businesses, every two weeks, whether they use AI in producing goods or services (original wording), and — from the November 2025 waves, following the December 2025 rewording — whether they used AI in any of their business functions in the last two weeks (current wording). We ingest every published wave: 76 biweekly waves since September 2023 (per DEC-23).

What the shares mean. Each published number is the share of firms answering "yes," in "% of businesses" (per DEC-38). Firms answering "don't know" are never counted as "no," and estimates that don't meet Census's own publication standards are shown as missing — never zero-filled. Each wave carries a 90% confidence interval, which we publish alongside the share.

The two survey eras. Census reworded the core question, so the two eras measure different things. They remain separate metric ids in the data and are never spliced into one series or one scale (per DEC-23); the original-wording era (September 2023 – September 2025, 54 waves) is displayed as its own separate, non-comparable segment with a wording-break divider, and the current-wording era (22 waves from November 2025) carries the headline and the breakdowns (per DEC-46).

The grain. Census publishes the shares nationally, by industry sector, by firm size class, by sector and size together, and by state — the same grain we publish, and what the Phase 5 diffusion model consumes. State estimates are modeled by Census, and we label them as modeled (per DEC-37).

The cross-check. The Stanford Real-time Population Survey asks workers (not firms) about generative AI use. We compare it to the firm series on direction only — rising, falling, or flat — because a share of adults and a share of businesses are different populations and the levels aren't comparable. The cross-check runs on the current-wording era (per DEC-46); so far the two series agree on direction.

What we're building on this data: fitted diffusion curves — constrained-ceiling logistic fits by survey era, sector, firm size and state, with a modeled state shift and the RPS worker series as a direction check — live in our staging tables and feed the Phase 5 employment model. They are research inputs, not published numbers: most early fits hit their upper bound on the short history available, so nothing on the public site comes from them yet (per DEC-29).

What it can't tell you: a firm saying it "uses AI" says nothing about how much of its work is affected, or whether any jobs changed. The series is also young — it starts in September 2023 — so long-run claims aren't possible yet.

How we compute the local economy context

Feeds the National Pulse metro table, the community stress and layoff-notice cards, and the metro sidebars.

These measures are context, not the headline. Each one tracks the local economy overall — any of them can move for reasons that have nothing to do with AI. On its own, none of them shows AI's effect; that's why the exposure score above is measured separately.

  • Unemployment — the monthly local unemployment rate from the Bureau of Labor Statistics' LAUS program (state and metro estimates built from household and payroll surveys).
  • Job postings — the Indeed Hiring Lab postings index, where 100 is the pre-pandemic February 2020 baseline and lower means fewer posted jobs.
  • Layoff notices — WARN Act filings, which employers must file before mass layoffs. We collect them through Big Local News (Stanford) and the New York WARN archive, sum each metro's workers laid off per 10,000 employed over a trailing 12-month window, and saturate the scale at 168 per 10,000 — the 99th percentile of 2015–2019 metro-year WARN rates, so one extreme event can't be read as a trend (per DEC-10; the WARN replatform itself is DEC-17).

How they're assembled. The local stress number is the plain average of whichever of these three components are present and current — unemployment and postings within 6 months, WARN notices within 12. At least two of the three must be live, or the score is withheld as "insufficient local data" rather than published from a single noisy signal (per DEC-10).

The national stress gauge. The Labor Market Stress chip on National Pulse combines the national versions of the same three dials into one 0–100 score: unemployment (BLS via FRED, UNRATE) 3%→0, 7%→100; postings (Indeed) 100→0, 80→100, clamped low at 0; layoffs — the JOLTS layoffs & discharges rate, not WARN — 0.8%→0, 2.0%→100. It is the unweighted mean of the three, measured for every month where all three are present: February 2020 onward, since the Indeed postings history was backfilled to its true start — 79 months, 2020-02 through 2026-08, peaking at 100.0 in April 2020 at the COVID shock (per DEC-45). Its percentile line — "calmer than N% of months since YYYY" — is a rank within that measured window (currently 2020, not 2023), not a probability, and the chart plots the gauge's own fixed 0–100 scale with nothing clamped or auto-scaled (per DEC-45).

Adaptive capacity. How well-positioned a place is to absorb economic change is computed for every county and metro from Census ACS five-year data: share of adults with a bachelor's degree, share of households with broadband, median household income, and how diversified the local industry mix is (per DEC-21; published through the APIs and the data download). Higher is more capacity to adapt — it is not an AI prediction.

What it can't tell you: all three context measures are economy-wide. A high-stress metro may simply be in a non-AI downturn; a low-stress one may be losing AI-exposed jobs to attrition rather than layoffs. None of them isolates AI.

How we compute the scenario tracker

Feeds the scenario panel on National Pulse.

The tracker watches three long-run possibilities — accelerated displacement (AI substitutes for workers faster than new roles absorb them), gradual transition (displacement, but slow enough for retraining and attrition to keep pace), and augmentation dominant (AI mostly makes existing workers more productive). It doesn't guess which is happening; it watches eight indicators drawn from published research. Each indicator has a published threshold that would signal movement toward one scenario, and a reliability weight for how trustworthy it is. The table is generated from the indicator configuration (config/scenario_thresholds.json); current values and triggered signals are served by /api/scenario.

ID
Indicator
Threshold that would signal movement
Weight
Favors
L4
Canaries slope — employment growth, ages 22–25, in high-AI-exposure occupations (Stanford Digital Economy Lab / ADP)
Slope past −6%/yr (calibrated to the 2023–2025 range of −1% to −4%)
0.8
Accelerated
L1
AI-cited layoff share — Challenger, Gray & Christmas monthly reports
Single month above 40% (2024–2025 range: 15–25%)
0.6
Accelerated
C3
Occupational-mix shift — Yale Budget Lab synthetic difference-in-differences tracker
Flips to statistically significant (p < 0.05)
0.6
Accelerated
C4
Recent-graduate unemployment gap — NY Fed (ages 22–27 vs overall)
Gap exceeds 2.5 points (historical range: 0.5–1.5)
0.7
Accelerated
L7
Recession onset — the Sahm Rule on BLS unemployment data via FRED
The rule triggers (a recession would compound displacement)
0.9
Accelerated
L6
Augmentation share — Anthropic Economic Index
Augmentation share exceeds 60% (AI used to assist rather than replace)
0.7
Augmentation
L3
Job postings index stability — Indeed Hiring Lab (Feb 2020 = 100)
Index at or above 100 (stable or growing hiring demand)
0.5
Gradual
L5
JOLTS layoffs rate — BLS Job Openings and Labor Turnover Survey
Sustained above 1.36% — 2 SD above its 2015–2019 mean of 1.23 (recalibrated per DEC-08)
0.5
Accelerated
Weights are reliability weights. Thresholds are published with their calibration basis in /api/methodology.
Right now
Live indicator values and triggered signals: /api/scenario.

The odds are hidden. We do not publish probabilities for the three scenarios. When odds are computed internally, they start from an equal prior (one-third each) and move only as indicators cross their thresholds (per DEC-01). Until a calibrated, backtested model is ready, what you see is the evidence, not a verdict.

Scenario weight computation

Each scenario's weight is a softmax over a log-prior plus live evidence:

weightS = exp(log(baseS/100) + smoothing × evidenceS) / Σ exp(log(baseS'/100) + smoothing × evidenceS')

The base_weights prior (Accelerated 33.3 / Gradual 33.3 / Augmentation 33.4 — an equal prior) is a smoothing prior that prevents extreme swings from sparse data and reflects a baseline expectation across the three scenarios. smoothing = 1.0 (configurable via config/scenario_thresholds.json). When few indicators are triggered, the weights reflect the prior; as indicators trigger, the weights shift toward the triggered scenarios. The current evidence totals and base weights are available in /api/scenario.

What it can't tell you: the tracker can reduce false alarms by requiring multiple indicators to align, but it can't eliminate them — an indicator can breach its threshold for reasons unrelated to AI. And no configuration of indicators proves AI caused anything; labor markets respond to interest rates, trade, demographics, and the business cycle all at once.

How we tested it — labor market impact

The depth behind the Labor Market Impact card on National Pulse, which reads Inconclusive. The tests below could not prove AI did it — and, as recorded in DEC-41, they could not prove the lines separated at all. That double negative is why the card reads Inconclusive.

The published series behind every test is the quarterly national gap series served by GET /api/v2/impact/gap-series (2015Q1 → 2025Q4, 44 quarters, from the Census Bureau's Quarterly Workforce Indicators): employment in the high-exposure group — the top exposure tercile of the 19 scored sectors (currently wholesale trade; retail trade; information; professional, scientific and technical services; management of companies; and educational services) — versus all other industries, each indexed to 100 at 2015Q1, from the sector-grain QWI panel over ages 20–24, 25–54 and 55+ (per DEC-44). Suppressed cells contribute no employment; unscored sectors drop out of both groups; the tercile split is rank-based so the grouping cannot move with the outcome it measures. The chart draws a pre-onset band behind the line — the 2015Q1–2022Q3 mean ± 2× trend-residual sd, −7.9 to −0.1 — and the series left the band in late 2025, which under this design is still not a verdict: the pre-period trend was already downward (per DEC-44).

Every statistic below was produced by the recorded diagnosis run (documented in docs/wp42-diagnosis.md) and is reproducible on your own machine with public data: download the QWI release, build the county-by-quarter panel, and use the analysis scripts referenced under each test as readable reference implementations — nothing requires access to our infrastructure.

Overall trend test

What it asks: is the post-2022 divergence between the two lines statistically real across the full panel, or small enough to be noise?

What it found: an event-study leads test on 1,496,100 estimation rows from 1,742 county clusters rejects at p ≈ 1.8×10−203 (Wald statistic 995.1) for the full-leads window (2019Q1–2022Q3, 14 leads). A rejection this size is real — but per DEC-41 it cannot, on its own, establish that the lines separated because of anything: a 2-way fixed-effects estimator of this family is documented to produce rejections like it even when no real break exists (see the verdict below).

Reproduce: pull the same 44 quarters from /api/v2/impact/gap-series, then read scripts/wp4/event_study.py (the estimator) and scripts/wp4/wp42_diag_probeC.py (the diagnosis probe) as reference implementations to run against your own QWI download.

Pre-COVID window

What it asks: does the same drift appear before the pandemic, so that COVID alone cannot explain it?

What it found: confining the leads test to 2015Q1–2019Q4 (20 leads, no pandemic quarters) still rejects, at p ≈ 8.7×10−170 (Wald statistic 862.2). The pre-period leads are uniformly positive (+0.0015 to +0.0156, ≈ +0.0095 per quarter): the two groups were on systematically different employment paths years before any AI effect could have acted (per DEC-41). A pre-trend this size means the post-2022 comparison cannot isolate an AI effect — and it is also consistent with the estimator pathology below.

Reproduce: same estimator and probe scripts, restricted to the 2015Q1–2019Q4 lead window, on your own QWI panel.

Permutation tests

What it asks: is the rejection a property of the specific map of which places count as exposed — or would any grouping produce it?

What it found: 30 seeded draws that shuffled the exposure map all reject identically (30/30 at both α = 0.01 and 0.10; median p ≈ 1.4×10−68, and the real anchor's p sits inside the shuffled range). A deliberately meaningless exposure map "finds" the same signal — so the rejection is not driven by the exposure map at all (per DEC-41). This is a central reason the verdict is Inconclusive rather than "AI did it."

Reproduce: the shuffle loop is in scripts/wp4/wp42_diag_probeC.py (seeds 1–30); run it over your own rebuilt exposure map.

Leave-one-industry-out

What it asks: could a single industry — say, Information — be driving the entire result?

What it found: each of the 19 NAICS sector groups was dropped in turn and the test re-fit; every one of the 19 samples still rejects in both windows. The weakest rejection drops Information (NAICS 51), at p ≈ 7.8×10−33 pre-COVID — astronomically far from the p > 0.10 gate, so no sector-composition choice rescues or explains the pattern (per DEC-41).

Reproduce: the 19 leave-one-sector-out fits are part of scripts/wp4/wp42_diag_probeC.py's recorded configuration; re-run them over your own panel with any sector grouping you prefer.

Clustered standard errors

What it asks: are the error bars honest when neighboring workers share local shocks — a plant closing, a state policy — rather than being independent?

What it found: all of the above tests use standard errors clustered across 1,742 local labor markets (counties) over the 1,496,100-row estimation sample, so no single county's quirks can manufacture the rejection.

Reproduce: the clustering specification is declared in scripts/wp4/event_study.py; the same QWI panel rebuilt locally reproduces the cluster count.

The verdict (per DEC-41): the exposed-vs-unexposed comparison is not identifiable with the current design. The rejection survives every intervention — all sector drops, all exposure shuffles, both windows — which is the documented signature of the 2-way fixed-effects spurious-pre-trend pathology (Goodman-Bacon 2021; de Chaisemartin & D'Haultfœuille 2020; Sun & Abraham 2021), not evidence that AI changed employment. The public impact tier stays "No clear effect yet" (per DEC-42); we re-test with every data release, and the next-candidate designs (modern difference-in-differences estimators, occupational-composition outcomes) are parked pending review. Every one of these tests confirms the estimator separated the lines; none can yet say the economy did.

What we don't compute yet

  • Impact. Whether AI has actually changed employment. The employment gap between the most AI-exposed industries and everywhere else is published and watched — see the labor market impact tests above — but it is correlation at best, not cause, and the recorded verdict is that the current design cannot even isolate the comparison (per DEC-41). Where the site shows an impact slot, it says "Inconclusive" plainly instead of showing a placeholder number (per DEC-42).
  • Forecasts. No occupation or metro forecasts are published. The Phase 5 forecast registry, backtesting, and scoring machinery exist (per DEC-26), and their calibration results will be public on the Forecast Track Record page — which is also where any published forecast's accuracy will be graded, in the open.

Other data we collect

Collected for the impact and forecast work. None of it feeds a published score yet.

  • Business applications — new business applications by county, from the Census Bureau's Business Formation Statistics.
  • County-to-county migration — people and incomes moving between counties, from the IRS Statistics of Income migration files.
  • County business patterns — establishment, employment, and payroll counts, from the Census Bureau's County Business Patterns and Nonemployer Statistics.
  • Data centers — data-center employment by county (BLS QCEW, NAICS 518210) and national private data-center construction spending (Census C30).

The formulas behind the composites

The assembled numbers, formula by formula. Metric ids and units come from the metric registry (config/metrics.yaml), which is the machine source of truth.

National Risk Index (unweighted stress)

The unweighted mean of stress_score across all tracked US metro areas, on a 0–100 scale where higher values indicate greater labor-market stress.

National Risk Index = mean over tracked metros of stress_score  (0–100; below 20 = low, 20–40 = moderate, 40+ = high)

This is the number shown in the Quick Report National Context block on For Policymakers.

MS1 — historical note

MS1 was originally labeled "DC/SF/Phoenix/Tampa metro sentinel employment" — a 4-metro pilot. The data is now available for all 802 tracked metro and micro areas via the BLS API and represents total nonfarm payrolls in the information + professional/business services + admin-support composite (thousands). The label was updated on 2026-07-22 to reflect the current scope. The MS1 metric ID and the underlying values are unchanged.

National AI-Impact Index

The AI-weighted composite served by the metro-impact API (GET /api/geo/metro-impact, which powers the heatmap):

ai_impact_score = stress_score × clamp(0.83425 + 1.8 × (ai_exposure_weight − 0.6685), 0.5, 1.0)  (per DEC-04)

stress_score is 0–100: the unweighted average of the CM3 (unemployment) / CM7 (postings) / CM5 (WARN) component scores that are present and current — components older than their freshness window (CM3/CM7 6 months, CM5 12) are dropped, and CM5 is scaled as workers laid off per 10,000 employed over a trailing 12-month window, saturating at 168 per 10k (per DEC-10). ai_exposure_weight is the metro's employment-weighted AI exposure (CM1, 0–1). The multiplier is anchored to the national value and stretched by a fixed, published gain: 0.6685 is the national employment-weighted exposure and 0.83425 the neutral multiplier level, so a metro at the national exposure keeps its score and measured metros move along a fixed 1.8 gain that maps the observed metro exposure range across most of the [0.5, 1.0] band (the raw 0.5 + 0.5 × exposure form it supersedes spent only ~20% of that band — per DEC-04, which deliberately does not rank-normalize, since ranks would make a metro's score move when other metros' data changed). The anchors are fixed constants (deliberately not percentile ranks, which would break reproducibility and the metro-impact-trend history).

A ranked score requires the metro's own measured exposure and at least two live stress components: a metro without its own BLS OEWS occupation data ships "Insufficient local data" instead of a score derived from a national-fallback exposure (per DEC-10's WP0.4 ranking gates). The 0–100 composite hero gauge that used to headline the home page was removed (per DEC-32) — the National Pulse map now shows exposure and current stress as separate layers — so this composite is served at the API layer, not headlined anywhere.

Career scores (the composite)

Each occupation gets an AI exposure score blended across multiple published methodologies. All occupation scores currently use the cognitive weight vector (Felten 40% / Eloundou 35% / Eisfeldt 25%). Physical exposure (not yet active) — the physical weight vector is documented for completeness but will be activated once O*NET work-context data is ingested; see the work_context_coverage field in /api/methodology for the current coverage state. The dedicated career page was removed from the nav (per DEC-36); the composite is still computed and served by the career APIs, and the Occupations ranking shows the observed and theoretical measures side by side, never blended (per DEC-32).

Composite formula. The composite is a weighted average of the available methodology scores: composite = Σ(scorei × weighti) / Σ(weighti), using the weights above. When a methodology is unavailable for an occupation, its weight is redistributed proportionally across the remaining methodologies (e.g., if only Felten 40% and Eloundou 35% are available, the effective weights are 40/75 = 53.3% and 35/75 = 46.7%). This is a simple weighted average — not a geometric or harmonic mean. A researcher can reproduce the composite for any occupation using this formula, the weights above, and the per-methodology scores from the career detail API.

Worked examples

Verified against the live API on 2026-10-06: /api/career/detail/19-3011.00 (Economists) and /api/career/detail/15-1252.00 (Software Developers).

Example 1: Economists (SOC 19-3011.00) — all 3 published methodologies.

  • Felten AIOE v2: 0.9705
  • Eloundou GPTs-are-GPTs: 0.5000
  • Eisfeldt et al.: 0.5692
  • Weights: Felten 0.40, Eloundou 0.35, Eisfeldt 0.25
composite = (0.9705 × 0.40 + 0.5000 × 0.35 + 0.5692 × 0.25) / (0.40 + 0.35 + 0.25)
    = (0.3882 + 0.1750 + 0.1423) / 1.00
    = 0.7055

Example 2: Software Developers (SOC 15-1252.00) — 1 published + 1 heuristic (redistributed weights).

  • Felten (heuristic-v1): 0.6800 — an in-house estimate
  • Eloundou GPTs-are-GPTs: 0.8684
  • Eisfeldt et al.: missing
  • Weights: Felten 0.40, Eloundou 0.35 (Eisfeldt 0.25 redistributed proportionally)
composite = (0.6800 × 0.40 + 0.8684 × 0.35) / (0.40 + 0.35)
    = (0.2720 + 0.3039) / 0.75
    = 0.7679

In Example 2, Eisfeldt's 0.25 weight is redistributed proportionally: the effective weights are 0.40/0.75 = 53.3% (Felten) and 0.35/0.75 = 46.7% (Eloundou). The Felten slot uses the in-house heuristic-v1 estimate because this occupation is not in the published Felten AIOE v2 dataset (774 SOC codes / 805 O*NET occupations); the 215 missing occupations use the heuristic fallback. See Displacement vs. Exposure for the distinction between exposure (what these scores measure) and displacement.

Community scores (CM1 & CM2)

CM1 — structural AI exposure. Published at county and CBSA grain from the observed-usage methodology: each place's employment-weighted observed AI use (Eobs, the DEC-18 task-matched score) divided by the national employment-weighted mean — so 1.0 is exactly the national average (per DEC-21). Metros with their own OEWS occupation data use the direct estimate; counties (and metros without OEWS data) use the QCEW × OEWS-staffing synthetic mixes. The legacy Felten-weighted 0–1 score computed from ACS PUMA occupation tables is retired (per DEC-21) — do not compare old copies of that number with the current index.

CM2 — adaptive capacity. A composite of four components, each normalized to 0–1 and averaged, computed for every county (3,135) and CBSA (923) from ACS 2024 5-year data (per DEC-21):

  • Education: share of population 25+ with a bachelor's degree (ACS B15003)
  • Broadband: share of households with a broadband subscription (ACS B28011)
  • Income: median household income normalized to a $150K cap (ACS B19013)
  • Economic diversity: (1 − HHI), where HHI is the Herfindahl-Hirschman Index of industry employment shares (ACS C24030). A diversified economy (low HHI) scores higher; a mono-industry economy (high HHI) scores lower.

Higher CM2 = greater capacity to adapt to AI-driven economic change.

Displacement vs. exposure

AI exposure measures how much an occupation's tasks overlap with AI capabilities. Displacement measures actual job losses attributable to AI. The academic methodologies (Felten AIOE, Eloundou GPTs-are-GPTs, Eisfeldt et al.) measure exposure, not displacement. The displacement number carried by the career API payloads is sourced from the in-house heuristic-v1 model — none of the three published methodologies measure displacement. The heuristic-v1 score is treated as a fallback estimate (and suppressed, showing "—") when the heuristic value is ≤ 0.01 (near-zero) or when it converges with the exposure score to within 0.001 (exposure-as-displacement); in those cases the payload flags an "estimated" badge. For the median occupation (BLS projection in the deadband, no friction), the "Peak Displacement Risk" equals the exposure composite — see the risk formula below.

F4 (2026-07-22): the browse table and detail card both showed the composite displacement risk (computed by assess_displacement_risk), with the heuristic-v1 score kept as a secondary italic for continuity, and an "= exposure" mini-badge when the composite equals the exposure score (deadband case). This resolved a prior inconsistency where the browse table showed the heuristic-v1 sentinel (often <1%) while the detail card showed the composite for the same occupation. The dedicated career UI this rule shaped was removed from the nav (per DEC-36); the rule still governs the career API payloads the API-and-downloads surfaces expose.

Displacement risk formula

The "Peak Displacement Risk" number served by the career detail API is computed by assess_displacement_risk in api/career_scoring.py. It takes the AI exposure composite as a base and applies multipliers based on BLS employment projections and labor-market friction:

displacement_risk = exposure_score × multiplier  (capped at 1.0)

The multiplier rules (applied in order, only the first matching rule fires):

  • 0.7 if BLS 10-year projection > +10% (growing field → lower displacement)
  • 1.2 if BLS 10-year projection < −5% (shrinking field → higher displacement)
  • 1.0 default (the "deadband": BLS projection in (−5%, +10%))

The friction multiplier (0.8 for high-friction occupations, defined as total friction years > 5) was documented for completeness but has been removed; it will be re-added in a future change once O*NET work-context data is ingested. See the friction_note in /api/methodology.

Worked examples (verified against the live API on 2026-10-06). For Economists (SOC 19-3011.00, exposure 0.7055, BLS projection in the deadband): displacement_risk = 0.7055 × 1.0 = 0.7055 — identical to the exposure composite. For Software Developers (SOC 15-1252.00, exposure 0.7679, BLS projection in the deadband): displacement_risk = 0.7679 × 1.0 = 0.7679 — also identical.

Plain-English summary

For the median occupation — one whose BLS 10-year projection sits in the (−5%, +10%) deadband — the displacement-risk multiplier is 1.0, so the "Peak Displacement Risk" is identical to the AI exposure composite to 4 decimal places, and the API's "equals exposure" flag marks the case. The displacement framing is preserved rather than relabeling the number "exposure score" because, for occupations outside the deadband — high-growth fields where the multiplier is 0.7, or declining fields where it is 1.2 — the displacement number diverges from the exposure number and the framing becomes meaningful.

displacement_risk vs displacement_score. The career detail API returns two distinct fields: displacement_risk (from assess_displacement_risk, "Peak Displacement Risk") and displacement_score (from the canonical view's heuristic-v1 row, the "Displacement" score row). The latter is null for most occupations (the API suppresses it when it converges with exposure within 0.001 or is ≤ 0.01). When non-null — Software Developers carry 0.0345 — the score row shows it with a "heuristic" badge. The "Peak Displacement Risk" number is always from assess_displacement_risk, not from the heuristic-v1 row.

Composite precision (standard error)

The composite exposure score is a weighted average of up to 3 published methodologies (Felten, Eloundou, Eisfeldt). When 2 or more published methodologies are available, the career detail API reports a weighted standard error (SE) and 95% confidence interval at risk_assessment.composite_se:

SE = sqrt( Σ(wi × (scorei − composite)2) / Σ(wi) / (n − 1) )   95% CI = composite ± 1.96 × SE, clipped to [0, 1]

where wi is the methodology weight (Felten 0.40, Eloundou 0.35, Eisfeldt 0.25), scorei is the per-methodology exposure score, and n is the number of published methodologies (excluding heuristic-v1, which is not a published methodology and would artificially narrow the CI where it substitutes for a missing published source).

Why weighted (not unweighted) variance: the methodologies have different coverage and reliability. Weighting by the same weights used in the composite ensures that a methodology with a small weight (e.g., Eisfeldt at 0.25) contributes proportionally to the SE, not equally with Felten at 0.40.

n < 2 fallback: when only 1 published methodology is available (or 0), the SE is not computable. The API returns composite_std_error: null with a precision_disclosure string explaining why; surfaces rendering the card show the disclosure text in place of the SE.

Worked examples (live API, 2026-10-06). For Economists (SOC 19-3011.00): Felten 0.9705, Eloundou 0.5000, Eisfeldt 0.5692, composite 0.7055 — SE = 0.1541, 95% CI [0.4034, 1.00] (clipped). The wide CI reflects the 47-point disagreement between Felten and Eloundou on this occupation. For Software Developers (SOC 15-1252.00, n = 2 published): SE = 0.094, 95% CI [0.5837, 0.9521].

Limitations & known caveats

  • No causal attribution. We show patterns consistent with AI displacement, not proof that AI caused them. Labor markets respond to many factors — interest rates, trade policy, demographics, business cycles — and we cannot isolate the AI effect.
  • False alarms are possible. A metro can have a high stress score driven by a non-AI recession, or a scenario indicator can breach its threshold for reasons unrelated to AI. The scenario tracker is designed to reduce false positives by requiring multiple indicators to align, but it cannot eliminate them.
  • Sample-based local data. ACS-based local measures (PUMS employment tables, CM2 components) are annual sample-based estimates, not full counts. Local areas have roughly 100,000 or more residents but the survey sample is much smaller; margins of error can be significant for less populous areas.
  • Estimated data. Some values (employment projections, occupation-level AIOE scores, heuristic-v1 estimates) are model estimates or heuristics, not direct measurements. These are labeled with estimated confidence in our data pipeline.
  • Directional forecasts. Career trajectory scores (short/mid/long horizon) are directional indicators of where an occupation may be heading, not precise predictions. They are based on current AI-exposure research, which is itself evolving.
  • US-only. All data sources cover the United States. We have no coverage for international labor markets.

Confidence levels

Every observation in our database carries a confidence label:

measured
Value comes directly from a live API or data source. Highest confidence.
extracted
Value was parsed from a source that required transformation (e.g., scraping a PDF or website). Good confidence.
estimated
Value is a model estimate, heuristic, or sample placeholder. Directional only — treat as approximate.
computed
Value was computed from other measured/extracted values (e.g., a weighted average). Inherits the confidence of its inputs.
proxy
Value is a stand-in derived from a related geography or aggregate measure, not a direct observation of the target.

Metro-level proxies (L1, L4, L6)

Three leading indicators — L1 (AI-cited layoff share), L4 (Canaries slope), and L6 (Anthropic Economic Index) — are published at the national level by named sources (Challenger, Gray & Christmas; Stanford Digital Economy Lab / ADP Canaries; Anthropic). At the metro level, we do not ingest the named-source data. Instead, we compute proxy values from the CM metrics that are available at the metro level:

  • L1 (metro proxy): derived from CM5 (WARN events). Not comparable to national L1 from Challenger, Gray & Christmas, which measures AI-cited layoffs as a percentage of total announced cuts. The metro proxy is in WARN-event-derived units.
  • L4 (metro proxy): CM3 (unemployment rate) 12-month slope × CM1 (AI exposure). Not comparable to national L4 from Stanford Digital Economy Lab / ADP Canaries, which is annualized employment growth in early-AI-adopter sectors.
  • L6 (metro proxy): inverted 12-week rate-of-change of CM7 (Indeed postings index). Not comparable to national L6 from the Anthropic Economic Index, which is the share of Claude conversations that are augmentative vs. automative by occupation/state.

The metro sidebars separate these proxy values into their own section so they are not confused with the named-source national values. See /api/methodology for the metro_l1_l4_l6_proxies field with the full proxy descriptions.

CM8 (bachelor's degree or higher) — collected but not displayed

CM8 (bachelor's degree or higher) is collected in the warehouse from Census ACS (census_acs_education_ba_pct) but not displayed on the metro panels. The value is available via the data download and API for researchers who need it. A regression test (tests/test_geo.py::test_cm8_not_in_metro_panels) ensures CM8 stays off the panels unless deliberately added.