Hypergraph edge-weight time series linking 87 JSE-listed securities to 34 Eskom transmission grid nodes (January 2015 to December 2025, T=2870 trading days, 340 hyperedges). Supports IST-02 CASCADEnt/VORTEX and IST-03 PHYSAN research series by Prof. N.D. Moroke, North-West University, South Africa.
This dataset supports the paper "Infrastructure-Induced Geometric Compression in an Emerging Financial Market" (Moroke, 2026, Emerging Markets Review, under review).
Contents:- eskom_stages_2015_2026.csv: Daily peak load-shedding stage (integer 0–6) for South Africa, 1 January 2015 to 30 April 2026. Sources: Eskom published schedules, CSIR energy reports, EskomSePush archive.- eskom_stages_trading_days.csv: Business-day version of the above, forward-filled for weekends and public holidays.- jse_panel.csv: Daily adjusted closing prices for 15 JSE Top40 securities, January 2015 to April 2026 (Yahoo Finance).- shredi_combined.csv: Final merged analysis dataset — 7 asset return series plus Eskom stage and regime classification, N=2,838 trading days.- shredi_7asset_pipeline.py: Complete reproducible Python pipeline producing all results in the paper.- shredi_all_results.json: All numerical results from pipeline.- build_eskom_zenodo.py: Script to rebuild the Eskom stage series from documented public record.
This dataset also supports the paper:
Moroke, N.D. (2026). TENSORnet: A Physics-Informed Entropy Protocol for Infrastructure-Induced Metabolic Arrest Detection in Cross-Asset Financial Networks. Computation (MDPI), under review.
The TENSORnet paper uses the JSE panel data (jse_panel.csv), Eskom load-shedding stages (eskom_stages_trading_days.csv), and the hypergraph edge-weight time series to construct the Topological Entropy Network Stress Operator and validate metabolic arrest detection across 87 JSE securities coupled to 34 Eskom transmission nodes over T=2,870 trading days (January 2015 – December 2025). Derived empirical series and replication code supporting the paper "METRIC: Trophic Cascade Governance of Resource-Constrained Layered Hypergraphs" (Moroke, 2026, Scientific Reports, under revision).
CONTENTS--------METRIC_daily_derived_series.csv — 4,018 daily observations (January 2015 – December 2025) of six derived variables computed from the JSE transaction hypergraph: Fiedler eigenvalue λ₂(t), realised volatility σ_t, Shannon entropy S(t), Von Neumann entropy S_VN(t), Trophic Collapse Index TCI(t), Betti-1 cycle count β₁(t), network density ρ(t), arrest coefficient α(t), and governance regime classification. These are the series underlying all main-text tables and figures.
01_download_jse_data.py — Python script to reconstruct the 87 JSE equity price series (2015–2025) from Yahoo Finance using yfinance. Raw prices cannot be redistributed by the authors under Yahoo Finance terms; this script allows any researcher to reconstruct the identical inputs.
02_basic_stats.py — Python script computing descriptive statistics, ADF/KPSS stationarity tests, ARCH-LM, Ljung-Box, Granger causality tests, per-ticker return statistics, correlation matrix, and four publication-quality figures (replicates paper Figure 2).
DATA SOURCES------------JSE equity prices: Yahoo Finance (via yfinance). Run 01_download_jse_data.py to reconstruct.Eskom load-shedding stages: beyarkay/eskom-calendar (
github.com) and NERSA (
nersa.org.za).SARB ZAR/USD exchange rate:
resbank.co.zasarb OTC derivative data: subject to regulatory confidentiality; aggregate statistics reported in Supplementary Table S1 of the paper.
NOTE ON MANUSCRIPT CODE------------------------The TGN-Hypergraph model code will be deposited here upon formal acceptance of the manuscript, consistent with journal policy. This repository contains the analysis pipeline and supporting datasets for the manuscript "HK-DeepIV: Heat-Kernel Causal Identification and Early-Warning Signals for Curvature-Induced Interference in Financial Correlation Networks," submitted to Frontiers in Big Data (Big Data Networks section).
Data: daily price panel for 66 Johannesburg Stock Exchange (JSE) tickers, 2015–2025 (2,832 trading days), paired with hourly Eskom load-shedding stage records, 2022–2025 (35,064 hours, no gaps).
Code: a four-stage Python pipeline — data cleaning, statistical diagnostics (stationarity, normality, autocorrelation, ARCH/GARCH), the full HK-DeepIV training procedure (heat-kernel diffusion, two-stage gradient-blocked causal estimation, Fiedler/Ricci curvature diagnostics), and baseline comparator training (Flat DeepIV, GCN+IV).
All causal identification results in the associated manuscript are reproducible from this repository given the included data and scripts, run in the order documented in README.md. ZENODO DEPOSIT DESCRIPTION — V4.0Paste this into the "Description" field on Zenodo when publishing V4.0.=========================================================================
This deposit contains the full empirical pipeline for the study:
"HK-DeepIV: Heat-Kernel Geometric Diagnostics and Early-Warning Signalsfor Curvature-Induced Interference in Financial Correlation Networks"(Frontiers in Big Data, Manuscript ID 1925931, under revision July 2026)
The dataset covers 2,832 trading days (2015-01-02 to 2025-12-30) for 60JSE-listed equities, with a treatment window of 1,017 trading days(2022-01-03 to 2025-12-29) during which 580 days (57.0%) recorded EskomStage 2+ load-shedding.
KEY EMPIRICAL RESULTS (confirmed from this pipeline):- Fiedler eigenvalue mean: 0.3827 (min: 0.1819 on 2025-10-23; p5: 0.2566)- Mean Ollivier-Ricci curvature: 0.5517 (SE: 0.0023; 95% CI: [0.5470, 0.5561])- HK-DeepIV trained ATE: +383 bp (reported as overfitting artifact)- DML conditional association: -20.75 bp (HAC 95% CI: [-51.62, 10.12] bp; p=0.188)- Best training epoch: 34/150 (val_loss: 0.03302)- Materials sector, high-curvature tercile: -60.79 bp (p=0.003; exploratory)
V4.0 ADDITIONS (revision deposit, July 2026):- feature_construction.py: EWMA node feature construction (Definition 2)- 01_hac_dml_ci_FINAL.py: HAC-corrected DML CI (Andrews 1991 plug-in bandwidth)- 02_ricci_bootstrap_FINAL.py: Bootstrap SE for Ricci curvature (1,000 reps)- 03_fiedler_ricci_leadtime_FINAL.py: Fiedler vs Ricci lead-time comparison- 04_gics_reclassification_FINAL.py: GICS reclassification + BH FDR correction- 05_tl_fitted_values_FINAL.py: Diffusion time t_l stability analysis- Updated README with full file descriptions and reproducibility notes
Data source: JSE equity prices obtained via IRESS terminals.Eskom load-shedding records:
eskom.co.za (public operational data).
=========================================================================ZENODO KEYWORDS (paste into keywords field):JSE; Johannesburg Stock Exchange; Eskom; load-shedding; heat kernel;Ollivier-Ricci curvature; Fiedler eigenvalue; financial networks;systemic risk; deep instrumental variables; causal inference;South Africa; geometric machine learning; early-warning signals========================================================================= This package contains the complete, deterministic pipeline reproducing
every headline result reported in the corrected manuscript. It is the
authoritative reproducibility artifact for this study -- not the
exploratory scripts used during the revision process.
## Files
- `tensornet_MASTER_pipeline_part1.py` -- Gate calibration, bootstrap
sensitivity, primary (Stage 3+) and narrow (Stage 4+) classification,
DeLong tests. Both classification thresholds (S*) are found via a
live wide-grid search (0.05-1.85 nats, step 0.005) on validation
data, not hardcoded, so this script is self-verifying and cannot
silently drift out of sync with the manuscript.
- `tensornet_MASTER_pipeline_part2.py` -- Ablation (entropy vs.
volatility), extended benchmark comparison (GARCH, logistic
regression, MLP, Billio et al. connectedness, isotonic gate). AUC
is computed on the raw, unclipped score throughout (see forensic
table, item under "Root-caused to [COMPUTATION]") to avoid a
threshold-dependent clipping artifact identified during revision.
- `tensornet_MASTER_pipeline_part3.py` -- Lead-time/false-alarm
analysis, Densification Paradox with permutation testing, external
financial outcome validation, regime-definition sensitivity
(Stage 2+/3+/4+), all using the same wide, consistent search grid.
- `tensornet_stage2plus_verification.py` -- A standalone confirmatory
check specifically for the Stage 2+ threshold, run as a final audit
step to confirm it was not affected by the same search-grid
truncation issue found and corrected for Stage 4+. Result: Stage 2+
is confirmed correct, sitting on a genuine, stable F1 plateau
(S*=1.47), with no clipping-related AUC distortion. Included for
full transparency of the audit trail, even though it found no
further issue.
- `TENSORnet_forensic_rootcause_table.md` -- An itemised account of
every numerical correction made between the originally submitted
manuscript and the present revision, with the identified mechanism
for each (data leakage, split design, threshold search-grid
truncation, or a specific computational bug).
- `TENSORnet_before_after_map.md` -- A full submitted-vs-corrected
results map, organised by manuscript section.
## Requirements
Python 3.11. Packages: numpy, pandas, scipy, scikit-learn, statsmodels,
arch, xgboost. Install missing packages with
`pip install --break-system-packages` if running in a
restricted environment. Random seed fixed at 42 throughout.
## Data
Requires `jse_7asset_returns_2015_2026.csv`
(Zenodo DOI: 10.5281/zenodo.20008530) in the working directory.
## Usage
Run the pipeline files in order (`part1`, `part2`, `part3`), then the
Stage 2+ verification script if desired. Each is self-contained and
reloads the data independently, so they may also be run individually.
Each writes its results to a JSON file for direct comparison against
the manuscript's reported figures.
## Reproducibility note
All classification thresholds are found via live search over a wide,
consistent grid rather than hardcoded values. This was a specific,
identified correction made during revision after an earlier, narrower
search grid was found to have excluded the true optimum for the
Stage 4+ definition (see the forensic root-cause table, item [GRID]).
Running this package should reproduce every classification and
statistical test result reported in the manuscript's Results section
to within floating-point precision.
## Audit history
This package reflects the final, fully-verified state of the analysis
following an extensive internal audit that identified and corrected:
data leakage in gate calibration (train-only vs. full-panel), a
missing validation split (train/validation/test rather than a simple
train/test split), threshold search-grid truncation (Stage 4+), and a
threshold-dependent AUC clipping artifact (isotonic gate and, at low
thresholds, the main TENSORnet score itself). Every correction is
documented with its specific mechanism in the forensic root-cause
table above. Both the Stage 2+ and Stage 3+ thresholds were
independently re-verified against the same wide-grid standard used to
find and fix the Stage 4+ issue, and both were confirmed correct.