Het gevaar van 'Overfitting' bij Machine Learning modellen
Je hebt een mooie bot gebouwd die in de backtest op Interactive Brokers of Alpaca met Python en de CCXT-bibliotheek een winstgevend pad lijkt te tekenen. De equity-curve stijgt gestaag, de drawdown blijft binnen de perken en de Sharpe ratio ziet er veelbelovend uit.
Maar zodra je hem live zet bij je broker, stort het feest in. Waarom?
Omdat je model waarschijnlijk te veel heeft geleerd van het verleden en niets begrijpt van de toekomst. Dat is het gevaar van overfitting.
Wat is overfitting eigenlijk?
Stel je voor dat je een leerling hebt die woordjes voor een Franse toets moet leren. In plaats van de taal te begrijpen, leert hij de exacte volgorde van de vragen en antwoorden uit de oefenboeken. Hij haalt een 10 op de oefentoets, maar zakt voor het echte examen.
Bij machine learning in trading werkt het precies zo. Een model is overfit wanneer het te veel ruis en toevallige patronen uit de historische data leert, in plaats van de underlying marktdynamiek.
Een overfit model is als een sleutel die alleen op één specifieke deur past: de deur die je hebt nagetekend.
In de praktijk betekent dit dat je model perfect presteert op data die het al kent, maar faliet op nieuwe data. Je backtest op 5 jaar intraday data ziet er fantastisch uit, maar de live trading resultaten zijn teleurstellend.
De bot reageert op data-ruis die in de toekomst niet voorkomt. Overfitting is geen bug in je code; het is een fundamenteel probleem van complexiteit versus generalisatie. Te veel vrijheidsgraden (parameters) leiden tot een model dat de data “uit het hoofd leert” in plaats van te begrijpen.
Waarom dit in trading zo’n pijnpunt is
Financiële markten zijn rijk aan ruis. Een kleine spread, een plotse liquiditeitsdip, een news event dat je niet in de data had — het zit allemaal in de prijs.
Als je model al die ruis meeneemt als signaal, leert het toeval herkennen als patroon. Live trading is een andere omgeving dan je backtest: slippage, commissies en orderuitvoer bij je broker (denk aan Interactive Brokers of Binance) veranderen de uitkomst. Veel beginnende quants bouwen strategieën die op 1 minuut candles prachtig werken, maar zodra je overstapt naar 5 minuten candles of een andere broker API, verdwijnt de winst.
Dat is geen toeval; het is overfitting die zich manifesteert. De impact is direct zichtbaar in je risicomanagement.
Je denkt een lage drawdown te hebben, maar live blijkt de werkelijke drawdown 2 tot 3 keer groter. Je risicobeheer is gebaseerd op een vertekend beeld, met potentieel onacceptabele verliezen tot gevolg. Overfitting is ook duur.
Je betaalt voor data, rekenkracht, API-toegang en eventuele cloud hosting (bijvoorbeeld €20–€100 per maand voor een VPS). Als je strategie niet generaliseert, investeer je in een illusie.
Hoe overfitting ontstaat: de werking achter de schermen
Elk machine learning model heeft parameters. Bij een simpel lineair model zijn dat er weinig; bij een diep neuraal netwerk kunnen het er duizenden zijn.
Hoe meer parameters, hoe makkelijker het model de historische data kan “nabootsen”. In trading betekent dat: patronen die in het verleden toevallig voorkwomen, worden verankerd in de gewichten van je netwerk. Feature engineering speelt een grote rol.
Voeg je te veel technische indicatoren toe — RSI, MACD, Bollinger Bands, ATR, orderboek flow, sentiment scores — dan neemt de kans op overfitting toe. Je model vindt steeds fijnere combinaties die op de backtest werken, maar die in de toekomst niet robuust zijn.
Backtesting valkuilen versterken dit. Gebruik je dezelfde dataset voor zowel tuning als evaluatie?
Dan meet je je model opnieuw met de toetsen die het al kent. Je hebt geen onafhankelijke testset, waardoor de prestaties te rooskleurig zijn. Voorkom data leakage in je model; live factoren zoals latency, order type (limit vs market) en slippage zijn in de historische data vaak gladgestreken. Een model dat op slippage-geoptimaliseerde data traint, kan live pijnlijk stilvallen.
Bij broker APIs zoals Alpaca of Interactive Brokers zie je deze nuances pas bij echte orders. Ook tijdsafhankelijkheid is een boosdoener.
Markten veranderen: liquiditeit verschuift, spreads verbreden, nieuwe regelgeving treedt in werking. Een model dat in 2018–2020 werkte, kan in 2024–2025 falen door structurele marktveranderingen.
Herkenning: signalen dat je model overfit is
- De backtest winst is disproportioneel hoog vergeleken met live resultaten.
- De equity-curve is extreem glad zonder noemenswaardige drawdowns.
- De prestaties veranderen drastisch bij kleine aanpassingen (andere timeframes, instrumenten).
- De Sharpe ratio is hoger dan 3 op historische data, maar zakt naar 0.5–1 live.
- De bot reageert op pieken en dalen die je niet in de voorbeelddata herkent.
Een praktijkvoorbeeld: een mean-reversion bot op EUR/USD met 1 minuut candles laat in de backtest een jaarwinst van 25% zien bij een max drawdown van 4%. Live, na 3 maanden, is de drawdown al 12% en de winst nul. De bot “overfit” op spread-patronen die in de historische data gunstig waren, maar live niet.
Praktische aanpak: voorkomen en fixen
Gebruik altijd out-of-sample data. Split je dataset in drie delen: train (bijv. 2018–2021), validatie (2022), en test (2023–2024).
Tune je parameters op de validatieset, evalueer op de testset. Pas live trading aan na een onafhankelijke evaluatie.
Pas cross‑validation toe met time-aware splits. Geen willekeurige k‑fold, maar rolling windows die de tijdsorde respecteren.
Bijvoorbeeld: train op 6 maanden, valideer op de volgende maand, schuif het venster elke maand door. Dit voorkomt dat de toekomst de training binnensijpelt. Beperk de complexiteit.
Kies voor eenvoudige modellen met weinig parameters, zoals lineaire regressie of logistische regressie, voordat je naar diepe netwerken grijpt.
Gebruik regularisatie (L1/L2) en dropout bij neurale netwerken. Een Random Forest model begrijpen helpt je inzien waarom 10–20 features vaak robuuster zijn dan een model met 100+. Valideer op meerdere markten en instrumenten. Test je strategie niet alleen op EUR/USD, maar ook op GBP/USD, goud, of crypto (bijv. BTC/USDT op Binance).
Als de performance consistent is, is je model waarschijnlijk beter generaliseerbaar. Meet live prestaties met reële kosten.
Voeg slippage, commissies en financieringskosten toe aan je backtest. Voor intraday bij Interactive Brokers reken je met ongeveer €0,005–€0,02 per aandeel of €0,5–€2 per futurescontract.
Voor crypto op Binance kun je rond 0,02–0,04% per trade rekenen. Monitor de prestaties na live‑gang. Stel duidelijke limieten in: max drawdown 10%, max dagverlies 2%, en een Sharpe ratio live van minimaal 1.
Als de bot hieronder duikt, stop de live trading en evalueer opnieuw. Gebruik walk‑forward analyse. Optimaliseer je trading strategie periodiek (bijv. elke 3 maanden) op recente data en test op de volgende periode.
Dit bootst de realiteit na: je past je model aan naarmate de markt verandert.
Houd rekening met risicomanagement als fundament. Position sizing op basis van ATR of volatiliteit, stop‑loss levels en een maximum exposure per trade helpen de impact van overfitting te beperken.
Een bot die live te groot inzet, kan door kleine afwijkingen al flinke schade oplopen. Test verschillende modellen en prijsindicaties. Een eenvoudig momentum model op 15 min candles kan robuuster zijn dan een complex patroonherkenner op 1 minuut data.
Vergelijk de prestaties: winst per trade, slagingspercentage, en de verdeling van winst/verlies over tijd.
Investeer in tooling. Gebruik bibliotheken zoals scikit‑learn voor regularisatie, TensorFlow/PyTorch voor neurale netwerken met dropout, en vectorbt of backtrader voor snelle backtests. Een VPS van €25–€50 per maand is vaak voldoende voor een lichtgewicht bot. Sluit aan bij een community.
Platforms zoals QuantConnect en forums rond Python trading bots bieden voorbeeldcode en datasets. Leer van andermans fouten voordat je ze zelf maakt.
Checklist: bouw aan robuuste modellen
- Definieer je doel helder: welk instrument, welke timeframe, welke broker API?
- Bouw een eenvoudige baseline: een simpele regel of lineair model.
- Split je data time‑aware: train, validatie, test.
- Beperk features: kies 10–20 relevante indicatoren.
- Voeg costs toe: slippage, commissies, spreads.
- Valideer op meerdere markten en timeframes.
- Monitor live: stel drawdown- en Sharpe-limieten in.
- Herzie periodiek: walk‑forward analyse elke 3 maanden.
- Pas risicomanagement toe: position sizing, stop‑loss, exposure limieten.
- Documenteer elke aanpassing: houd een logboek bij voor transparantie.
Overfitting is geen onoverkomelijk probleem, maar het vereist discipline. Met een gestructureerde aanpak, realistische kosten en een gezonde dosis voorzichtigheid bouw je trading bots die niet alleen op papier werken, maar ook live hun mannetje staan.
