Feature Engineering: Hoe maak je zinvolle input data voor je AI?

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

Stel je voor: je hebt een prachtige AI-bot gebouwd die de markt gaat veroveren. Je sluit hem aan op de API van je broker, je start de backtest en... niets.

De bot presteert niet beter dan een muntje opgooien. Het probleem? Je input data is waardeloos.

Je geeft je AI ruis in plaats van signalen. Feature engineering is het kookproces waarbij je ruwe data – zoals een simpele prijs van €50,23 – omtovert tot smaakvolle, voedzame informatie waar je model echt iets mee kan. Denk aan het verschil tussen een rauwe aardappel en een perfecte friet.

Beide zijn aardappel, maar één is eetbaar en lekker, de ander niet. Zo werkt het ook met data voor algoritmische trading. Je broker levert je een stroom JSON- of CSV-gegevens, maar die moet je bewerken voordat je Python-script ermee aan de slag kan. Zonder goede features train je je AI op geluk, niet op kennis.

Wat heb je nodig voordat je start?

Je hebt een werkende omgeving nodig. Geen zorgen, dit hoeft niet duur te zijn.

Een simpele laptop met minimaal 8GB RAM volstaat voor de meeste backtests op historische data. Als je met jarenlange tick-data gaat werken, kies dan voor 16GB of meer. Installeer Python (versie 3.8 of nieuwer) en een IDE zoals VS Code (gratis). Gebruik de volgende libraries: Pandas voor data-manipulatie, NumPy voor wiskundige berekeningen, en TA-Lib voor technische indicatoren.

TA-Lib installeren kan soms een gedoe zijn; op Windows download je de binairy via de officiële site en installeer je hem via pip. Je hebt toegang tot data nodig.

Voor dit voorbeeld gebruiken we de API van een broker zoals Interactive Brokers of een data-provider als Alpaca.

Zorg dat je een gratis testaccount hebt aangemaakt. Je hebt ook €0,- nodig voor deze data, want de meeste bieden historische data gratis aan voor backtesting. Tot slot: een backtesting framework.

We gaan geen code schrijven die vanaf nul een bot draait. We gebruiken vectorized backtesting met Pandas.

Dit is sneller en makkelijker te debuggen dan event-driven systemen voor beginners. Hou er rekening mee dat dit ongeveer 1 uur duurt om in te richten als je nog nooit Pandas hebt gebruikt. Veelgemaakte fout: Direct beginnen met coderen zonder je data te inspecteren. Open altijd eerst een Jupyter Notebook en kijk naar je rauwe data voordat je features gaat bouwen.

Stap 1: Ruwe data laden en schoonmaken

Elke broker levert data in een iets ander formaat. De API van bijvoorbeeld Binance of Kraken geeft je JSON, terwijl Interactive Brokers vaak CSV bestanden levert.

Het doel is om een schone DataFrame te maken met een tijd-index en gesloten prijzen. Volg deze instructies stap-voor-stap:

  1. Importeer Pandas en laad je CSV of JSON bestand. Code: df = pd.read_csv('BTC_USD_1h.csv').
  2. Converteer de tijdkolom naar een echte datetime-index. Code: df['time'] = pd.to_datetime(df['time']); df.set_index('time', inplace=True).
  3. Check op missing values (ontbrekende data). Gebruik df.isnull().sum(). Bij 1-uurs candles van een broker zijn soms uurtjes weggevallen door onderhoud.
  4. Vul ontbrekende data op. Gebruik forward-fill (df.fillna(method='ffill')) voor prijzen. Verwijder rijen met nullen bij volume als je daarop filtert.
  5. Filter outliers. Een prijs die opeens 100x hoger is door een bug in de API? Verwijder die rijen.

Tijdsindicatie: Dit duurt ongeveer 15 tot 30 minuten, afhankelijk van de rommeligheid van je data. Specifieke maatvoering: Zorg dat je dataframe minimaal 10.000 rijen bevat voor een beetje betrouwbare backtest. Te weinig data leidt tot overfitting. Veelgemaakte fouten: Het vergeten van de timezone.

Je broker kan UTC gebruiken, maar jouw Python-omgeving kan local time gebruiken.

Dit zorgt voor rare gaps in je chart. Zet alles expliciet naar UTC.

Stap 2: Basisfeatures creëren (Prijsactie)

Nu de data schoon is, gaan we de eerste features bouwen. We willen de AI niet alleen de huidige prijs laten zien, maar ook de context door deep learning en neurale netwerken voor prijsvoorspelling toe te passen.

Wat is de trend? Hoe snel beweegt de prijs?

  1. Log Returns: Gebruik log returns in plaatsig procentuele verandering. Ze zijn statistisch beter voor modellen. Code: df['log_ret'] = np.log(df['close'] / df['close'].shift(1)).
  2. Rolling Averages: Voeg een 20-period en 50-period simple moving average (SMA) toe. Dit helpt de AI om trend te herkennen. Code: df['SMA_20'] = df['close'].rolling(window=20).mean().
  3. Rolling Volatility: De standaardafwijking van de prijs over een window van 20 periodes. Dit laat zien of de markt rustig of chaotisch is.
  4. Price Distance: De afstand van de huidige prijs tot de SMA. Bereken (close - SMA_20) / SMA_20. Dit normaliseert de feature.

Maak deze features aan: Tijdsindicatie: Dit stuk duurt ongeveer 20 minuten coderen. Veelgemaakte fouten: Look-ahead bias. Bereken je features alleen met data die op dat moment beschikbaar was. Gebruik .shift(1) waar nodig om te voorkomen dat de AI de toekomst "ziet" in de huidige candle.

Tip: Sla je dataframe tussentijds op met df.to_parquet('cleaned_data.parquet'). Parquet is veel sneller en compacter dan CSV voor grote datasets.

Stap 3: Technische Indicators toevoegen via TA-Lib

Algoritmische trading bots draaien vaak op technische indicatoren. TA-Lib is een bibliotheek die deze wiskundige formules extreem snel berekent, maar begrijp je ook waarom je bot bepaalde keuzes maakt?

We voegen er een paar toe die relevant zijn voor risicomanagement en entry/exit signalen. Volg deze stappen: Tijdsindicatie: Ongeveer 30 minuten.

  1. Installeer TA-Lib (als je dat nog niet deed).
  2. Voeg de RSI (Relative Strength Index) toe over 14 periodes. Code: df['RSI_14'] = talib.RSI(df['close'], timeperiod=14). Dit meet of een asset overbought (boven 70) of oversold (onder 30) is.
  3. Voeg de MACD (Moving Average Convergence Divergence) toe. Dit geeft momentum signalen. Gebruik de standaard parameters (12, 26, 9).
  4. Voeg Bollinger Bands toe. Dit berekent de bovenste en onderste band op basis van standaardafwijking. Dit is cruciaal voor volatiliteit-gestuurde bots.
  5. Check de shape van je data. TA-Lib verwijdert de eerste rijen waar niet genoeg data is voor de berekening (bijv. 14 rijen voor RSI). Verwijder deze NaN-waarden met df.dropna(inplace=True).

TA-Lib is snel, maar het debuggen van de parameters kan even duren.

Veelgemaakte fouten: Te veel indicators toevoegen. Een dataset met 50 kolommen zorgt voor "dimensionality curse". Je AI raakt verward door ruis. Begin met max 10 tot 15 sterke features.

Stap 4: Windowing en Laggende Features

AI-modellen (zoals LSTM of Gradient Boosting) hebben baat bij een venster van tijd.

Je moet de AI niet alleen de huidige candle geven, maar ook de afgelopen 5 of 10 candles om patronen te herkennen. Zo bouw je een venster: Specifieke maatvoering: Gebruik een window size van 5 tot 20 periodes.

  1. Maak laggende features. Voeg kolommen toe die de waarde van 1, 2, en 3 periodes geleden bevatten. Code: df['close_lag_1'] = df['close'].shift(1).
  2. Creëer een rolling window feature. Bereken bijvoorbeeld de gemiddelde RSI over de afgelopen 5 candles.
  3. Normaliseer je features. AI-modellen werken beter met waarden tussen 0 en 1 of -1 en 1. Gebruik MinMaxScaler uit Scikit-Learn.
  4. Maak een target variabele. Wat wil je voorspellen? Bijvoorbeeld: "Stijgt de prijs morgen met meer dan 0.5%?" (1 voor ja, 0 voor nee). Dit maakt het een classificatieprobleem.

Voor 1-uurs candles betekent dit 5 tot 20 uur historie per voorspelling. Veelgemaakte fouten: Het vergeten van de tijdsvolgorde bij het splitten van data.

Je mag nooit willekeurig trainen en testen splitsen bij tijdseries. Gebruik een cutoff-datum (bijv. alles voor 2023 is train, 2023 is test).

Stap 5: Feature Selectie en Validatie

Nu je een berg features hebt, moet je ze filteren. Je wilt alleen de meest waardevolle meenemen naar je backtest.

Doe dit: Tijdsindicatie: 30 tot 45 minuten voor analyse en selectie. Veelgemaakte fouten: Data leakage bij feature selectie. Bereken de feature importance alleen op de trainingsset, niet op de hele dataset.

  1. Check de correlatie matrix. Verwijder features die te sterk met elkaar correleren (boven 0.9). Ze voegen geen nieuwe informatie toe.
  2. Gebruik een Random Forest model om feature importance te meten. Train een simpel model en kijk welke kolommen de hoogste score hebben.
  3. Verwijder features met een lage importance. Hou er maximaal 10-15 over.
  4. Test op een klein stukje data. Draai een snelle backtest op de eerste 1000 rijen om te zien of je code niet crasht.

Verificatie-checklist

Voordat je je bot live zet, loop deze lijst na: Als je deze stappen hebt doorlopen, heb je een solide basis voor je AI-trading bot.

  • Is je tijdzone consistent (UTC)?
  • Zijn alle NaN-waarden verwijderd?
  • Zijn log returns berekend in plaats van simpele percentages?
  • Heb je look-ahead bias vermeden door te shiften?
  • Zijn de features genormaliseerd?
  • Is je dataset gesplitst zonder toekomstige data in de trainingsset te lekken?
  • Heb je max 15 features overgehouden?

Je input data is nu voedzaam en klaar voor de volgende stap: het trainen van je model. Zet hem op!

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 →