Handboek · hoofdstuk 41Van data naar model: regressie
Een energievoorspelling vraagt een eerlijke toekomsttest en een verklaring voor haar fouten
Het station wil morgen voldoende energie reserveren. Temperatuur alleen verklaart niet alles: verlichting, bewoning en beheer veranderen mee. Je leidt kleinste kwadraten af, bouwt een meervoudige regressie en toetst of die buiten de trainingsperiode nog helpt.

- Je kan een kleinste-kwadratenfit afleiden en met NumPy berekenen.
- Je kan meerdere features, eenheden en identificeerbaarheid interpreteren.
- Je kan overfitting en regularisatie met gescheiden data beoordelen.
- Je kan temporele kruisvalidatie zonder toekomstlek ontwerpen.
- Je kan residuen en foutkosten gebruiken om een voorspeller te accepteren.
Een voorspelling is een beslisinput
Regressie voorspelt een kwantitatieve doelwaarde, bijvoorbeeld het elektrische verbruik van morgen in kWh. Kalenderdagen lopen hier op de vaste klok UTC+1; het plan wordt de avond voordien gemaakt. De gemiddelde temperatuur van morgen mag daarom alleen als weerprognose worden ingevoerd. De morgen gemeten temperatuur is bij het plannen nog onbekend. Dat verschil hoort ook in de test.
Begin met een basislijn: gisteren, vergelijkbare dagen of het fysische warmtemodel. Een complexer model helpt pas als het relevante fouten verlaagt. Een onderschatting kan energiereserves uitputten; een overschatting kan productie onnodig beperken. De puntvoorspelling vraagt dus een onzekerheids- en reservebeleid.
| keuze | contract |
|---|---|
| doel | elektrisch dagverbruik, kWh |
| besluit | 20:00 UTC+1 voor morgen |
| invoer | weerprognose, planning, bekende toestand |
| basislijn | laatste zeven geldige vergelijkbare dagen |
| grens | lokale beveiliging blijft leidend |
Kleinste kwadraten uit de foutfunctie
Voor één feature is . Minimaliseer . Afleiden naar a geeft , dus . Invullen en afleiden naar b levert:
De noemer moet positief zijn. Bij een constante x kun je geen helling bepalen. De berekening vindt een verband, geen oorzakelijk effect. Kou kan tegelijk met lampuren en bewoning veranderen. Coëfficiënten interpreteren vraagt daarom het proef- of waarnemingsontwerp.
Een volledige handfit
- dimensieloze rekenwaarden
- helling, intercept, voorspellingen en residuen
- 1en . De kruissom is 1 en de x-kwadratensom 2, dus b=0,5.
- 2a=5/3−0,5=7/6. De voorspellingen zijn 7/6, 5/3 en 13/6.
- 3Residuen data−model: −1/6, 1/3, −1/6. De kwadratensom SSE is 1/6. De residusom is nul omdat een vrij intercept aanwezig is.
Meerdere features worden een matrix
Schrijf . Een eerste kolom enen modelleert het intercept. De verliesfunctie heeft gradiënt . In een stationair punt geldt . Een expliciete inverse is meestal een slechte rekenroute; zij lost slechte conditionering niet op.
np.linalg.lstsq levert ook rang en singuliere waarden. Bij collineariteit geven meerdere coëfficiëntcombinaties bijna dezelfde voorspelling. Een hoge R² maakt individuele coëfficiënten dan niet betrouwbaar. Schaal features wanneer hun ordes sterk verschillen en bewaar de scaler die uitsluitend op training is geleerd.
Features volgen fysica en beschikbaarheid
Het stationsmodel verliest 50 W/K en heeft gemiddeld 533 W interne winst in het rekenjaar. De verwarmingsdrempel is °C. Een feature is . Bij de model-COP 3,15 kost één extra graaddag kWh elektrisch.
Het echte e16-model gebruikt veranderlijke COP en beheer. De helling 0,38 is hier een expliciete leswaarde. Donkere uren helpen verlichting beschrijven. Afgeknepen PV-uitgang is geen zuivere weerfeature: de batterijtoestand bepaalt mede hoeveel zon toegelaten werd. Beschikbare zon en uitgevoerde opbrengst horen afzonderlijk in de log.
| feature | eenheid | beschikbaar |
|---|---|---|
| koufeature | K | weerprognose bij het plan |
| donkere lampuren | h | planning en prognose |
| begin-SoC | % | laatste geldige meting |
| morgen gemeten energie | kWh | pas later: doelwaarde |
Coëfficiënten lezen zonder causaliteit
- k=6 K
- h=8 donkere uren
- dagvoorspelling en interpretatie
- 1E=8+0,38×6+0,20×8=11,88 kWh/dag.
- 2De kouhelling heeft eenheid kWh/(dag·K); de urenhelling kWh/(dag·h), met h als aantal uren in die dag.
- 3Het intercept 8 kWh/dag is geen apart gemeten basisverbruik. Een verandering van bewoning die met kou samenvalt kan de helling beïnvloeden.
Overfitting begint bij modelkeuze
Een hoge polynoomgraad kan trainingspunten exact treffen en ertussen slingeren. Trainingsfout daalt bij toenemende flexibiliteit; toekomstfout kan stijgen. Een te eenvoudig model mist structuur, terwijl een te flexibel model toevallige details leert.
Ridge voegt toe en laat het intercept vrij. Dan geldt , met een diagonale strafmatrix D die voor het intercept nul is. Standaardisatie maakt de straf vergelijkbaar tussen features. Kies λ op validatie, niet op de eindtest. Lasso gebruikt een absolute-waardestraf en kan coëfficiënten exact nul maken, maar vraagt een andere optimalisatie.
Train, validatie en test hebben eigen rollen
Training leert parameters en preprocessing. Validatie kiest features, λ en modelvorm. Test beoordeelt eenmaal de vastgelegde keuze. Een testset waarop je het model blijft aanpassen is een validatieset geworden. Leg het modelmanifest vast voordat je de eindtest bekijkt.
Splits een tijdreeks in de tijd: vroeg training, daarna validatie, laatst test. Een willekeurige split kan bijna gelijke buururen mengen en seizoenstoekomst laten lekken. Scaler, imputatie en featureselectie worden uitsluitend op training geleerd. Ook plant- of batchgroepen moeten gescheiden blijven als je prestaties op nieuwe groepen wilt kennen.
| deel | gebruik |
|---|---|
| training | parameters, scaler, imputatie |
| validatie | keuze van λ en model |
| test | laatste onafhankelijke beoordeling |
Informatie die bij het echte besluit nog onbekend is, kan een voorspeller in de test kunstmatig verbeteren.
Een reproduceerbare conditionele energieschatting
De dataset bevat 180 synthetische dagen: 110 training, 35 validatie en 35 eindtest. Alleen training bepaalt de scaler. De code meldt λ, testfout, basislijn en rollende folds.
De features bevatten het gerealiseerde modelweer van dezelfde dag. De RMSE van 0,2494 kWh/dag is daarom een conditionele demonstratiefout als dat weer al bekend is. Zij is geen operationele dag-vooruitvoorspelfout: er zijn geen gearchiveerde prognoses of prognosefouten toegevoegd. Een productieproef archiveert juist de weerprognoses op 20:00 UTC+1 en beoordeelt de volledige keten tot het werkelijke verbruik.
import numpy as nprng=np.random.default_rng(41)d=np.arange(180)# Synthetische dagreeks vanaf01-10-2025, klok UTC+1.temperatuur=8+7*np.cos(2*np.pi*d/100)+rng.normal(0,1.5,len(d))kou=np.maximum(0,9.34-temperatuur)donker=np.clip(8-0.2*temperatuur+rng.normal(0,1,len(d)),3,12)energie=8+0.38*kou+0.20*donker+rng.normal(0,0.25,len(d))X=np.column_stack((np.ones(len(d)),kou,donker))train=slice(0,110); val=slice(110,145); test=slice(145,180)gem=X[train,1:].mean(axis=0); sd=X[train,1:].std(axis=0)Z=np.column_stack((np.ones(len(d)),(X[:,1:]-gem)/sd))def ridge(Z,y,lam): # Intercept wordt niet bestraft; solve in plaats van inverse. straf=np.diag([0.,lam,lam]) return np.linalg.solve(Z.T@Z+straf,Z.T@y)def rmse(y,p): return np.sqrt(np.mean((y-p)**2))kandidaten=[]for lam in (0.,0.1,1.,10.,100.): b=ridge(Z[train],energie[train],lam) kandidaten.append((rmse(energie[val],Z[val]@b),lam,b))fout,lam,b=min(kandidaten,key=lambda r:r[0])p=Z@bprint("lambda",lam,"validatieRMSE",round(fout,4))print("testRMSE",round(rmse(energie[test],p[test]),4),"kWh/dag")print("basislijn testRMSE",round(rmse(energie[test],np.full(35,energie[train].mean())),4))fysiek=b[1:]/sdintercept=b[0]-gem@fysiekprint("coefficienten",round(intercept,4),*[round(x,4) for x in fysiek])# Kleine rolling-origin CV; schaal alleen op elke trainingsfold.for eind in (60,80,100): a=X[:eind]; y=energie[:eind] coef=np.linalg.lstsq(a,y,rcond=None)[0] print("fold",eind,"RMSE",round(rmse(energie[eind:eind+20],X[eind:eind+20]@coef),4))assert rmse(energie[test],p[test])<0.5lambda 0.0 validatieRMSE 0.2822 testRMSE 0.2494 kWh/dag basislijn testRMSE 1.9121 coefficienten 8.1283 0.3867 0.1781 fold 60 RMSE 0.2552 fold 80 RMSE 0.3182 fold 100 RMSE 0.2367
Kruisvalidatie die vooruit kijkt
Rolling-origin-validatie traint op een groeiend verleden en toetst het volgende blok. Daardoor beoordeel je herhaaldelijk de echte richting van tijd. Willekeurige k-fold of leave-one-out is niet vanzelf geschikt voor sterk gecorreleerde logs. Een tussenruimte kan nodig zijn wanneer feature- of doelvensters een foldgrens overschrijden.
Vergelijk modellen op dezelfde folds en basislijnen. Alle preprocessing en modelkeuze blijven binnen de trainingsfold. De code gebruikt een vaste regressie in drie folds; een uitgebreidere pipeline zoekt λ daarbinnen opnieuw. Een aparte eindtest beperkt het optimisme door herhaalde selectie.
| fold | trainingsdagen | beoordeling |
|---|---|---|
| 1 | 0–59 | 60–79 |
| 2 | 0–79 | 80–99 |
| 3 | 0–99 | 100–119 |
Residuen vertellen welke fout je mist
Het residu is . Plot het tegen tijd, voorspelling en belangrijke features. Een trend wijst op drift of ontbrekende dynamiek; kromming op ontbrekende niet-lineariteit; een waaier op veranderlijke foutspreiding; clusters op ontbrekende groepen. Een lagplot toont autocorrelatie: de fouten zijn dan geen onafhankelijke herhalingen.
RMSE straft grote fouten sterk; MAE is minder gevoelig voor uitschieters. Rapporteer ook bias en de relevante staart, zoals ernstige onderschattingen tijdens koude dagen. Een gemiddelde fout van 0,3 kWh kan verbergen dat juist de koudegolf mislukt. Kijk per regime en behandel ongeldige data met een expliciet kwaliteitsbeleid.
Een foutscore is een keuze
- vier modeldagen
- MAE, RMSE en bias
- 1MAE=(1+0+1+4)/4=1,5 kWh.
- 2RMSE=√[(1+0+1+16)/4]=√4,5=2,1213 kWh.
- 3Bias=(−1+0+1+4)/4=1 kWh. Met residu data−model betekent dit gemiddeld 1 kWh onderschatting.
Onzekerheid en extrapolatie blijven zichtbaar
Een interval rond de geschatte gemiddelde relatie is smaller dan een voorspelinterval voor een nieuwe dag: dat laatste bevat ook nieuwe procesvariatie. Een klassiek lineair interval veronderstelt een passend foutmodel. Het is niet vanzelf geldig in een weersregime dat ontbreekt in training.
Markeer invoer buiten het geleerde domein en gebruik daar een conservatieve basisstrategie. Een koudegolf van −15 °C mag niet stil een nauwkeurig label krijgen. Kies reserve uit foutkosten en onafhankelijke validatie. De supervisor begrenst vermogens en behoudt de lokale regeling wanneer de predictor ontbreekt.
| uitvoer | bewijs |
|---|---|
| puntvoorspelling | kWh en horizon |
| interval | dekking op apart datadeel |
| status | geldig regime of extrapolatie |
| versie | data, model, scaler en commit |
Voorspellen verandert het meetproces
Als een planner op voorspellingen reageert, verandert hij het latere verbruik. Een model dat daarna op beheerde data leert, kan een omgekeerd verband vinden: hoge voorspelde vraag gaat samen met weinig verbruik omdat juist dan lasten zijn afgeschakeld. Na een nieuw beheerbeleid kan dat verband opnieuw veranderen.
Log aangeboden en uitgevoerde setpoints, afschakelingen, comfort en beschikbare bronenergie. De fictieve simulatie houdt het beleid vast. Een nieuwe implementatie draait eerst in schaduwmodus, met beoordeling van zowel voorspelfout als beslisresultaat. De primaire softwarebron is NumPy lstsq, geraadpleegd 30-09-2026.
| log apart | reden |
|---|---|
| onbegrensde vraag | comfortbehoefte |
| uitgevoerde vraag | beheeractie |
| afgeknepen zon | weer en SoC onderscheiden |
| modelmanifest | feedback herleiden |
Regressie beoordelen
| symbool | betekenis | eenheid |
|---|---|---|
| data−voorspelling | kWh |
| probleem | eerste controle |
|---|---|
| hoge testfout | basislijn, lek en regime |
| instabiele coëfficiënten | rang, schaal en collineariteit |
| mooie trainingsfout | flexibiliteit en selectie |
| trend in residu | drift of ontbrekende toestand |
Een model dient een besliscontract
Regressie verbindt energiefysica, dataherkomst en beheer. De voorspeller krijgt een meetbare rol en begrensde bevoegdheid.
Logdata en dagtotalen.
Tijd en herkomst.
Fysisch model als basislijn.
Afweging van voorspelgebruik.
Acceptatie-eisen.
Habitat archiveert weerprognoses op het planmoment, toetst temporeel en logt beheeringrepen. De coëfficiënten 8, 0,38 en 0,20 zijn synthetische leswaarden en vormen geen nieuwe werkelijke verbruiksnorm.
In het kort
- Kleinste kwadraten minimaliseert een foutfunctie en bewijst geen causaliteit.
- Features moeten bij het besluit beschikbaar zijn.
- Regularisatie en preprocessing blijven binnen de trainingsgrens.
- Tijdreeksen vragen vooruitgerichte validatie en een onaangeraakte test.
- Residuen, regimes en foutkosten bepalen of de predictor helpt.
Wat je nu kent
- feature
- Een invoerkenmerk dat bij het voorspellen beschikbaar is.
- overfitting
- Details leren die buiten de trainingsdata slecht generaliseren.
- regularisatie
- Een beperking of straf die gevoeligheid voor trainingsdetails verlaagt.
- kruisvalidatie
- Herhaalde beoordeling op gescheiden datadelen voor modelkeuze.
- datalek
- Onterecht leren uit test, validatie of toekomstinformatie.