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.