Data Science i uczenie maszynowe - ebook
Data Science i uczenie maszynowe - ebook
Książka przedstawia uczenie maszynowe w ujęciu praktycznym. Przeprowadzając opisane w niej eksperymenty data science poznamy zastosowanie reguł statystycznych i algorytmów uczenia maszynowego do rozwiązywania konkretnych problemów. Takie podejście oznacza, że studenci informatyki oraz specjaliści — analitycy, informatycy i bazodanowcy — zdobędą nie tylko teoretyczną wiedzę, ale również umiejętność jej praktycznego wykorzystania w codziennej pracy.
Kategoria: | Programowanie |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-01-19324-9 |
Rozmiar pliku: | 7,7 MB |
FRAGMENT KSIĄŻKI
* * *
Książka napisana jest dobrze, poprawnym językiem i w sposób przejrzysty.
* * *
Zaproponowany w książce zestaw problemów obejmuje całość tematyki, którą można by scharakteryzować jako przewodnik po stosowanych obecnie na świecie systemach eksploracji danych i uczenia maszynowego, z wykorzystaniem określonego środowiska obliczeniowego i prezentacyjnego (Azure ML i język R). Dlatego w konkluzji stwierdzam, że proponowana książka autorstwa Marcina Szeligi Data science i uczenie maszynowe jest ważnym i wartościowym podręcznikiem informatyki stosowanej. Będzie on przydatny zarówno dla studentów studiów stacjonarnych i zaocznych kierunków informatycznych, zarządzania i marketingu i wielu kierunków ścisłych, jak i osób zawodowo pracujących w tych dziedzinach.
prof. zw. dr hab. Tadeusz Wieczorek
Kierownik Katedry Informatyki Przemysłowej
Politechniki ŚląskiejPrzedmowa
Dzisiejszy świat upaja się liczbami. Codziennie jesteśmy zalewani i sami produkujemy olbrzymią ilość danych. Jednakże dopiero od stosunkowo niedawna coraz powszechniejsza staje się wiedza o tym, jak wielka wartość w nich drzemie. Dla przedsiębiorstw, które mogą w ten sposób optymalizować swoją ofertę, dla centralnych i lokalnych instytucji rządowych, które mogą lepiej zrozumieć potrzeby obywateli, wreszcie dla nas samych – pomagając w lepszym zrozumieniu samych siebie.
Jakie są tego przyczyny? Ta zmiana perspektywy jest spowodowana w dużej mierze ogromnym postępem technologicznym. Doskonałym przykładem mogą być szalenie modne dziś sztuczne sieci neuronowe. Koncepcja przetwarzania danych za pomocą elementów próbujących odzwierciedlić struktury ludzkiego mózgu została zrealizowana po raz pierwszy prawie 60 lat temu w postaci częściowo elektromechanicznego modelu perceptronu zbudowanego przez Franka Rosenblatta i Charlesa Wigthmana. Przez długie lata nie mogła ona się niestety przebić poza mury uczelni ze względu na brak odpowiedniej mocy obliczeniowej współczesnych komputerów. Dzisiejszy rozkwit popularności sieci neuronowych jest naturalną konsekwencją spadku cen infrastruktury IT, nowymi generacjami procesorów graficznych oraz coraz powszechniejszym przechowywaniem danych w chmurze. W rezultacie dostępne dziś powszechnie systemy do przetwarzania obrazu i dźwięku cechuje tak duża dokładność, która jeszcze kilka lat temu pozostawała w sferze marzeń.
Data science, czyli szeroko rozumiana analiza danych, to w mojej opinii akcelerator renesansu nauk ścisłych. Rozwój tej dziedziny ta stał się pretekstem do ściślejszej współpracy matematyków, statystyków i informatyków, dając przy okazji często drugie życie algorytmom znanym od lat, ale uważanym wówczas za zbyt kosztowne w praktycznym zastosowaniu. Dzięki synergii polegającej na przenikaniu się metod wyniesionych ze środowiska akademickiego z głębokim osadzeniem w kontekście biznesu można zauważyć, jak ważna dla osiągnięcia sukcesu we współczesnym świecie jest interdyscyplinarna współpraca.
Rosnąca popularność terminu data science wiąże się oczywiście z konkretnymi potrzebami i oczekiwaniami. Ma też niestety też i drugie oblicze – brak odpowiedniej ilości i jakości kadr na rynku. Zdaniem analityków popyt na specjalistów od analizy danych będzie intensywnie rosnąć w ciągu najbliższych kilku lat. Według opracowania przygotowanego przez firmę McKinsey w samych Stanach Zjednoczonych do 2018 r. pojawi się prawie 300 tysięcy wakatów. Już na pierwszy rzut okiem widać, że lukę tę trudno będzie zaadresować tradycyjnymi metodami kształcenia.
Zagadnienie analizy danych na polskim rynku nie doczekało się wciąż zbyt wielu publikacji, w szczególności skierowanych do szerokiego grona czytelników. Tym bardziej doceniam wysiłek Autora niniejszej publikacji. Data science i uczenie maszynowe ma szansę zaspokoić ciekawość osób, które z różnych powodów chcą zacząć swoją przygodę z analityką. Kompleksowy i szeroki zakres omawianego materiału powinien także pomóc uporządkować wiedzę bardziej doświadczonym czytelnikom. Dodatkową zaletą jest oparcie wszystkich przykładów na dostępnych za darmo narzędziach.
Zachęcam do lektury!
Michał Żyliński
CEE Advanced Analytics and Big Data Technical Lead
MicrosoftZamiast „Od autora”
Bardzo długo wiedza związana z uczeniem maszynowym i stosowanymi w tej dziedzinie narzędziami była postrzegana jako ekskluzywne rozwiązanie przeznaczone dla największych (i najbogatszych) firm. Dzięki błyskawicznemu rozwojowi języka R (którego całe środowisko wraz z bibliotekami dostępne jest za darmo, w modelu open source) oraz usługom w chmurze uległo to zasadniczej zmianie – uczenie maszynowe stało się dostępne dla każdego. Jednak nie zmieniło to faktu, że trzeba wiedzieć, jak użyć tej wiedzy do rozwiązania określonego problemu.
Na wstępie warto podkreślić, że czytając po raz pierwszy o uczeniu maszynowym, czytelnik może mieć pokusę, by traktować je jako pewnego rodzaju magiczne rozwiązanie wszelkiego rodzaju problemów. Tak nie jest (a w każdym razie nie do końca). To narzędzie nie powie, jak zwiększyć sprzedaż towaru. Powie tylko, od czego ten wzrost lub spadek zależy. Do uzyskania tej informacji jest wykorzystywany odpowiedni aparat matematyczny wsparty branżową wiedzą ekspercką.
Wymarzony zespół do realizacji projektów data science powinien składać się z osób, które będą jednocześnie:
- matematykiem-statystykiem rozumiejącym zagadnienia data science i posiadającym wiedzę w zakresie algorytmów uczenia maszynowego;
- ekspertem dziedzinowym wiedzącym, które związki mogą mieć sens, a które są na pewno nieistotne (przyda się też coś, co określa się w branży jako nos do danych);
- programistą, który opakuje rozwiązanie, tworząc produkt użyteczny dla klienta biznesowego.
Książkę, którą trzymają Państwo w ręku, można podzielić na trzy części. W początkowych rozdziałach pokazuję, czym tak naprawdę jest uczenie maszynowe i jakiego typu problemy można przy jego użyciu rozwiązać. Mimo że na pierwszy rzut oka są to „lekkie” rozważania, nie warto ich pomijać – zwłaszcza w przypadku osób, które zaczynają swoją przygodę z data science, gdyż dzięki tej lekturze będą wiedzieć, czego spodziewać się po omawianych dalej algorytmach i sposobach postępowania.
W kolejnej części jest omówiony jeden z najważniejszych elementów procesu data science – przygotowanie danych. Na niewłaściwych zbiorach danych, nieznormalizowanych, z odstającymi wartościami, algorytmy po prostu nie będą działać! Lektura tych rozdziałów jest obowiązkowa!
Następnie są omawiane klasyczne algorytmy używane do rozwiązywania określonych klas problemów, takie jak: klasyfikacja, analiza regresji, skupień, prognozowanie. Dzięki temu, że każdy rozdział zaczyna się od szczegółowego opisu, do czego można użyć omawianego podejścia (z dużą liczbą przykładów), można szybko się zorientować, czy w są w nim opisane narzędzia, które umożliwią rozwiązanie danego problemu. A jeśli szuka się tylko informacji, jak zastosować dany algorytm – taki wstęp można pominąć.
Kto najwięcej skorzysta z tej książki? Przede wszystkim przyszły data scientists – specjalista w dziedzinie analizy danych, ponieważ jest to tak naprawdę podręcznik do kształcenia w tej dziedzinie. Czytelnik, który zna inne narzędzia do nauczania maszynowego, może z tej książki szybko nauczyć się, jakie możliwości daje połączenie języka R oraz usługi Azure Machine Learning. Ekspert dziedzinowy oraz programista dzięki lekturze opanują język, którym posługuje się data scientists, i zrozumieją, jakie są ograniczenia algorytmów i jakie można zastosować podejścia do rozwiązywania poszczególnych problemów. Dodatkowo programista dowie się, w jaki sposób można wykorzystać zbudowane modele w tworzonych aplikacjach – jak wywołać usługi REST udostępniane przez Azure Machine Learning itp.
Czytając tę książkę, należy pamiętać, że
≡ dzięki zmianom w technologii, dostępności R oraz Azure Machine Learning każdy może spróbować rozwiązywać problemy, używając data science.
Trzeba „tylko” wiedzieć, jak tych narzędzi można użyć.
Tomasz Kopacz,
Principal Technical Architect (Evangelist)
MicrosoftJeżeli nie potrafisz czegoś prosto wyjaśnić,
to znaczy, że niewystarczająco to rozumiesz.
Albert Einstein
Rozdział 2
Ocena przydatności danych
Źródłami danych dla eksperymentów data science mogą być transakcyjne bazy danych (bazy OLTP), hurtownie danych (DWH), systemy Big Data, systemy analityczne (bazy OLAP), dokumenty w różnych formatach (CSV, XLSX, XML), pliki graficzne i multimedialne (BMP, PNG, AVI, MP3), strony WWW, usługi sieciowe – właściwie każde źródło danych może być wykorzystane, o ile tylko możliwe jest przekształcenie pochodzących z niego danych do postaci tabelarycznej.
▸▸ Tabelaryczna postać danych jest wyjątkowo uniwersalna. W tabelach składających się z pionowych kolumn i poziomych wierszy można zapisać nie tylko informacje o pacjentach czy postawionych im diagnozach, lecz także obrazy (zakodowane liczbowo wartości kolejnych pikseli będą przechowywane w poszczególnych kolumnach tabeli) czy tekst (frazy znaczeniowe podzielone na zapisane w osobnych kolumnach lub wierszach).
Z nielicznymi wyjątkami interpretacja tabelarycznych danych źródłowych przez algorytmy eksploracji danych jest taka sama, jak ich podstawowa interpretacja statystyczna:
≡ wiersze (rekordy) reprezentują obserwacje (analizowane przypadki), a kolumny – ich atrybuty (zmienne) .
W tym rozdziale przyjrzymy się metodom zbierania i oceniania danych źródłowych, zarówno pojedynczych zmiennych, jak i zależności między zmiennymi, oraz poznamy sposoby sprawdzania integralności danych, ustalania wymaganej liczby przypadków i upraszczania modeli.
2.1.
Dane źródłowe
Algorytmy eksploracji danych są bardzo czułe na jakość danych źródłowych. Uniwersalna zasada GIGO (Garbage In, Garbage Out), według której wyniki przetwarzania błędnych danych będą błędne niezależnie od poprawności procedury ich przetwarzania, jest wyjątkowo prawdziwa w odniesieniu do eksploracji danych. Ponieważ nie jest możliwe stworzenie uniwersalnego narzędzia do wykrywania błędnych danych, ocena jakości i właściwe przygotowanie danych źródłowych są koniecznym warunkiem powodzenia całego eksperymentu data science.
- W pierwszej kolejności należy ocenić przydatność danych w rozwiązywaniu postawionego problemu – na tym etapie dane nie powinny być modyfikowane. Oceniając jakość danych, należy znaleźć odpowiedzi na trzy podstawowe pytania:
- Jakie informacje znajdują się w danych źródłowych?
- Czy na podstawie tych danych można uzyskać odpowiedzi na postawione w ramach eksperymentu pytania?
- Jakich problemów należy się spodziewać podczas tworzenia modeli eksploracji tych danych?
- Następnie wykryte w danych błędy muszą być usunięte – celem tego etapu, opisanego w rozdziale 3, jest dopasowanie danych treningowych do technicznych wymogów modeli ich eksploracji.
- Na końcu dane powinny być dostosowane do postawionego problemu – ten etap, opisany w rozdziale 4, polega na wprowadzeniu do danych treningowych (poprzez ich przekształcanie) nowych informacji.
Powodem braku w danych źródłowych informacji wystarczających do rozwiązania postawionego problemu mogą być:
- bardzo skomplikowane zależności między zmiennymi objaśniającymi (wejściowymi) a objaśnianymi (wyjściowymi) lub wręcz brak takich zależności;
- brak lub częściowy brak danych opisujących zależności między zmiennymi objaśniającymi a objaśnianymi;
- duża zmienność danych lub duża liczba błędów ukrywająca istniejące zależności między zmiennymi objaśniającymi a objaśnianymi.
▸▸ Właściwa ocena i przygotowanie danych źródłowych zajmuje do 80% czasu trwania eksperymentu data science. Jeżeli poświęci się czas na ocenę i przygotowanie danych źródłowych, będzie również można dokładniej poznać rozwiązywany problem, opracować lepsze modele i staranniej określić spodziewane wyniki. Będzie to miało istotny wpływ nie tylko na powodzenie całego eksperymentu, lecz także na lepsze zrozumienie problemu i modelu danych.
Do ilustracji omawianych zagadnień użyjemy listy pasażerów feralnego rejsu RMS Titanic. Lista ta jest ogólnie dostępna w Internecie, między innymi pod adresem https://www.kaggle.com/c/titanic/data.
Dane źródłowe można zaimportować do Studia Azure ML na dwa sposoby – wgrywając lokalny plik z danymi do magazynu zbiorów danych lub importując dane w ramach eksperymentu. Oba sposoby wymagają wcześniejszego utworzenia konta na witrynie https://studio.azureml.net i zalogowania się.
Żeby utworzyć nowy zbiór danych źródłowych, należy:
- zaznaczyć sekcję DATASETS;
- kliknąć przycisk NEW i wskazać lokalizację pliku z danymi.
Tak zaimportowany zbiór danych będzie mógł być użyty we wszystkich eksperymentach tworzonych w bieżącym obszarze roboczym Azure ML. W tym celu wystarczy objąć eksperymentem znajdujący się w sekcji My datasets zbiór danych.
Żeby zaimportować dane źródłowe na potrzeby konkretnego eksperymentu, należy:
- rozpocząć nowy, pusty eksperyment;
- dodać do niego moduł Import Data;
- wybrać odpowiednią metodę importu danych;
- podać odpowiednie parametry modułu;
Importowane dane mogą być buforowane, co oznacza, że zostaną pobrane tylko podczas pierwszego uruchomienia eksperymentu.
Moduł Import Data umożliwia importowanie danych z następujących źródeł:
- dokumentów CSV, TSV, ARFF lub SvmLigh umieszczonych na stronach WWW;
- systemów Big Data (za pomocą zapytania HiveQL);
- baz danych serwera SQL Server;
- usług internetowych (w ich standardowym formacie OData);
- magazynów danych Azure.
2.2.
Zmienne
Atrybuty obiektów nazywa się zmiennymi. Zmienne dzielą się na kategoryczne (jakościowe) i numeryczne (ilościowe).
Wartościami zmiennych numerycznych mogą być wyłącznie liczby, ponadto:
- zbiór dostępnych wartości może być przeliczalny i mieć bardzo dużo wartości (jak np. wiek w dniach) lub nieprzeliczalny (np. długość): zmienne numeryczne, których zbiór wartości jest nieprzeliczalny, nazywamy ciągłymi, a te zmienne numeryczne, których zbiór wartości jest przeliczalny – liczba wartości, choć duża, jest skończona – dyskretnymi;
- wartości te mogą być ze sobą porównywane (np. 14 jest większe niż 10);
- możliwe jest określenie odległości między wartościami (np. przez obliczenie ich różnicy).
- możliwe jest wykonywanie na nich operacji arytmetycznych, takich jak dodawanie, mnożenie czy uśrednianie.
Wartościami zmiennych kategorycznych mogą być liczby lub dane innych typów (np. dane tekstowe), ale:
- zbiór dostępnych wartości zawsze jest ograniczony (np. w wypadku miesięcy do 12); z tego powodu wartości zmiennych kategorycznych nazywane są stanami;
- jeżeli wartości te mogą być w sensowny sposób ze sobą porównywane (np. poziom wykształcenia), to zmienną kategoryczną nazywa się porządkową, w przeciwnym razie mamy do czynienie z regularną zmienną kategoryczną (jak np. w przypadku płci);
- określenie odległości między wartościami jest możliwe jedynie w ramach przyjętego modelu (np. odległość kolorów w przyjętej palecie barw);
- niemożliwe jest wykonywanie na nich operacji arytmetycznych.
Przyjrzyjmy się zmiennym występującym w danych źródłowych z rysunku 2.1.
Zbiór danych źródłowych liczy 891 obserwacji (wierszy). Obserwacje te są opisane 12 zmiennymi. Zmienna Survived jest zmienną kategoryczną, binarną (przyjmuje dwa stany), tak samo jak zmienna Sex. Zmienne Ticket i Name również są zmiennymi kategorycznymi, ale listy ich stanów są znacznie dłuższe.
Zmienna Pclass (passenger class) jest porządkową zmienną kategoryczną, ponieważ jej stany opisują klasę wykupionej kajuty (stan 1 oznacza wyższą klasę, stan 2 – klasę średnią, a stan 3 – klasę niższą). Przykład ten pokazuje, że czasami nawet prawidłowe określenie typu zmiennej wymaga znajomości modelu danych.
Zmienna Age jest dyskretną zmienną numeryczną (liczba elementów zbioru wartości jest ograniczona). Natomiast zmienna Fare jest przykładem ciągłej zmiennej numerycznej.
▸▸ Przydatność zmiennych zależy od zastosowanych skal pomiarowych – po pierwsze, uogólniając zmienną (np. zastępując liczbę dni liczbą lat), zmniejszamy ilość zawartej w niej informacji. Na przykład różnica wieku między noworodkiem a jednorocznym niemowlęciem wyrażona w latach wynosi 1, a więc wydaje się niewielka, tymczasem ta sama informacja zapisana w dniach może wynosić nawet 480, czyli będzie bardziej prawidłowo reprezentowała faktyczną różnicę w rozwoju dzieci. Poza tym te same wartości zapisane w postaci dziesiętnej i w postaci dwójkowej będą w różny sposób zinterpretowane przez modele eksploracji danych. To samo dotyczy skal przedziałowych – ta sama temperatura może być zapisana w skali Celsjusza lub Fahrenheita, co może spowodować, że wyrażenia opisujące zmienną, takie jak powyżej 23 – ciepło, przestaną być prawdziwe.
Rysunek 2.1. Lista pasażerów jedynego rejsu RMS Titanic. Klikając widoczną z lewej strony ikonę wykresu pudełkowego, zmienimy sposób prezentowania danych numerycznych – zamiast histogramu zobaczymy wykres pudełkowy
Żeby ułatwić dalszą analizę danych, należy nadać zmiennym zrozumiałe dla użytkowników nazwy opisowe. Możemy to zrobić za pomocą modułu Edit Metadata. Po podaniu na jego wejście zbioru danych źródłowych należy wybrać kolumny, których nazwy zostaną zmienione (rys. 2.2).
Następnie podajemy listę nowych nazw: Survived, PassengerClass, Gender, SiblingSpouse, ParentChild, FarePrice, PortEmbarkation, oddzielając je przecinkami (kolejność elementów listy powinna odpowiadać kolejności kolumn wybranych w poprzednim kroku).
Następnie, również z pomocą modułu Edit Metadata, zdefiniujemy zmienne Survived, PassengerClass, Gender i PortEmbarkation jako kategoryczne. W tym celu należy dodać kolejny moduł Edit Metadata, połączyć go z poprzednim, wybrać odpowiednie kolumny, a następnie ustawić wartość parametru Categorical na Make categorical.
Rysunek 2.2. Kolumny mogą być wybierane na podstawie ich nazw albo typów
Po uruchomieniu eksperymentu jesteśmy gotowi do następnego etapu – wyboru zmiennych na podstawie rozkładu ich wartości.
2.2.1.
Rozkład częstości zmiennych
Zmienne mogą przyjmować jedną lub wiele wartości. Zmienne jednowartościowe to inaczej stałe. Ponieważ nie niosą one ze sobą żadnej informacji, nie powinny być używane w procesie eksploracji danych.
Zanim usuniemy stałe ze zbioru danych treningowych, należy sprawdzić, czy dana zmienna jest jednowartościowa w wybranej próbie, czy w całym zbiorze danych źródłowych – jeżeli niektóre wartości zmiennej występują bardzo rzadko (np. raz na 500 000 przypadków), prawdopodobnie nie znajdziemy ich w próbie liczącej 10 000 wierszy. Usuwając taką zmienną ze zbioru danych treningowych modelu eksploracji danych, możemy nie tylko pogorszyć dokładność jego wyników, lecz także uniemożliwimy mu rozpoznawanie nietypowych przypadków, możliwe, że najbardziej interesujących.
W tym przypadku w zbiorze danych źródłowych nie występują stałe.
Zupełnie inną klasę stanowią zmienne, których wartości są niepowtarzalne. Takie zmienne (jak np. numery PESEL czy identyfikatory wierszy) co prawda jednoznacznie identyfikują obiekty, ale ponieważ ich wartości się nie powtarzają, ta zależność nie ma praktycznej wartości dla modeli predykcyjnych. Do usunięcia zmiennych PassengerID, Name i Ticket użyjemy modułu Select Columns in Dataset. W tym celu należy:
- dodać do eksperymentu moduł Select Columns in Dataset i umieścić go za drugim modułem Edit Metadata;
- wyłączyć (opcja Exclude) z listy kolumn zmienne PassengerID, Name i Ticket.
Trzecim rodzajem zmiennych nieprzydatnych dla modeli predykcyjnych są zmienne monotoniczne. Wartości takich zmiennych stale zwiększają się lub zmniejszają. Tego typu zmienne występują bardzo często, na przykład:
- wartości wszystkich zmiennych powiązanych z czasem (jak data wystawienia faktury czy data urodzenia) są rosnące;
- wartości wielu niezwiązanych bezpośrednio z czasem zmiennych również są rosnące lub malejące – należą do nich między innymi numery faktur.
Ponieważ wartości takich zmiennych stale rosną lub maleją, musimy je przekształcić, jeśli chcemy ich użyć jako zmiennych wyjściowych modeli eksploracji danych. Jeżeli tego nie zrobimy, dane treningowe (dane, na podstawie których model został nauczony) będą różne od danych używanych do predykcji.
Tak przygotowany do oceny zbiór danych możemy poddać konwersji i zapisać w pliku CSV jako nowy zbiór danych. W tym celu należy:
- dodać do projektu moduł Convert to CSV i umieścić go za modułem Select Columns in Dataset;
- uruchomić eksperyment (lub tylko jego wcześniej nieuruchamiane moduły);
- kliknąć prawym przyciskiem myszy wyjście modułu Convert to CSV, wybrać opcję Save as Dataset i podać nazwę przygotowanego zbioru danych.
Zmienne numeryczne
Rozkład wartości zmiennych numerycznych analizuje się za pomocą statystyk opisowych oraz graficznie. W pierwszej kolejności do opisania zbioru pasażerów RMS Titanic użyjemy metod opisowych oraz wizualizacji dostępnych na platformie Azure ML i w języku R.
Statystyki opisowe
Statystyki opisowe umożliwiają określenie tendencji centralnej, rozrzutu (dyspersji) oraz symetrii rozkładu wartości zmiennych numerycznych. Po przedyskutowaniu tych parametrów z ekspertem z danej dziedziny można je wykorzystać do określenia jakości i reprezentatywności danych źródłowych.
Podstawową miarą tendencji centralnej jest dominanta (mode, wartość modalna) – wskazuje ona na najczęściej występującą wartość.
Drugą miarą tendencji centralnej jest mediana (median, wartość środkowa) – dzieli ona uszeregowany zbiór wartości na pół, czyli poniżej i powyżej mediany znajduje się 50% wszystkich wartości. Mediana nazywana jest też drugim kwartylem (quartile), co sugerowałoby istnienie innych kwartyli. Rzeczywiście, pierwszy (dolny) kwartyl znajduje się w 1/4 uszeregowanych wartości, a trzeci (górny) kwartyl dzieli uszeregowany zbiór wartości na dwie części, odpowiednio, 75% jest położonych poniżej tego kwartyla, a 25% – powyżej. Odległość od pierwszego do trzeciego kwartyla nazywa się rozstępem ćwiartkowym (IQR) – w przedziale tym znajduje się 50% wartości.
Trzecią miarą tendencji centralnej jest średnia arytmetyczna próbki lub populacji (mean) – w celu jej obliczenia należy zsumować wartości i podzielić otrzymany wynik przez liczbę wartości.
Porównując średnią z medianą i dominantą, możemy określić kształt rozkładu wartości zmiennych. Do tego potrzebne będzie nam jednak przedstawienie rozkładu normalnego.
Używany jako wzorzec rozkładu rozkład normalny (krzywa Gaussa) ma kształt dzwonu o określonej wysokości i szerokości. Na osi odciętych rozkładu normalnego znajdują się wartości zmiennej, a na osi rzędnych – gęstość (liczba wystąpień danej wartości). Krzywa Gaussa jest symetryczna względem prostej równoległej do osi rzędnych, przechodzącej w punkcie, w którym znajduje się wartość średnia. Oznacza to, że wartości skrajne, zarówno mniejsze, jak i większe od wartości średniej, występują rzadziej, a im bardziej są one oddalone od średniej, tym mniejsze jest prawdopodobieństwo ich wystąpienia.
Rozkład wartości zmiennych rzadko jest rozkładem normalnym. Po pierwsze, wartości wyższe niż średnia mogą w zmiennej występować częściej lub rzadziej. Wtedy wykres rozkładu wartości zmiennej nie będzie już symetryczny względem osi pionowej – będzie on skośnie przesunięty w prawo lub w lewo. Miarą tego odchylenia jest skośność.
Jeżeli wartość średnia jest mniejsza od środkowej i od dominanty, mamy do czynienia z rozkładem lewoskośnym, w którym wartości zmiennej częściej są większe, a wartości mniejsze tworzą charakterystyczny ogon ciągnący się w lewo na wykresie rozkładu.
Jeżeli wartość średnia jest większa od środkowej i od dominanty, to mamy do czynienia z rozkładem prawoskośnym, co oznacza, że zmienna częściej przyjmuje mniejsze wartości, a rzadziej występujące większe wartości tworzą ogon ciągnący się w prawo.
Drugą, oprócz skośności, miarą symetrii rozkładu jest kurtoza (kurtosis). W rozkładzie normalnym wartość tej miary, mierzącej poziom zagęszczenia wokół wartości centralnej, wynosi 0. Jeżeli kurtoza jest mniejsza od zera, to mamy do czynienia z rozkładem spłaszczonym (garb na wykresie rozkładu zmiennej będzie niższy niż w rozkładzie normalnym), a więc wartości zmiennej będą bardziej zróżnicowane. Jeżeli kurtoza jest większa od zera, to mamy do czynienia z rozkładem wysmukłym (wysokość garbu na wykresie rozkładu zmiennej będzie większa niż dla rozkładu normalnego), czyli zmienna częściej będzie przyjmowała wartości zbliżone do średniej.
Do prawidłowej oceny wartości zmiennych numerycznych są nam jeszcze potrzebne miary rozproszenia, do których zalicza się odchylenie standardowe, rozstęp, wariancję i współczynnik zmienności.
Rozstęp (range) to różnica między wartością maksymalną i minimalną, czyli miara określająca zakres wartości przyjmowanych przez zmienną.
Wariancja (variance) to suma kwadratów odchyleń wyników od średniej podzielona przez liczbę wyników minus jeden. Ponieważ wartości wariancji są wyrażane w jednostkach kwadratowych, znacznie częściej używaną miarą rozproszenia jest odchylenie standardowe (standard deviation), czyli pierwiastek kwadratowy z wariancji. Odchylenie standardowe jest wyrażane w tych samych jednostkach co badana zmienna, w związku z czym łatwo na jego podstawie oszacować rozproszenie jej wartości. Współczynnik zmienności (coefficient of variation) to iloraz odchylenia standardowego i średniej arytmetycznej przemnożony przez 100%.
▸▸ Odchylenie standardowe pozwala szybko ocenić, jak bardzo odstającą (skrajną) jest dana wartość. Jeżeli rozkład badanej zmiennej jest zbliżony do normalnego, można do tego użyć reguły 68–95–99,7, na podstawie której 68% wartości znajduje się w odległości jednego odchylenia standardowego od średniej, a 95% i 99,7% wartości mieści się w przedziale, odpowiednio, ±dwóch i trzech odchyleń standardowych od średniej. Reguła ta jest uniwersalna w tym sensie, że nawet jeśli rozkład danych nie jest zbliżony do normalnego, wartości bardziej odległe od średniej będą występować rzadziej.
Najprostszym sposobem na poznanie najważniejszych statystyk opisowych jest wizualizacja zbioru danych i zaznaczenie interesującej nas kolumny – po prawej stronie ekranu zostaną wyświetlone przedstawione statystyki (rys. 2.3).
Odstające wartości (wartości oddalone o więcej niż półtorakrotność rozstępu ćwiartkowego) mają znaczący wpływ na niektóre statystyki opisowe.
≡ Miarą tendencji centralnej zależną od wartości odstających jest średnia, a miarami rozproszenia – rozstęp i odchylenie standardowe.
Rysunek 2.3. Na górze znajdują się statystyki opisowe zmiennej FarePrice, na dole jej histrogram. Zaznaczając opcję probability density, umieściliśmy na wykresie rozkład wartości (gęstość) zmiennej. Zgadza się on z jej statystykami opisowymi – średnia jest większa od środkowej, a na wykresie wyraźnie widać, że zmienna ma rozkład prawoskośny
Oznacza to, że jeżeli na wykresie rozkładu wartości są widoczne długie ogony ciągnące się w prawo lub w lewo (czyli tak jak w zmiennej FarePrice występują wartości skrajne), to taką zmienną lepiej opisać za pomocą mediany i kwartyli.
Oprócz statystyk opisowych przydatne do oceny danych (zarówno liczbowych, jak i kategorycznych) są:
- liczba wszystkich istniejących wartości zmiennej;
- liczba unikatowych wartości zmiennej;
- liczba brakujących wartości zmiennej.
Wszystkie te statystyki uzyskujemy za pomocą modułu Summarize Data (rys. 2.4).
Rysunek 2.4. Zmienne numeryczne mogą być opisane za pomocą znacznie większej liczby miar niż zmienne kategoryczne
Rysunek 2.5. Instrukcje zapisane w bieżącym kroku możemy wykonać po naciśnięciu klawiszy
Innym sposobem obliczenia wybranej statystyki (lista dostępnych statystyk liczy kilkadziesiąt pozycji) jest użycie modułu Compute Elementary Statistics. Domyślnie wskazana we właściwościach modułu miara jest obliczana dla wszystkich zmiennych numerycznych.
Niektóre formaty danych źródłowych możemy też analizować w notatniku R (na liście obsługiwanych formatów znajdują się pliki CSV, dlatego zapisaliśmy przygotowane dane w tym właśnie formacie). Po kliknięciu zbioru danych prawym przyciskiem myszy i wybraniu opcji Open in a new Notebook/R zostanie otworzona zakładka przeglądarki z notatnikiem jupyter. Pozwala on na wykonywanie na wskazanym zbiorze danych dowolnych instrukcji języka R (rys. 2.5).
Do oceny danych są przydatne następujące funkcje języka R :
- summary() – dla zmiennych numerycznych oblicza minimum, maksimum, kwartyle i średnią; dla zmiennych kategorycznych – liczbę wartości;
- quantile() – może być wywołana tylko dla zmiennych numerycznych i zwraca kwartyle;
- fifenum() – może być wywołana tylko dla zmiennych numerycznych; oblicza minimum, maksimum i kwartyle.
- sd() – może być wywołana tylko dla zmiennych numerycznych i zwraca odchylenie standardowe.
▸▸ Jeżeli zmienna zawiera wartości nieznane, możemy je zignorować, wpisując na.rm=’True’.
Zmienne kategoryczne
Rozkład zmiennych kategorycznych ocenia się za pomocą tabel częstości lub histogramów (histograms). Zawierają one informacje o częstości występowania poszczególnych stanów i umożliwiają ocenę rozkładu zmiennych kategorycznych (rys. 2.7)
Informacja
Na ocenę przydatności danych istotny wpływ ma ilość informacji zawartych w zmiennych. Obiektywne metody pomiaru ilości informacji zostały określone w połowie XX w. przez Claude’a Elwooda Shannona .
Najmniejszą jednostką informacji jest bit (Binary digIT). Ponieważ bit może przyjąć jedną z dwóch wartości (0 lub 1), jednobitowa komunikacja niesie ze sobą co najwyżej jedną informację, dwa bity pozwalają przekazać cztery informacje itd.
Choć informację można mierzyć na różne sposoby, najczęściej wyraża się ją za pomocą liczby bitów. Maksymalną ilość informacji obliczymy za pomocą wzoru:
informacja w bitach = log₂ (liczba możliwych stanów).
Rysunek 2.6. Histogram zmiennej Gender – 65% pasażerów stanowili mężczyźni, pozostali pasażerowie to kobiety
Na przykład cztery informacje można zapisać za pomocą 2 bitów, 16 – 4 bitów, a zapisanie 100 informacji wymaga 7 bitów. W praktyce ilość informacji zawartych w danych jest mniejsza, niż wynikałoby to z liczby bitów, co wynika z nadmiarowości wielu kanałów informacyjnych. Na przykład zdania języka polskiego zawierają około połowy nadmiarowych (powtórzonych) informacji – dzięki tej nadmiarowości możemy zrozumieć poniższe zdanie, choć brakuje w nim niektórych liter.
Ltwo! Ojczzno mja! Ty jstś jk zdrwe, Il cę trzb cnic, tn tlk sie dwie...
Informacja jest tym bardziej zaskakująca, im mniej jest prawdopodobna. Oznacza to, że poziom zaskoczenia (pierwszą z dwóch podstawowych cech informacji) można określić na podstawie liczby wszystkich możliwych stanów systemu, którego dotyczy ta informacja, i prawdopodobieństwa ich wystąpienia.
Przypuśćmy, że gramy w grę polegającą na losowaniu liczby z zakresu od 1 do 10, a nasze zadanie polega na odgadnięciu, czy wylosowana liczba będzie parzysta, czy nieparzysta. Jeżeli losowanie jest uczciwe, mamy 50-procentową szansę wygranej. Po zakończeniu losowania otrzymaliśmy wiadomość, że wygraliśmy. Jak bardzo zaskoczyła nas ta wiadomość i ile niosła ze sobą informacji?
Liczba wszystkich możliwych stanów tego systemu wynosi 2 (albo wygraliśmy, albo przegraliśmy), a więc ilość zapisanych w nim informacji wynosi –log₂ 2, czyli 1 bit. W tej loterii oba stany są tak samo prawdopodobne. Żeby obliczyć ilość informacji przekazanej nam w komunikacie o wygranej, musimy obliczyć, ile bitów informacji zawierał każdy pojedynczy komunikat, i pomnożyć otrzymaną liczbę bitów przez prawdopodobieństwo jego wystąpienia. W tym przypadku pojedynczy komunikat zawierał –log₂ 0,5 (= 1 bit) informacji, a szansa wygranej wynosiła 50%. Mnożąc –1 przez 50%, otrzymujemy –0,5 – komunikat o wygranej (tak samo jak komunikat o przegranej) niósł 0,5 bitu informacji.
Zmieńmy teraz zasady gry – zamiast odgadywać, czy wylosowana liczba będzie parzysta, czy nieparzysta, mamy odgadnąć tę liczbę. W tej grze nasze szanse na wygraną wynoszą 10% (odgadujemy 1 z 10 liczb), a ryzyko przegranej wynosi 90%. Teraz komunikat o wygranej będzie większym zaskoczeniem niż poprzednio, a więc powinien nieść ze sobą więcej informacji. Żeby to sprawdzić, policzymy ilość informacji przekazanej w komunikatach o wygranej i przegranej:
- liczba możliwych stanów systemu nadal wynosi 2 (albo wygraliśmy, albo przegraliśmy);
- prawdopodobieństwo wygranej wynosi 10%, a prawdopodobieństwo przegranej – 90%;
- całkowita ilość informacji dotyczącej wygranej wynosi –log₂ 0,1, czyli –3,32, a ilość informacji dotyczącej przegranej to –log₂ 0,9, czyli –0,15.
- mnożąc całkowitą ilość informacji o obu stanach przez prawdopodobieństwo ich wystąpienia, otrzymamy ilości informacji przekazanych nam w komunikatach o wygranej i przegranej:
- komunikat o wygranej niesie ze sobą –3,32 · 10% = 0,32 bitu informacji;
- komunikat o przegranej niesie ze sobą –0,15 · 90% = 0,136 bitu informacji.
Zauważmy, że tym razem całkowita ilość informacji w systemie wynosi 0,32 + 0,13 = 0,47 bitu, a więc o 0,03 bitu mniej, niż zawierał poprzedni system. Większość tej informacji jest ukryta w komunikacie o wygranej.
Miarą niepewności jest entropia (entropy) – średnia ilość informacji przypadająca na pojedynczą wiadomość ze źródła informacji. Pierwszy system (gra, w której szansa wygranej wynosiła 50%) cechował się maksymalną entropią – prawdopodobieństwo wystąpienia każdego ze stanów było takie samo. Entropia drugiego systemu (gry, w której szansa wygranej wynosiła 10%) była mniejsza, dlatego system ten zawierał mniej informacji.
W praktyce nie znamy prawdopodobieństwa wystąpienia poszczególnych wartości, możemy jednak policzyć częstość ich występowania w danych źródłowych i na tej podstawie obliczyć entropię zmiennej. Ilustruje to poniższy skrypt w języku R, w którym do policzenia entropii informacyjnej użyta została biblioteka entropy (listing 2.1).
Listing 2.1. Funkcja entropy służy do oceny entropii zmiennej
install.packages("entropy")
library(entropy)
flips <- c("Head", "Head", "Tail", "Tail", "Head", "Tail", "Head", "Head", "Head", "Tail")
freqs <- table(flips)/length(flips)
freqs
Head Tail
0.6 0.4
entropy(freqs, unit="log2")
0.9709506
Jeżeli w trakcie dziesięciu rzutów monetą 6 razy wypadł orzeł, a 4 razy reszka, entropia zmiennej flips wyniosła 0,97, czyli zmienna ta niosła ze sobą 0,97 bita informacji. Jeżeli jednak za każdym razem wypadał orzeł, entropia zmiennej flips spadła do zera, czyli zmienna ta nie niesie ze sobą żadnej informacji (listing 2.2).
Listing 2.2. Maksymalną entropię miałaby zmienna, w której każda wartość występuje tak samo często, czyli jest tak samo prawdopodobna
flips <- rep("Head", 10)
freqs <- table(flips)/length(flips)
freqs
Head
1
entropy(freqs, unit="log2")
0
W ten sam sposób możemy obliczyć entropię zmiennych w danych źródłowych (rys. 2.8).
Zmienne, które nie niosą ze sobą żadnej informacji, należy usunąć ze zbioru danych treningowych.
Przydatność informacji zapisanych w poszczególnych zmiennych należy przedyskutować z ekspertem z dziedziny, w obrębie której jest prowadzony eksperyment. Często okazuje się, że zmienne, których entropia jest bardzo wysoka, jedynie komplikują model. W takich wypadkach należy je usunąć.
Ocena drugiego aspektu informacji, czyli poziomu wiedzy potrzebnego do jej zrozumienia, wymaga znajomości jej kontekstu. Gdyby na przykład nagrodą w opisanych grach wynosiła 10 zł, komunikat o wygranej niósłby ze sobą inną informację, niż gdyby nagroda wynosiła 1 000 000 zł.
Rysunek 2.7. Ilość informacji zapisanej w zmiennej Gender (trzecia kolumna zbioru danych źródłowych) obliczona w notatniku jupyter