Crisis soberana, banca y energía: auditoría reproducible¶

Fecha de corte: 4 de octubre de 2026. Este cuaderno no predice una fecha de crisis ni asigna probabilidades subjetivas. Comprueba la cadena causal planteada con datos oficiales, frecuencias base descriptivas y escenarios condicionales.

Separación metodológica: datos observados, previsiones oficiales, historia descriptiva y escenarios. Las elecciones estadounidenses del 3 de noviembre son calendario político, no una variable causal del modelo.

from pathlib import Path
import json
import pandas as pd
import matplotlib.pyplot as plt

ROOT = Path.cwd()
summary = json.loads((ROOT / 'data' / 'processed' / 'summary.json').read_text())
stress = pd.read_csv(ROOT / 'data' / 'processed' / 'stress_stack_monthly.csv')
summary['cutoff'], stress.shape
('2026-10-04', (429, 11))

1. Fotografía oficial actual¶

obs = summary['observed']
facts = summary['document_facts']
current = pd.DataFrame([
    ['Deuda federal total de EE. UU.', obs['us_total_public_debt_trillion_usd'], 'billones USD', obs['us_debt_record_date']],
    ['Deuda de EE. UU. en manos del público', obs['us_debt_held_public_trillion_usd'], 'billones USD', obs['us_debt_record_date']],
    ['Treasury a 10 años', obs['fred_latest']['treasury_10y']['value'], '%', obs['fred_latest']['treasury_10y']['date']],
    ['WTI', obs['fred_latest']['wti']['value'], 'USD/barril', obs['fred_latest']['wti']['date']],
    ['Diferencial Francia-Alemania', obs['france_germany_spread_latest_bp'], 'pb', obs['france_germany_spread_latest_period']],
    ['Deuda pública francesa', facts['france_2026_q1']['debt_pct_gdp'], '% PIB', '2026-T1'],
    ['CET1 banca UE/EEE', facts['eba_2026_q2']['cet1_pct'], '%', '2026-T2'],
], columns=['Indicador','Valor','Unidad','Fecha'])
current
Indicador Valor Unidad Fecha
0 Deuda federal total de EE. UU. 40.261 billones USD 2026-10-01
1 Deuda de EE. UU. en manos del público 32.434 billones USD 2026-10-01
2 Treasury a 10 años 5.240 % 2026-10-01
3 WTI 96.160 USD/barril 2026-09-29
4 Diferencial Francia-Alemania 81.500 pb 2026-08
5 Deuda pública francesa 117.600 % PIB 2026-T1
6 CET1 banca UE/EEE 16.100 % 2026-T2

Lectura: existe vulnerabilidad fiscal y un shock energético observable, pero no una crisis bancaria confirmada. En septiembre, el apilamiento temprano de EE. UU. activa solo la señal de energía; NFCI, SLOOS y Sahm no confirman todavía una cadena sistémica.

pd.DataFrame([summary['observed']['current_us_stress_stack']]).T.rename(columns={0:'valor'})
valor
month 2026-09
oil_yoy_pct 52.15
nfci -0.548
sloos_net_tightening_pct 0.0
sahm 0.0
early_stress_count 1
energy_shock True
financial_conditions_tight False
bank_credit_tightening False
recession_active False
recession_within_next_12m None

2. Base histórica descriptiva¶

hist = summary['historical_event_study']
monthly = pd.DataFrame([
    [k, v['months'], v['recession_within_next_12m_pct']]
    for k,v in hist.items() if k.startswith('stress_count_gte_')
], columns=['Umbral','Meses','Recesión iniciada en 12m (%)'])
monthly
Umbral Meses Recesión iniciada en 12m (%)
0 stress_count_gte_0 417 15.11
1 stress_count_gte_1 131 33.59
2 stress_count_gte_2 30 73.33
3 stress_count_gte_3 10 100.00
episodes = pd.DataFrame([
    ['≥2 señales', hist['episodes_stress_count_gte_2']['episodes'], hist['episodes_stress_count_gte_2']['associated_with_recession']],
    ['3 señales', hist['episodes_stress_count_gte_3']['episodes'], hist['episodes_stress_count_gte_3']['associated_with_recession']],
], columns=['Umbral','Episodios independientes aprox.','Asociados a recesión'])
episodes
Umbral Episodios independientes aprox. Asociados a recesión
0 ≥2 señales 6 4
1 3 señales 2 2

Los meses se solapan y no son observaciones independientes. Al agruparlos en episodios, quedan solo seis episodios con al menos dos señales y dos con las tres. Es una muestra demasiado pequeña para estimar una probabilidad robusta. Sirve como detector de confirmación, no como reloj.

plot = monthly.copy()
plot['Señales'] = [0,1,2,3]
fig, ax = plt.subplots(figsize=(8,4.5))
bars = ax.bar(plot['Señales'], plot['Recesión iniciada en 12m (%)'], color=['#94a3b8','#38bdf8','#f59e0b','#dc2626'])
ax.set(xlabel='Número mínimo de señales tempranas simultáneas', ylabel='Meses seguidos de inicio de recesión (%)', xticks=[0,1,2,3], ylim=(0,110))
ax.set_title('Base histórica descriptiva de EE. UU., 1991–2026')
labels = [f"{rate:.1f}%\n(n={int(months)} meses)" for rate, months in zip(
    plot['Recesión iniciada en 12m (%)'], plot['Meses']
)]
ax.bar_label(bars, labels=labels, padding=3)
ax.text(
    0.5, -0.24,
    'Meses solapados; frecuencias descriptivas, no probabilidades causales.',
    transform=ax.transAxes, ha='center', va='top', fontsize=8, color='#475569'
)
ax.spines[['top','right']].set_visible(False)
fig.tight_layout()
chart = ROOT / 'reports' / 'stress_stack_base_rates.png'
fig.savefig(chart, dpi=180, bbox_inches='tight')
chart
PosixPath('/home/linuxboot/.openclaw/workspace/system-config/webgestor/finanzas-sin-miedo/2026-10-04/global-sovereign-crisis/reports/stress_stack_base_rates.png')
No description has been provided for this image

3. Escenarios condicionales, no probabilidades¶

scenarios = pd.DataFrame([
    ['Contención', 'Petróleo e inflación ceden; spreads y crédito estables', 'Volatilidad sin crisis sistémica', 'NFCI<0, SLOOS bajo, empleo estable'],
    ['Tensión soberana europea', 'Francia no estabiliza déficit y sube la prima', 'Coste de capital y crédito europeos al alza', 'Spread FR-DE persistente; banca y préstamos empeoran'],
    ['Estanflación energética', 'Energía alta persiste y limita recortes', 'Menor crecimiento con inflación y tipos altos', 'Petróleo/gas, expectativas, inflación subyacente'],
    ['Crisis global', 'Coinciden soberano, banca/fondos, energía y crédito', 'Ventas forzadas, recesión y contagio internacional', 'NFCI>0, SLOOS>20, Sahm≥0.5 y deterioro bancario'],
], columns=['Escenario','Condición necesaria','Mecanismo','Indicadores de confirmación'])
scenarios
Escenario Condición necesaria Mecanismo Indicadores de confirmación
0 Contención Petróleo e inflación ceden; spreads y crédito ... Volatilidad sin crisis sistémica NFCI<0, SLOOS bajo, empleo estable
1 Tensión soberana europea Francia no estabiliza déficit y sube la prima Coste de capital y crédito europeos al alza Spread FR-DE persistente; banca y préstamos em...
2 Estanflación energética Energía alta persiste y limita recortes Menor crecimiento con inflación y tipos altos Petróleo/gas, expectativas, inflación subyacente
3 Crisis global Coinciden soberano, banca/fondos, energía y cr... Ventas forzadas, recesión y contagio internaci... NFCI>0, SLOOS>20, Sahm≥0.5 y deterioro bancario

4. Conclusión¶

La hipótesis de una crisis global es económicamente posible, pero no está confirmada. Hoy coexisten deuda soberana elevada, tipos largos altos, un shock energético y una prima francesa inusualmente alta. Faltan, sin embargo, dos eslabones decisivos: endurecimiento bancario agregado y estrés financiero general. La fecha electoral no los sustituye.

La estrategia patrimonial debe ser robusta a varios escenarios —liquidez, poca deuda forzada y diversificación— y no una apuesta apalancada a una fecha.

Límites¶

  • Los umbrales son transparentes, pero no convierten correlación en causalidad.
  • Los meses se solapan; el recuento por episodios reduce, pero no elimina, dependencia.
  • La historia contiene pocos episodios de crisis sistémica comparables.
  • Los escenarios no incorporan una probabilidad subjetiva ni recomiendan operaciones concretas.