Methodology · Formulas

The math, exactly.

Every animated number on the simulator is the output of one of the formulas below. They're applied in this order, every month, for every occupation.

1. AI adoption (S-curve)

For each month t, given a scenario:
raw(t)      = asymptote / (1 + exp(-steepness × (t − midpoint)))
adoption(t) = max(0, (raw(t) − raw(0)) / (asymptote − raw(0))) × asymptote

The S-curve is the standard logistic for technology diffusion. Each scenario (slow / central / fast) carries its own asymptote, midpoint, and steepness, all anchored on IMF (2024) and Goldman (2023) deployment ranges. We renormalise so that adoption(0) = 0 exactly - existing pre-AI displacement is treated as already baked into today's employment numbers, and the simulator shows incremental change from now forward.

Applied: once per month for the active scenario. Drives every other formula.

2. Customer-industry flow

For each customer industry i:
baseline_flow_i = wage_mean × employment_count × share_i
remaining_i(t)  = 1 − ai_exposure_i × adoption(t)
current_flow_i(t) = baseline_flow_i × remaining_i(t) × boost_factor(t)

Each occupation's revenue is decomposed into its customer industries. As AI adoption rises, each customer industry's spending capacity contracts in proportion to its ai_exposure - a parameter anchored on Felten-Raj-Seamans AIOE, IMF (2024) sectoral exposure, and Goldman (2023) industry deciles. boost_factor captures positive demand effects (AI-adjacent work) and is described below.

Applied: for each pipe in the cascade graph. The animated number on each customer-industry node is current_flow_i(t); the pipe width and pulse cadence encode remaining_i(t).

3. AI demand boost

For occupations whose work AI augments rather than replaces:
boost_factor(t) = 1 + ai_demand_boost × adoption(t)

Software developers, electricians wiring data centres, civil engineers consulting on AI-related infrastructure - these occupations see more demand as AI deploys. The boost is modest (typical values 0.05 – 0.25) and applies multiplicatively to customer-industry flows. Most occupations have a boost of 0.

Applied: uniformly across all customer industries for that occupation.

4. Workers remaining (direct displacement)

For each occupation:
employment_factor(t)  = max(0, 1 − automation_prob × adoption(t))
workers_remaining(t)  = employment_count × employment_factor(t)

Direct AI displacement - how many people in this occupation are still employed. automation_prob blends Frey-Osborne 2013 with a documented modern AI overlay so that occupations whose exposure has shifted post-2022 (graphic designer, software developer, financial analyst) are reflected accurately.

Applied: the incumbent part of the "Workers" metric card. Newcomers from labour inflow (section 7) are added on top before income per worker is computed.

5. Total revenue and income per worker

After all customer industries are summed:
total_revenue(t)  = Σ current_flow_i(t)              (then ×(1 − moretti_drag) if local-service)
workers(t)        = workers_remaining(t) + entrants(t)   (entrants from section 7)
income_per_worker(t) = total_revenue(t) / workers(t)

The big number at the centre of the cascade graph is total_revenue(t). Income per worker - the figure most users care about - falls when revenue contracts faster than headcount, and stays flat when both contract together. The denominator counts everyone working in the occupation: incumbents who kept their jobs plus newcomers displaced from other work.

Applied: central node of the cascade graph and the "Income / worker" metric card.

6. Moretti spillover (second-order)

For each month t:
tradeable_drop(t)  = revenue-weighted average of (1 − revenue_ratio_j(t − lag))
                     across all tradeable occupations j

moretti_drag(t)    = min(0.6, tradeable_drop(t) × moretti_multiplier)

When tradeable occupations (software developer, accountant, financial analyst, marketing manager…) lose income, the downstream effect on local-service occupations (plumber, hairdresser, dentist, restaurant…) is captured here. The tradeable income drop at month t − lag is multiplied by a regional employment multiplier and applied as an additional drag on local-service revenue. multiplier ≈ 1.5–1.6 and lag ≈ 9 months per Moretti (2010, 2012). Capped at 60% so a single channel can't drive revenue to zero.

Applied: only to occupations tagged local-service. For the national aggregate, scaled by the local-service share of total revenue so we don't double-count tradeable income.

7. Labour inflow (second-order)

For each occupation i, at month t:
openness_i     = (1 − automation_prob_i) × (1 − entry_barrier_i)
inflow_i(t)    = labour_inflow_rate × adoption(t − lag) × openness_i
entrants_i(t)  = employment_count_i × inflow_i(t)

People displaced by AI elsewhere look for work in occupations AI can't easily do. They bring no new customers, so the same revenue is split across more workers and income per worker falls further. This is the supply-side mirror of the demand-side cascade: the customers shrink, and the competition for them grows. entry_barrier (0 = open, 1 = closed) scores how hard it is for a displaced mid-career worker to get in within about two years: training length, licensing, capital, hiring caps. A personal trainer sits at 0.1, a plumber at 0.6, a dentist at 0.95. The (1 − automation_prob) term means displaced workers don't move into jobs that are themselves being automated.

labour_inflow_rate = 0.4 and lag = 12 months in every country. The rate is a judgement call built from three rough numbers: about 60% of displaced workers move into another occupation (the rest go to unemployment, early retirement or out of the labour force), about 25% of employment is displaceable economy-wide (Goldman Sachs 2023 puts automatable labour hours at 18-27%; IMF 2024 is in the same range), and average openness across the economy is about 0.35. 0.6 × 0.25 ÷ 0.35 ≈ 0.43, rounded to 0.4.

Inflow follows the scenario's adoption curve rather than summing displacement across the occupations in the tool. Those occupations are a small, uneven sample of each country's workforce (the US set covers about 27M of roughly 160M workers), so moving their own displaced headcount between them would be an artefact of which jobs we happen to list: millions of displaced bookkeepers and truck drivers poured into a few hundred thousand plumbers. We also don't model wages bidding down on top of the dilution. Both are simplifications we chose on purpose.

Applied: to every occupation, tradeable and local-service. Entrants are added to the "Workers" card and to the denominator of income per worker. Revenue is unchanged.

8. National aggregate (synthetic occupation)

Built at runtime from all occupations in the country:
aggregate_revenue       = Σ wage_mean × employment_count   (across all occupations)
aggregate_employment    = Σ employment_count
aggregate_automation    = revenue-weighted Σ (automation_prob)
aggregate_demand_boost  = revenue-weighted Σ (ai_demand_boost)
aggregate_inflow_openness = employment-weighted Σ (openness_i)

customer_industries are bucketed by category (Tech Sector, Financial
Services, Government / Public, Households, Office & Business Demand,
etc.), with each bucket's exposure being the revenue-weighted average
of its underlying customer industries.

Applied: the synthetic occupation runs through the same simulation engine as any real occupation. The cascade graph for the aggregate shows sector-level pipes rather than industry- level pipes - but the math is identical.

What's deliberately not in the math

  • Geographic dispersion. A single national mean per occupation. San Francisco software developers vs. Phoenix is not in the model.
  • Direct occupation-to-occupation cascades. The second-order channels are the Moretti spillover and labour inflow, both of which work in aggregate. We don't yet resolve, e.g., "drop in software developer income → drop in real-estate agent revenue" through the customer industry of real-estate agents.
  • Income-decile distribution. A single mean wage; no spread within an occupation.
  • Policy interventions. No retraining subsidies, sectoral tariffs, or transfer-payment scenarios.
  • Capital reallocation. When AI displaces labour, the capital share of income rises - but this isn't fed back into the simulation.
← MethodologyCoefficient notes