← Back to selected work

Energy data engineering / forecast impact

Regional Energy Data Lake

A three-layer data lake for asking a narrow market question with messy, versioned inputs: when a weather or generation forecast is wrong, what relationship does the error have with the next observed electricity price?

Research question

Do forecast errors line up with market outcomes after the obvious time patterns are accounted for?

The project does not try to forecast prices with a black-box model. It first makes the data lineage explicit, then asks whether forecast error is associated with day-ahead price, price volatility, and negative-price probability. That distinction matters because the same realized market outcome is observed against multiple forecast vintages.

Current scope: 30 archived forecast runs, 3 bidding zones, 588 common valid hours per zone, and 21,600 Gold rows. The current sample is one month, so the results are useful for demonstrating the design and its limitations, not for claiming a stable market law.

End-to-end process

From raw source files to one panel I can rerun

  1. A

    1. Keep the source vintages

    Store downloaded files, checksums, manifests, and ingestion batches in Bronze so a result can be traced back to a source file.

  2. B

    2. Make timestamps explicit

    Parse UTC timestamps, keep source resolution, standardize column names and units, and preserve rejected or missing records for review.

  3. C

    3. Join realized and forecast weather

    For each forecast run, align the realized weather outcome with the forecast available at that run time rather than using a later revision.

  4. D

    4. Build the Gold impact panel

    Create one analysis-ready table with day-ahead price, renewable regime, weather errors, generation forecast errors, and residual load.

  5. E

    5. Estimate conditional relationships

    Fit zone, hour, and date fixed-effects models with standard errors two-way clustered by valid time and forecast run.

  6. F

    6. State what the design cannot identify

    Treat the estimates as conditional associations. The current sample is one month, the weather coverage is sparse, and market outcomes repeat across vintages.

Visual evidence

The zone split is part of the result

Mean price and negative-price rate by renewable regime across three bidding zones
High-renewable hours have lower mean prices in all three zones, but the baseline price level and negative-price rate differ across DE-LU, Austria, and France.
Forecast-error coefficients by renewable regime
The interaction plot shows that the relationship between forecast-error variables and price is not identical across renewable regimes.

Descriptive results

High-renewable hours are cheaper in every zone

The regime split is defined inside each zone. It is a descriptive comparison, not a causal estimate, but it gives a useful check before fitting the fixed-effects models.

ZoneLow-renewable mean €/MWhHigh-renewable mean €/MWhHigh-regime negative-price rate
DE-LU105.6335.7520.28%
AT90.0340.8719.62%
FR51.9512.2617.04%

Model specification

A simple model with uncertainty treated seriously

The main price model includes bidding-zone, UTC hour, and valid-date fixed effects. Continuous predictors are standardized within zone. Standard errors are two-way clustered by valid time and forecast run, with 30 forecast runs setting the smallest cluster count.

OutcomeRowsForecast-run clustersModel type
Day-ahead price21,5100.837230Price level
Price with regime interactions21,5100.839830Price level
24-hour price volatility21,4800.623730Volatility
Negative-price indicator21,5100.533530Binary outcome

R² is descriptive fit, not out-of-sample forecasting accuracy. Repeated market outcomes across vintages are the reason the forecast-run dimension is part of the inference design.

Selected coefficients

What the model says, conditionally

PredictorCoefficientClustered p-valueReading
Actual residual load+19.05<0.001Higher residual load is associated with higher price.
Solar forecast error−2.27<0.001The standardized error has a negative price association.
Wind-onshore forecast error−2.62<0.001The standardized error has a negative price association.
Temperature absolute error−1.44<0.001Temperature error is associated with lower price in this panel.

The coefficient signs are consistent with a market where residual load pushes prices up while positive renewable-generation forecast errors coincide with lower prices. These are conditional associations in the current panel; they should not be read as causal effects of changing the forecast.

Final takeaway

The point is being able to trace the result back to the source

The useful part of this project is the connection between versioned ingestion and statistical interpretation. Bronze preserves what arrived, Silver makes the source differences inspectable, and Gold gives the model one reproducible panel. The current result is a clear next step rather than a finished claim: extend the vintage history, add more representative weather points, and test whether the zone-specific relationships survive across seasons.

Read the code and reports on GitHub