Metod
Skriven för dig som vill veta vad siffrorna faktiskt bygger på — inklusive vad de inte klarar.
Så sätts priset
Elpriset du ser här är spotpriset på day-ahead-marknaden. Varje dag lämnar producenter och elhandlare in bud för nästa dygns 24 timmar. Budgivningen stänger klockan 12:00, och runt 12:45 publiceras resultatet: ett pris per timme och elområde. Efter den tidpunkten är morgondagens priser inte längre en prognos utan ett faktum.
Sverige är indelat i fyra elområden: SE1 Luleå, SE2 Sundsvall, SE3 Stockholm och SE4 Malmö. De har olika pris därför att överföringskapaciteten mellan dem är begränsad. Produktionen sitter till stor del i norr, förbrukningen i söder, och när ledningarna söderut går fulla — det som kallas att ett snitt är trångt — kan norra Sverige ha nästan gratis el samtidigt som SE4 följer priset i Danmark och Tyskland.
Sedan 2025 handlas den europeiska day-ahead-marknaden i 15-minutersupplösning. Prognosen görs per timme, eftersom kvartarnas mönster inte går att förutsäga flera dygn fram, och timmens pris är snittet av dess fyra kvartar. Där auktionen redan har publicerat kvartspriser sparas de och tas med i veckoöversikten på förstasidan.
Vad som driver priset
- Residuallast
- Förbrukning minus vind och sol. Det är den mängd som måste täckas av något med rörlig kostnad, och det är den som sätter priset. Kall och vindstilla = hög residuallast = dyrt.
- Vind i norr mot vind i söder
- Blåser det i Norrland men snittet söderut är trångt sjunker SE1 och SE2 medan SE3 och SE4 kan stanna kvar på en högre nivå. Därför följer modellen vindindex i norr och söder var för sig.
- Temperatur
- Uppvärmning är den stora säsongsvariabeln. Modellen använder avvikelsen från det normala för timmen, inte den absoluta temperaturen.
- Sol
- Mest märkbart i SE4 och på kontinenten, där mycket sol mitt på dagen skapar en tydlig svacka som ibland går ner till noll eller under.
- Koppling till DK och DE
- SE4 brukar följa Danmark och Tyskland mer än SE1. Därför hämtas väder även för Köpenhamn och Hamburg som drivare, trots att de inte är egna elområden här.
- Vattenvärde (mätt, ingår inte)
- Magasinnivåerna hämtas nu per elområde från ENTSO-E, fyra år bakåt, och visas som fakta. De prövades i modellen både som nivåjustering och som förstärkning av vädereffekten — ingen av dem förbättrade prognosen. Se avsnittet nedan.
- Kärnkraftsrevisioner (mätt, ingår ändå inte)
- Sidan hämtar dem numera från Nord Pools REMIT-meddelanden och visar dem som fakta. De prövades som modellindata och gav ingen förbättring — en planerad revision är känd i veckor, så förra veckans pris har redan prisat in den. Oplanerade haverier testades också separat och gav heller ingen förbättring — se nedan.
Vad sajten faktiskt gör
- Hämtar officiella day-ahead-priser från ENTSO-E och sparar dem som fakta. Svarar ENTSO-E inte hämtas samma priser från elprisetjustnu.se.
- Hämtar väderprognos tio dygn framåt för nio punkter i Norden och norra Tyskland.
- Räknar fram vindindex, temperaturavvikelse och solindex per timme och elområde. Normalvärdena byggs upp löpande körning för körning, eftersom väder-API:t bara lämnar sju dygn bakåt per anrop.
- Sätter en grundnivå: priset samma veckodag och timme förra veckan, vägt 70/30 mot medianen för samma timme de fyra senaste veckorna.
- Skalar den nivån med vädret enligt en formel med fasta vikter per elområde.
- Kör dessutom två trädmodeller (LightGBM) som lär sig avvikelsen från den nivån ur fyra års priser och väder, och en horisonthybrid som använder trädmodellen ensam de första 36 timmarna och sedan blandar den med en marknadsjusterad nivå. Hybriden är standardmodell sedan 2 oktober 2026 — se Standardmodellen sedan oktober 2026 nedan.
- Sparar varje modells prognos med tidsstämpel.
- Jämför senare mot utfallet, sorterat efter hur långt i förväg prognosen gjordes.
- Hämtar terminsmarknadens priser från Euronext Nord Pool. De används av långtidsprognosen och av en provmodell som flyttar standardmodellens nivå till marknadens pris för nästa vecka — se Vad sajten inte gör nedan.
Skalfaktorn i weather_scaled är avsiktligt enkel och läsbar:
vindindex över det normala drar ner priset, kyla drar upp det, sol mitt på dagen
drar ner det. Vikterna skiljer sig mellan elområdena — SE1 och SE2 styrs mest av
sin egen vind, SE4 följer även vinden i söder och solen. Osäkerhetsbandet vidgas
när skalfaktorn avviker mycket från 1, alltså när vädret säger något ovanligt.
Finns ENTSO-E:s publicerade prognoser för last och vindkraft används residuallasten
i stället för rå vindhastighet.
Standardmodellen sedan oktober 2026
Trädmodellen lightgbm_v2 är det största enskilda lyftet hittills: på
riktiga utfärdade prognoser är felet dygn 1–2 ungefär hälften av de väderskalade
modellernas. Den blev därför grund för standardmodellen, horizon_hybrid.
Tre saker ska du veta om den:
- Den är väl belagd på kort sikt, inte på lång. Den gjordes till standard fem dagar efter att trädmodellen började loggas. För dygn 3–7 fanns då nästan inget underlag, och blandningens vikter (60 % trädmodell, 40 % marknadsnivå) är satta för hand. Hittills har blandningen varit sämre än trädmodellen ensam bortom dygn 2.
- Trädmodellen är tränad på vädret som det blev, inte på väderprognoser, och den har inte tränats om sedan 27 september 2026. Skarpt får den en prognos som blir sämre för varje dygn, vilket den aldrig har sett. Det syns i att bandet är för smalt och nivån ofta fel dygn 4–7.
- Den byts bara mot något bättre enligt en fast regel: minst 21 gemensamma leveransdygn, säkert bättre totalt och inte säkert sämre på någon horisont. Jämförelsen finns på träffsäkerhetssidan, där osäkerheten räknas per leveransdygn.
En efterföljare, lightgbm_v3, loggas som kandidat. Den är tränad på
arkiverade väderprognoser med rätt framförhållning, har framförhållningen som egen
variabel, läser tyskt och danskt väder, gaspris och utsläppsrätter, och tränas om varje
vecka. Den testas innan den används: modellen tränas om före var och en av de sex
senaste månaderna och poängsätts på den månaden.
Ett resultat av det testet ska sägas rakt ut. Att träna på väderprognoser av rätt ålder, i stället för på det färskaste vädret, gav ingen mätbar vinst — de två varianterna hamnade inom ett par procent från varandra. Det som skiljer kandidaten från föregångaren är alltså de övriga ändringarna, och om de räcker avgörs på skarpa prognoser, inte i testet. Den blir inte standard förrän regeln ovan är uppfylld.
Vad som faktiskt är mätt
Sedan hösten 2026 finns fyra års prishistorik, fyra års väderarkiv och fyra års avbrottsmeddelanden i projektet. Det gör att modellvalen inte längre behöver motiveras med resonemang. Varje kandidat poängsätts i ett backtest: modellen får göra prognoser för gamla veckor, och de jämförs med vad priset faktiskt blev. Totalt 437 224 timmar över sexton kvartal, där varje vikt anpassas enbart på data som är äldre än kvartalet den prövas på — modellen får alltså aldrig se facit i förväg.
| Kandidat | Medelfel, EUR/MWh | Mindre fel än naiv |
|---|---|---|
| Säsongsnaiv — referensen | 29,87 | – |
| Väderskalad | 28,34 | 5,1 % |
| Ensemble 35/65 | 28,70 | 3,9 % |
| Enbart dämpad nivå, utan väder | 27,53 | 7,8 % |
| Dämpad nivå + väderskalning — sajtens standard | 25,94 | 13,2 % |
| Färsk nivå + väderskalning — se nedan | 24,86 | 16,8 %* |
Så läser du tabellen. Medelfel är hur mycket prognosen i snitt missade per timme, uppåt eller nedåt, i EUR/MWh — lägre är bättre. Mindre fel än naiv jämför med referensen, den enklaste tänkbara prognosen: att priset blir detsamma som samma timme förra veckan. 13,0 % betyder att standardmodellen i snitt missar 13 procent mindre än referensen — högre procent är bättre.
* Den färska nivån ser bäst ut i tabellen, men siffran är från ett backtest som av misstag räknade med timmar vars pris redan var publicerat. Mätt rätt är den sämre än standardmodellen — se Gårdagens pris nedan. Talen mäter mittlinjen p50; osäkerhetsbandet mäts separat. Skarpa siffror, med riktiga väderprognoser, finns på träffsäkerhetssidan.
Nivån ska inte hämtas från en enda vecka
Att kopiera priset samma timme sju dygn tidigare betyder att ett avvikande dygn kopieras rakt in i prognosen, åt båda hållen. Att i stället väga den veckan 70/30 mot medianen för samma timme de fyra senaste veckorna är värt 7,9 procent ensamt. Vikten är inte vald på känsla: optimum är platt mellan 0,60 och 0,75, och alla fyra elområden förbättras.
Två närliggande idéer testades och förkastades: enbart fyraveckorsmedian blev 8,5 procent sämre, och att justera veckolaggen med den senaste veckans nivåtrend blev 39 procent sämre. Priser trendar, och en median släpar efter nivåskiften.
Gårdagens pris — det som skiljer i morgon från nästa fredag
Länge var felkurvan över veckan platt. Dag 5 hamnade till och med marginellt bättre än dag 1, vilket borde vara omöjligt för en prognos värd namnet. Förklaringen visade sig inte vara att väderprognoser blir sämre med horisonten — backtestet matar modellerna med ERA5-reanalys, alltså perfekt väder, och kurvan var platt ändå. Problemet var att ingenting i modellen visste mer om i morgon än om nästa vecka. Nivån var förra veckans pris oavsett horisont.
Day-ahead-auktionen publicerar till och med morgondagens slut. För en timme tidigt i fönstret är alltså gårdagens pris för samma timme ett publicerat faktum; för en timme sju dygn fram är gårdagen fortfarande i framtiden. Att väga in den 24-timmarslaggen med 70 procent där den finns ger:
| Prognosdygn | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|---|---|---|---|---|---|---|---|
| MAE tidigare | 25,4 | 26,0 | 25,8 | 25,4 | 25,2 | 25,5 | 26,1 |
| MAE nu | 19,5 | 21,1 | 25,4 | 25,2 | 25,5 | 26,1 | 25,8 |
Så såg det ut i backtestet, och på den grunden gjordes modellen till standard. Det var ett misstag. Riggen saknade filtret som utesluter timmar vars pris börsen redan publicerat, och räknade därför två tredjedelar av det första dygnet mot kända priser. Det gynnade just en modell som lutar sig mot färska priser.
Med filtret på plats krymper försprånget, och på riktiga utfärdade prognoser — mätta på samma fönster för alla fem modeller — är den näst sämst på det första dygnet. Standardmodellen är återställd till den dämpade nivån. Den färska nivån ligger kvar som mätt konkurrent.
Skarpt har det bekräftats. De första veckorna i september 2026 missade den färska nivån i snitt 46,0 EUR/MWh på det första dygnet, mot 39,1 för standardmodellen. Orsaken syns i datan: för de timmar som går att poängsätta på det första dygnet — natten och förmiddagen i morgon, prognoserade innan auktionen — är ”dagen innan” i dag, och priset svängde kraftigt från dag till dag (SE3: 50, 103, 62 och 100 EUR/MWh den 8–11 september). En modell som säger ”som i dag” missar då åt samma håll som svängen.
Episoden står kvar här därför att den är det tydligaste exemplet på projektets egen huvudregel: ett pris som börsen redan publicerat är inte en prognos, och en utvärdering som glömmer det ger fel svar med stor säkerhet.
Väderskalningens vikter håller
De handsatta vikterna per elområde — SE1 och SE2 mot sin egen vind, SE4 även mot sydlig vind och sol — skrevs ursprungligen på intuition. De har nu prövats mot anpassade alternativ, och den prövningen gav först motsatt svar: anpassar man fem koefficienter per elområde på all äldre historik blir medelfelet 25,23 mot de handsattas 25,94. Anpassade vikter såg alltså bättre ut.
Men det är inte den modell någon kan driva. En modell i drift har inte koefficienter anpassade under energikrisen 2022 — den anpassas om på färsk historik. Mäter man i stället så, med bara de närmast föregående kvartalen som underlag för varje kvartal som poängsätts, förlorar de anpassade vikterna: 26,80 med fyra kvartals fönster och 26,75 med sex, mot de handsattas 25,94.
Orsaken syns i koefficienterna. Med kort fönster blir de nästan identiska mellan elområdena — omkring −0,26 i alla fyra — så den nord/syd-skillnad som de handsatta vikterna kodar återskapas aldrig. De handsatta vikterna är robusta just därför att de inte är anpassade till någon regim. Slutsatsen är alltså inte fler parametrar och inte färre, utan att strukturen står sig — och att en anpassning som tränas på all historik kan se bra ut utan att kunna levereras.
Avbrott hjälper inte prognosen — men visas ändå
Kärnkraftsstopp och kabelbegränsningar hämtas från Nord Pools REMIT-meddelanden och står i drivkraftstexten. De ingår inte i någon modell, och det är ett mätresultat, inte en försummelse: varje variant — rå effekt ur drift, förändring mot referensveckan, import- och exportkapacitet var för sig och tillsammans — hamnade inom ±0,2 procentenheter från modellen utan dem.
Förklaringen är att priset redan innehåller dem. En revision är känd i veckor, så förra veckans pris har redan prisat in den. Det som skulle bära information är nyheten i ett oplanerat haveri, och sådana är för sällsynta för att mätas på tio kvartal. Rå effekt ur drift fick dessutom fel tecken, eftersom underhåll planeras till sommaren när priserna är låga.
Osäkerhetsbandet är kalibrerat, och därför brett
Bandet p10–p90 ska innehålla åtta utfall av tio. Den ursprungliga bredden var en formel skriven på känsla — och när den mättes innehöll den 39,7 procent. Den var dessutom lika bred på dag 7 som på dag 1, trots att felet växer med horisonten.
Ett för smalt band är sämre än inget band. Det säger att prognosen är säker just där den är som mest opålitlig, och felet är tyst: ingenting i utdatat skiljer en välträffad timme från en illa träffad.
Bandet sätts nu av den uppmätta fördelningen av prognosfel per prognosdygn, skattad på tidigare kvartal och prövad på senare. I backtestet träffar det 79,7 procent, och skarpt 78,8 procent — mätt på 16 724 utfärdade timmar i september 2026. Träffen är ojämn över veckan: 70 procent på dygn 1, alltså något för smalt, och 83 procent på dygn 5, något för brett. Den avvikelsen lämnas medvetet orättad. Två försök att anpassa om kvantilerna mättes skarpt till 74,6 och 76,1 procent, alltså sämre än det som skeppas, och elva dygns skarp historik är en fjortondag och ingen kalibrering. Två egenskaper är värda att förstå:
- Det är kraftigt asymmetriskt. Nedsidan är begränsad, uppsidan löper till två eller tre gånger nivån. Elpriser skjuter uppåt och kan inte falla långt under noll. Ett symmetriskt band går inte att kalibrera här, oavsett bredd.
- Det är brett. Skarpt i snitt 180 EUR/MWh mot tidigare 32, och det växer med horisonten som det ska: 147 på dygn 1, 203 på dygn 5. Medianen är 136 — snittet dras upp av de dyra timmarna, eftersom bandet är proportionellt mot nivån. Det är inte en försämring, det är den ärliga bredden på en sjudygnsprognos för elpris. Att redovisa 32 var felet.
Fyra saker till som mättes och inte höll
Alla fyra var rimliga hypoteser. Ingen av dem förbättrade prognosen. Utgångsläget är standardmodellens 25,94 i medelfel.
| Tillägg | MAE | Effekt |
|---|---|---|
| Oplanerade kärnkraftsbortfall | 25,93 | ingen alls |
| Oplanerade bortfall, förändring mot referensveckan | 25,91 | ingen alls |
| Oplanerade produktionsbortfall totalt | 26,03 | sämre |
| Magasinnivå som nivåjustering | 26,01 | sämre |
| Magasinnivå × vind (interaktion) | 26,03 | sämre |
| Båda magasintermerna | 26,16 | sämre |
| Grannområdenas pris, 15 % vikt | 26,32 | sämre |
| Grannområdenas pris, 35 % vikt | 27,98 | mycket sämre |
| Dygnsprofil: timme × väder | 27,22 | mycket sämre |
Oplanerade haverier. Det första avbrottstestet slog ihop 11 277 planerade med 7 162 oplanerade bortfall, vilket dränkte de sällsynta händelser som faktiskt bär nyhetsvärde. Uppdelat gav de oplanerade en koefficient på +0,01 — alltså noll. Den troliga förklaringen är gleshet: 105 oplanerade kärnkraftsbortfall på fyra år blir en handfull per testperiod, och då går ingen effekt att skilja från brus.
Grannområdenas priser. SE4 följer Danmark och Tyskland, så deras pris samma timme förra veckan borde vara en oberoende mätning av samma marknadsläge. Det blev monotont sämre ju mer vikt de fick. Grannens vecka är alltså inte en oberoende mätning utan en brusigare version av vår egen — elområdena är kopplade, så informationen sitter redan i det egna priset.
Magasinnivå. Additivt blev det sämre, vilket var väntat — nivån rör sig någon procent i veckan och förra veckans pris bär den redan. Interaktionshypotesen var mer intressant: med tomma magasin kan vattenkraften inte absorbera en vindstilla vecka billigt, så samma vindavvikelse borde slå hårdare. Den anpassade koefficienten landade på −0,03 och förbättrade inte prognosen. Mekanismen finns antagligen; den är för svag för att synas i sjudygnsfel.
Dygnsprofilen. Den mest lovande av de fyra, och den som kostade mest arbete. Väderskalningen multiplicerar hela dygnet med ett tal, så en blåsig dag blir lika mycket billigare klockan 03 som klockan 19 — fast vind i verkligheten knäcker kvällstoppen mycket hårdare än natten. Skarpa mätningar visade precis det felet: standardmodellen är opartisk på natten men låg 20–23 EUR/MWh för lågt mellan 09 och 21, och gav bara fyra femtedelar av dygnets verkliga svängning. Att låta varje väderfaktor verka olika vid olika tid på dygnet borde alltså ha hjälpt.
Mätt på de sex senaste kvartalen gjorde det också det, med 2,5 procent. Men
det är inte en modell som går att driva: den har koefficienter anpassade i
samma prisnivå som den prövas i. Med en rullande omanpassning över hela
historiken — alltså så som en skarp drift arbetar — blir den 4,8 procent sämre
än att inte göra något, och den förvärrar till och med kvällsfelet den byggdes
för att laga. Att begränsa den till de södra elområdena hjälper inte, eftersom
anpassning per elområde är den mätningen. Slutsatsen är inte att
dygnsprofilen saknar signal, utan att 35 anpassade tal per elområde inte
överlever ett regimskifte. Den ligger kvar som mätt avslag i
src/research/profile_fit.py.
Det viktigaste förbehållet
Backtestet använder ERA5-reanalys som väderunderlag, alltså ett perfekt väder i efterhand. I drift kommer vädret från en prognos som blir sämre ju längre fram man tittar. Den väderdrivna delen av försprånget är därför optimistisk. Dämpningen av nivån, värd 7,9 procent, beror inte på väder alls och gäller oförändrat.
Den riktiga domen står på träffsäkerhetssidan, som mäter utfärdade prognoser mot verkliga utfall, med riktiga väderprognoser.
Vad sajten inte gör
- Ingen marknadskoppling. Ingen Euphemia, inga budkurvor, ingen simulering av överföringsbegränsningar mellan elområdena.
- Ingen tränad gradient boosting ännu. Kroken finns i koden och är utmärkt med
FUTURE:, men v1 kör helt utan tränade artefakter så att en färsk klon fungerar direkt. - Inga bränsle- eller utsläppspriser i timprognosen. De hämtas till långtidsprognosen, där de prövades och inte förbättrade den.
- Terminsmarknaden styr inte timprognosen. En provmodell som använder den, Dämpad nivå, marknadsjusterad, mäts skarpt sedan september 2026. Den kan inte backtestas — det finns ingen fri historik över terminspriser — så den får styra sajten först om den visar sig bättre över flera veckor.
- Inga vattenmagasin i modellen — hämtade, prövade, utan effekt.
- Inga avbrott i modellen — se ovan. De visas som fakta, inte som indata.
- Ingen AI-overlay. v1 är statistisk och väderjusterad, ingenting annat.
Hur uppföljningen fungerar
Varje körning skriver en rad per modell, elområde och leveranstimme med
issued_at, horizon_h och kvantilerna. Raderna skrivs
aldrig om i efterhand. När Nord Pool publicerat utfallet kopplas det ihop på
(zone, ts).
Den avgörande filtreringen: en prognospunkt räknas bara om priset ännu inte var publicerat när prognosen utfärdades. Efter klockan 12:45 är morgondagen fakta, och att kopiera börsen är inte träffsäkerhet. Resten sorteras i dygnsspann — 0–24 h, 24–48 h och så vidare upp till 144–168 h — och redovisas per elområde och modell på träffsäkerhetssidan. En horisont med färre än 24 utfall visas som för lite data i stället för ett osäkert medelvärde.
Prognoser utfärdas fyra gånger per dygn, 06:30, 10:15, 13:30 och 18:00 svensk tid. Körs pipelinen oftare än så — vid en kodändring till exempel — räknas bara den första prognosen per tidslucka, så att en dag med många körningar inte väger tyngre än andra. Förbättringen mot den naiva referensen mäts bara på timmar som båda modellerna har prognosticerat.
Långtidsprognosen
Utöver veckoprognosen per timme finns en långtidsprognos för månadens snittpris en till tre månader fram. Den följer samma regel: allt modellen ser är skuret vid den tidpunkt prognosen gjordes, och varje vikt är anpassad bara på månader som redan tagit slut. Den visas bredvid terminsmarknadens pris från Euronext Nord Pool. Hur den fungerar och hur väl den har träffat står på sidan själv.
Datakällor
- ENTSO-E Transparency Platform — officiella day-ahead-priser (dokumenttyp A44) samt, när det går, prognoser för last och vind- och solproduktion. Kräver en egen kostnadsfri API-nyckel.
- Open-Meteo — väderprognos och närhistorik. Ingen nyckel behövs. Underlaget kommer från nationella vädertjänsters modeller, för Norden i praktiken samma data som SMHI bygger på.
- elprisetjustnu.se —
reservkälla för spotpriser. ENTSO-E är den auktoritativa källan men
svarar tidvis 503, och då är hela sajten utan priser. Reserven kräver
ingen nyckel och gav exakt samma siffror vid kontroll. Fältet
viai datat säger vilken källa varje pris kom från. - Euronext Nord Pool — avräkningspriser för elterminer, systempris och områdesdifferenser (EPAD), till långtidsprognosen. Fördröjd data.
- Yahoo Finance — dagliga kurser för gas (TTF) och utsläppsrätter, till långtidsprognosen.
- Svenska kraftnät — driftinformation som fritext. Används enbart för att citera en faktamening i drivkraftstexten, aldrig som modellindata.
Begränsningar
- Priserna är spotpris exklusive allt annat. Ditt elhandelsbolags påslag, elcertifikat, energiskatt, nätavgift och moms tillkommer. Räkna med att den faktiska kostnaden per kWh är väsentligt högre än talen här.
- Prognosen bygger på en väderprognos. Osäkerheten i vädret dag 5–7 är större än osäkerheten i elmodellen, och bandet p10–p90 är brett av en anledning.
- Nivåskiften som inte syns i vädret — ett kärnkraftsstopp, ett kabelfel, en kraftig rörelse i gaspriset — fångas inte av standardmodellen förrän de hunnit sätta sig i förra veckans priser. Det är just den svagheten den marknadsjusterade provmodellen ska pröva.
- Normalvärdena för vind och temperatur byggs upp över tid. De första veckorna efter en nystart är vindindex och temperaturavvikelse mindre pålitliga.
- Sajten är ett öppet hobbyprojekt utan drift- eller tillgänglighetsgaranti. Fatta inga ekonomiska beslut på den utan att kontrollera mot din elhandlare.