Wprowadzenie
Dziś zajmiemy się tematem zbierania danych. Jest to ważny element w pracy analityka danych, czy Machine Learning Engineera. Od tego, jakie i ile danych zbierzemy nie tylko zależy to, jakie modele będziemy w stanie wytrenować, ale przede wszystkim poprawność i użyteczność całego rozwiązania. Dlatego warto temu tematowi poświęcić odpowiednio dużo uwagi.
Jak do tego podejść?
Właściwe podejście do zbierania danych zależy od tego, na jakim etapie jesteśmy zaangażowani w ten proces. Możemy wyróżnić tutaj trzy najczęstsze sytuacje:
- Dostajesz już gotowe dane, zebrane przez kogoś innego.
- Dane są (lub mają być) zebrane przez kogoś innego, ale masz możliwość podania pewnych wymagań lub propozycji, które zostaną uwzględnione.
- Samodzielnie odpowiadasz za zebranie danych.
Poniżej omówię pierwszą sytuację, a w kolejnej sekcji – drugą i trzecią.
Otrzymujesz zebrane dane
Może się wydawać, że ten artykuł nie powinien omawiać tego przypadku, wszak zaznaczyłem, że zajmiemy się etapem zbierania danych. Jednak dla mnie etap zbierania danych kończy się wtedy, gdy masz już dane gotowe do analiz czy dalszej obróbki. Gdy otrzymujesz dane (w konktekście rzeczywistych zastosowań – nie mówię tutaj o zbiorach szkoleniowych, konkursach czy hackatonach), zwykle jest jeszcze jeden krok, zanim przejdziesz do ich obróbki – jest nim zrozumienie danych. I na tym teraz się skupimy.
Jak dane zostały zebrane?
Przede wszystkim należy zastanowić się nad tym, w jaki sposób te dane zostały pozyskane. Kluczowa będzie tu rozmowa z osobami, które gromadziły i dostarczały te dane. Czy były one generowane automatycznie przez systemy, czy może były wprowadzane ręcznie? Jeśli to drugie, warto zbadać, kto dokładnie był odpowiedzialny za wprowadzanie tych danych i czy istnieją jakieś zasady lub standardy dotyczące tego procesu. Kolejnym istotnym aspektem jest określenie okresu czasu, który obejmują zebrane dane. To pozwoli na zrozumienie ewentualnych zmian lub trendów w danych w zależności od czasu. Warto również zadać pytanie o ewentualne zmiany w sposobie zbierania danych w ciągu czasu. Czy proces gromadzenia informacji był stały, a może występowały znaczące zmiany w metodach zbierania?
W wielu systemach kluczowe znaczenie ma kolejność spływania danych. Jeśli nasz algorytm ma działać w czasie rzeczywistym, to trzeba zwrócić dużą uwagę na problem tzw. wycieku danych, który polega na tym, że model do wnioskowania korzysta z danych niedostępnych w momencie predykcji. Zabezpieczyć przed tym problemem możemy się jedynie wtedy, gdy z każdą daną mamy również informację, w którym momencie ona się pojawiła.
Co znajduje się w danych?
Następnie musimy przejść do zrozumienia, co znajduje się w tych danych – przykładowo w danych tabelarycznych czy znamy znaczenie każdej kolumny? Jeśli jest więcej tabel, należy ustalić, czy są klucze, po których łączą się te tabele, a także czy kolumny zawierały jakieś zdefiniowane kryteria, ograniczenia?
Kolejnym zagadnieniem jest ocena jakości danych. Czy w zbiorze występowały braki, które następnie zostały uzupełnione? Jeśli tak, to w jaki sposób były uzupełniane? Były to działania manualne, czy zastosowano jakieś techniki automatycznego uzupełniania danych?
Warto wreszcie zapytać, czy obecnie dane są wciąż zbierane? Czy istnieją plany na kontynuację procesu zbierania danych? To pozwoli zrozumieć, czy w trakcie trwania projektu jest szansa, że np. po kilku miesiącach pojawi się o wiele więcej danych. Istniejące dane to jedno, ale warto także dowiedzieć się, jaki jest potencjał w zbieraniu dodatkowych danych, których teraz nie zbieramy. Jakie jeszcze dane można by było gromadzić w przyszłości i ile czasu będzie potrzebne na to zadanie?
Widzisz zatem, że nawet dostając już pewne dane, możesz sporo jeszcze zrobić, żeby sobie pomóc w procesie ich przetwarzania albo żeby ulepszyć ten proces w przyszłości.
Samodzielne zbieranie danych lub stworzenie wytycznych
Tutaj jesteś krok wstecz w stosunku do sytuacji opisanej w poprzednim punkcie. Dane jeszcze nie zostały zebrane, zatem możesz zadbać o ich jakość odpowiednio wcześnie. Podam tutaj 10 najlepszych praktyk w tym zakresie:
1. Zbieraj jak najwięcej danych: Przede wszystkim nastaw się na zbieranie jak największej ilości danych, zarówno pod względem liczby rekordów (wierszy w przypadku danych tabelarycznych), jak i cech (kolumn). Im bardziej zróżnicowane dane, tym większa szansa na odkrycie cennych wzorców i informacji. Nawet jeśli w tym momencie wydaje Ci się, że pewne dane nie będą przydatne, później możesz wpaść na nowe pomysły i będziesz żałować, jeśli braknie Ci kluczowych danych.
2. Korzystaj z różnych źródeł: Często podobne informacje gromadzone są na różnych poziomach, przez różne systemy itp. Warto zadbać o dostęp do tych różnych źródeł. Po pierwsze będziesz mieć wtedy potencjalnie więcej informacji, po drugie – sprawdzisz poprawność przez porównywanie ze sobą różnych źródeł z tą samą informacją.
3. Śledź historię zmian: Jeśli dane ewoluują w czasie, zadbaj o śledzenie historii zmian. To pozwoli na odtworzenie stanu danych w dowolnym momencie, co jest kluczowe jeśli planujesz robić eksperymenty modelu na danych historycznych.
4. Dodawaj czas pojawienia się danych: Dodanie znacznika czasowego (timestamp) do danych pozwala na monitorowanie, kiedy pojawiła się konkretna informacja, co jest konieczne by uniknąć opisanego wcześniej problemu wycieku danych.
5. Ustal jednoznaczny format: Musisz zadbać o spójność formatu danych (zwłaszcza w ramach kolumn), dotyczy to np. takich cech jak daty, czy sposób kodowania braków (NULL w tabeli, pusty napis itp).
6. Ustal jednoznaczne nazewnictwo: Konsekwentne i jednoznaczne nazewnictwo kategorii, zmiennych czy obiektów danych ułatwia na przykład łączenie danych z różnych źródeł i daje od razu większą przejrzystość. Zetknąłem się na przykład z danymi produkcyjnymi, gdzie te same maszyny były różnie nazywane w zależności od działu. Sprawiało to wielkie problemy przy tworzeniu ogólnego systemu korzystającego z danych z wielu działów na raz.
7. Wprowadź system dbający o poprawność danych: Odpowiednie narzędzia i systemy automatyzacji, które pomagają w zbieraniu danych, mogą zmniejszyć ryzyko błędów ludzkich. Unikaj zbierania danych ręcznie, szczególnie w skomplikowanych projektach.
8. Zaplanuj i dokumentuj proces zbierania danych: Przygotuj plan zbierania danych, obejmujący cele, źródła, metody i harmonogram. Dokumentacja procesu zbierania danych ułatwia późniejszą analizę i umożliwia innym osobom zrozumienie danych. Zawsze wyobraź sobie, że to nie Ty będziesz osobą odpowiedzialną za późniejsze wykorzystanie tych danych – dzięki temu będziesz mieć właściwą perspektywę.
9. Zabezpiecz dane wrażliwe: Jeśli zbierasz dane osobowe lub wrażliwe informacje, upewnij się, że stosujesz odpowiednie środki bezpieczeństwa i przestrzegasz przepisów o ochronie danych osobowych. O ryzykach płynących z niewłaściwego wykorzystania danych pisałem w moim wpisie.
10. Regularnie sprawdzaj jakość danych: Monitoruj jakość danych w trakcie procesu zbierania i przetwarzania. Ustal metryki i wskaźniki jakości, które pomogą w identyfikacji błędów i problemów z danymi.
Ile danych jest potrzebne?
Pisałem wcześniej, że powinniśmy zbierać jak najwięcej danych. No dobrze, ale w praktyce po pierwsze mamy różne ograniczenia finansowe (zbieranie danych wymaga zaangażowania osób, utrzymywania różnych systemów itp.), a poza tym nie chcemy czekać w nieskończoność, tylko w miarę szybko stworzyć jakiś zbiór danych, z których wyciągniemy jakieś istotne wnioski lub które posłużą do wytrenowania modelu.
Niestety trudno na postawione w tej sekcji pytanie odpowiedzieć w prosty sposób. Podam jednak kilka kryteriów, dzięki którym będziesz w stanie lepiej oszacować ilość potrzebnych danych:
Rozpoznanie ile danych będzie potrzebnych w projekcie Data Science to istotny krok, który wpłynie na jakość i wiarygodność analizy oraz wyników modelu. Oto kilka kryteriów, które warto rozważyć:
1. Poziom zaawansowania modelu: Im bardziej skomplikowany model, tym generalnie więcej danych potrzebujesz do wytrenowania. Prostsze modele, takie jak regresja liniowa, mogą działać skutecznie z mniejszymi zbiorami danych, nawet kilkadziesiąt przypadków. Sieci neuronowe do wytrenowania zwykle potrzebują tysięcy rekordów. Jednak z drugiej strony, jeśli stosujesz podejście Transfer Learning (typowe np. w przetwarzaniu języka naturalnego lub obrazu), to korzystasz już z wytrenowanych dużych modeli i wówczas może wystarczyć kilkadziesiąt poetykietowanych dnaych (lub nawet kilka – w przypadku tzw. few shot learning), by dotrenować model do Twojego zastosowania.
2. Liczba cech: Jeśli masz wiele zmiennych lub cech w analizowanym zestawie danych, zazwyczaj potrzebujesz więcej danych do uczenia modelu, aby uniknąć przeuczenia. To znaczy w przypadku danych tabelarycznych, zwykle wierszy powinno być co najmniej kilkadziesiąt razy więcej niż kolumn (chyba że mamy do czynienia z jakimiś duplikatami lub innymi szumami, które łatwo odfiltrujemy przez wytrenowaniem modelu).
3. Różnorodność danych: Jeśli dane pochodzą z wielu różnych źródeł lub zawierają różnorodne przypadki (np. różne typy klientów czy produktów), może to wymagać większej liczby danych, aby każdy przypadek wystąpił wystarczającą liczbę razy.
4. Poziom niezbalansowania: Najłatwiej ten problem zilustrować na przykładzie klasyfikacji binarnej. Jeśli prawdopodobieństwo klasy “1” to 0,05%, to widać, że aby zebrać wystarczającą liczbę przypadków pozytywnych, potrzebujesz co najmniej dziesiątek tysięcy rekordów. Zwróć uwagę, że w procesie trenowania modelu podzielisz dane co najmniej na dwa zbiory, z których każdy będzie musiał mieć wystarczającą liczbę przypadków, aby osiągnąć wystarczającą istotność statystyczną.
5. Rozkład zbieranych danych: Jeśli zebrane dane są silnie skupione wokół pewnych wartości lub obszarów, może być konieczne zebranie większej liczby danych, aby reprezentowały one różnorodność populacji.
6. Poziom szumu w danych: W przypadku, gdy dane zawierają dużo szumu lub błędów, większy zbiór danych może pomóc modelowi w rozróżnianiu prawdziwych wzorców od zakłóceń.
7. Cele modelu: Określ, co chcesz osiągnąć za pomocą modelu. Czy potrzebujesz precyzyjnych prognoz czy raczej ogólnych trendów? To wpłynie na ilość potrzebnych danych.
Zauważ, że odpowiedzi na wiele z tych pytań będziesz znać dopiero, gdy wykonasz już pierwsze analizy. To właśnie jest typowe w projektach Data Science, dlatego właściwe podejście do filozofia zwinna (Agile) . Często wystarczy najpierw zebrać pierwszą próbkę danych, spróbować ich użyć, by dopiero później zdecydować, czy potrzebujemy więcej danych, czy nie.
Zakończenie
Jeśli szukasz więcej wiedzy z Data Science i chcesz się rozwijać w dynamicznej społeczności osób pracujących w tym obszarze – zachęcam do dołączenia do programu Machine Learning Mastery, gdzie przechodzimy cały proces budowy modelu od A do Z. Jest to najbardziej praktyczny kurs ML, jaki znam.