Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

We zagen in de vorige sectie dat modellen uitdrukken hoe data tot stand komt doorheen een verzameling van wiskundige functies met twee soorten functie-argumenten:

  1. gekende waarden van inputvariabelen

  2. onbekende parameters

Die twee types staan nooit los van elkaar. Parameters hebben altijd betrekking op één of meerdere inputvariabelen.

Het linken van parameters aan inputvariabelen gebeurt via features. Deze geven een numerieke uitdrukking aan één of meerdere inputvariabelen zodat ze wiskundig aan de overeenkomstige modelparameter(s) kunnen worden gekoppeld.

  +-------------------+      +-------------------+      +----------------------+
  |   Inputvariabele   | ---> |      Feature      | ---> |    Modelparameter    |
  +-------------------+      +-------------------+      +----------------------+
(bv. tijd, locatie, ...)       (numerieke waarde)          (numeriek patroon)

Feature engineering

Het proces waarbij we de link leggen tussen model parameters en de data aan de hand van features noemen we feature engineering. Wanneer we zelf op maat modellen uitwerken voor bepaalde patroonherkenning, gaan we soms heel veel tijd in dit proces steken. Er zijn vaak verschillende keuzes die gemaakt kunnen worden over hoe we precies bepaalde informatie in de data projecteren op de parameters via de features. Die keuzes kunnen bepalend zijn voor de mogelijkheid om bepaalde patronen te leren.

Source
import random
import time

random.seed(42)
# Create a sample of epochs
current_epoch = int(time.time())
sample_epochs = [
    current_epoch - random.randint(30 * 24 * 3600, 6 * 30 * 24 * 3600) for _ in range(10)
]
sample_epochs
[1743678853, 1752538829, 1753987044, 1741965502, 1749792428, 1750298051, 1750661800, 1752065597, 1742050718, 1752687071]
from datetime import datetime

import pandas as pd


def get_season(dt):
    """
    Determine the season for a given datetime object.

    Args:
        dt (datetime): The datetime object to evaluate.

    Returns
    -------
        str: The season ("spring", "summer", "autumn", or "winter").
    """
    Y = dt.year
    if dt >= datetime(Y, 3, 21) and dt < datetime(Y, 6, 21):
        return "spring"
    elif dt >= datetime(Y, 6, 21) and dt < datetime(Y, 9, 23):
        return "summer"
    elif dt >= datetime(Y, 9, 23) and dt < datetime(Y, 12, 21):
        return "autumn"
    else:
        return "winter"


df = pd.DataFrame({"epoch": sample_epochs})
df["datetime"] = pd.to_datetime(df["epoch"], unit="s")
df["season"] = df["datetime"].apply(get_season)
df
Loading...
from sklearn.preprocessing import OneHotEncoder

encoder = OneHotEncoder(categories=[["winter", "spring", "summer", "autumn"]], sparse_output=False)
season_encoded = encoder.fit_transform(df[["season"]])
season_columns = [f"season_{cat}" for cat in encoder.categories_[0]]
season_dummies = pd.DataFrame(season_encoded, columns=season_columns, index=df.index)
df = pd.concat([df, season_dummies], axis=1)
df
Loading...

Meetschaal

De keuzes bij feature engineering worden in de eerste plaats bepaald door de meetschaal van de inputvariabelen:

  • Nominaal: De informatie laat toe om items in bepaalde categorieën te plaatsen (bv. “fruit” \neq “groente” \neq “vlees” \neq “rond” \neq “vierkant” \neq \ldots)

  • Ordinaal: De informatie laat toe om items te ordenen (bv. “small” << “medium” << “large”)

  • Interval: De informatie laat toe om de afstand tussen items te bepalen (bv. 45°10°=5°(30°)45\degree - 10\degree = 5\degree - (-30\degree))

  • Ratio: De informatie laat toe om de verhoudingen tussen items te bepalen (bv. 120km/h60km/h=30km/h15km/h\frac{120km/h}{60km/h} = \frac{30km/h}{15km/h})

(On)volledigheid

De data zijn in veel gevallen onvolledig (met verschillende gradaties per inputvariabele) en er moet dus bij feature engineering nagedacht worden over hoe om te gaan met missing data:

  • Niet: Sommige modellen kunnen perfect om met voorbeelden (denk: rijen) waar één of meerdere feature-waarden ontbreken

  • Verwijderen: Als er genoeg andere voorbeelden zijn kan het baten om onvolledige rijen in de feature matrix simpelweg te verwijderen

  • Imputation: Hierbij gaan we ontbrekende feature waarden volgens een bepaalde strategie invullen.

Missing value imputation

Wanneer missingness systematisch optreedt, draagt het bij tot ongebalanceerdheid van de trainingsdata en neemt het risico op bias in de model outputs toe. Er bestaan verschillende strategieën om ontbrekende waarden in te vullen (random, interpolatie, gemiddeldes, enz.). Er bestaan zelfs model-gebaseerde strategieën.