Methodology
AI exposure and job displacement are different objects.
A software developer and a data entry clerk can both score high on AI exposure, but one gets augmented (MOM lists software developers as in-demand in 2025) while the other faces substitution. We deliberately separate technical exposure from market translation using a three-layer system.
Our scoring pipeline uses peer-reviewed academic indices and government survey data. No LLM assigns a risk score — avoiding the circularity of using AI to score AI replaceability. The core formula is fully deterministic: every input is an observable signal from a published dataset.
Validation Status
What this model does: Measures structural AI displacement pressure using observable inputs. It tells you which occupations face the most technical overlap with AI capabilities and which have the strongest human bottlenecks and market buffers.
What it does not do: Predict actual job losses, forecast hiring trends, or account for the creation of new tasks that AI enables (the "reinstatement effect" in Acemoglu & Restrepo's framework). The model captures displacement potential but not the offsetting force of new task creation.
Three-Layer System
Layer 1: Exposure
How much does this job overlap with AI capabilities? Per-occupation scoring from the Felten AIOE index.
Layer 2: Human Bottleneck
How much does this job require judgment, presence, and responsibility that resists automation? From Pizzinelli theta, computed from O*NET Work Context data.
Layer 3: Market Resilience
Is Singapore's labor market for this occupation growing or shrinking? Group-level employment and wage trends plus occupation-level wage scarcity proxies.
These three layers produce sub-scores, a net risk band, and a visible confidence level — not a single magic number.
| Layer | Measures | Source |
|---|---|---|
| Exposure | AI capability overlap with job abilities | Felten AIOE (2021), percentile-ranked |
| Human Bottleneck | Judgment, presence, responsibility that resists automation | Pizzinelli theta from O*NET (2023), percentile-ranked |
| Market Resilience | Employment momentum + occupation wage scarcity | MOM employment/wage trends + occupation wage structure |
| Net Displacement Risk | Published as risk bands (Very Low to Very High) with confidence | Composite formula |
The Formula
net_risk = pctile(aioe) × (1 - pctile(theta)) × market_modifier
Where:
market_modifier = 1 - 0.35 × market_resiliencemarket_resilience = 0.6 × market_momentum + 0.4 × occupation_scarcity
The market modifier only dampens risk (it is always ≤ 1.0). Weak markets don't amplify risk beyond the technical signal — they simply provide less buffer. Maximum reduction: 35%.
Layer 1: Exposure
AIOE (AI Occupational Exposure)
From Felten, Raj & Seamans (2021). Maps 10 AI application areas to 52 human abilities to occupations via O*NET. Measures how much a job's required abilities overlap with current AI capabilities. Available for ~774 US occupations by 6-digit SOC code.
exposure = percentile_rank(aioe) across all matched occupations
Scale: 0 (lowest percentile) to 1 (highest percentile)
What it does NOT measure: whether exposure leads to augmentation or replacement.
Layer 2: Human Bottleneck (Theta)
Pizzinelli Theta (Complementarity)
From Pizzinelli et al. (2023, IMF). Computed from 12 O*NET variables across 6 dimensions. Higher theta = stronger human bottleneck = harder to substitute.
- Communication: Face-to-Face Discussions
4.C.1.a.2.l, Public Speaking4.C.1.a.2.c - Responsibility: Outcomes/Results
4.C.1.c.2, Health/Safety of Others4.C.1.c.1 - Physical Conditions: Outdoors
4.C.2.a.1.c, Physical Proximity4.C.2.a.3 - Criticality: Consequence of Errors
4.C.3.a.1, Decision Freedom4.C.3.a.4, Decision Frequency4.C.3.a.2.b - Routine (inverted): Degree of Automation
4.C.3.b.2(inverted), Structured vs. Unstructured Work4.C.3.b.8 - Skills: O*NET Job Zone (1-5, scaled to 0-1)
θ = mean(6 dimension means, each normalized to 0-1)
bottleneck = percentile_rank(θ) across all matched occupations
Scale: 0 (lowest percentile — most automatable) to 1 (highest percentile — strongest human bottleneck)
No double-counting: We use AIOE and theta as separate, independent layers.
We do NOT use C-AIOE (which is aioe × f(theta)) as an input to net_risk,
because multiplying by (1 - theta) would double-count complementarity. C-AIOE is
computed and displayed as a reference score for IMF comparability only.
Layer 3: Market Resilience
Market data is a calibrator, not an override. Employment and wages are lagging and confounded. The market layer can reduce net risk by up to 35% — it never amplifies risk beyond the technical signal.
Market Momentum (group-level)
market_momentum = mean(pctile(group_empl_cagr), pctile(group_wage_cagr))
10-year employment CAGR (2015-2025) and 8-year wage CAGR (2015-2023) from MOM data, per major occupation group. Percentile-ranked across the 8 major groups.
Occupation Scarcity (occupation-level)
occupation_scarcity = mean(pctile(log(q75/q25)), pctile(wage_median / group_median))
Two wage-structure signals: (1) log wage spread (winsorized at 1st/99th percentile) as a scarcity proxy, and (2) within-group wage position (above group median = relative specialization). Both percentile-ranked across all 562 occupations.
Combined Market Modifier
market_resilience = 0.6 × market_momentum + 0.4 × occupation_scarcity
market_modifier = 1 - 0.35 × market_resilience
Group-level trends get 60% weight (direct measurement). Occupation-level wage structure adds within-group differentiation at 40% weight (noisier signal). The 0.35 cap means the market layer can reduce net risk by up to 35%.
Singapore Demand Signals (occupation-level bonuses)
Two MOM data sources provide occupation-level demand flags that boost market resilience:
- Shortage Occupation List (SOL) 2026: EP/COMPASS shortage list (released Nov 2025, effective Jan 2026). 36 occupations across semiconductors, healthcare, ICT, green economy, maritime, agritech, financial services. Matched to 62 SSOC codes. +15% market resilience bonus.
- Jobs in Demand 2025: Broader resident demand list (released Dec 30, 2025). Covers PMET and non-PMET roles: software developers, nurses, waiters, drivers, security officers, auditors. Matched to 29 SSOC codes. +10% market resilience bonus.
Where both signals match (e.g., software developer appears on both SOL and Jobs in Demand), bonuses stack (capped at 1.0). SOL is EP/COMPASS-focused (PMET bias); Jobs in Demand offsets this by covering non-PMET roles.
Labour Monitor (cluster-level evidence layer)
We ingest official MOM/SingStat quarterly data from data.gov.sg and compute a unified labour monitor for three broad occupation clusters:
- PMET — Professionals, Managers, Executives & Technicians
- Clerical, Sales & Service Workers
- Production & Transport Operators, Cleaners & Labourers
Three signals are computed per cluster (where data is available):
- Vacancy rate trend: 4-quarter-over-4-quarter average trend. Signal: >+5% = heating up (+1), <-5% = cooling down (-1), else stable (0).
- Net hiring pressure: recruitment rate minus resignation rate (when available). Signal: net >+0.1pp = positive (+1), <-0.1pp = negative (-1), else neutral (0).
- Retrenchment trend: count and 4Q-over-4Q trend (when available). Falling retrenchment = positive (+1), rising = negative (-1).
The three signals are summed into an overall label:
total = vacancy_signal + hiring_signal + retrenchment_signal
2-3 = "strong" | 1 = "moderate" | 0 = "weak" | <0 = "deteriorating"
This is cluster-level data, not occupation-level. It provides context about the broad labour market conditions for each occupation's cluster, displayed as a labour market card on occupation pages. It is not a direct scoring input — we show it to ground the analysis in current labour-market reality without overfitting a sparse cluster-level series into the per-occupation formula.
Data displayed per cluster: vacancy rate with year-over-year trend and multi-year sparkline (2021–2025), recruitment vs resignation rates, retrenchment incidence per 1,000 employees, and re-entry rates (proportion of retrenched workers finding employment within 6 and 12 months).
Data sources: vacancy rates (data.gov.sg + MOM Labour Market Report Q3 2025), recruitment/resignation rates, retrenchment by occupation group, and re-entry into employment statistics. Updated quarterly.
Anthropic Economic Index (exposure calibration)
Observed AI usage rates from Claude conversations (HuggingFace dataset, Jan 2026 report). Calibrates the theoretical AIOE exposure by up to ±30% based on the gap between theoretical and observed AI usage per occupation.
Applied to 507 of 562 occupations via SOC code crosswalk. Key finding: some occupations (data entry, customer service) show higher observed usage than AIOE predicts, while others (teachers, software developers) show lower observed usage.
Used as calibration, not replacement. Anthropic measures Claude usage specifically, not universal AI adoption.
Risk Bands
Net risk is published as bands, not pseudo-precise decimals:
| Band | Range | Meaning |
|---|---|---|
| Very Low | 0.00 – 0.05 | Negligible displacement pressure |
| Low | 0.05 – 0.15 | Limited pressure; AI likely augments |
| Moderate | 0.15 – 0.30 | Mixed; bottlenecks or market provide buffer |
| High | 0.30 – 0.50 | Significant pressure; weaker bottlenecks and/or declining market |
| Very High | 0.50+ | Strong pressure across multiple signals |
Augmentation & Impact Type
A single displacement risk number misses half the story. We compute augmentation potential from the same three layers, with a different formula:
displacement_risk = exposure × (1 - bottleneck) × market_modifier
augmentation = exposure × bottleneck × market_resilience
Crossing displacement with augmentation gives a 2×2 impact type:
| Low Augmentation | High Augmentation | |
|---|---|---|
| High Displacement | At Risk — AI substitutes, weak bottleneck | Mixed — conflicting signals, high uncertainty |
| Low Displacement | Stable — AI has limited overlap | Augmented — AI amplifies, human essential |
Impact type is classified from net_risk and augmentation thresholds: net_risk ≥ 0.25 = "high displacement", augmentation ≥ 0.12 = "high augmentation". Occupations with high displacement and official demand signals (SOL/JiD) are classified as "mixed" rather than "at risk".
Confidence Scores
Every score carries a visible confidence indicator:
confidence = mean(crosswalk_quality, market_data_granularity, source_freshness)
| Factor | How it is assigned | Typical range |
|---|---|---|
| Crosswalk quality | Direct = 1.0, sub-major fallback = 0.6, major fallback = 0.3, then reduced further by crosswalk dispersion where mapped SOC scores disagree. | 0.3 - 1.0 |
| Market data granularity | Baseline = occupation wage structure + group employment/wage trends. Exact official demand evidence adds more occupation-specific Singapore signal than prefix-inferred or absent demand evidence. | 0.65 - 0.85 |
| Source freshness | Baseline reflects a mix of 2021 academic exposure data and recent Singapore labour data. Anthropic observed-usage calibration raises freshness where available. | 0.75 - 0.85 |
Published as: High (≥0.7) / Medium (0.4–0.7) / Low (<0.4).
In the current implementation, confidence varies by direct vs fallback crosswalk, exact vs prefix-inferred demand evidence, and whether Anthropic observed-usage calibration is available for the matched occupation.
Worked Examples
Both occupations score high on AI exposure. But their outcomes differ dramatically because of the bottleneck and market layers:
Software Developer
- Exposure: pctile(aioe) = 0.84
- Bottleneck: pctile(theta) = 0.19
- Market resilience: 0.92
- Market modifier: 0.68
- Net risk: 0.46 (High)
- Impact type: Mixed
Data Entry Clerk
- Exposure: pctile(aioe) = 0.65
- Bottleneck: pctile(theta) = 0.03
- Market resilience: 0.34
- Market modifier: 0.88
- Net risk: 0.55 (Very High)
- Impact type: At Risk
This is why a single "AI exposure score" is misleading. The software developer has higher exposure than many "at risk" occupations, yet their job is growing. The three-layer system captures this distinction.
Classification
Building on the IMF framework, occupations are classified into four impact types based on the 2×2 matrix of displacement risk and augmentation potential:
At Risk
High displacement, low augmentation (e.g., data entry, bookkeepers)
Augmented
Low displacement, high augmentation (e.g., software developers, surgeons)
Stable
Low displacement, low augmentation (e.g., electricians, childcare workers)
Mixed
High displacement, high augmentation — conflicting signals, outcome depends on adoption path
Crosswalk: Singapore to US Scores
AIOE and theta scores originate from US O*NET data. We map Singapore's SSOC occupations to these scores via:
- SSOC 2020 maps to ISCO-08 unit groups via SingStat concordance
- ISCO-08 maps to US SOC 2010 via BLS crosswalk
- When one ISCO maps to multiple SOC codes, we average the scores
- Fallback 1: 2-digit ISCO sub-major group average (confidence = 0.6)
- Fallback 2: 1-digit major group average (confidence = 0.3)
Current coverage: 92.7% direct match (521/562), 7.1% sub-major fallback (40), 0.2% major fallback (1).
What This Version Shows
V3.1 implements the full three-layer model: exposure (AIOE percentile), human bottleneck (theta percentile), and market resilience (group-level employment/wage trends + occupation-level wage structure). Net risk is published as risk bands with visible confidence. Augmentation potential, impact type classification, and rule-based outlook/scenario modelling are included. 80 estimated modern roles (AI engineer, product manager, prompt engineer, etc.) are scored as weighted blends of official occupations, with dispersion analysis for high-variance compositions.
Seniority adjustment (V3.1): the Outlook section now supports experience-level modifiers (Entry-level / Mid-career / Senior). Adjustments scale with each occupation's variant sensitivity — roles with high institutional knowledge (e.g., software engineering) vary more by seniority than roles with low context-dependence (e.g., truck driver). Grounded in: Stanford "Canaries in the Coal Mine" (2025) showing entry-level displacement pressure, and Anthropic Economic Index (2026) showing 14% drop in job-finding for 22-25 year olds in AI-exposed occupations.
Labour market data updated through Q3 2025 full report + Q4 2025 advance release. Vacancy rates, retrenchment, and recruitment/resignation rates by occupation cluster.
Not yet implemented: Occupation-level employment data (MOM OED, not publicly available), company-size modifiers (startup vs enterprise context), and job postings pipeline for real-time demand signals.
Validation
We backtest structural risk scores against actual labour market outcomes at the cluster level (Q3 2025 data). This tests whether higher-risk clusters show worse outcomes than lower-risk ones.
Cluster-Level Directional Checks
Only 3 labour clusters available, so statistical power is limited. This validates broad
direction, not precision. Cluster-level data masks within-cluster variation. Full raw
results in data/backtests/q3-2025-validation.json.
Honest framing: Structural risk scores capture long-run pressure, not short-run employment fluctuations. A single exposure measure poorly predicts actual unemployment (Frank et al., 2025, PNAS Nexus). Research is "still in the first inning" (Brookings/PIIE, 2026) with no consensus on measurement.
Ensemble Exposure Measures
Frank et al. (2025) found that individual AI exposure scores are poor predictors of actual unemployment, but an ensemble of multiple measures accounts for 18% more variation. We use multiple lenses:
| Measure | Source | Coverage |
|---|---|---|
| Felten AIOE | Academic index (Felten et al., 2021) — task-ability overlap with 10 AI applications | Primary exposure score. Covers all 562 occupations via SOC crosswalk. |
| Anthropic Observed Usage | Anthropic Economic Index (2026) — actual LLM usage patterns by occupation | 90.2% of occupations calibrated. Used to adjust AIOE where theory diverges from practice. |
| GPTs-are-GPTs | Eloundou et al. (2023) — LLM task-level exposure via human + GPT-4 assessment | Pending integration. Crosscheck script ready. Shows as "Exposure consensus" indicator when available. |
Where multiple measures are available, we report whether they agree ("consensus high", "consensus low") or diverge. Divergence flags occupations where theory-based and observed measures disagree — often the most interesting cases for investigation.
Synthetic Role Methodology
Modern job titles (AI Engineer, Product Manager, Prompt Engineer) don't map to a single official SSOC occupation. We estimate scores by blending 2-4 official occupations with weights reflecting the typical task composition of each modern role.
Composition
Each synthetic role defines component SSOC occupations and weights (e.g., Startup CTO = 40% Software Manager + 30% Solution Architect + 30% Software Developer). Scores are weighted averages of component occupation scores. All component SSOC codes are validated against the occupations dataset.
Dispersion
When component occupations have very different risk scores, the weighted average may not represent any single reality. For roles with high dispersion (stddev > 0.08), we show the full risk range and explain: "Your actual risk depends on how much you code vs manage." Low-dispersion roles (where the blend barely changes the score) link to their closest official occupation.
Confidence
All synthetic role scores are capped at Medium confidence. They are illustrative estimates, not validated against actual labour outcomes. Use the component occupation pages for higher-confidence individual scores.
Experience Level Adjustment
The Outlook section supports experience-level modifiers that adjust displacement pressure based on research showing AI affects different seniority levels unequally.
| Level | Exposure Adj. | Bottleneck Adj. | Research Basis |
|---|---|---|---|
| Entry-level | +12pp × sensitivity | −10pp × sensitivity | More routine tasks, less institutional knowledge. Anthropic (2026): 14% drop in job-finding for ages 22-25. Stanford DEL (2025): entry-level faces disproportionate pressure. |
| Mid-career | 0 | 0 | Baseline — current scores reflect mid-career task composition. |
| Senior / Lead | −10pp × sensitivity | +12pp × sensitivity | More judgment/strategy work, higher institutional knowledge. Noy & Zhang (2023): AI narrows experience gap. Dell'Acqua (2023): seniors better at knowing AI's capability boundary. |
"Sensitivity" refers to the occupation's variant_sensitivity score (0–1), derived from institutional knowledge, relationship intensity, regulatory weight, and coordination requirements. High-sensitivity roles (e.g., software engineering: 0.55) vary more by seniority than low-sensitivity roles (e.g., truck driver: 0.15).
State of the Science
Research on AI and the labour market is evolving rapidly. Our model is informed by — and honest about — the current consensus:
Individual AI exposure scores are poor predictors of actual unemployment
Frank et al. (2025, PNAS Nexus) found that single exposure measures "misrepresent AI's impact" — but an ensemble of multiple measures accounts for 18% more variation in actual outcomes.
Research is "still in the first inning"
Brookings/PIIE (2026) reports no consensus on how to measure AI's labour market impact. BLS employment projections show only weak correlation between AI exposure and projected job decline.
No clear aggregate displacement through 2025
Yale Budget Lab finds no aggregate displacement signal. But entry-level pressure in exposed occupations is emerging (Stanford "Canaries in the Coal Mine," 2025).
Our approach: structural pressure model, not prediction
We measure where AI has the most technical overlap with human tasks, adjusted for human bottlenecks and market signals. Validated directionally at cluster level (3/4 checks pass vs Q3 2025 data), not causally at occupation level.
Known Limitations
- Exposure ≠ displacement — Market translation uses heuristics and lagging indicators. Captures displacement but not reinstatement (Acemoglu & Restrepo, 2019).
- US-centric ability data — O*NET surveys US workers; task composition may differ in Singapore.
- Hierarchical market granularity — Momentum is major-group level; wage structure adds occupation-level differentiation as a proxy.
- Proportional employment — Per-occupation employment is sub-major-group total / count (41 groups from Labour Force 2024 Table D8), not actual per-occupation counts. Better than the previous 8 major groups but still an allocation, not a measurement.
- Static exposure snapshot — AIOE reflects 2021 AI capabilities.
- Career-stage blind spot — Scores the occupation as a whole; junior/senior impact likely differs (Stanford Canaries, 2025).
- Crosswalk imprecision — 7.3% of occupations use fallback scores. Confidence score reflects this.
- Wage-spread ambiguity — High wage ratio can mean specialization or seniority ladder (~16% effective weight).
- Cluster-level labour monitor — Only available for three broad clusters, not all 562 occupations.
Implementation Constants
Key constants and thresholds used in the scoring pipeline. All values are deterministic and reproducible.
| Parameter | Value | Details |
|---|---|---|
| Anthropic calibration cap | ±30% | exposure + 0.3 × (observed - exposure) |
| SOL exact bonus | +15% | Exact match to Shortage Occupation List adds 15% to market resilience |
| SOL prefix bonus | +8% | Prefix-inferred match to SOL adds 8% to market resilience |
| Jobs in Demand exact bonus | +10% | Exact match to Jobs in Demand adds 10% to market resilience |
| Jobs in Demand prefix bonus | +5% | Prefix-inferred match to Jobs in Demand adds 5% to market resilience |
| Augmented threshold | net_risk < 0.25 AND augmentation ≥ 0.12 | Low displacement with meaningful augmentation potential |
| At Risk threshold | net_risk ≥ 0.25 AND augmentation < 0.12 | High displacement pressure with weak augmentation buffer |
| Stable threshold | net_risk < 0.25 AND augmentation < 0.12 | Low displacement, low augmentation — AI has limited overlap |
| Mixed | net_risk ≥ 0.25 AND augmentation ≥ 0.12 | High displacement AND high augmentation — conflicting signals |
| Stability stress test | ±5 percentile points | Each of the three core layers is perturbed by ±5 percentile points to test band stability |
| Confidence: high | ≥ 0.7 | Confidence score ≥ 0.7 published as "High" |
| Confidence: medium | 0.4 – 0.7 | Confidence score between 0.4 and 0.7 published as "Medium" |
| Confidence: low | < 0.4 | Confidence score below 0.4 published as "Low" |
| Market modifier cap | 0.35 | market_modifier = 1 - 0.35 × market_resilience |
Academic References
Felten, Raj & Seamans (2021)
"Occupational, Industry, and Geographic Exposure to Artificial Intelligence: A Novel Dataset and Its Potential Uses." Strategic Management Journal, 42(12), 2195-2217.
Pizzinelli et al. (2023)
"Labor Market Exposure to AI: Cross-country Differences and Distributional Implications." IMF Working Paper WP/23/216.
IMF Singapore (2024)
"Impact of Artificial Intelligence on the Singapore Labor Market." IMF Selected Issues Paper SIP/2024/040.
Acemoglu & Restrepo (2019)
"Automation and New Tasks: How Technology Displaces and Reinstates Labor." Journal of Economic Perspectives, 33(2), 3-30. Displacement-vs-reinstatement framework referenced in our limitations.
Eloundou et al. (2023)
"GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models." arXiv:2303.10130.
Demirer et al. (2025)
"Canaries in the Coal Mine: Early Signals from AI's Impact on the Labor Market." Stanford Digital Economy Lab.
Ministry of Manpower, Singapore (2025)
"Jobs in Demand 2025." Released December 30, 2025.
Ministry of Manpower, Singapore (2025)
"Job Vacancies 2024." Released March 28, 2025.
Ministry of Manpower, Singapore (2025)
COMPASS Shortage Occupation List (SOL). Released November 2025, effective January 1, 2026.
Anthropic (2026)
"The Anthropic Economic Index: Economic Primitives." January 15, 2026. Dataset on HuggingFace.
Reproduce Our Results
The entire scoring pipeline is open source and deterministic:
bun run scripts/score.ts
This reads raw data from data/raw/,
computes all scores, and writes data/occupations.json.
Version History
Seniority modifiers (entry-level / mid-career / senior) scaled by variant sensitivity. Ensemble exposure framework (GPTs-are-GPTs crosscheck ready). Cluster-level backtesting (3/4 directional checks pass). Labour data updated to Q4 2025 advance release. 80 synthetic roles (added AI Engineer, Prompt Engineer, AI Product Manager, Data Architect, IT Security Manager). Archetype classification expanded to cover all SSOC prefixes. 48 validation checks. Outlook simplified to 2 tabs with seniority toggle.
Three-layer scoring: exposure (AIOE), bottleneck (theta), market resilience. Produces: net risk, augmentation, impact type, stability, confidence. Anthropic observed-usage calibration. SOL 2026 and Jobs in Demand 2025 demand signals. Cluster-level labour monitor (Q3 2025 vacancy, recruitment/resignation, retrenchment, re-entry rates). Stability stress testing. 75 estimated modern roles. Rule-based outlook/scenario engine with 3 presets.
Added market resilience layer (employment trends + wage scarcity). Introduced risk bands and confidence scoring. Replaced single-score output with multi-layer evidence display.
Initial release. Two-layer model: AIOE exposure + Pizzinelli theta complementarity. 562 SSOC occupations via ISCO crosswalk.