Skip to content

Dashboard: clarify wholesale vs consumer comparators; verify EnergyZero endpoint really returns all-in pricing #18

Description

@ducroq

What this is about

Two related concerns surfaced while diagnosing why the EnergyZero live series (green) and the Augur ML forecast (purple) don't share an amplitude scale on the Prices tab.

Concern 1 — apples-to-oranges comparator (UX)

static/js/modules/constants.js:32-34 explicitly notes:

// Note: energy_zero is excluded — it's ALL_IN consumer pricing (incl. energy tax,
// ODE, transport) which is ~100 EUR/MWh above wholesale.

The dashboard plots:

  • Green diamonds: EnergyZero live (per the comment, all-in consumer)
  • Purple dashed: Augur ML Forecast — wholesale p50 (data-processor.js:303)
  • Orange dotted: Augur Consumer Forecast — wholesale × 1.21 + ~110 EUR/MWh surcharge (data-processor.js:362)

The natural eye-level comparison "is the green line near the dashed line?" is misleading: the correct apples-to-apples comparator for the green diamonds is the orange dotted line, not the purple dashed line.

Possible UX improvements (pick one, this is a design call):

  • Option A (least invasive): rename trace names so the layer is obvious — e.g. "Augur Wholesale (p50)" and "Augur Consumer (incl. VAT)" instead of "Augur ML Forecast" and "Augur Consumer Forecast"; add a one-line legend hint about the EZ layer
  • Option B: add a layer toggle (Wholesale / Consumer) so only one set of comparable traces shows at a time
  • Option C: plot EZ wholesale (if available from a different EZ endpoint) alongside EZ consumer with clear labels

Concern 2 — verify what EZ actually returns (correctness)

The constants.js comment says EZ is all-in consumer. But in the screenshot that triggered this issue, the green diamonds dipped to near zero during a midday trough. Consumer pricing should not reach zero given a +110 EUR/MWh surcharge structure — wholesale would have to crash to ~−130 EUR/MWh to drag consumer to zero. That's possible in extreme solar-surplus events but uncommon.

It's worth verifying empirically:

  • Inspect the actual EZ API response (api-client.js) and confirm what pricePoint.price represents in current units
  • Compare a sample EZ live point against the same hour's ENTSO-E wholesale + known surcharge — see whether the delta matches the documented ~100 EUR/MWh
  • If the comment is stale (e.g. EZ now returns wholesale or a different layer), update the constants.js comment and the UX so the comparison is honest

Out of scope

  • The timezone misalignment is a separate bug (filed as its own issue)
  • The lower-band clamp at 0 is a separate bug (filed as its own issue)

Severity

Low — neither correctness-breaking nor model-breaking, but the current dashboard invites the wrong visual conclusion ("LightGBM is mis-predicting consumer prices") when the real story is "user is comparing two different price layers, and one of them may not be labelled correctly."

Related

  • memory/pricing-layers.md
  • data-processor.js:303,362
  • constants.js:32-34,73-95

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions