Ga naar hoofdinhoud

Toestandsruimtemodellen: hoe ze werken en waar ze voor worden gebruikt

Leer hoe toestandsruimtemodellen dynamische systemen vertegenwoordigen met verborgen toestanden en observaties, inclusief de toestand- en observatievergelijkingen, Kalman-filtering en toepassingen op tijdreeksen.
· 8 min lezen

Verken met AI

Stel je een schip voor dat door mist navigeert. De gps is ruisachtig, de oceaanstroom is onbekend en de exacte positie is niet direct meetbaar. Die kun je alleen benaderen op basis van sensorwaarden. Toestandsruimtemodellen zijn precies voor dit soort problemen ontwikkeld: systemen waarbij wat je wilt weten verborgen is, en jij alleen beschikt over onvolmaakte metingen daarvan.

Dit artikel behandelt de structuur van toestandsruimtemodellen, hoe je verborgen toestanden schat via filtering en smoothing, waar het Kalman-filter in het plaatje past, en hoe je deze modellen in Python en R implementeert.

Wat is een toestandsruimtemodel?

Een toestandsruimtemodel is een wiskundig raamwerk om een systeem te beschrijven dat in de tijd verandert via toestanden die je niet direct kunt observeren. Twee grootheden spelen een rol: de toestand, de werkelijke onderliggende informatie die het systeem op elk moment beschrijft, en de observatie, de ruisachtige, indirecte meting die je daadwerkelijk krijgt.

Het model specificeert twee dingen: hoe de verborgen toestand van de ene tijdstap naar de volgende evolueert, en hoe die verborgen toestand de observaties oplevert die je ziet. Die scheiding maakt het raamwerk zo algemeen. Het komt voor in signaalverwerking, econometrie, regelsystemen en machine learning. Vaak gebeurt dit zonder dat men doorheeft dat ze allemaal binnen dezelfde formele structuur werken.

Hoe toestandsruimtemodellen werken

De kernlogica volgt bij elke tijdstap een eenvoudige volgorde:

Vorige toestand → Huidige toestand → Observatie

Het systeem beweegt van zijn vorige verborgen toestand naar een nieuwe. Deze overgang kan willekeur bevatten, omdat echte systemen niet perfect voorspelbaar zijn. De nieuwe toestand genereert vervolgens een meetbare observatie, die zijn eigen ruis heeft. Je ziet de toestand nooit direct; je ziet wat die oplevert, onvolmaakt.

Wat je wél kunt doen, is elke nieuwe observatie gebruiken om je beste schatting van de verborgen toestand bij te werken. Dat is het inferentieprobleem, en daar is het meeste algoritmische gereedschap rond toestandsruimtemodellen voor bedoeld.

Verborgen toestanden genereren in de tijd ruisachtige observaties. Afbeelding door auteur.

Toestand- en observatievergelijkingen

De structuur van het model komt neer op twee vergelijkingen. Eén voor hoe de toestand beweegt, één voor wat je kunt meten.

Toestandsvergelijking

De toestandsvergelijking beschrijft hoe de verborgen toestand evolueert. In scalaire vorm:

Hier is zₜ de huidige verborgen toestand, a vangt de overgangsdynamiek (hoe sterk de vorige toestand doorwerkt), en wₜ is procesruis — de willekeur in hoe het systeem beweegt. In de matrixformulering voor multivariate systemen wordt a een overgangsmatrix, maar het idee is identiek.

Observatievergelijking

De observatievergelijking verbindt de verborgen toestand met wat je meet:

yₜ is de geobserveerde meting, c definieert de observatierelatie, en vₜ is meetruis. Begin met dit soort scalaire versies voordat je je zorgen maakt over de algemene matrixvorm. De matrices voegen generaliteit toe, geen nieuwe ideeën.

Een eenvoudig voorbeeld van een toestandsruimtemodel

Denk aan een auto die over een weg rijdt. De werkelijke positie en snelheid zijn de verborgen toestand. Je kunt die niet direct observeren. Wat je hebt, is een gps-meting, en die is ruisachtig. De toestandsvergelijking modelleert hoe positie en snelheid tussen tijdstappen veranderen (de auto blijft ruwweg met dezelfde snelheid rijden). De observatievergelijking verbindt de werkelijke positie met de gps-meting, die er enkele meters naast kan zitten.

Een goede visualisatie laat drie lijnen zien: de werkelijke positie (vloeiend), de gps-metingen (verspreid rond de waarheid) en de geschatte positie uit het model (dicht bij de waarheid, wat gladder dan de ruwe gps). Die derde lijn verkrijgen is precies de taak van het model.

Hoe toestanden worden geschat

Het definiëren van het model is maar de helft van het probleem. Je moet ook de verborgen toestanden afleiden uit de observaties die je daadwerkelijk hebt. Drie taken dekken het speelveld:

Filtering schat de huidige toestand met alleen observaties tot en met nu — realtime-inferentie, handig voor tracking en besturing. Smoothing gaat terug en herziet die schattingen met observaties van zowel vóór als na een gegeven punt — over het algemeen nauwkeuriger, maar vereist de volledige reeks. Voorspellen extrapoleert vooruit om toekomstige toestanden te schatten voordat observaties binnenkomen.

De meeste toepassingen gebruiken filtering. Smoothing komt aan bod wanneer je een terugblik doet en nauwkeurigheid belangrijker is dan snelheid.

Kalman-filtering en toestandsruimtemodellen

Het Kalman-filter is het algoritme voor filtering in lineaire Gaussische toestandsruimtemodellen. Het is de moeite waard om hier precies te zijn: het toestandsruimtemodel is het model; het Kalman-filter is één inferentiemethode die geldt voor een specifieke klasse van die modellen.

Het filter werkt in twee afwisselende stappen. In de voorspelstap gebruikt het de toestandsvergelijking om de huidige schatting vooruit in de tijd te projecteren, samen met een maat voor de onzekerheid van die schatting. In de updatestap komt er een nieuwe observatie binnen en wordt de schatting gecorrigeerd. Hoeveel die verschuift, hangt af van de relatieve onzekerheid van de voorspelling versus de meting. Als de voorspelling van het model betrouwbaar is, weegt de observatie minder. Als het gps-signaal schoon is en het model onzeker, domineert de observatie. Die onzekerheidsgewogen menging is wat het Kalman-filter in de praktijk laat werken.

Er zijn uitbreidingen voor niet-lineaire of niet-Gaussische situaties: het uitgebreid Kalman-filter lineariseert de dynamiek, het unscented Kalman-filter gebruikt een slimmere benadering, en deeltjesfilters behandelen het volledig algemene geval door te sampelen. Dat zijn onderwerpen voor andere artikelen.

Typen toestandsruimtemodellen

Het raamwerk dekt een reeks instellingen, afhankelijk van wat je bereid bent aan te nemen over de dynamiek en de ruis.

Lineair Gaussische toestandsruimtemodellen zijn de klassieke setting: lineaire overgangs- en observatievergelijkingen, Gaussische ruis. Kalman-filtering is direct toepasbaar en exacte inferentie is haalbaar.

Niet-lineaire toestandsruimtemodellen ontstaan wanneer de toestandsovergang of observatierelatie niet lineair is — denk aan een slinger, of een model waarin prijseffecten afvlakken. Exacte inferentie is dan niet meer beschikbaar.

Niet-Gaussische toestandsruimtemodellen laten de aanname los dat ruis een normale verdeling volgt. Teldata, binaire uitkomsten en processen met zware staarten vallen hieronder.

Toestandsruimtemodellen vs. verwante tijdreeksmodellen

Een paar vergelijkingen zijn het waard om expliciet te maken, want de grenzen zijn vager dan ze op het eerste gezicht lijken.

Toestandsruimtemodellen vs. ARIMA

ARIMA modelleert de geobserveerde waarden en hun vroegere fouten direct, zonder een verborgen toestand te introduceren. Toestandsruimtemodellen brengen latente toestanden expliciet in. Dat gezegd hebbende: ARIMA-modellen kunnen worden geherformuleerd in toestandsruimtevorm — dus de twee staan minder los van elkaar dan het lijkt, en software gebruikt vaak intern toestandsruimterepresentaties om ARIMA toch te fitten.

Toestandsruimtemodellen vs. verborgen Markov-modellen

Beide omvatten verborgen toestanden. Klassieke HMM's gebruiken discrete latente toestanden (het systeem zit in één van k modi), terwijl de meeste toestandsruimtemodellen continue toestanden gebruiken. Voor spraakherkenning zijn discrete modi logisch; voor het volgen van een fysiek object zijn continue toestanden de natuurlijke keuze.

Toestandsruimtemodellen vs. structurele tijdreeksmodellen

Structurele tijdreeksmodellen (die een reeks ontbinden in trend-, seizoens- en onregelmatige componenten) worden doorgaans geformuleerd als toestandsruimtemodellen in plaats van ermee te concurreren. Het zijn specifieke toepassingen van het raamwerk.

Toestandsruimtemodellen in Python en R

De workflow is in beide talen vergelijkbaar — definieer het model, fit het en haal de schattingen van de verborgen toestand eruit.

Toestandsruimtemodellen in Python

De bibliotheek statsmodels biedt een duidelijke interface voor het fitten van toestandsruimtemodellen. Hier wordt een local-levelmodel (het eenvoudigste structurele model, met een random walk-toestand en ruisachtige observaties) gefit op tijdreeksdata:

import statsmodels.api as sm

# Fit a local level (random walk plus noise) model
model = sm.tsa.UnobservedComponents(time_series, level='local level')
result = model.fit(disp=False)

# Filtered state estimates (the hidden level at each time step)
print(result.filtered_state[0])

# Forecast the next 10 periods
forecast = result.forecast(10)

De gefilterde toestand geeft je de beste schatting van het verborgen niveau op elk tijdstip. Dat is de belangrijkste output waar je om geeft, niet de parameters zelf.

Toestandsruimtemodellen in R

In R behandelt het pakket KFAS Gaussische toestandsruimtemodellen en is het de moeite waard als je hier regelmatig mee werkt. De workflow spiegelt die van Python: definieer een modelobject, fit het en haal de gesmoothde of gefilterde toestanden op. Interpreteer de schattingen van de verborgen toestand, niet alleen de fitstatistieken.

library(KFAS)

# Fit a local level (random walk plus noise) model
model <- SSModel(time_series ~ SSMtrend(1, Q = NA), H = NA)
fit <- fitSSM(model, inits = c(log(1), log(1)))
out <- KFS(fit$model)

# Filtered state estimates (the hidden level at each time step)
out$att

# Forecast the next 10 periods
predict(fit$model, n.ahead = 10)

Voordelen en beperkingen van toestandsruimtemodellen

Zoals bij de meeste modelleerraamwerken komen de sterke en zwakke punten uit dezelfde hoek: je moet vooraf een structuur kiezen.

Voordelen: Ze representeren verborgen processen expliciet in plaats van eroverheen te wrijven. Ze behandelen systemen die in de tijd veranderen op een natuurlijke manier. Meetonzekerheid is in het model ingebouwd en geen bijzaak. En hetzelfde raamwerk ondersteunt filtering, smoothing en forecasting zonder de modelstructuur te wijzigen.

Beperkingen: Het specificeren van het model kan lastig zijn. Je moet beslissen wat de verborgen toestand betekent en hoe die evolueert, wat echt domeininzicht vereist. Voor niet-lineaire of niet-Gaussische systemen wordt inferentie kostbaar. En als je aannames over de dynamiek of ruis onjuist zijn, zullen de schattingen op manieren fout zijn die niet altijd zichtbaar zijn.

Conclusie

Een toestandsruimtemodel beschrijft twee dingen: hoe een niet-geobserveerde toestand in de tijd evolueert, en hoe die toestand de observaties oplevert die je kunt meten. Dat zijn de toestandsvergelijking en de observatievergelijking. Alles daarbuiten (Kalman-filtering, smoothing, voorspellen) draait om het afleiden van de verborgen toestand uit de data die het model genereert.

Wat ik nuttig vind aan dit raamwerk is dat het je dwingt expliciet te maken wat je niet weet. In plaats van de observaties direct te modelleren (zoals ARIMA doet), word je gedwongen een verhaal te kiezen over het onderliggende proces. Dat is een beperking, maar ook een verheldering. Als je eenmaal hebt opgeschreven wat je denkt dat de verborgen toestand is en hoe die beweegt, wordt het inferentieprobleem mechanisch. Het moeilijke deel was al het modelleren.

Als je uit klassieke tijdreeksmethoden komt, is het de moeite waard toestandsruimtemodellen op hun eigen merites te begrijpen in plaats van als een generalisatie van wat je al weet. Onze Time Series with Python-cursus behandelt de bredere gereedschapskist, en als verborgen Markov-modellen of Kalman-filtering je volgende stop zijn, sluit de hier gelegde conceptuele basis daar direct op aan.

Vinod Chugani

Auteur

Vinod Chugani

Vinod Chugani begon zijn carrière in Tokio als JPMorgans jongste Head van de Hedge Fund Sales Desk en vestigde later een individueel verkooprecord bij Lehman Brothers, bouwde daarna een elektronicadistributiebedrijf in 30 landen uit tot voorbij SG$100 miljoen omzet en maakte vervolgens de overstap naar data. Als afgestudeerde Economie aan Duke en alumnus van de NYC Data Science Academy was hij een van de drie beursontvangers uit meer dan 100 aanmeldingen voor Hugo Bowne-Andersons Building AI Applications-cursus op Maven. Tegenwoordig schrijft hij voor DataCamp, KDnuggets, Machine Learning Mastery en Statology over onderwerpen van statistiek tot agentische AI, en coacht hij dataprofessionals bij de NYC Data Science Academy met meer dan 1.000 één-op-één-sessies op zijn naam.

 

Veelgestelde vragen

Wat is het verschil tussen een toestandsruimtemodel en een tijdreeksmodel zoals ARIMA?

ARIMA modelleert relaties tussen geobserveerde waarden en hun vroegere fouten direct — er is geen verborgen toestand. Toestandsruimtemodellen introduceren een latente toestand waaruit de observaties worden gegenereerd. In de praktijk kunnen veel tijdreeksmodellen (inclusief ARIMA) in toestandsruimtevorm worden geschreven, dus ze vullen elkaar eerder aan dan dat ze concurreren.

Moet ik Kalman-filtering begrijpen om toestandsruimtemodellen te gebruiken?

Niet om ze te gebruiken — bibliotheken zoals statsmodels in Python en KFAS in R verzorgen de filtering intern. Maar het begrijpen van de logica van voorspellen-en-updaten helpt je de output te interpreteren en problemen te debuggen wanneer het model niet goed past.

Wanneer moet ik smoothing gebruiken in plaats van filtering?

Gebruik smoothing wanneer je de volledige dataset hebt en de meest nauwkeurige toestandschattingen wilt — terugblikanalyses, anomaliedetectie of het opschonen van een historische reeks. Gebruik filtering wanneer je realtime schattingen nodig hebt zodra data binnenkomt.

Wat gebeurt er als mijn systeem niet-lineair is?

Het standaard Kalman-filter is dan niet meer exact toepasbaar. Veelvoorkomende alternatieven zijn het uitgebreid Kalman-filter (dat lineariseert rond de huidige schatting), het unscented Kalman-filter (dat een slimmere benadering gebruikt) en deeltjesfilters (die uit de toestandsverdeling sampelen en voor het algemene geval werken).

Hoe kies ik wat ik in de verborgen toestand opneem?

Dit is het lastige deel — en het is een modelleerbeslissing, geen statistische. De verborgen toestand moet alles bevatten wat de volgende observatie aanstuurt en wat je niet direct kunt meten. Voor een bewegend object zijn dat typisch positie en snelheid. Voor een economische reeks kan het een onderliggende trend en een seizoenscomponent zijn. Begin simpel en voeg pas complexiteit toe als het eenvoudige model duidelijk faalt.

Kunnen toestandsruimtemodellen ontbrekende observaties aan?

Ja, en dit is een van hun echte voordelen ten opzichte van methoden zoals ARIMA. Wanneer een observatie ontbreekt, slaat het filter eenvoudig de updatestap over en wordt de voorspelling doorgevoerd. De onzekerheid neemt tijdens de onderbreking vanzelf toe, wat precies het juiste gedrag is.

Wat is de relatie tussen toestandsruimtemodellen en deep learning-sequentiemodellen zoals LSTM's?

Beide modelleren sequentiële data met een verborgen toestand, maar daar houdt de vergelijking op. LSTM's leren de toestandsdynamiek uit data zonder interpreteerbare structuur; toestandsruimtemodellen specificeren de dynamiek expliciet en produceren onzekerheidsschattingen. Voor interpreteerbaarheid en kleine datasets zijn toestandsruimtemodellen vaak nuttiger. Voor grote datasets met complexe patronen winnen neurale benaderingen vaak op ruwe prestaties.

Is de verborgen toestand altijd eendimensionaal?

Nee. De toestand kan een vector van elke grootte zijn. In het voorbeeld van het bewegende object is de toestand tweedimensionaal: positie en snelheid. In complexere structurele modellen kan de toestand tegelijkertijd een trendcomponent, meerdere seizoenscomponenten en een regressieterm bevatten. De matrixformulering behandelt dit alles uniform.

Onderwerpen

Gerelateerd