← Back to CoursesStemExpert
StemExpert
Expert · Handboek · 41. Van data naar model: regressie
StemExpert · Brecht Corbeel · schoolium.me
StemExpert
E41. Van data naar model: regressie
EExpert · deel E9 · Data science en AI

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.

9× uitleg3× uitgewerkt voorbeeld1× naslag1× verhaal1× het geheel1× code9 opdrachten in het werkboek± 12 lestijden
Een plan gebruikt alleen informatie die bij het besluit al bekend kan zijn.
Een plan gebruikt alleen informatie die bij het besluit al bekend kan zijn.
Na dit hoofdstuk
Uitleg · 41.1

Een voorspelling is een beslisinput

1/16

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.

keuzecontract
doelelektrisch dagverbruik, kWh
besluit20:00 UTC+1 voor morgen
invoerweerprognose, planning, bekende toestand
basislijnlaatste zeven geldige vergelijkbare dagen
grenslokale beveiliging blijft leidend
Uitleg · 41.2

Kleinste kwadraten uit de foutfunctie

2/16

Voor één feature is . Minimaliseer . Afleiden naar a geeft , dus . Invullen en afleiden naar b levert:

lineaire kleinste-kwadratenfit

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.

Uitgewerkt voorbeeld · 41.3

Een volledige handfit

3/16
Data (x,y): (0,1), (1,2), (2,2).
Gegeven
  • dimensieloze rekenwaarden
Gevraagd
  • helling, intercept, voorspellingen en residuen
Oplossing
  1. 1
    en . De kruissom is 1 en de x-kwadratensom 2, dus b=0,5.
  2. 2
    a=5/3−0,5=7/6. De voorspellingen zijn 7/6, 5/3 en 13/6.
  3. 3
    Residuen data−model: −1/6, 1/3, −1/6. De kwadratensom SSE is 1/6. De residusom is nul omdat een vrij intercept aanwezig is.
Antwoord
ŷ=7/6+0,5x en SSE=0,1667.
Klopt dit? Zonder intercept hoeft de residusom niet nul te zijn.
Uitleg · 41.4

Meerdere features worden een matrix

4/16

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.

normaalvergelijking bij volle kolomrang
Uitleg · 41.5

Features volgen fysica en beschikbaarheid

5/16

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.

featureeenheidbeschikbaar
koufeatureKweerprognose bij het plan
donkere lampurenhplanning en prognose
begin-SoC%laatste geldige meting
morgen gemeten energiekWhpas later: doelwaarde
Uitgewerkt voorbeeld · 41.6

Coëfficiënten lezen zonder causaliteit

6/16
E=8+0,38k+0,20h.
Gegeven
  • k=6 K
  • h=8 donkere uren
Gevraagd
  • dagvoorspelling en interpretatie
Oplossing
  1. 1
    E=8+0,38×6+0,20×8=11,88 kWh/dag.
  2. 2
    De kouhelling heeft eenheid kWh/(dag·K); de urenhelling kWh/(dag·h), met h als aantal uren in die dag.
  3. 3
    Het intercept 8 kWh/dag is geen apart gemeten basisverbruik. Een verandering van bewoning die met kou samenvalt kan de helling beïnvloeden.
Antwoord
11,88 kWh voor deze modeldag; de relatie is conditioneel op andere features en het domein.
Uitleg · 41.7

Overfitting begint bij modelkeuze

7/16

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.

ridge met vrij intercept
Uitleg · 41.8

Train, validatie en test hebben eigen rollen

8/16

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.

deelgebruik
trainingparameters, scaler, imputatie
validatiekeuze van λ en model
testlaatste onafhankelijke beoordeling
Een goede score kan uit toekomstinformatie komen

Informatie die bij het echte besluit nog onbekend is, kan een voorspeller in de test kunstmatig verbeteren.

Code · 41.9

Een reproduceerbare conditionele energieschatting

9/16

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.

Pythonenergie_regressie.py35 regelsDownload
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.5
lambda 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
0306090120150180810121416dag sinds 01-10-2025 (UTC+1)E (kWh/dag)synthetische dataregressie
Dit is een conditionele fit met gerealiseerd modelweer, geen operationele dag-vooruittoets. Het testdeel is niet voor modelkeuze gebruikt; echte prognosefouten ontbreken hier.
Uitleg · 41.10

Kruisvalidatie die vooruit kijkt

10/16

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.

foldtrainingsdagenbeoordeling
10–5960–79
20–7980–99
30–99100–119
Uitleg · 41.11

Residuen vertellen welke fout je mist

11/16

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.

0306090120150180−1,0−0,50,00,51,0dagresidu data−model (kWh/dag)residu
Een kleine rms alleen sluit trend, heteroscedasticiteit, autocorrelatie of fouten op zeldzame dagen niet uit.
Uitgewerkt voorbeeld · 41.12

Een foutscore is een keuze

12/16
Residuen: −1, 0, +1, +4 kWh.
Gegeven
  • vier modeldagen
Gevraagd
  • MAE, RMSE en bias
Oplossing
  1. 1
    MAE=(1+0+1+4)/4=1,5 kWh.
  2. 2
    RMSE=√[(1+0+1+16)/4]=√4,5=2,1213 kWh.
  3. 3
    Bias=(−1+0+1+4)/4=1 kWh. Met residu data−model betekent dit gemiddeld 1 kWh onderschatting.
Antwoord
RMSE weegt de grote fout sterk; bias onthult de richting.
Uitleg · 41.13

Onzekerheid en extrapolatie blijven zichtbaar

13/16

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.

uitvoerbewijs
puntvoorspellingkWh en horizon
intervaldekking op apart datadeel
statusgeldig regime of extrapolatie
versiedata, model, scaler en commit
Verhaal · 41.14

Voorspellen verandert het meetproces

14/16

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 apartreden
onbegrensde vraagcomfortbehoefte
uitgevoerde vraagbeheeractie
afgeknepen zonweer en SoC onderscheiden
modelmanifestfeedback herleiden
Naslag · 41.15

Regressie beoordelen

15/16
kwadratische foutmaat
symboolbetekeniseenheid
data−voorspellingkWh
probleemeerste controle
hoge testfoutbasislijn, lek en regime
instabiele coëfficiëntenrang, schaal en collineariteit
mooie trainingsfoutflexibiliteit en selectie
trend in residudrift of ontbrekende toestand
Het geheel · 41.16

Een model dient een besliscontract

16/16

Regressie verbindt energiefysica, dataherkomst en beheer. De voorspeller krijgt een meetbare rol en begrensde bevoegdheid.

Habitat

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.

Samenvatting

In het kort

Begrippen

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.
Aan de slag in het werkboek9 opdrachten, van oefenen tot uitdagen