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:

  1. Zbieranie danych
  2. Eksploracyjna analiza danych (EDA)
  3. Czyszczenie danych
  4. Feature engineering
  5. Transformacja cech
  6. Selekcja cech
  7. Podział na zbiory
  8. 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ć

  1. Najpierw podziel na zbiory
  2. Potem fit() transformacji tylko na train
  3. Potem transform() na train i test osobno
  4. 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).