Files
ems/db/migration/V019__forecast_accuracy.sql
Dusan Vojacek 9f4126946d second version
2026-04-03 14:23:16 +02:00

44 lines
2.0 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================
-- Tabulka pro tracking přesnosti forecastu
-- ============================================================
CREATE TABLE ems.forecast_accuracy (
id SERIAL PRIMARY KEY,
site_id INT NOT NULL REFERENCES ems.site(id),
pv_array_id INT NOT NULL REFERENCES ems.asset_pv_array(id),
interval_start TIMESTAMPTZ NOT NULL,
run_id INT NOT NULL REFERENCES ems.forecast_pv_run(id),
-- Forecast hodnoty
forecast_power_w INT NOT NULL,
forecast_created_at TIMESTAMPTZ NOT NULL,
lead_time_hours NUMERIC(6,2), -- kolik hodin předem byl forecast vytvořen
-- Skutečnost (doplněna zpětně z telemetrie)
actual_power_w INT,
actual_filled_at TIMESTAMPTZ,
-- Odchylka
error_w INT, -- forecast - actual
error_pct NUMERIC(8,4), -- (forecast - actual) / actual * 100
UNIQUE (run_id, interval_start)
);
COMMENT ON TABLE ems.forecast_accuracy IS
'Tracking přesnosti FVE forecastu. Každý řádek = jeden 15min slot
z jednoho forecast runu. actual_power_w se doplňuje zpětně z telemetrie
po uplynutí intervalu přes fn_fill_forecast_accuracy().
Uchovávat navždy slouží pro analýzu přesnosti a budoucí kalibraci solveru.';
COMMENT ON COLUMN ems.forecast_accuracy.lead_time_hours IS
'Kolik hodin předem byl tento forecast vytvořen.
Příklad: forecast vytvořen v pondělí 14:00, interval ve středu 12:00 = 46h.
Slouží pro analýzu: je 6h forecast přesnější než 48h forecast?';
COMMENT ON COLUMN ems.forecast_accuracy.error_pct IS
'Relativní chyba v %. Kladná = forecast nadhodnotil, záporná = podhodnotil.
NULL pokud actual_power_w = 0 (zamezení dělení nulou).';
CREATE INDEX idx_forecast_accuracy_site_time
ON ems.forecast_accuracy (site_id, interval_start DESC);
CREATE INDEX idx_forecast_accuracy_array_lead
ON ems.forecast_accuracy (pv_array_id, lead_time_hours, interval_start DESC);