Sobes.tech
Middle — Senior

Kas yra target encoding laiko kategorinėms savybėms ir kaip išvengti leakage?

sobes.tech AI

Atsakymas iš AI

Target encoding kategorinėms požymiams laiko eilutėse yra metodas, kuris pakeičia kategorinius reikšmes skaitinėmis, remiantis tikslo kintamojo statistika (pavyzdžiui, kiekvienos kategorijos vidutinė tikslo reikšmė). Laiko duomenų kontekste svarbu išvengti informacijos nutekėjimo (leakage), kai kodavimo metu naudojami duomenys iš ateities, palyginti su dabartiniu laiko tašku.

Norint išvengti leakage, kiekvieno laiko taško target encoding skaičiavime naudojama tik ta informacija, kuri yra prieinama iki šio taško. Pavyzdžiui, kiekvienai kategorijai apskaičiuojama visų ankstesnių stebėjimų tikslo vidutinė reikšmė, neįtraukiant dabartinio ar būsimų stebėjimų. Tai galima įgyvendinti naudojant kumuliacinius vidurkius arba vėluojančius slankiuosius langus.

Python (pandas) pavyzdys:

import pandas as pd

df = pd.DataFrame({
    'category': ['A', 'B', 'A', 'B', 'A'],
    'target': [1, 0, 1, 1, 0],
    'time': pd.date_range('2023-01-01', periods=5)
})

df = df.sort_values('time')

# Kumulatyvinis tikslo vidurkis pagal kategoriją, perkelta 1, kad nebūtų naudojamas dabartinis tikslas

df['target_enc'] = df.groupby('category')['target'].apply(lambda x: x.shift().expanding().mean())

print(df)

Šiuo būdu target encoding atspindi istorinę statistiką be ateities duomenų nutekėjimo.