ML Atlas

02 · Dane · 4 min czytania · Interaktywne · aktualizacja

Czym jest eksploracyjna analiza danych i jak ją przeprowadzić?

W skrócie

EDA to oglądanie danych przed modelowaniem: rozkłady, braki, zależności i podgrupy. Wykrywa błędy i pułapki, których nie pokaże żadna metryka modelu.

Co to jest

Eksploracyjna analiza danych (ang. exploratory data analysis, EDA) to systematyczne oglądanie zbioru przed budową modelu: sprawdzanie rozkładów zmiennych, braków, wartości odstających i zależności między zmiennymi, najczęściej za pomocą wykresów i prostych podsumowań. Termin spopularyzował John Tukey (1977), przeciwstawiając ją analizie konfirmacyjnej, która testuje z góry postawione hipotezy.

EDA odpowiada na pytania: co właściwie jest w tych danych, jak zostały zebrane, co w nich nie gra? To etap, na którym wychodzi, że wiek ma wartość −1 jako kod braku, że połowa kategorii pochodzi z jednego miasta albo że zmienna „wynik” została dopisana już po fakcie.

Intuicja: model jest jak uczeń, który nauczy się wszystkiego, co mu dasz — także błędów w podręczniku. EDA to przeczytanie podręcznika, zanim trafi do ucznia.

Mechanizm — dlaczego tak działa

Podsumowanie liczbowe kompresuje dane, a kompresja gubi informację. Kwartet Anscombe’a pokazuje cztery zbiory o tej samej średniej, wariancji i korelacji, które na wykresie wyglądają zupełnie inaczej. Metryka modelu kompresuje jeszcze mocniej — do jednej liczby. Dlatego problemy struktury danych (nieliniowość, podgrupy, odstające punkty, przesunięcia w czasie) widać na wykresie, a w trafności nie.

Druga przyczyna to sposób powstawania danych. Braki rzadko są losowe, kategorie bywają kodowane niespójnie („M”, „male”, „Male”), a zmienne mogą zawierać informację z przyszłości. EDA jest pierwszą linią obrony przed wyciekiem danych i przed zasadą „śmieci na wejściu, śmieci na wyjściu”.

Trzeci powód: zależności zmieniają się w podgrupach. Korelacja w całym zbiorze może mieć przeciwny znak niż w każdej grupie z osobna (paradoks Simpsona). Bez rozbicia na podgrupy model i analityk wyciągną wniosek odwrotny do prawdy o mechanizmie.

Typowa kolejność: (1) kształt i typy kolumn, (2) braki i duplikaty, (3) rozkład każdej zmiennej osobno — histogram, wykres pudełkowy, liczności kategorii, (4) zależności parami — wykresy rozrzutu, macierz korelacji, tabele krzyżowe, (5) zależność od zmiennej celu, (6) rozbicie na podgrupy i czas.

Zastrzeżenie: EDA też może przeuczyć. Jeśli oglądasz zbiór testowy i na tej podstawie wybierasz cechy, ocena przestaje być uczciwa. Analizę eksploracyjną prowadź na danych treningowych, a hipotezy z niej wyciągnięte traktuj jako hipotezy, nie jako wyniki.

Na przykładzie

Zbiór Palmer Penguins ma 344 pingwiny trzech gatunków: Adélie (152), Gentoo (124) i Chinstrap (68). Już tabela krzyżowa gatunek × wyspa zdradza strukturę: Gentoo występują wyłącznie na Biscoe, Chinstrap wyłącznie na Dream, a Adélie na wszystkich trzech wyspach. Wyspa jest więc w dużej mierze zastępczą informacją o gatunku. Braki: dwa ptaki nie mają żadnego pomiaru, a płeć jest nieznana u 11.

Najciekawsze jest zestawienie długości i głębokości dzioba. W całym zbiorze korelacja wynosi −0,24 — im dłuższy dziób, tym płytszy. Po rozbiciu na gatunki znak się odwraca: +0,39 u Adélie, +0,65 u Chinstrap i +0,64 u Gentoo. Ujemna korelacja ogólna wynika z tego, że Gentoo mają długie (średnio 47,5 mm), ale płytkie dzioby (15,0 mm), a Adélie krótkie (38,8 mm) i głębokie (18,3 mm). Jeden wykres rozrzutu pokolorowany gatunkiem pokazuje to od razu; sama macierz korelacji — wcale.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: przeżyło 38% pasażerów Titanica: 74% kobiet i 19% mężczyzn; przyciski dzielą pasażerów według płci, klasy i wieku.

Dane: Palmer Penguins (pingwiny z Antarktydy)

W praktyce

  • Pierwsze polecenia w pandas: df.shape, df.info(), df.describe(include='all'), df.isna().sum(), df.duplicated().sum().
  • Kategorie: value_counts(dropna=False) i pd.crosstab(a, b); zależność od celu: df.groupby('kat')['cel'].mean().
  • Wykresy: seaborn.histplot, boxplot, pairplot(df, hue='grupa'); zawsze koloruj wykresy rozrzutu zmienną grupującą.
  • Narzędzia automatyczne (np. raporty profilujące) przyspieszają start, ale nie zastępują pytań o sposób zebrania danych.
  • Zapisuj obserwacje na bieżąco — każda decyzja o czyszczeniu musi potem trafić do potoku przetwarzania (pipeline).
  • Typowy błąd: EDA na całym zbiorze, łącznie z testowym.

Najczęstsze pytania

Ile czasu poświęcić na EDA?
Tyle, by umieć opisać każdą kolumnę: co znaczy, jak powstała, ile ma braków i jak wygląda jej rozkład. W projektach z nowymi danymi to często największa część pracy, a oszczędność na tym etapie zwykle wraca jako błąd w modelu.
Czy EDA robić na całym zbiorze?
Na zbiorze treningowym. Sprawdzenie typów i oczywistych błędów na całości jest nieszkodliwe, ale wybór cech, progów czy transformacji na podstawie danych testowych przenosi informację z testu do modelu.
Czym EDA różni się od statystyk opisowych?
Statystyki opisowe to jedno z narzędzi EDA. EDA obejmuje też wykresy, rozbicia na podgrupy, sprawdzanie jakości danych i stawianie hipotez o mechanizmie, który je wygenerował.

Źródła

  • Tukey J. W. (1977). „Exploratory Data Analysis”. Addison-Wesley.
  • Anscombe F. J. (1973). „Graphs in Statistical Analysis”. The American Statistician, 27(1), 17–21.
  • Wickham H., Çetinkaya-Rundel M., Grolemund G. „R for Data Science”, 2nd ed., 2023, rozdz. „Exploratory data analysis”.
  • Gorman K. B., Williams T. D., Fraser W. R. (2014). „Ecological sexual dimorphism and environmental variability within a community of Antarctic penguins (genus Pygoscelis)”. PLoS ONE, 9(3), e90081.
  • Géron A. „Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow”, 3rd ed., 2022, rozdz. 2.

Zobacz też