Klient dał mi 187 kolumn "bo wszystko może być ważne". Model XGBoost trenował się 6 godzin i miał dokładność 67%. Po selekcji do 23 cech: 20 minut treningu, 81% dokładności.
Klątwa wymiarowości
Im więcej cech, tym więcej danych potrzebujesz. Z 10 cechami wystarczy 1000 rekordów. Z 100 cechami? Potrzebujesz setek tysięcy. Inaczej model uczy się szumu zamiast wzorców.
Szybka selekcja cech
Korelacja: jeśli dwie cechy korelują >0.9, jedna jest zbędna. df.corr() i heatmap to 5 minut pracy.
Feature importance: wytrenuj podstawowy model, sprawdź model.feature_importances_. Cechy poniżej 1% wpływu? Usuń.
Wariancja: kolumny z tą samą wartością w 95% wierszy nie wnoszą informacji.
Engineering vs selekcja
Miałem dataset z datą transakcji. Zamiast jednej kolumny datetime stworzyłem: dzień_tygodnia, godzina, czy_weekend, czy_swieto. Z 1 cechy zrobiłem 4 użyteczne. To lepsze niż 50 losowych kolumn.
| Problem | Rozwiązanie |
|---|---|
| Model overfittuje | Usuń słabe cechy |
| Długi trening | PCA lub selekcja top 20% |
| Słabe wyniki | Dodaj interakcje między cechami |
Freelancer rule: zacznij od 10-15 najważniejszych cech. Dopiero potem eksperymentuj z dodatkowymi.