Sobes.tech
Middle — Senior

Ինչ է նպատակային կոդավորումը ժամանակի համար կատեգորիական նշանների համար և ինչպես խուսափել leakage-ից?

sobes.tech AI

Պատասխան AI-ից

Նպատակային կոդավորումը ժամանակային շարքերում կատեգորական հատկանիշների համար՝ դա մեթոդ է, որը փոխարինում է կատեգորական արժեքները թվային արժեքներով՝ հիմնված նպատակային փոփոխականի վիճակագրության վրա (օրինակ՝ յուրաքանչյուր կատեգորիայի համար նպատակային փոփոխականի միջին արժեքը): Ժամանակային տվյալների համատեքստում կարևոր է խուսափել տեղեկատվության արտահոսքից (leakage), երբ կոդավորելու ժամանակ օգտագործվում են ապագայի տվյալներ՝ համեմատած ընթացիկ ժամանակային կետին:

Որպեսզի խուսափել leakage-ից, յուրաքանչյուր ժամանակային կետի համար նպատակային կոդավորումը հաշվարկվում է միայն այն տեղեկատվության հիման վրա, որը հասանելի է այդ կետից առաջ: Օրինակ՝ յուրաքանչյուր կատեգորիայի համար հաշվարկվում է նախորդ բոլոր դիտարկումների նպատակային միջին արժեքը՝ բաց թողնելով ընթացիկ և ապագա դիտարկումները: Սա կարելի է իրականացնել կուտակային միջինների կամ հետաձգված մանրէների միջոցով:

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

# Կուտակային միջին նպատակային արժեքը կատեգորիայի համար, տեղափոխված՝ չօգտագործելու համար ընթացիկ նպատակային արժեքը

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

print(df)

Այսպիսով, նպատակային կոդավորումը արտացոլում է պատմական վիճակագրություն՝ առանց ապագայի տվյալների արտահոսքի։