{
  "study_id": "gridflex-germany-flexibility-2026-11-03",
  "title": "Germany's hourly load and residual-load flexibility: a one-year SMARD counterfactual",
  "period": {
    "start_local": "2025-11-02T21:00:00 Europe/Berlin",
    "end_exclusive_local": "2026-11-02T21:00:00 Europe/Berlin",
    "expected_hours": 8760,
    "complete_hours_used": 8736,
    "complete_local_days_used": 364,
    "excluded_local_days": [
      "2025-11-02",
      "2026-11-02"
    ]
  },
  "sources": {
    "publisher": "Bundesnetzagentur / SMARD",
    "portal": "https://www.smard.de/",
    "data_download_guidance": "https://www.smard.de/en/all-about-our-data-download-section-210130",
    "hourly_chart_api": "https://www.smard.de/app/chart_data/{filter}/DE/index_hour.json and weekly JSON blocks",
    "license": "Creative Commons Attribution 4.0 International (CC BY 4.0), per SMARD data-use notice",
    "filters": {
      "load": 410,
      "residual_load": 4359,
      "wind_onshore": 4067,
      "wind_offshore": 1225,
      "solar": 4068
    },
    "resolution": "hourly",
    "region": "Germany (DE)",
    "timezone_for_daily_grouping": "Europe/Berlin",
    "attribution": "Bundesnetzagentur | SMARD.de. Hourly electricity-market data for Germany; hourly series joined and used in a counterfactual analysis. License: CC BY 4.0."
  },
  "data_quality": {
    "coverage_fraction": 0.9972602739726028,
    "expected_hourly_rows": 8760,
    "valid_complete_day_hours": 8736,
    "unique_timestamps": 8760,
    "residual_identity_crosscheck": {
      "eligible_hours": 8736,
      "mean_absolute_difference_MW": 0.004044184983107253,
      "p95_absolute_difference_MW": 0.010000000002492015,
      "max_absolute_difference_MW": 0.02000000000498403,
      "interpretation": "Independent arithmetic cross-check against SMARD's published residual-load series; small differences may arise from rounding/aggregation."
    },
    "missing_values_by_series": {
      "load": 0,
      "residual_load": 0,
      "wind_onshore": 0,
      "wind_offshore": 0,
      "solar": 0
    }
  },
  "observed_baseline": {
    "network_load": {
      "hours": 8736,
      "mean_MW": 53652.986006181316,
      "peak_MW": 78241.2,
      "p95_MW": 70235.8275,
      "stddev_MW": 9117.272343052528,
      "minimum_MW": 32598.39,
      "negative_residual_hours": 0
    },
    "published_residual_load": {
      "hours": 8736,
      "mean_MW": 27811.706521291206,
      "peak_MW": 68275.75,
      "p95_MW": 52020.002499999995,
      "stddev_MW": 16247.506052310544,
      "minimum_MW": -15561.59,
      "negative_residual_hours": 620
    },
    "description": "Residual load is SMARD net load minus wind onshore, wind offshore and photovoltaic feed-in; it is a system-level proxy for the remaining demand not met by those variable renewables."
  },
  "counterfactual_method": {
    "type": "deterministic pairwise, same-local-day demand-shifting sensitivity; shorter direct time gaps processed first",
    "assumed_flexibility_scenarios": [
      0.025,
      0.05,
      0.1
    ],
    "max_shift_windows_hours": [
      2,
      4,
      6
    ],
    "interpretation": "At each hour, the combined absolute energy shifted out plus shifted in is capped at the stated fraction of observed load. Within each local day, hourly pairs are processed by increasing direct time gap (then current residual-load spread); each pair is shifted at most once, with transfers bounded by the requested window and the shared per-hour flexibility budget. This is a transparent heuristic, not a globally optimal dispatch.",
    "not_modelled": [
      "actual flexible-device inventory or participation",
      "user comfort/process constraints",
      "market prices and dispatch payments",
      "network congestion, voltage, frequency and reserves",
      "cross-border flows or unit commitment response",
      "storage, generation dispatch, ramp rates and forecast error",
      "emissions or fuel costs",
      "industrial/household rebound beyond the same-day constraint"
    ],
    "not_a_claim": "The results are mathematical counterfactual sensitivity bounds under assumed flexibility, not measured demand-response availability, realized savings, avoided emissions, an operational dispatch recommendation, or proof that all shifted load is technically/economically feasible."
  },
  "scenarios": [
    {
      "flexible_load_cap_fraction": 0.025,
      "max_shift_window_hours": 2,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 67526.171875,
        "p95_MW": 51781.134125,
        "stddev_MW": 16142.412794255833,
        "minimum_MW": -15002.89546875,
        "negative_residual_hours": 603
      },
      "peak_change_percent": -1.097868752814872,
      "p95_change_percent": -0.45918562768234816,
      "one_way_shifted_energy_MWh": 4728894.1549863275,
      "max_observed_direct_shift_hours": 2.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 1.0089114966543917,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.025,
      "max_shift_window_hours": 4,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 67277.826375,
        "p95_MW": 51645.706999999995,
        "stddev_MW": 16115.450427327423,
        "minimum_MW": -15002.89546875,
        "negative_residual_hours": 602
      },
      "peak_change_percent": -1.46160770844699,
      "p95_change_percent": -0.7195222645366082,
      "one_way_shifted_energy_MWh": 5172718.798359379,
      "max_observed_direct_shift_hours": 4.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 1.103601665332718,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.025,
      "max_shift_window_hours": 6,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 66866.2860625,
        "p95_MW": 51497.37425,
        "stddev_MW": 16077.394487599067,
        "minimum_MW": -15002.89546875,
        "negative_residual_hours": 598
      },
      "peak_change_percent": -2.064369761591776,
      "p95_change_percent": -1.0046678679033019,
      "one_way_shifted_energy_MWh": 5415579.393431522,
      "max_observed_direct_shift_hours": 6.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 1.155416072342494,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.05,
      "max_shift_window_hours": 2,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 66398.04800000001,
        "p95_MW": 51615.49300000001,
        "stddev_MW": 16059.029468437222,
        "minimum_MW": -14971.165125,
        "negative_residual_hours": 595
      },
      "peak_change_percent": -2.750174110134257,
      "p95_change_percent": -0.7776037688579227,
      "one_way_shifted_energy_MWh": 9084154.36741407,
      "max_observed_direct_shift_hours": 2.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 1.9381080392766281,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.05,
      "max_shift_window_hours": 4,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 66398.04800000001,
        "p95_MW": 51352.6886875,
        "stddev_MW": 15989.903391373362,
        "minimum_MW": -14971.165125,
        "negative_residual_hours": 590
      },
      "peak_change_percent": -2.750174110134257,
      "p95_change_percent": -1.2828023460783127,
      "one_way_shifted_energy_MWh": 10092830.566581063,
      "max_observed_direct_shift_hours": 4.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 2.1533095177593236,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.05,
      "max_shift_window_hours": 6,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 66398.04800000001,
        "p95_MW": 51266.65475,
        "stddev_MW": 15898.65093811622,
        "minimum_MW": -14971.165125,
        "negative_residual_hours": 575
      },
      "peak_change_percent": -2.750174110134257,
      "p95_change_percent": -1.4481886078340607,
      "one_way_shifted_energy_MWh": 10675125.770940676,
      "max_observed_direct_shift_hours": 6.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 2.2775424370996022,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.1,
      "max_shift_window_hours": 2,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 65586.200078125,
        "p95_MW": 51301.856499999994,
        "stddev_MW": 15860.054370964754,
        "minimum_MW": -14349.055625,
        "negative_residual_hours": 588
      },
      "peak_change_percent": -3.9392462504989028,
      "p95_change_percent": -1.3805189647962832,
      "one_way_shifted_energy_MWh": 17146218.653828114,
      "max_observed_direct_shift_hours": 2.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 3.6581527429106075,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.1,
      "max_shift_window_hours": 4,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 64720.058000000005,
        "p95_MW": 51014.017407958985,
        "stddev_MW": 15708.09919129545,
        "minimum_MW": -13840.109625000001,
        "negative_residual_hours": 569
      },
      "peak_change_percent": -5.207840265394369,
      "p95_change_percent": -1.933842836783812,
      "one_way_shifted_energy_MWh": 19200338.57375904,
      "max_observed_direct_shift_hours": 4.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 4.0964000656044055,
      "daily_energy_conserved": true
    },
    {
      "flexible_load_cap_fraction": 0.1,
      "max_shift_window_hours": 6,
      "baseline": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 68275.75,
        "p95_MW": 52020.002499999995,
        "stddev_MW": 16247.506052310544,
        "minimum_MW": -15561.59,
        "negative_residual_hours": 620
      },
      "counterfactual": {
        "hours": 8736,
        "mean_MW": 27811.706521291206,
        "peak_MW": 64720.058000000005,
        "p95_MW": 50901.75175,
        "stddev_MW": 15536.413914703611,
        "minimum_MW": -13840.109625000001,
        "negative_residual_hours": 537
      },
      "peak_change_percent": -5.207840265394369,
      "p95_change_percent": -2.1496553176828317,
      "one_way_shifted_energy_MWh": 20571453.027211092,
      "max_observed_direct_shift_hours": 6.0,
      "max_daily_energy_balance_error_MWh": 2.3283064365386963e-10,
      "share_of_observed_annual_load_percent": 4.388927893459917,
      "daily_energy_conserved": true
    }
  ],
  "reproducibility": {
    "python": "standard library only",
    "script": "run_study.py",
    "tests": "test_run_study.py",
    "raw_data_file": "smard_hourly_2025-11-02_to_2026-11-02.csv",
    "raw_data_sha256": "cb778d089fbb43a92ea04f11f7b903a88c98c6c331495cd99dabcf2d9ab00951",
    "results_sha256_file": "results.json.sha256"
  },
  "created_date": "2026-11-03"
}
