Sobes.tech
Middle — Senior

Какво е target encoding за категориални признаци във времето и как да избегнем leakage?

sobes.tech AI

Отговор от AI

Target encoding за категорийни признаци във времеви редове е метод за заместване на категорийни стойности с числови, базиран на статистиката на целевата променлива (например, средната стойност на целта за всяка категория). В контекста на времеви данни е важно да се избегне изтичане на информация (leakage), когато по време на кодирането се използват данни от бъдещето спрямо текущата точка във времето.

За да се избегне leakage, при изчисляването на target encoding за всяка времева точка се използва само информацията, достъпна до тази точка. Например, за всяка категория се изчислява средната стойност на целта за всички предходни наблюдения, без да се включват текущите или бъдещите. Това може да се реализира чрез кумулативни средни или плъзгащи се прозорци с закъснение.

Пример на Python (pandas):

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')

# Кумулативно средно на целта по категория, изместено с 1, за да не се използва текущата цел

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

print(df)

Така target encoding отразява историческа статистика без изтичане на бъдеща информация.