RecessionAlert RFD — exploratory public-proxy campaign¶
The checked-in RecessionAlert page documents a fifteen-model diffusion, a 0–15 range, and an RFD > 5 warning, but does not include the observation series, component formulas, publication clock, or portfolio rule. This notebook reruns only the explicitly inferred public FRED proxy campaign from the local read-only cache. It does not request the live site or modify a canonical database.
from pathlib import Path
import json
import runpy
root = Path.cwd()
while root != root.parent and not (root / 'data' / 'market.sqlite').exists():
root = root.parent
builder = runpy.run_path(str(root / 'research/experiments/1346-publication.py'))
campaign = builder['write_publication_inputs']()
print('campaign:', campaign['campaign_id'], campaign['status'])
print('source SHA256:', campaign['source']['sha256'])
print('native span:', campaign['source']['native_span'])
print('proxy inputs:', campaign['provenance']['proxy_sources'])
Source rule versus inferred rule¶
The source rule remains a documented reference only: count fifteen model states and warn above five. The executable campaign counts four transparent public recession states (industrial production growth, unemployment change, 10-year/3-month curve inversion, and housing-starts growth), scales that count to 0–15, and labels every result inferred. A one available-month lag plus one execution bar is the causal baseline; lag 0 is a research-only sensitivity.
state = json.loads((root / 'research/campaigns/recessionalert-rfd/state-space.json').read_text())
print('feature window:', state['window']['macro_feature_window'])
print('primary overlay:', state['window']['primary_overlay'])
for trial in state['variants']:
metrics = trial['metrics_spy_ief']
print(trial['id'], 'events=', trial['risk_off_events'], 'IEF=', round(metrics['total_return'], 4), 'SPY=', round(metrics['benchmark_total_return'], 4), 'lag=', trial['availability_lag_months'])
Interpretation¶
All tested public-proxy defensive overlays trail aligned SPY in this snapshot. That is an exploratory negative result, not a rejection of native RFD: the proprietary component series and point-in-time publication behavior are unavailable. No official indicator is registered and no market recommendation is made.