Przygotowanie danych (ang. data preprocessing) to fundament każdego projektu uczenia maszynowego. Według badań, data scientists spędzają 60-80% czasu na przygotowaniu danych — czyszczeniu, transformacji, feature engineering. Najlepszy algorytm na złych danych da gorsze wyniki niż prosty algorytm na dobrze przygotowanych danych. Obowiązuje zasada: garbage in, garbage out.
Pipeline przygotowania danych
Typowy pipeline obejmuje:
- Zbieranie danych
- Eksploracyjna analiza danych (EDA)
- Czyszczenie danych
- Feature engineering
- Transformacja cech
- Selekcja cech
- Podział na zbiory
- Augmentacja (opcjonalnie)
1. Eksploracyjna analiza danych (EDA)
Zanim zaczniesz transformować dane, poznaj je:
Statystyki opisowe
- Rozkłady zmiennych (histogramy, box plots)
- Średnia, mediana, odchylenie standardowe
- Wartości minimalne/maksymalne
- Percentyle (kwartyle)
Relacje między zmiennymi
- Macierz korelacji (korelacja Pearsona, Spearmana)
- Scatter plots między parami zmiennych
- Cross-tabulation dla zmiennych kategorycznych
Jakość danych
- Braki danych (missing values) — ile, w których kolumnach?
- Duplikaty
- Wartości odstające (outlier-y)
- Niespójności w formatach
2. Czyszczenie danych
Braki danych (Missing Values)
Brakujące wartości to najczęstszy problem. Strategie:
Usunięcie:
- Usunięcie wierszy z brakami (listwise deletion) — proste, ale traci dane
- Usunięcie kolumn z > 50% braków — jeśli kolumna ma za dużo braków
Imputacja (uzupełnianie):
- Średnia/mediana — dla zmiennych ciągłych. Mediana jest odporniejsza na outlier-y
- Moda (najczęstsza wartość) — dla zmiennych kategorycznych
- KNN imputation — uzupełnianie na podstawie K najbliższych sąsiadów
- Iterative imputation (MICE) — wielokrotna imputacja modelami regresyjnymi
- Stała wartość — np. 0, -1, „Unknown" — z dodaniem flagi is_missing
Zasada: nigdy nie uzupełniaj braków na zbiorze testowym informacjami z testu — oblicz statystyki (średnia, mediana) tylko na zbiorze treningowym i zastosuj je do zbioru testowego.
Wartości odstające (Outlier-y)
Wartości znacząco odbiegające od reszty danych:
Detekcja:
- IQR method: outlier jeśli x < Q1 - 1.5·IQR lub x > Q3 + 1.5·IQR
- Z-score: outlier jeśli |z| > 3
- Isolation Forest — algorytm do detekcji anomalii
Obsługa:
- Usunięcie — jeśli to błędy pomiarowe
- Winsorization — obcięcie do percentyla (np. 1% i 99%)
- Log transform — kompresja skali, redukuje wpływ outlier-ów
- Zostawienie — jeśli są prawdziwymi, informacyjnymi danymi
Duplikaty
Usuwaj dokładne duplikaty. Przybliżone duplikaty (fuzzy duplicates) wymagają analizy — np. ten sam klient z różnymi wariantami nazwiska.
Niespójności
- Ujednolicenie formatów (daty, numery telefonów, adresy)
- Korekta literówek w zmiennych kategorycznych
- Standaryzacja jednostek
3. Feature Engineering
Tworzenie nowych cech z istniejących danych — często najskuteczniejszy sposób poprawy modelu.
Cechy pochodne
- Z dat: dzień tygodnia, miesiąc, pora roku, weekend/dzień roboczy, liczba dni od wydarzenia
- Z tekstu: długość tekstu, liczba słów, obecność słów kluczowych, embeddingi
- Z adresów: kod pocztowy → region, miasto → populacja
- Interakcje: cena × ilość = wartość, wiek / stały dochód = ratio
Cechy agregowane
- Średnia zakupów klienta w ostatnich 30 dniach
- Liczba logowań w ostatnim tygodniu
- Odchylenie standardowe wartości transakcji
Cechy opóźnione (lag features)
Dla szeregów czasowych — wartość z poprzednich kroków:
- Sprzedaż z zeszłego tygodnia
- Średnia krocząca 7-dniowa
- Trend (różnica między kolejnymi wartościami)
4. Transformacja cech
Skalowanie
Wiele algorytmów (SVM, KNN, regresja logistyczna, sieci neuronowe) jest wrażliwych na skalę cech. Cecha o zakresie 0-1000 zdominuje cechę o zakresie 0-1.
StandardScaler (standaryzacja): x' = (x - μ) / σ → średnia 0, odchylenie 1
Najczęściej stosowane. Dobre dla rozkładów zbliżonych do normalnego.
MinMaxScaler (normalizacja): x' = (x - min) / (max - min) → zakres [0, 1]
Dobre gdy potrzebujesz ograniczonego zakresu. Wrażliwe na outlier-y.
RobustScaler: x' = (x - mediana) / IQR
Odporny na outlier-y. Używaj gdy dane mają wartości odstające.
Ważne: fit() na zbiorze treningowym, transform() na treningowym I testowym. Nigdy odwrotnie.
Kodowanie zmiennych kategorycznych
Algorytmy ML operują na liczbach — zmienne kategoryczne trzeba zakodować.
One-Hot Encoding: Kolor: [czerwony, zielony, niebieski] → 3 kolumny binarne. Dobre dla zmiennych nominalnych bez naturalnej kolejności. Problem: wysoka wymiarowość przy wielu kategoriach.
Label Encoding: Kolor: czerwony=0, zielony=1, niebieski=2. Dobre tylko dla zmiennych ordinalnych (z naturalną kolejnością: mały < średni < duży). Dla nominalnych wprowadza sztuczną kolejność.
Target Encoding: Zastąp kategorię średnią wartością targetu w tej kategorii. Silne, ale ryzyko data leakage — stosuj z walidacją krzyżową.
Frequency Encoding: Zastąp kategorię częstością jej występowania w danych. Proste, efektywne, brak dodatkowych kolumn.
Transformacje rozkładu
Wiele modeli zakłada (lub preferuje) normalny rozkład cech:
- Log transform: log(x + 1) — kompresja prawoskośnych rozkładów
- Square root: √x — łagodniejsza kompresja
- Box-Cox: parametryczna transformacja znajdująca optymalną potęgę
- Yeo-Johnson: jak Box-Cox, ale obsługuje wartości ujemne
5. Selekcja cech
Zbyt wiele cech → overfitting, długi trening, trudna interpretacja. Metody redukcji:
Filter methods
Ocena cech niezależnie od modelu:
- Korelacja z targetem
- Chi-square test (kategoryczne)
- Mutual information
- ANOVA F-test
Wrapper methods
Ocena podzbiorów cech z użyciem modelu:
- Forward selection — dodawaj najlepszą cechę iteracyjnie
- Backward elimination — usuwaj najgorszą cechę iteracyjnie
- Recursive Feature Elimination (RFE)
Embedded methods
Selekcja wbudowana w trening modelu:
- L1 regularization (Lasso) — zeruje nieistotne wagi
- Feature importance z Random Forest / Gradient Boosting
- Permutation importance
6. Podział na zbiory
Train / Validation / Test split
Zbiór treningowy (60-80%) — model uczy się na tych danych. Zbiór walidacyjny (10-20%) — do doboru hiperparametrów, early stopping. Zbiór testowy (10-20%) — finalna ocena modelu. Używany RAZ na koniec.
Zasada: nigdy nie podejmuj decyzji na podstawie zbioru testowego. Zbiór testowy to „egzamin końcowy" — nie „korepetycje".
Walidacja krzyżowa (K-fold CV)
Zbiór treningowy dzielony na K części (foldów). Model trenowany K razy, za każdym razem na K-1 foldach, walidowany na pozostałym. Średnia metryka z K foldów daje solidną ocenę.
Stratified split
Zachowuje proporcje klas w każdym zbiorze. Krytyczne dla niezbalansowanych danych (np. 95% vs 5%).
Time series split
Dla danych czasowych: nigdy nie używaj przyszłych danych do treningu. Podział chronologiczny — trening na starszych, walidacja/test na nowszych danych.
7. Data Leakage — najgroźniejszy błąd
Data leakage to sytuacja, gdy informacja z danych testowych „przecieka" do treningu. Model uczy się na danych, które nie byłyby dostępne w produkcji.
Typowe źródła leakage
- Skalowanie/imputacja przed podziałem na zbiory (statystyki obliczone na danych testowych)
- Cechy kodujące informację o targecie (np. „customer_status" = „churned")
- Target encoding bez walidacji krzyżowej
- Duplikaty rozrzucone między zbiory (ten sam pacjent w train i test)
Jak zapobiegać
- Najpierw podziel na zbiory
- Potem fit() transformacji tylko na train
- Potem transform() na train i test osobno
- Używaj Pipeline'ów (scikit-learn) — automatycznie pilnują kolejności
Podsumowanie
Przygotowanie danych to fundament sukcesu w ML. Czyszczenie braków i outlier-ów, feature engineering, właściwe skalowanie i kodowanie, oraz unikanie data leakage — te kroki decydują o jakości modelu bardziej niż wybór algorytmu. Pipeline powinien być reprodukowalny (skryptowany, nie manualny) i szczelny (brak leakage).