Wat is 'Overfitting' in AI modellen en hoe voorkom je het?

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Alex de Vries
Quantitatief Analist & Algo-Trading Expert
Machine Learning & AI in Trading · 2026-02-15 · 7 min leestijd

Je hebt een gave AI-bot gebouwd die in de backtest als een tierelier draait, maar zodra je hem live zet op je broker, verliest hij geld. Herkenbaar? Dan heb je waarschijnlijk last van overfitting. We gaan het hier simpel houden: wat het is, waarom het in algorithmic trading zo gevaarlijk is, en hoe je het voorkomt zonder een PhD wiskunde te doen.

Wat is overfitting eigenlijk?

Stel je voor dat je een model traint op historische data van de S&P 500, bijvoorbeeld 5 jaar minutendata via de API van Interactive Brokers. Je model leert elk piekje en dal zo goed dat het de data uit zijn hoofd kent.

Dat voelt sterk, maar het is vals spelen. Het model werkt perfect op de geschiedenis, maar faalt op nieuwe data. Overfitting is simpelweg teveel leren van ruis in plaats van signaal.

Je bot onthoudt toeval en specifieke marktperiodes, in plaats van algemene patronen.

Waarom is het extra gevaarlijk in trading?

Resultaat: prachtige backtest, teleurstellende live performance. Een bekende vuistregel: als je model meer parameters heeft dan bruikbare data-punten, is overfitting waarschijnlijk. In trading gaat het om signalen, niet om perfecte fits op oude koersen. Financiële markten zijn ruiser dan de gemiddelde dataset.

Een AI-model dat te strak fit op historische data, reageert overspannen op kleine veranderingen. Je bot gaat ‘jagen’ op ruis en betaalt daarmee te veel transactiekosten.

Brokerkosten en slippage zijn onverbiddelijk. Als je bot 500 trades per dag doet op een actief aandeel als Tesla, en je betaalt €0,01 per aandeel bij een broker zoals DEGIRO of Interactive Brokers, tikt dat aan. Overfitting leidt tot te veel trades op toeval, en daarmee tot extra kosten zonder extra rendement.

Je risicomanagement faalt als je model denkt dat bepaalde patronen altijd terugkomen.

Marktcondities veranderen: liquiditeit, spreads, volatiliteit. Een overfitted model ziet die veranderingen niet en loopt hard tegen de muur.

Stap 1: Verzamel en deel je data op de juiste manier

Begin met goede data. Voor een US-equity bot haal je minuut- of 5-minuutdata via de API van je broker.

Bijvoorbeeld Interactive Brokers via ib_insync, of een dienst als Alpaca voor goedkope data. Zorg dat je tenminste 2 à 3 jaar data hebt, liefst meer.

Verdeel je data in drie delen: train, validatie en test. Gebruik 60% voor trainen, 20% voor validatie en 20% voor test. Deel altijd chronologisch: train op oudere data, test op de meest recente. Zo voorkomt je dat je model in de toekomst kijkt.

Check op leakage. Gebruik nooit toekomstige informatie zoals de slotkoers van vandaag om een beslissing van gisteren te nemen.

In Python check je dit met simpele asserts op tijdstippen en shifts. Tijd nodig: 1–2 uur. Veelgemaakte fout: per ongeluk future data in features stoppen, waardoor backtests te mooi worden.

Tip: gebruik Pandas resample voor consistente tijdframes en vul gaten zorgvuldig. Voorkom dat je per ongeluk weekend-data meeneemt bij intraday-modellen.

Stap 2: Kies een eenvoudig model en beperk parameters

Hou het simpel. Voor trading bots begin je vaak met lineaire modellen of lichte boosting modellen zoals LightGBM.

Kies voor een max depth van 3–5 en een learning rate rond 0.01–0.05. Vermijd deep learning tenzij je echt grote datasets en rekenkracht hebt. Bepaal het aantal features bewust.

Een handige vuistregel: maximaal 1 feature per 50–100 datapunten. Bij 10.000 trainingspunten dus maximaal 100–200 features.

Gebruik logische features: momentum, volatiliteit, spread, orderboek-dichtheid. Wil je je kennis verdiepen? Lees de beste boeken over Machine Learning in Finance 2026. Test per feature op toegevoegde waarde.

Gebruik regularisatie. Voeg L1- of L2-regularisatie toe, of beperk de boomdiepte. In Python: zet in LightGBM de parameters num_leaves laag (bijv. 15–31) en min_child_samples hoog (bijv. 50–200).

Tijd nodig: 2–4 uur voor feature-selectie en tuning. Veelgemaakte fout: te veel complexiteit, te weinig data.

Stap 3: Gebruik tijdreeks-crossvalidatie

Random k-fold werkt niet voor tijdseries. Gebruik time-series cross-validation met expanding windows.

In Python kan dit met TimeSeriesSplit uit sklearn, of je bouwt een custom walk-forward loop. Voorbeeld: 5 folds, waarbij elke fold start na de vorige en 1 maand test bevat. Stel een realistische fold-indeling op.

Bijvoorbeeld: train op 12 maanden, test op 1 maand, schuif steeds 1 maand door.

Zo test je onder verschillende marktcondities. Zorg dat je spread en slippage meeneemt in elke fold, anders zijn je resultaten te optimistisch. Meet per fold de performance: rendement, Sharpe, max drawdown, winrate en gemiddelde trade PnL. Als de performance tussen folds sterk varieert, is je model te gevoelig voor specifieke periodes.

Tijd nodig: 2–3 uur om te coderen en te draaien. Veelgemaakte fout: folds overlappen of verkeerde volgorde, wat leakage geeft.

Stap 4: Backtest met realistische kosten en slippage

Backtests zijn pas serieus als je kosten en slippage meeneemt. Reken met een commissie van €0,005–€0,01 per aandeel en een slippage van 0,01%–0,05% per trade, afhankelijk van liquiditeit.

Bij opties of small-caps kan slippage hoger zijn. Simuleer orderuitvoering. Gebruik limit-orders waar het kan en stop-orders voor risicobeheer.

Test of je strategie nog steeds werkt met een realistische fill-rate van 70–90%. Bij snelle momentum-strategieën kan een lage fill-rate je rendement flink drukken.

Gebruik een backtesting-framework als Backtrader, Lean (QuantConnect) of een simpele Pandas-loop. Zorg dat je transactiekosten, financieringskosten en eventuele beursheffingen meeneemt, en vergeet niet om je getrainde model correct op te slaan.

Tijd nodig: 3–5 uur. Veelgemaakte fout: kosten vergeten of slippage onderschatten, waardoor de bot in het echt tegenvalt.

Stap 5: Doe een walk-forward analyse

Een walk-forward analyse test of je model robuust blijft naarmate de tijd vordert. Je traint op een window, test op een volgend window, en herhaal dit over meerdere cycli. Dit toont hoe je bot zou hebben gedraaid in de praktijk.

Plan minimaal 5–10 cycli. Gebruik een trainingswindow van 6–12 maanden en een testwindow van 1–3 maanden.

Pas je parameters per cyclus niet teveel aan; je wilt stabiliteit zien, geen curve-fitting per cyclus. Evalueer de walk-forward resultaten op consistentie.

Kijk naar gemiddelde Sharpe, drawdown en aantal trades per cyclus. Als de prestaties na 2022 plotseling instorten, is je model waarschijnlijk te specifiek getraind op eerdere marktomstandigheden. Tijd nodig: 4–6 uur. Veelgemaakte fout: te kleine windows, waardoor je te weinig data hebt voor betrouwbare schattingen.

Stap 6: Pas risicomanagement en monitoring toe

Stel harde risicolimieten in. Gebruik een max drawdown-limiet van 10–15% en een dagelijks risicobudget van 1–2% van het kapitaal.

Stop de bot als deze limieten worden overschreden en evalueer opnieuw. Monitor live performance met een dashboard. Track de actuele Sharpe, winrate, gemiddelde trade PnL en slippage versus backtest.

Zet alerts op afwijkingen, bijvoorbeeld als de winrate daalt met meer dan 10% punten of de slippage verdubbelt. Her-train op een vast schema, bijvoorbeeld maandelijks, maar evalueer altijd op out-of-sample data.

Gebruik een versiebeheer voor je modellen en datasets, zodat je precies weet welke data en parameters bij een live-versie horen.

Tijd nodig: 2 uur per week voor monitoring. Veelgemaakte fout: te snel opnieuw trainen op recente data, waardoor je opnieuw overfit.

Veelgemaakte fouten en hoe je ze oplost

  • Te veel features: beperk tot 50–100 voor redelijke datasets en voer feature-importance checks uit.
  • Geen kosten meenemen: reken altijd met commissies en slippage, anders is je backtest een sprookje.
  • Random splits bij tijdseries: gebruik time-series cross-validation en walk-forward.
  • Diepe modellen op kleine data: kies lichte modellen of verzamel meer data voordat je complexiteit verhoogt.
  • Geen risicobudget: zet harde stop-loss en daglimieten, en monitor actief.

Verificatie-checklist

  1. Dataset in drie delen: train (60%), validatie (20%), test (20%) chronologisch gesplitst.
  2. Geen toekomstige features: alle features zijn op het moment van beslissing beschikbaar.
  3. Model eenvoudig: max depth 3–5, learning rate 0.01–0.05, max 1 feature per 50–100 datapunten.
  4. Time-series CV gebruikt: minimaal 5 folds met expanding windows.
  5. Backtest inclusief kosten: €0,005–€0,01 commissie en 0,01–0,05% slippage verwerkt.
  6. Walk-forward analyse gedaan: 5–10 cycli met 6–12 maanden train en 1–3 maanden test.
  7. Risicomanagement actief: max drawdown 10–15%, dagrisico 1–2%, monitoring-dashboard ingesteld.
  8. Modellen versiebeheerd: data en parameters traceerbaar, her-train schema vastgelegd.

Als je deze checklist afvinkt, is de kans op overfitting een stuk kleiner. Je bot blijft robuuster onder nieuwe marktcondities en je houdt beter zicht op risico’s. En dat is precies wat je wilt: een verantwoord AI-model dat niet alleen in de backtest goed presteert, maar ook live zijn werk doet.

Portret van Alex de Vries, Quantitatief Analist & Algo-Trading Expert
Over Alex de Vries

Alex is een ervaren quantitatief analist en Python-ontwikkelaar die complexe trading concepten vertaalt naar begrijpelijke, praktische handleidingen voor zowel beginners als gevorderden.

Volgende stap
Bekijk alle artikelen over Machine Learning & AI in Trading
Ga naar overzicht →