Feature engineering
Feature engineering
Tabular məsələlərdə tavanı feature-lərin keyfiyyəti müəyyən edir. Alqoritm isə bu tavana nə qədər yaxınlaşacağınızı. Feature-lərə bir həftə, alqoritm seçiminə bir saat ayıran mühəndislər əksinə edənləri adətən üstələyir.
Bu fəsil həqiqətən əhəmiyyət kəsb edən transformation-ları və onların arxasındakı düşüncə tərzini əhatə edir.
Feature nə üçündür
Feature bir linzadır. Xam datanı elə formada təqdim edir ki, model pattern-i daha asan görsün. Tarix bir ədəddir; ondan çıxarılan həftənin günü isə həftəlik seasonality-ni üzə çıxaran linzadır. Transaction məbləği bir ədəddir; "məbləğin bu müştərinin orta məbləğinə nisbəti" isə anomaliyanı üzə çıxaran linzadır.
Yaxşı feature-lər domain expert-in bildiklərini kodlaşdırır. Feature-lərin ən yaxşı mənbəyi bu işi əl ilə görmüş adamla söhbətdir.
Numeric feature-lər
- Scaling. Linear model-lər, neural network-lər, SVM-lər və k-NN scale-ə həssasdır; tree model-ləri isə yox. Standardize edin (sıfır orta, vahid variance) və ya min-max scale edin. Scaler-i yalnız training data üzərində fit edin.
- Log və power transform-lar. Heavy-tailed kəmiyyətləri (gəlir, səhifə baxışları, transaction məbləğləri)
log(1 + x)çevrilməsindən sonra modelləşdirmək asandır. - Binning. Continuous feature-i aralıqlara çevirin. Məlumat itirir, amma linear model-lərə qeyri-monoton effektləri tutmağa imkan verir və model-i outlier-lərə qarşı robust edir.
- Interaction-lar. İki feature-in hasili və ya nisbəti.
price / square_metreshər birindən ayrılıqda qat-qat məlumatlıdır. Tree-lər bunları avtomatik tapır; linear model-lərə isə açıq şəkildə vermək lazımdır.
Categorical feature-lər
- One-hot encoding. Hər kateqoriya üçün bir binary sütun. Aşağı cardinality üçün təhlükəsiz default-dur. Yüksək cardinality-də (poçt indeksləri, user ID-ləri) partlayır.
- Ordinal encoding. Kateqoriyaları tam ədədlərə map edin. Yalnız real sıra olduqda etibarlıdır (
small < medium < large). - Target encoding. Hər kateqoriyanı həmin kateqoriya üçün label-ın ortası ilə əvəz edin. Yüksək cardinality üçün güclüdür və eyni zamanda leakage tələsidir: onu out-of-fold və ya smoothing ilə hesablayın, heç vaxt tam training set üzərində yox.
- Embedding-lər. Neural network-ün içində hər kateqoriya üçün dense vector öyrənin. Kifayət qədər data olduqda çox yüksək cardinality üçün düzgün alətdir.
- Frequency encoding. Kateqoriyanı nə qədər tez-tez rast gəlindiyi ilə əvəz edin. Ucuzdur və gözlənilmədən faydalıdır.
Tarix və vaxt
Tək timestamp model üçün demək olar ki, faydasızdır. Bunları çıxarın:
- günün saatı, həftənin günü, ayın günü, ay, rüb
- həftəsonudur, bayramdır (düzgün region üçün real bayram təqvimi ilə)
- istinad hadisəsindən keçən vaxt: hesabın yaşı, son alışdan keçən günlər
- cyclical encoding (saatın və ya ayın
sin/cos-u) ki, 23:00 və 00:00 bir-birinə yaxın olsun
Text feature-lər
- Bag of words / TF-IDF. Term-ləri sayın, nadirliyə görə weight verin. Classification üçün hələ də güclü baseline-dır.
- n-gram-lar. Qonşu sözlərin cütləri və üçlükləri ifadələri tutur ("yaxşı deyil").
- Pretrained embedding-lər. Transformer model-indən alınan sentence vector-ları semantic similarity-ni hazır şəkildə verir və artıq trivial mətndən kənar hər şey üçün default-dur.
- Sadə statistikalar. Uzunluq, böyük hərflərin sayı, URL-lərin sayı. Ucuzdur və çox vaxt predictive-dir.
Aggregation-lar və window-lar
Biznes datasında predictive gücün çox hissəsi tarixçədə yaşayır. Hər entity (müştəri, cihaz, hesab) üçün trailing window-lar üzrə aggregate-lər hesablayın:
- son 1 / 7 / 30 gündə event-lərin sayı
- həmin window-larda məbləğlərin cəmi, ortası, maksimumu
- son event-dən keçən vaxt
- qısa window-un daha uzun window-a nisbəti (trend)
Bunları düzgün hesablamaq point-in-time problemi səbəbindən bahadır: feature yalnız prediction anından əvvəlki event-ləri istifadə etməlidir. Bunu səhv etsəniz, temporal leakage alırsınız. Feature store-lar böyük ölçüdə məhz bu problemi həll etmək üçün mövcuddur.
Missing value-lar
Missingness-in özü məlumatdır. Sahənin boş olub-olmaması çox vaxt label-ı onun dəyərindən daha güclü proqnozlaşdırır. Variantlar:
- Impute edin mean, median və ya mode ilə və binary
was_missingflag-i əlavə edin. - Olduğu kimi saxlayın missing value-ları native şəkildə emal edən tree kitabxanaları üçün.
- Modelləşdirin, əgər missing pattern-i mürəkkəbdirsə.
Missingness-in label ilə əlaqəsiz olduğunu yoxlamadan missing value-lu sətirləri heç vaxt səssizcə drop etməyin.
Feature selection
Daha çox feature həmişə daha yaxşı deyil. Əhəmiyyətsiz feature-lər noise əlavə edir, training-i yavaşladır və overfitting-ə dəvət edir.
- Variance-ı sıfıra yaxın olan feature-ləri silin.
- Hər yüksək korrelyasiyalı cütdən birini silin.
- Model-based importance-dan (boosting feature importance, permutation importance) rank etmək üçün istifadə edin, sonra quyruğu atın və validation nəticəsinin düşmədiyini yoxlayın.
- Tək model fit-indən alınan importance-a ehtiyatla yanaşın; o, qeyri-sabitdir. Fold-lar üzrə ortalayın.
Feature engineering workflow-u
- Xam sütunlar üzərində baseline model ilə başlayın. Score-u qeyd edin.
- Domain expert ilə danışın. İstifadə etdiyi hər rule of thumb-ı yazın.
- Hər rule of thumb-ı feature kimi kodlaşdırın. Hər batch-dən sonra yenidən score edin.
- Tarixçə aggregate-lərini əlavə edin. Yenidən score edin.
- Kömək etməyənləri silin.
- Hər feature-i leakage baxımından son dəfə yoxlayın.
Hər feature-in nə olduğunu və niyə mövcud olduğunu log-da saxlayın. Altı aydan sonra bu log pipeline-ı anlamağın yeganə yolu olacaq.
Tapşırıqlar
- Dataset-dən bir xam sütun seçin. Ondan beş feature çıxarın.
- Target encoding-i out-of-fold hesablama ilə implement edin. Validation set-də naive versiya ilə müqayisə edin və leakage-i müşahidə edin.
- Model-inizin avtomatlaşdıracağı işi görən adamla müsahibə aparın. Cavablarının nəzərdə tutduğu feature-ləri sadalayın.