Piketty's Rate of Return and Crisis Detection ============================================== Why does the simulation use 5% as the crisis threshold? This document explains how Piketty's rate of return framework, validated against the World Inequality Database, produces an empirically grounded crisis detection parameter. .. contents:: On this page :local: :depth: 2 The Theoretical Framework ------------------------- Thomas Piketty's central inequality is :math:`r > g`: when the rate of return on capital (*r*) exceeds the economic growth rate (*g*), wealth concentrates. When *r* falls toward *g*, the accumulation engine stalls and crisis dynamics emerge. Piketty quantifies the long-run parameters from centuries of data: - **Historical r**: 4--5% per annum since antiquity (supported by land price-to-rent ratios of 20--25x in ancient Rome and pre-industrial Britain) - **Long-run g**: ~1.5% per annum for developed countries at the technological frontier - **Historical r - g gap**: 3.5--4.5% annually, representing the baseline wealth concentration dynamic The twentieth century was the exception: world wars, inflation, and capital regulation temporarily drove the gap negative. Piketty argues the historical pattern is reasserting itself, with a projected future gap of ~3% as *r* returns to its 4.5% long-run value. The critical insight for crisis modeling: crisis does not require *r* to reach zero. It emerges at the boundary where *r* approaches *g*, preventing capital accumulation from driving secular inequality growth. The system destabilizes not from absolute deprivation but from the stalling of the accumulation engine that sustains class hierarchy. Computing r from WID Data ------------------------- Piketty's rate of return can be computed from two observable quantities in the `World Inequality Database `_ (WID): .. math:: r = \frac{\alpha}{\beta} Where: - :math:`\alpha` = capital share of national income (WID variable ``wcsnnii999``) - :math:`\beta` = national wealth-to-income ratio (WID variable ``wnweali999``) This decomposition is exact under national accounting identities: if capital earns share :math:`\alpha` of national income and the total capital stock is :math:`\beta` times national income, then the average return on each unit of capital is :math:`\alpha / \beta`. Capital Share: The Numerator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ US capital share of net national income (``wcsnnii999``), 1970--2024: .. list-table:: :header-rows: 1 :widths: 15 15 50 * - Period - Range - Pattern * - 1970--1985 - 22--25% - Postwar baseline; labor's share at historical peak * - 1985--2000 - 24--27% - Neoliberal shift; rising capital concentration * - 2000--2007 - 26--28% - Pre-crisis peak; capital share surging * - 2008 - 26.4% - Crisis compression: 90 bps below 2007 (27.3%) * - 2009--2015 - 27--29% - Post-crisis surge exceeding pre-crisis levels * - 2020--2024 - 28--30% - Record highs; 29.6% peak (2021--2022) The crisis signature is visible but modest: capital share dipped from 27.3% to 26.4% during the 2008 financial crisis, then recovered within two years and surged past pre-crisis levels. Capital share alone is too stable to serve as a crisis indicator. Wealth-to-Income Ratio: The Denominator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ US national wealth-to-income ratio (``wnweali999``), 1970--2024: .. list-table:: :header-rows: 1 :widths: 15 15 50 * - Period - Range - Pattern * - 1970--1985 - 3.4--3.9x - Low baseline; capital stock modest relative to income * - 1985--2000 - 3.9--4.7x - Asset price inflation begins; financialization * - 2000--2007 - 4.7--5.3x - Housing bubble inflates wealth-to-income ratio * - 2008--2009 - 4.8--4.3x - Crisis crash: 12.6% decline peak-to-trough * - 2010--2019 - 4.1--5.6x - Gradual recovery then acceleration * - 2020--2024 - 5.8--6.2x - Pandemic-era asset price inflation; record highs The wealth-to-income ratio is far more volatile than capital share during crises. The 2008 crash destroyed 12.6% of the ratio in two years (5.34 to 4.31), while capital share fell only 3.3% (27.3% to 26.4%). This asymmetry produces a counterintuitive result in the computed profit rate. The Computed Profit Rate ^^^^^^^^^^^^^^^^^^^^^^^^ Dividing capital share by wealth-to-income ratio yields the Piketty profit rate for the US, 1970--2024: .. list-table:: :header-rows: 1 :widths: 10 10 10 50 * - Year - :math:`\alpha` - :math:`\beta` - :math:`r = \alpha / \beta` * - 1970 - 23.3% - 3.43 - **6.79%** * - 1975 - 23.6% - 3.44 - **6.86%** * - 1980 - 23.1% - 4.28 - **5.40%** * - 1982 - 23.9% - 3.87 - **6.18%** * - 1990 - 25.7% - 4.03 - **6.38%** * - 2001 - 24.5% - 4.81 - **5.09%** * - 2007 - 27.3% - 5.34 - **5.11%** * - 2008 - 26.4% - 4.77 - **5.53%** * - 2009 - 27.1% - 4.31 - **6.28%** * - 2012 - 29.8% - 4.09 - **7.31%** (historical max) * - 2019 - 28.5% - 5.62 - **5.07%** * - 2020 - 28.7% - 6.16 - **4.66%** (historical min) * - 2024 - 27.8% - 5.85 - **4.75%** **Summary statistics** (1970--2024): - Mean: 6.07% - Std: 0.70% - Min: 4.66% (2020, pandemic) - Max: 7.31% (2012) - P10: 5.09% - P25: 5.45% - Median: 6.15% A Counterintuitive Finding ^^^^^^^^^^^^^^^^^^^^^^^^^^ During the 2008 financial crisis, the computed *r* actually **rose** from 5.11% (2007) to 5.53% (2008) to 6.28% (2009). This is not a data error. The wealth-to-income ratio (the denominator) crashed faster than capital share (the numerator): asset valuations collapsed while the flow of profits compressed more slowly. The same unit of remaining capital earned a higher *return* precisely because so much capital stock had been destroyed. This reveals what the Piketty profit rate actually measures: not the health of the economy, but the *scarcity premium on surviving capital*. Crisis destroys wealth faster than it destroys income flows, temporarily inflating returns on whatever capital remains. The crisis signal in *r* therefore appears **before** the crash (2007: 5.11%) rather than during it. The pre-crisis compression reflects the bubble dynamics: inflated asset valuations (high :math:`\beta`) suppress returns (low *r*) even as profits (:math:`\alpha`) appear robust. When *r* falls below 5%, the economy has entered a zone where capital is overvalued relative to its income-generating capacity---the precondition for a correction. Crisis Threshold Derivation --------------------------- The 5% Boundary ^^^^^^^^^^^^^^^^ Every significant US recession since 2000 occurred when the Piketty profit rate *r* fell to or below 5.1%: .. list-table:: :header-rows: 1 :widths: 20 15 45 * - Crisis - Piketty *r* - Context * - Dot-com (2001) - 5.09% - Overvalued tech assets; :math:`\beta` surged * - Financial crisis (2007) - 5.11% - Housing bubble; :math:`\beta` at 5.34x * - Pre-pandemic (2019) - 5.07% - Extended asset inflation; :math:`\beta` at 5.62x * - Pandemic (2020) - 4.66% - Extreme shock; :math:`\beta` spiked to 6.16x The P10 of the full 1970--2024 distribution sits at 5.09%, confirming that *r* below 5% represents the bottom decile of historical experience. Earlier crises (1973--75, 1980--82, 1990--91) show higher *r* values (5.4--6.8%) because wealth-to-income ratios were structurally lower in that era. The 5% threshold is a modern-era phenomenon that reflects the secular rise in :math:`\beta` documented by Piketty---as wealth-to-income ratios have doubled since the 1970s, the crisis boundary for *r* has compressed downward. Sensitivity Tiers ^^^^^^^^^^^^^^^^^ The empirical data supports a three-tier threshold structure: .. list-table:: :header-rows: 1 :widths: 15 15 50 * - Threshold - Label - Empirical basis * - 6% - Conservative - Below long-run mean (6.07%); marks transition from expansion to compression * - **5%** - **Moderate** - **P10 boundary; all post-2000 recessions at or below this level (recommended default)** * - 4% - Severe - Below all historical observations except 2020 pandemic (4.66%); approaching Piketty's theoretical floor The simulation uses 5% as the default ``r_threshold`` in :ref:`Feature 018 `, with the understanding that this parameter is configurable for scenario exploration. Relationship to Marxist Profit Rate ------------------------------------ The Piketty profit rate (:math:`r = \alpha / \beta`) and the Marxist rate of profit (:math:`r' = s / (c + v)`) measure related but distinct quantities: .. list-table:: :header-rows: 1 :widths: 20 40 40 * - Dimension - Piketty *r* - Marxist *r'* * - Numerator - Capital share of national income - Surplus value (*s*) * - Denominator - Total capital stock (wealth-to-income ratio) - Constant + variable capital (*c* + *v*) * - Scope - All capital income (rent, profit, interest) - Industrial profit only * - Historical range - 4.66--7.31% (US 1970--2024) - 12--22.7% (US 1947--2003) * - Crisis floor - ~5% (modern era) - ~13% (postwar era) The Marxist rate is systematically higher because its denominator (*c* + *v*, the capital advanced for production) is smaller than Piketty's denominator (total national wealth including land, housing, financial assets). The Piketty rate captures the return on *all* wealth, while the Marxist rate captures the return on *productive* capital only. For crisis detection, the simulation uses Piketty's formulation because: 1. It is computable from the simulation's existing economic state (capital share and wealth-to-income ratio are derived quantities) 2. It captures the financialization dynamics that characterize modern crises (asset bubbles inflate :math:`\beta`, suppressing *r*) 3. It aligns with the empirical WID dataset, providing a reference framework for threshold calibration (see :ref:`calibration-epistemology`) The Marxist profit rate remains central to the simulation's :doc:`imperial-rent` calculations and the :py:func:`~babylon.formulas.trpf.calculate_rate_of_profit` formula. The two rates are complementary: Piketty's *r* detects macro-level crisis onset, while the Marxist *r'* drives micro-level class dynamics. .. note:: The historical Marxist range (12--22%) cited above is from academic studies using BEA data with different decomposition methods. Babylon's :class:`~babylon.economics.tensor.ValueTensor4x3` produces lower rates (3--8%) because its BEA-calibrated ``sv_ratio`` values (0.10--0.15 at the department level) allocate less surplus value per unit of variable capital than classical Marxist estimates. This is not an error --- it reflects specific calibration choices documented in :ref:`calibration-epistemology`. Dimensional Analysis: Hours, Dollars, and the MELT Bridge --------------------------------------------------------- Babylon's fundamental tensor operates in **labor-hours** (socially necessary labor time), not nominal dollars. The MELT (:math:`\tau = \text{GDP} / L`, where *L* is total labor-hours) bridges between the labor-time domain and the money-price domain. Piketty's WID data is denominated in nominal dollars. Does this unit mismatch invalidate the threshold? Why Units Cancel in Ratios ^^^^^^^^^^^^^^^^^^^^^^^^^^ Profit rates are dimensionless ratios. The MELT cancels: .. math:: r' = \frac{s}{c + v} = \frac{\tau \cdot s}{\tau \cdot c + \tau \cdot v} = \frac{s_\$ }{c_\$ + v_\$ } Whether computed in labor-hours or dollars, the numerical value is identical. The 5% threshold derived from dollar-denominated WID data applies equally to an hours-denominated tensor --- **provided all components of the formula use the same unit system**. The :class:`~babylon.economics.tensor.ValueTensor4x3` computes ``profit_rate = total_s / (total_c + total_v)`` entirely in labor-hours, and its integration tests assert results fall within Piketty's 3--8% bounds (``PIKETTY_R_MIN = 0.03``, ``PIKETTY_R_MAX = 0.08``). However, this convergence requires careful interpretation --- see :ref:`calibration-epistemology` below. Two Profit Rates in the Codebase ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The simulation computes profit rate in two places using different formulas and different denominators: .. list-table:: :header-rows: 1 :widths: 15 25 20 20 * - Rate - Formula - Units - Location * - **Flow-based** - :math:`r' = s / (c + v)` - All labor-hours - :class:`~babylon.economics.tensor.ValueTensor4x3` (``tensor.py:349``) * - **Stock-based** - :math:`r = s / (K + v)` - Mixed (see below) - :class:`~babylon.economics.tick.derived_rates.DerivedRateCalculator` (``derived_rates.py:71``) The **flow-based** rate uses constant capital *consumed in one period* (:math:`c`). It is dimensionally consistent: :math:`c`, :math:`v`, and :math:`s` all come from ValueTensor4x3 in labor-hours. The **stock-based** rate uses *accumulated* capital stock (:math:`K`) from the perpetual inventory method: :math:`K[t+1] = K[t] \times (1 - \delta) + c[t]`, where :math:`\delta = 0.07`. At steady state, :math:`K \approx c / \delta \approx 14.3 \times c`, making the stock-based denominator much larger and the rate much lower than the flow-based rate. The stock-based rate is what Feature 018's crisis detector consumes (FR-001, A-001). This is theoretically correct: *K* represents the full capital stock against which returns are measured, matching Piketty's :math:`\beta` in spirit (total wealth, not just one period's investment). .. _dimensional-mismatch: Dimensional Mismatch in the Tick Pipeline ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ .. warning:: The ``DerivedRateCalculator`` currently mixes unit systems in its stock-based profit rate computation. This must be reconciled before Feature 018 can use the rate for crisis detection. The data flow in ``DerivedRateCalculator.compute_county_rates()`` (``derived_rates.py:42--94``): .. code-block:: text v = v_reproduction × annual_hours # ($/hour) × hours = DOLLARS total_value = tau × annual_hours # ($/hour) × hours = DOLLARS s = total_value - v # dollars - dollars = DOLLARS K = county.capital_stock # From CapitalStockCalculator # = total_c / δ = LABOR-HOURS profit_rate = s / (K + v) # DOLLARS / (LABOR-HOURS + DOLLARS) # ← dimensional inconsistency The ``capital_stock`` field in ``CountyEconomicState`` is seeded from :meth:`~babylon.economics.capital_stock.CapitalStockCalculator.get_K`, which computes *K* via the perpetual inventory method on ``total_c`` from ValueTensor4x3 --- all in **labor-hours**. But ``s`` and ``v`` are computed as ``tau × hours`` and ``v_reproduction × hours`` --- both in **dollars**. Adding labor-hours to dollars in the denominator produces a dimensionally incoherent quantity. Why It Has Not Been Caught """""""""""""""""""""""""" The Piketty guardrail tests (``PIKETTY_R_MIN = 0.03``, ``PIKETTY_R_MAX = 0.08``) validate ``ValueTensor4x3.profit_rate`` --- the **flow-based** rate, which is dimensionally consistent. The **stock-based** rate in ``DerivedRateCalculator`` has not been validated end-to-end against empirical bounds because the tick dynamics pipeline (Feature 017) was recently implemented and the full pipeline has not yet run with real hydrated data feeding both the tensor and the capital stock calculator simultaneously. Resolution Options """""""""""""""""" Three approaches to reconcile the units: 1. **Convert K to dollars before use**: Multiply ``capital_stock`` by :math:`\tau` when computing the stock-based rate. This keeps the ``DerivedRateCalculator`` in the dollar domain: :math:`r = s_\$ / (\tau \cdot K_h + v_\$ )`. 2. **Compute s and v in labor-hours**: Divide ``s`` and ``v`` by :math:`\tau` (or equivalently, source them from the tensor directly rather than recomputing from ``tau × hours``). This keeps everything in the hours domain: :math:`r = s_h / (K_h + v_h)`. 3. **Use the flow-based rate for crisis detection**: Bypass the stock-based rate entirely. The flow-based rate from ValueTensor4x3 is already dimensionally consistent and validates against Piketty bounds. The tradeoff: flow-based uses :math:`c` (one period's capital consumption) rather than :math:`K` (accumulated stock), which is less theoretically aligned with Piketty's :math:`\beta` but numerically validated. Option 2 is the cleanest because it preserves the labor-time foundation of the tensor system (the simulation's single source of truth) while using the theoretically correct stock-based denominator. Option 1 introduces a dollar-denominated pathway that diverges from the tensor's hours-first architecture. Option 3 sacrifices theoretical precision for expedience. .. note:: Regardless of which option is chosen, the **numerical value** of the profit rate will be the same (MELT cancels in ratios). The issue is not that the current code produces wrong numbers at runtime --- it is that the formula as written is dimensionally malformed, which means the code is *accidentally correct* only if :math:`\tau \approx 1.0`. At the actual US MELT of ~$62/hour, the current formula would produce a meaningless value. Implications for r_threshold ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Once the dimensional mismatch is resolved, the r_threshold of 5% applies to the stock-based rate. The key question is whether the stock-based rate lands in the same numerical range as the Piketty rate: - **Flow-based** :math:`s/(c+v)`: Validated at 3--8% from real data (Piketty guardrails pass). - **Stock-based** :math:`s/(K+v)` where :math:`K \approx 14.3 \times c`: The denominator is ~14x larger for the *K* component, so the rate will be substantially lower than the flow-based rate. If the flow-based rate is ~5% and :math:`K \approx 14.3c`, then with typical OCC values (:math:`c \approx 2v`): .. math:: r_{\text{stock}} = \frac{s}{K + v} = \frac{s}{14.3c + v} \approx \frac{0.05 \times (c + v)}{14.3c + v} = \frac{0.05 \times 3v}{28.6v + v} \approx 0.5\% This suggests the stock-based rate may be an order of magnitude lower than the flow-based rate, placing it well below the 5% Piketty threshold permanently. The r_threshold would need to be recalibrated for the stock-based formula, or the crisis detector should consume the flow-based rate instead. This calibration question is deferred to Feature 018 implementation planning, where empirical validation against hydrated county data will determine the correct rate formula and threshold pairing. .. _calibration-epistemology: Calibration Epistemology ------------------------ The simulation's profit rates fall within Piketty's 3--8% empirical bounds. This section explains *why* they do so, distinguishing between independent empirical convergence and calibrated conformance. Calibration History ^^^^^^^^^^^^^^^^^^^ The calibration of Babylon's economic tensor has gone through two phases: **v1.0.0 (placeholder ratios)**: Initial ``sv_ratio`` values (surplus-to-variable capital ratio) were set to ~0.50 across all departments, producing profit rates above 50%. These were acknowledged as unrealistic placeholders. **v1.1.0 (BEA/CEX calibration)**: The ``sv_ratio`` and ``cv_ratio`` parameters were rederived from Bureau of Economic Analysis Use Tables (TII105-A for intermediate inputs, TVA113-A for value added) and Consumer Expenditure Survey data. This brought profit rates into the 3--8% range. The production configuration (``naics_to_dept.yaml``) explicitly states its calibration target:: # Target: Profit rate r = s/(c+v) within Piketty's 3-8% empirical bounds This transparency is intentional: the department-level default ratios **were** calibrated to produce Piketty-range rates. What Is and Is Not Independent ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Independent (bottom-up) elements**: - Sector-level ratios are derived from BEA data without regard for the Piketty target. Individual sectors freely violate the bounds: Mining produces ~11% profit rates, Real Estate ~38%, Healthcare ~3.8%. These reflect the actual structure of each industry's cost decomposition. - The NAICS-to-department mapping follows BEA industry classifications, not any outcome target. - Employment allocations come from QCEW (Quarterly Census of Employment and Wages) data, which is entirely external to the calibration. **Calibrated (top-down) elements**: - Department-level default ``sv_ratio`` values (Dept I: 0.12, Dept IIa: 0.10, Dept IIb: 0.15, Dept III: 0.10) were chosen to produce aggregate profit rates within the Piketty range when applied to a representative county's employment mix. - The Piketty guardrail tests (``PIKETTY_R_MIN = 0.03``, ``PIKETTY_R_MAX = 0.08``) enforce this conformance in CI, rejecting parameter sets that produce out-of-range rates. **The mixed strategy**: When a county's NAICS employment data maps to specific sectors with BEA-derived ratios, those ratios dominate (independent). When employment maps to sectors without specific overrides, the department defaults apply (calibrated). The aggregate rate for a typical county reflects a weighted blend of both. Epistemological Status ^^^^^^^^^^^^^^^^^^^^^^ The convergence between the simulation's profit rates and Piketty's empirical range is **neither coincidental nor fully independent**: - It is **not coincidental** because both the BEA data (used for calibration) and Piketty's WID data (used for the target) measure the same underlying economy through national accounts. Two lenses on the same reality should produce compatible results. - It is **not fully independent** because the department-level defaults were tuned to the target range. A researcher who calibrated ``sv_ratio`` to produce 15% profit rates could equally claim "Marxist validation" against classical estimates. - It is **defensible** because the sector-level ratios --- which are independently derived --- cluster around the same range when employment-weighted, suggesting the department defaults are not forcing an unnatural outcome but approximating what the BEA data produces at finer granularity. The honest characterization: Babylon's profit rates are **empirically grounded** (rooted in BEA national accounts data) and **Piketty-constrained** (department defaults calibrated to the target range), but they are not an **independent prediction** that can be cited as confirmation of theory. The Piketty bounds function as a reality check --- a guardrail ensuring the calibration stays within observed economic parameters --- not as a test of the underlying Marxist decomposition. Corroborating Sources --------------------- The 5% threshold is corroborated by independently published profit rate analyses. These sources use different methodologies and data periods, providing triangulation rather than independent validation of the simulation's calibration: **Fred Moseley** (1947--1977): Documented US profit rate decline from 22% to 12%, establishing the postwar compression trajectory. The 12% nadir (1977) in Marxist terms corresponds to a Piketty *r* of approximately 5.5--6.5% given 1970s wealth-to-income ratios of 3.4--3.9x. **Michael Roberts** (1946--2020): Calculated 27% secular decline in US profitability since 1946 using Marxist methodology. Roberts projects a 3% crisis floor for the non-financial corporate sector, which aligns with a Piketty *r* of approximately 4--5% under modern :math:`\beta` values. **BEA Corporate Profits** (1950--2024): Corporate profit-to-GDP ratio ranged from 8% (2000s crisis) to 22% (post-2015 peak), with 16--17% as the postwar baseline. The 8% crisis floor in GDP terms corresponds to compressed *r* values in the 4.5--5.5% Piketty range. **Macroeconomic calibration literature**: The standard calibration for real return on private market capital across DSGE models is 4%, derived from stock market returns (~7%) averaged with risk-free bonds (~0.8%). This aligns with Piketty's historical estimate and the simulation's crisis floor. Data Source ----------- All empirical values in this document are derived from the `World Inequality Database `_ (WID), using the US country dataset (``WID_data_US.csv``). **Variables used**: - ``wcsnnii999``: Capital share of net national income (percentage, all population, national total). The share of national income accruing to capital owners rather than labor. - ``wnweali999``: National wealth-to-income ratio (ratio, all population, national total). Total national wealth divided by national income, measuring how many years of income the capital stock represents. **Methodology**: WID data follows the Distributional National Accounts (DINA) methodology, combining national accounts, survey data, and tax records to produce consistent distributional series. All values use the ``999`` population qualifier (entire adult population) and ``i`` suffix (interpolated/estimated for complete time coverage). The WID dataset used for this analysis was exported in February 2026 and covers 1970--2024 for both variables. See Also -------- - :doc:`imperial-rent` -- How imperial rent connects to profit rate dynamics - :doc:`terminal-crisis` -- The endgame when crisis mechanics resolve - :doc:`theory` -- MLM-TW theoretical foundation - :doc:`/reference/formulas` -- Formula reference including TRPF - :class:`~babylon.economics.tensor.ValueTensor4x3` -- Flow-based profit rate (dimensionally consistent, Piketty-validated) - :class:`~babylon.economics.tick.derived_rates.DerivedRateCalculator` -- Stock-based profit rate (dimensional reconciliation pending) - :class:`~babylon.economics.capital_stock.CapitalStockCalculator` -- Capital stock K in labor-hours (perpetual inventory method)