Projekt okładki Hubert Zacharski

Ilustracja na okładkę Shutterstock/My Portfolio

Wydawca Łukasz Łopuszański

Redaktor prowadzący Adam Kowalski

Redaktor Magdalena Machnicka

Koordynator produkcji Anna Bączkowska

Skład i łamanie Marcin Szcześniak

Partner wydania Microsoft

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN 88em.eu

Książka, którą nabyłeś, jest dziełem twórcy i wydawcy. Prosimy, abyś przestrzegał praw, jakie im przysługują. Jej zawartość możesz udostępnić nieodpłatnie osobom bliskim lub osobiście znanym. Ale nie publikuj jej w internecie. Jeśli cytujesz jej fragmenty, nie zmieniaj ich treści i koniecznie zaznacz, czyje to dzieło. A kopiując jej część, rób to jedynie na użytek osobisty.

Szanujmy cudzą własność i prawo
Więcej na www.legalnakultura.pl
Polska Izba Książki

Copyright © by Wydawnictwo Naukowe PWN SA
Warszawa 2017

eBook został przygotowany na podstawie wydania papierowego z 2017 r., (wyd. I)
Warszawa 2017

ISBN 978-83-01-19324-9

Wydanie I
Warszawa 2017

Wydawnictwo Naukowe PWN SA
02-460 Warszawa, ul. Gottlieba Daimlera 2
tel. 22 69 54 321; faks 22 69 54 228
infolinia 801 33 33 88
e-mail: pwn@pwn.com.pl; reklama@pwn.pl, www.pwn.pl

Dziękuję dr Danucie Mendrali, Andrzejowi Kukule, Michałowi Żylińskiemu, Tomaszowi Kopaczowi i Grzegorzowi Stoleckiemu za cenne uwagi i poprawki. Szczególne podziękowania należą się profesorowi Tadeuszowi Wieczorkowi za recenzję książki.

Wszystkie pozostałe w książce błędy są moje.

Marcin Szeliga

Wzrost możliwości technicznych w zakresie automatycznego pozyskiwania ogromnych ilości danych, postęp w budowie wysokowydajnych baz danych, w szczególności rozproszonych, oraz nowe możliwości przechowywania danych w systemach chmurowych spowodowały ogromny rozwój systemów eksploracji danych. Szczególnie ważne z praktycznego punktu widzenia jest wydobywanie wiedzy ukrytej w danych, w celu lepszego zrozumienia czy optymalniejszego sterowania procesami, z których te dane pochodzą. Dlatego podjęcie przez autora problematyki data science należy uznać za celowe i zgodne z aktualnymi trendami w nauce, a także ze zgłaszanym przez przedsiębiorstwa dużym zapotrzebowaniem na specjalistów z tego zakresu.

* * *

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ąskiej

Przedmowa

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

Microsoft

Zamiast „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[1], 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)

Microsoft

Jestem przekonany, że w ciągu dziesięciu lat
komputery staną się jeszcze bardziej wszechobecne,
a nasze sztuczne otoczenie inteligentne...

Satya Nadella, CEO, Microsoft

Wstęp

O czym jest ta książka?

Tak jak XIX wiek był wiekiem pary i elektryczności, tak wiek XXI jest czasem sztucznej inteligencji – jej bezpośrednie (np. w zaawansowanej analityce) czy pośrednie (takie jak Internet rzeczy) zastosowania regularnie zajmują czołowe miejsce w rankingach najszybciej rozwijających się, najważniejszych czy najbardziej przełomowych technologii XXI w. [91].

W czasie powstawania książki, w drugiej połowie 2016 r., na rynku debiutowały firmy oferujące takie rozwiązania jak eKsięgowość (księgowość prowadzona przez sztuczną inteligencję) czy eLekarz (program, który potrafi samodzielnie zdiagnozować typowe choroby). W tym samym czasie systemy proaktywnego zarządzania najróżniejszymi urządzeniami (od wind, poprzez sieci elektryczne i wodociągowe oraz samoloty), czyli systemy zbierające dane i potrafiące na ich podstawie przewidzieć zbliżające się awarie i im zapobiegać, były coraz powszechniej używane. Dodajmy do tego, że do lipca 2016 r. autonomiczne samochody Google przejechały ponad 3 miliony kilometrów po drogach publicznych, autonomiczne ciężarówki właśnie zaczęły pojawiać się na autostradach, a w zakupach pomagają nam, układając ich listę, oceniając świeżość produktów i przynosząc je do domu, roboty, takie jak Robovie z Advanced Telecommunications Research Institute International.

Wydaje się, że po przezwyciężeniu ograniczeń technicznych podstawowym czynnikiem hamującym stosowanie sztucznej inteligencji stała się stosunkowo niewielka liczba specjalistów – analityków i programistów potrafiących uczyć maszyny, oceniać ich postępy w nauce i wdrażać je do rozwiązywania praktycznych problemów.

Data science

Czterysta lat temu sir Francis Bacon stwierdził, że scientia potentia est (wiedza jest potęgą). Filozof ten był prekursorem i twórcą nowoczesnej, empirycznej metody naukowej. Metody, która dzięki zbieraniu szczegółowych danych na interesujący nas temat i uogólnianiu ich w celu sformułowania ogólnych twierdzeń doprowadziła do rewolucji technicznej i w konsekwencji zmieniła w sposób radykalny życie ludzi z tamtej epoki.

Dziś obserwujemy przełom na podobną skalę. Dzięki rozwojowi technologii informatycznych, w szczególności technologii generowania, przechowywania i przetwarzania danych, liczba cyfrowych danych rośnie do ok. 30% rocznie[2]. Co ciekawe, w 2015 r. ilość danych wygenerowanych przez urządzenia na potrzeby innych urządzeń przekroczyła ilość danych generowanych na nasze potrzeby. Oznacza to, że choć głównym źródłem danych jest bieżąca działalność firm i instytucji, coraz więcej z tych danych jest generowanych i analizowanych automatycznie, przez systemy komputerowe. Dane te zawierają nie tylko szczegółowy opis działalności firm czy instytucji, lecz także w dużej części otaczającego nas świata. Ukryta w nich informacja ma ogromną wartość, potrzebne są tylko metody jej wydobycia.

▸▸ Sukcesy odnoszone przez modele eksploracji danych uczone na ogromnych zbiorach danych treningowych, na przykład przez sieć neuronową Google, która nauczona na 10 milionach pobranych z Internetu obrazów nauczyła się rozpoznawać znajdujące się na nich obiekty, są argumentem na rzecz tezy, według której więcej danych ma większy wpływ na jakość modeli niż użyte w nich algorytmy uczenia maszynowego [21]. Jednak wraz z dodatkowymi danymi rośnie, i to wykładniczo, ilość zawartego w nich szumu, czyli przypadkowych, bezwartościowych kombinacji atrybutów. Dlatego bardziej wiarygodne wytłumaczenie wyjątkowych sukcesów uczenia maszynowego mówi o tym, że rządzące światem prawa mogą być uogólnione i uproszczone do postaci łatwej do wykrycia przez takie algorytmy uczenia maszynowego jak sieci neuronowe [51].

Data science zakłada wykorzystanie komputerów do automatycznego przetwarzania i analizowania dużych zbiorów danych. Podejście to stosują nie tylko ośrodki naukowe, lecz także firmy działające w najróżniejszych sektorach, od finansów przez sektor publiczny i produkcyjny po handel. Co więcej, firmy i organizacje publiczne stosują w tym celu tę samą metodykę co ośrodki naukowe:

zbierają wszystkie możliwe dane i przechowują je przez długi, potencjalnie nieskończony czas;

zatrudniają specjalistów (data scientists), których zadaniem jest formułowanie i weryfikowanie hipotez na podstawie zebranych danych;

podejmują praktyczne (empiryczne) decyzje na podstawie tak sformułowanych hipotez.

▸▸ Termin data science został po raz pierwszy użyty przez Petera Naura w 1960 r. na określenie metod automatycznego przetwarzania danych przy użyciu komputerów. Od tego czasu jest on używany w środowisku naukowym, początkowo głównie wśród statystyków. Posługiwali się nim między innymi tak znani statystycy jak C.F. Jeff Wu i William S. Cleveland na określenie wspomaganych komputerowo analiz statystycznych.

Podstawowym założeniem data science jest uczenie się, zarówno ludzi, jak i maszyn, na podstawie danych. Tym co odróżnia data science od metody empirycznej jest używanie w eksperymentach wszelkich danych cyfrowych. Ponieważ jest ich dużo i są gromadzone szybko, do ich analizy wykorzystuje się komputery. Wynikiem takich analiz są modele eksploracji danych, które poprzez zastosowanie takich algorytmów jak sieci neuronowe, lasy drzew decyzyjnych czy maszyny wektorów nośnych analizują ukryte w danych wzorce i na tej podstawie tworzą ogólne reguły.

▸▸ Jeżeli tylko dysponujemy odpowiednimi danymi, ich prawidłowo przeprowadzona eksploracja pozwala zdobyć wiedzę, która w innym przypadku byłaby dostępna dopiero po fakcie lub w wyniku szczęśliwego zbiegu okoliczności. Ponadto, dokładność i wiarygodność uzyskanych za pomocą eksploracji danych reguł może być zmierzona i obiektywnie oceniona przed ich zastosowaniem w praktyce.

Typowy proces automatycznej analizy danych (w terminologii data science nazywany eksperymentem) składa się z następujących, opisanych w kolejnych rozdziałach książki, etapów:

zdefiniowania rozwiązywanego problemu w kontekście posiadanych danych;

zgromadzenia potrzebnych danych źródłowych – oprócz systemów operacyjnych (takich jak baza ERP) oraz hurtowni danych coraz częściej źródłami danych są systemy Big Data, strony WWW czy usługi online (takie jak Twitter czy Salesforce);

oceny zgromadzonych danych pod kątem przydatności do rozwiązania postawionego problemu;

przygotowania (usunięcia nadmiarowych oraz zbędnych informacji) i wzbogacenia danych źródłowych na potrzeby konkretnych modeli eksploracji danych;

utworzenia modeli eksploracji danych, czyli modeli sposobów użycia wybranych algorytmów do wydobycia informacji ukrytych w przygotowanych danych źródłowych;

oceny utworzonych modeli i wyboru najlepszego z nich względem ustalonych kryteriów;

wdrożenie wybranego modelu w celu rozwiązania postawionego problemu i przedstawienie (często wizualne) wyników użytkownikom.

Często celem eksperymentów data science jest uzupełnienie brakujących danych (predykcja). Mogą to być dane na temat przyszłości (takie jak prognozowana wartość sprzedaży produktu czy przewidywana data uszkodzenia elementu) albo brakujące dane lub wartości zmiennych niewystępujących w zbiorze źródłowym (np. wyznaczenie wartości niewykonanego pomiaru, określenie ryzyka, że dana osoba nie spłaci pożyczki, czy diagnoza pacjenta). W niniejszej książce są przedstawione tego typu eksperymenty.

Drugi rodzaj eksperymentów data science polega na automatycznym odkryciu ogólnych wzorców ukrytych w danych (deskrypcja). Przykładem tego typu zastosowań może być określenie często kupowanych razem towarów (znalezienie typowych koszyków zakupów) czy sekwencji zdarzeń prowadzących do utraty klienta bądź uszkodzenia urządzenia.

Uczenie maszynowe

Niektórych problemów nie potrafimy rozwiązać w sposób algorytmiczny. Przykładem może być rozpoznawanie obrazów – wciąż nie potrafimy w ścisły sposób opisać, jak ten proces zachodzi w mózgu człowieka, a nie znając algorytmu, nie możemy go zaimplementować w jakimkolwiek języku programowania. Nie oznacza to jednak, że nie potrafimy nauczyć komputera rozpoznawania obrazów, czego dowodem są nie tylko takie usługi jak https://www.microsoft.com/cognitive-services/en-us/face-api, ale również systemy automatycznego prowadzenia samochodów.

Próby algorytmicznego rozwiązania wielu innych problemów byłyby nie tylko bardzo skomplikowane, lecz także wysoce nieskuteczne w praktyce. Dobrym przykładem problemów tego typu jest zagadnienie wykrywania możliwych oszustw popełnianych za pomocą kart kredytowych. Nawet po udanym zakodowaniu wszystkich reguł, na podstawie których transakcja powinna być sklasyfikowana jako próba oszustwa, otrzymalibyśmy niezwykle skomplikowany program (oprócz ogólnych reguł typu „ta sama karta została użyta w odstępnie krótszym niż godzina w dwóch odległych od siebie o ponad 100 km miejscach”, należałoby uwzględnić reguły specyficzne dla danej osoby, np. „karta po raz pierwszy została użyta w nocnym klubie w Bangkoku”). Co gorsza, reguły tego typu często się zmieniają (użytkownicy kart kredytowych nie zachowują się przez cały czas w ten sam sposób, a oszuści dostosowują swoje działania, by obejść wdrożone zabezpieczenia), a więc chcąc, aby nasz program był skuteczny, musielibyśmy na bieżąco go aktualizować.

Kolejnym typem problemów, które nie nadają się do rozwiązania w sposób algorytmiczny, są systemy, których nie potrafimy, czy to z powodu ilości przetwarzanych danych, czy złożoności algorytmu, w wystarczający sposób skalować. Przykładem mogą być powszechnie używane przez wszystkie sklepy internetowe systemy rekomendujące.

Rozwiązaniem wszystkich tych problemów jest zastosowanie technik uczenia maszynowego.

≡ Zamiast pisać programy, które będą realizowały poszczególne zadania, mamy gromadzić dane opisujące spodziewane wyniki (obrazy wraz z opisem ich zawartości, zbiory transakcji z informacją, czy były one próbą oszustwa, czy nie, czy historie zakupów dokonanych przez różnych klientów) i użyć ich jako danych treningowych odpowiedniego algorytmu uczenia maszynowego.

Powstały w ten sposób model będzie odpowiadał na takie zapytania predykcyjne, jak „zidentyfikuj znajdujące się na obrazie obiekty”, „oceń ryzyko, że dana transakcja jest próbą oszustwa” czy „zarekomenduj danemu użytkownikowi pięć towarów, które z największym prawdopodobieństwem go zainteresują”. W tej książce są przedstawione metody tworzenia tego typu systemów, ze szczególnym uwzględnieniem algorytmów uczenia maszynowego.

Dla kogo jest ta książka?

Gwałtowny rozwój technologii przechowywania i przetwarzania danych spowodował między innymi, że zbudowanie modelu eksploracji danych sprowadza się do napisania kilku instrukcji (przykładem mogą być specjalistyczne biblioteki języka R) lub dodania i połączenia ze sobą kilku graficznych, reprezentujących poszczególne zadania elementów (jak ma to miejsce w Studiu Azure ML). Prawdziwymi trudnościami pozostają:

zdobycie specjalistycznej wiedzy z dziedziny, w ramach której jest realizowany eksperyment uczenia maszynowego (np. medycyny czy zasad rynku kredytowego), lub wsparcia eksperta z danej dziedziny;

odpowiednia ocena danych (co wymaga znajomości statystyki);

wstępne przygotowanie danych do analizy przy użyciu języka manipulowania danymi, takiego jak SQL czy R;

wybór i parametryzacja właściwych algorytmów uczenia maszynowego (co wymaga zrozumienia zasad działania poszczególnych algorytmów);

ocena jakości utworzonych modeli, do czego ponownie przyda się znajomość statystyki;

zaprezentowanie uzyskanych wyników użytkownikom – specjalistyczna umiejętność oparta nie tylko na poznaniu zasad graficznego prezentowania danych, lecz także na zdolności do przedstawiania wyników w sposób zrozumiały i interesujący użytkownikom, którzy nie zajmują się ani statystyką, ani technikami eksploracji danych.

Książka jest adresowana do wszystkich, którzy chcieliby poszerzyć swoją wiedzę z powyższych (z wyjątkiem pierwszego) obszarów lub w ogóle zapoznać się z tymi zagadnieniami. Tego typu książki mogą być przystępne, napisane językiem potocznym i ilustrowane praktycznymi przykładami lub dokładne – pełne precyzyjnych równań matematycznych. Z założenia książka ma być możliwie przystępna, co niestety oznacza, że opisowe wyjaśnienia pozostawiają Czytelnikowi możliwość ich różnorodnego interpretowania. Problem ten starałem się rozwiązać, ilustrując opisywane zagadnienia praktycznymi przykładami, których samodzielne przeanalizowanie powinno pozwolić rozwiać ewentualne niejasności. Liczę, że dzięki temu trafię do szerokiego grona Czytelników i zarówno studenci kierunków informatycznych, jak i analitycy, programiści, administratorzy baz danych i statystycy znajdą w książce informacje, które pozwolą im opanować praktyczne umiejętności potrzebne do samodzielnego tworzenia systemów uczenia maszynowego.

▸▸ Tradycyjnie uważa się, że data scientist powinien być matematykiem (a przynajmniej statystykiem), programistą i znać algorytmy uczenia maszynowego. W praktyce okazuje się, że zdolności analityczne poparte umiejętnością zadawania trafnych pytań i znajomością języka analizy danych, takiego jak R, są bardziej przydatne niż wiedza teoretyczna [63].

Narzędzia

Żeby opisane w książce zagadnienia mogły być zilustrowane praktycznymi przykładami, musiałem zdecydować się na jakieś narzędzia. Wybór padł na usługę Azure ML i język R, ponieważ [2]:

oba te narzędzia dostępne są za darmo;

Azure ML jest usługą w pełni zarządzaną w chmurze i nie wymaga instalowania na komputerze jakiegokolwiek oprogramowania, a R jest dostępny zarówno w wersji dla systemów Windows, Linux, jak i Mac OS X;

za pomocą obu narzędzi można w prosty sposób wykonywać skomplikowane analizy, a więc doskonale nadają się one do celów ilustracyjnych;

zarówno Azure ML, jak i R są doskonale udokumentowane – czytelnicy łatwo znajdą nie tylko ich bogate dokumentacje w Internecie, lecz także poświęcone im kursy i książki;

Azure ML pozwala używać skryptów R zarówno do oceny i przygotowania danych, tworzenia modeli predykcyjnych, jak i do wizualizacji wyników. Wszystkie przykłady, niezależnie od tego, czy do ilustracji danego zagadnienia zostały użyte komponenty Azure ML, czy skrypty języka R, będzie można wykonać w tym samym środowisku uruchomionym w przeglądarce internetowej.

R jest najpopularniejszym (używanym przez ponad 3 miliony specjalistów) językiem analizowania danych, a usługa Azure ML została uznana za najszybciej rozwijającą się i najbardziej obiecującą przez analityków Gartnera[3] (rys. 0.1).

Rysunek 0.1. Raporty dotyczące technologii BI i analitycznych (po lewej) oraz technologii zaawansowanej analizy danych (po prawej) [46]. Wynika z nich, że agencja Gartnera uznała produkty Microsoftu, w tym pakiet Cortana Analytics, którego kluczowym elementem jest Azure ML, za kompletną i rozwojową platformę zaawansowanej analizy danych

Agencja Stanley Morgan ocenia, że do roku 2019 r. Microsoft Azure stanie się najpopularniejszą usługą w chmurze (w czasie przygotowywania książki jej udział w rynku wynosił 13%, a udział w rynku usługi AWS – 30%), a więc jej znajomość będzie z roku na rok cenniejsza na rynku pracy. Fachowcy znający język R już dziś są jednymi z najbardziej poszukiwanych i najlepiej wynagradzanych specjalistów IT.

Usługa Azure ML

Wchodząca w skład pakietu Cortana Analytics usługa Azure ML (uczenia maszynowego) to w pełni zarządzane i automatycznie skalowalne rozwiązanie, które umożliwia tworzenie eksperymentów data science za pomocą graficznego edytora Azure ML Studio. Gotowe modele predykcyjne można zapisywać i używać ich ponownie w innych eksperymentach, a po opublikowaniu stają się one dostępne dla użytkowników poprzez Web API.

W czasie powstawania książki usługa ta była dostępna pod adresem https://azure.microsoft.com/pl-pl/services/machine-learning/. Po wybraniu opcji Zacznij teraz użytkownik mógł wybrać jedną z trzech wersji: 8-godzinną wersję demonstracyjną, wersję darmową lub płatną wersję Standard. Na potrzeby książki zalecam wybór wersji darmowej, co wymaga posiadania konta Microsoft. Po zalogowaniu się na takie konto w przeglądarce wyświetlony zostanie początkowo pusty obszar roboczy użytkownika.

Język R

R to nie tylko język statystycznej analizy danych, lecz także wyjątkowo szybko rozwijający się, ogólnoświatowy projekt open source, w ramach którego tysiące osób, w tym prestiżowe uniwersytety, znane osoby świata nauki i eksperci z poszczególnych dziedzin dzielą się swoimi, gotowymi do użycia bibliotekami. Łatwość użycia – biblioteki zawierają zarówno implementacje najnowocześniejszych algorytmów uczenia maszynowego, jak i funkcje rozwiązujące konkretne zadania – powoduje, że R jest najczęściej używanym narzędziem do zaawansowanej analizy danych (rys. 0.2).

Rysunek 0.2. Na siódmą coroczną ankietę odpowiedziało 1220 analityków z 72 krajów – R jest najpopularniejszym narzędziem ich codziennej pracy, a jego popularność z roku na rok rośnie [70]

Platforma Open R jest dostępna są pod adresem https://cran.r-project.org/[4]. Czytelnicy, którzy chcieliby uruchamiać skrypty R lokalnie, oprócz platformy powinni pobrać i zainstalować graficzny edytor tego języka, na przykład darmową wersję R Studio (https://www.rstudio.com/).

Microsoft R Open

Platforma Open R oprócz swoich wielu zalet ma też pewne ograniczenia. Dotyczą one przede wszystkim wydajności, skalowalności i braku płatnego wsparcia (pomocy technicznej). Jedną z firm specjalizujących się w wyeliminowaniu tych ograniczeń była Revolution Analytics. Firma ta opracowała Revolution R OPEN – w pełni kompatybilną z Open R wersję języka R uzupełnioną o możliwość wersjonowania kodu i bibliotek oraz obsługę wielu procesorów. Płatnym produktem tej firmy był Revolution R Enterprise (RRE) – wysoko skalowana i wydajna platforma do analizowania dużych zbiorów danych przy użyciu języka R. Jej głównym składnikiem była specjalistyczna (niedostępna poza RRE) biblioteka RevoScaleR.

W maju 2015 r. Revolution Analytics został przejęty przez Microsoft. Revolution R OPEN stał się podstawą Microsoft R Open (MRE), a Revolution R Enterprise – Microsoft R Server (MRE).

Microsoft R Open jest ogólnie dostępny w wersjach na systemy Windows, Linux i Mac OS X (https://mran.microsoft.com/). Ta wersja języka R jest w 100% zgodna z Open R i może być używana w edytorach Open R, takich jak R Studio. Praca z MRO jest też możliwa przy użyciu Visual Studio 2015 (również w darmowej, dostępnej pod adresem https://www.visualstudio.com/pl-pl/products/visual-studio-community-vs.aspx, wersji Community Edition). Wymaga jedynie zainstalowania darmowego dodatku R Tools for Visual Studio (https://www.visualstudio.com/en-us/features/rtvs-vs.aspx).

Z perspektywy książki ważną dodatkową funkcjonalnością MRO jest możliwość równoległego wykonywania niektórych operacji matematycznych. Wymaga to instalacji dodatkowej biblioteki MKL (Intel Math Kernel Library), również dostępnej pod adresem https://mran.microsoft.com/download/. Po jej załadowaniu bez żadnych zmian w kodzie wspierane operacje będą wykonywane wielowątkowo, przy czym domyślnie stopień ich zrównoleglenia odpowiada liczbie dostępnych procesorów. Porównanie wydajności języka Open R i MRO dla dwóch przykładowych operacji matematycznych (mnożenia macierzy i analizy głównych składowych) zawiera tabela 0.1.

Dodatkowo dzięki bibliotece ParallelR MRO umożliwia zrównoleglenie typowych operacji poprzez równoczesne wykonywanie ich w pętli forech loop.

▸▸  MRO zawiera również dodatkowe biblioteki umożliwiające zintegrowanie języka R z usługami firmy Microsoft, w tym HDInsight (implementacją systemu Hadoop w chmurze Microsoft) oraz Azure ML.

Tabela 0.1. Czas wykonania tych samych operacji na wyposażonej w cztery logiczne procesory stacji roboczej w środowisku MRO i Open R

Microsoft R Open

Open R

>set.seed(1)

>m <- 10000

>n <- 5000

>A <- matrix(runif(m * n), m, n)

>system.time(B <- crossprod(A))

użytkownik system upłynęło

14.07 0.11 3.54

>set.seed(1)

>m <- 10000

>n <- 5000

>A <- matrix(runif(m * n), m, n)

>system.time(B <- crossprod(A))

użytkownik system upłynęło

111.82 0.06 111.95

>m <- 10000

>n <- 2000

>A <- matrix(runif(m * n), m, n)

>system.time(P <- prcomp(A))

użytkownik system upłynęło

36.78 0.91 10.34

>m <- 10000

>n <- 2000

>A <- matrix(runif(m * n), m, n)

>system.time(P <- prcomp(A))

użytkownik system upłynęło

133.48 0.22 133.91

Przykładowe dane

Wszystkie użyte w książce zbiory danych są ogólnie dostępne w sieci, często jako przykładowe zbiory danych usługi Azure ML. W Internecie można też znaleźć inne ciekawe zbiory danych, w tym również dane stanowiące pomoc w rozwiązywaniu rzeczywistych problemów. Dane takie znajdują się na przykład na następujących stronach:

http://archive.ics.uci.edu/ml/datasets.html

https://www.kaggle.com

https://www.openintro.org/stat

http://www.gapminder.org/data/

http://www.kdnuggets.com/datasets/index.html

http://www.rdatamining.com/resources/data

Konwencje i oznaczenia

W książce zostały zastosowane następujące konwencje do oznaczania różnych typów tekstu:

czcionką pogrubioną są pisane terminy w miejscach ich pierwszego użycia;

czcionką pogrubioną i znakiem ≡ są wyróżnione nowe, istotne zagadnienia, na które czytelnik powinien zwrócić uwagę;

czcionką pochyłą są pisane nazwy własne w miejscach ich pierwszego użycia oraz angielskie odpowiedniki wprowadzanych pojęć;

czcionką o stałej szerokości znaków są pisane przykładowe programy, pojawiające się w treści akapitu fragmenty programów (instrukcje, słowa kluczowe, modyfikatory itp.), polecenia wprowadzane z klawiatury, teksty wyświetlane na ekranie oraz adresy internetowe;

uwagi, wskazówki, ciekawostki, dobre rady lub ostrzeżenia są pisane

▸▸  mniejszym stopniem pisma i wyróżnione znakiem widocznym obok.

Dane to nie informacja,
informacja to nie wiedza,
wiedza to nie zrozumienie,
zrozumienie to nie mądrość.

Tim Bernes-Lee

Rozdział 1
Uczenie maszynowe jako element eksperymentów data science

Celem książki jest przedstawienie naukowej, w rozumieniu data science, metody tworzenia modeli eksploracji danych. Wybór algorytmów eksploracji danych, ich parametryzacja i uczenie przy użyciu danych treningowych jest tylko jednym z etapów tego procesu – i w dodatku niemającym największego wpływu na efekt końcowy. Dlatego zanim przejdziemy do omawiania poszczególnych algorytmów, najpierw przyjrzymy się metodyce projektów uczenia maszynowego, a następnie poświęcimy czas na kwestie związane z oceną i przygotowaniem danych treningowych.

▸▸ Proces eksploracji danych nie sprowadza się do zastosowania wyrafinowanych algorytmów do posiadanych danych. W praktyce ten etap zajmuje nie więcej niż 10% czasu poświęconego na przeprowadzenie eksperymentu data science. Najbardziej czasochłonnymi zadaniami (zajmującym do 80% czasu eksperymentu) są ocena i właściwe przygotowanie danych treningowych. Zrozumienie danych i ich przygotowanie mają też największy wpływ na jakość otrzymanych wyników eksperymentu.

W przeciwieństwie do wielu książek poświęconych tematyce eksploracji danych ta nie dotyczy wyłącznie opisu zasad działania poszczególnych algorytmów, ale prowadzi Czytelnika przez wszystkie etapy eksperymentu data science.

1.1.
Eksploracja danych jako technika wspomagania decyzji

Eksploracja danych (data mining) jest relatywnie nową dziedziną informatyki powstałą z połączenia statystyki, technologii bazodanowych i algorytmiki. W ramach algorytmiki najważniejsza rolę odgrywają tu sieci neuronowe czy drzewa decyzyjne.

Od samego początku (czyli ostatniej dekady XX w.) eksploracja danych była etapem procesu odkrywania wiedzy (knowledge discovery) i taką jej definicję możemy odnaleźć w pionierskim artykule Fayyada, Piatetsky’ego-Shapiro i Smytha [26] (rys. 1.1).

Rysunek 1.1. Proces odkrywania wiedzy – eksploracja danych jest czwartym z pięciu etapów tego procesu

Wyraźnie widać, że centralnym elementem procesu są dane, które zostają poddane kolejnym przekształceniom i modelowane w celu wydobycia ukrytych w nich informacji.

Proces ten nie zmienił się do dziś, co podkreślono między innymi w opublikowanym w 2012 r. przez Computing Community Consortium dokumencie Challenges and Opportunities with Big Data [8] (rys. 1.2).

Ponieważ rewolucja big data i związane z nią technologie informatyczne nie wpłynęły zasadniczo na zmianę procesu wydobywania wiedzy z danych, eksperymenty data science możemy z sukcesem przeprowadzać, wykorzystując opracowaną w 2000 r. metodykę CRISP-DM (CRoss Industry Standard Process for Data Mining) [9] (rys. 1.3).

Rysunek 1.2. Etapy procesu wydobywania wiedzy z danych oraz związane z nimi problemy

Rysunek 1.3. Metodyka CRISP-DM podkreśla iteracyjny i zwinny charakter procesu wydobywania wiedzy z danych – wyniki każdego etapu są oceniane i na tej podstawie jest podejmowana decyzja o ewentualnym powtórzeniu któregoś z wcześniejszych kroków

▸▸ Wszystkie trzy wymienione prace do dziś pozostają aktualne, a ich lektura jest nie tylko pomocna w opanowaniu klasycznych metod wydobywania wiedzy z danych, ale może również być inspiracją do stosowania tych technik w eksperymentach data science.

We wszystkie trzech przedstawionych metodykach modelowanie (tworzenie wzorców) występuje jako jeden z ostatnich etapów odkrywania ukrytej w danych wiedzy i z reguły polega na automatycznym tworzeniu matematycznych modeli danych. Jednak modelowanie w szerszym sensie jest podstawą całego procesu, od jego początku do końca. Zanim przeanalizujemy z perspektywy przedstawionych metodyk przykładowy eksperyment data science przeprowadzony w Studiu Azure ML, pokrótce wyjaśnimy związek między modelowaniem i odkrywaniem wiedzy.

1.2.
Modelowanie

Wrodzoną cechą ludzi jest chęć kontrolowania otaczającego ich świata. Naszą skuteczność w tym zakresie zawdzięczamy umiejętności tworzenia uproszczonych modeli rzeczywistości, a dzięki zdolności obserwacji i analizy zależności występujących między różnymi zdarzeniami możemy modelować i praktycznie wykorzystywać różnorodne wzorce. Dostrzegamy zatem zjawiska:

cykliczne, takie jak wschody i zachody słońca;

charakteryzujące się pewnym trendem, jak na przykład wydłużanie i skracanie się dni związane ze zmianami pór roku;

przyczynowo-skutkowe, na przykład pomiędzy wiekiem a zachowaniem się dzieci.

Nasze sukcesy w rozumieniu i kontrolowaniu świata są o tyle zadziwiające, że jego różnorodność i stopień skomplikowania przekracza ludzkie możliwości poznawcze. Jedyne, co możemy zrobić, to obserwować wybrane, interesujące w danej chwili zdarzenia i opisywać je w zrozumiały dla nas sposób. W rezultacie posługujemy się stworzonymi przez nas, z konieczności uproszczonymi modelami świata. Niezależnie od dziedziny (czy jest to model biznesowy sprzedaży detalicznej, czy nowa metoda leczenia nowotworów) struktura tych modeli będzie taka sama [67].

Podstawowym składnikiem modeli są obiekty – konkretne lub abstrakcyjne rzeczy, które mają określone cechy i doświadczają pewnych zdarzeń lub są ich źródłem. W ramach modelu każdy obiekt ma swoją, w dużej części intuicyjną (dla osób posługujących się na co dzień tym modelem) definicję.

≡ Pierwszym etapem modelowania będzie zatem zdefiniowanie tych obiektów w kontekście posiadanych danych źródłowych.

Najprostsze i jednocześnie najczęściej używane definicje obiektów odnoszą się jedynie do analizowanych przypadków. Na przykład w modelu służącym do optymalizacji skuteczności kampanii marketingowej obiektem, który należy zdefiniować – i jednocześnie modelowanym przypadkiem – będzie klient.

≡ Drugi element modelowania obejmuje określenie zdarzeń.

Definiując zdarzenia, należy pamiętać, że w biznesowym modelu świata jest to coś, co się zdarzyło lub z dużym prawdopodobieństwem się wydarzy. Ponieważ biznesowy model świata jest przyczynowo-skutkowy, zdarzenie zostało przez kogoś lub coś wywołane, a jego skutkiem będzie pewna zmiana stanu modelu. Tym, co nas najbardziej interesuje (spodziewanym wynikiem eksperymentu), jest właśnie ocena skutków zdarzeń – gdybyśmy na przykład potrafili ocenić wpływ kampanii marketingowej na poszczególnych klientów, uniknęlibyśmy strat związanych z wysłaniem oferty do niezainteresowanych nią osób.

▸▸ Analizując zdarzenia, należy pamiętać, że ocena zmian w modelu ma charakter względny, ponieważ niemożliwe jest opisanie całego kontekstu wystąpienia danego zdarzenia – modele (i dane źródłowe) zawierają tylko częściowy opis obiektów i zdarzeń. Wszystkie niezdefiniowane elementy pozostają dla analityka nieznane aż do momentu, w którym zaprezentowane przez niego wyniki eksperymentu okażą się trywialne albo pozbawione praktycznego zastosowania. Stosując metodę data science, możemy rozwiązać ten problem za pomocą paradygmatu download the world, a więc wykorzystać fakt, że dziś technicznie możliwe jest przechowywanie i przetwarzanie dowolnie dużych zbiorów danych, które umożliwiają testowanie różnorodnych hipotez [39].

≡ Trzeci element każdego modelu – reguły

Reprezentuje występujące w ramach schematu regularności zachowania się obiektów. Im pełniejsza jest definicja obiektu i im dokładniejszy jest opis dotyczących go zdarzeń, tym silniejszy będzie związek między modelowanymi regułami a zależnościami występującymi między rzeczywistymi obiektami. Aby uzyskać jak najsilniejszy związek, należy skorzystać ze wspomnianego paradygmatu download the world.

Podsumowując, najważniejszym elementem eksperymentów data science są dane gromadzone w wyniku zapisywania zdarzeń lub cech obiektów. Oczywiście nie wszystkie zachodzące w świecie zdarzenia są obserwowane i zapisywane – firmy gromadzą jedynie niektóre dane o wybranych, interesujących je zdarzeniach. To, które zdarzenia są uznawane za interesujące i jakie dane o tych zdarzeniach są zapisywane, zależy od przyjętego modelu. Powinniśmy zdawać sobie sprawę z tego, że:

≡ Dane źródłowe są zbierane w ramach modeli, a ich analiza według niewystępujących w tych modelach reguł, choć technicznie możliwa, zwykle prowadzi do niemających praktycznego zastosowania wyników.

▸▸ Często spotkamy się z sytuacją, w której jednocześnie w użyciu znajduje się wiele modeli. Na przykład definicja klienta stworzona na potrzeby systemu zarządzania wierzytelnościami będzie różnić się od definicji klienta obowiązującej w dziale marketingu. Ponieważ w ramach każdego z tych modeli inne zdarzenia i cechy obiektów są uznawane za istotne, dane zgromadzone na potrzeby poszczególnych działów będą w inny sposób opisywały te same obiekty. W takich wypadkach konieczne będzie uzgodnienie tych modeli i scalenie przechowywanych na ich potrzeby danych.

Skoro zgromadzone dane opisują jedynie wybrane zdarzenia i tylko niektóre cechy obiektów (te, które były dostępne albo zostały uznane w ramach danego modelu za istotne), zatem same dane nie wystarczą do przeprowadzenia eksperymentu data science. Co więcej, nawet gdybyśmy w ramach różnych modeli zgromadzili takie same dane, ich znaczenie byłoby różne, zależnie od obowiązujących w tych modelach definicji i reguł. Potrzebny jest nam jeszcze wynikający z modelu kontekst, czyli coś, co nada danym znaczenie. Innymi słowy,

≡ koniecznym warunkiem powodzenia eksperymentu data science jest udział w nim eksperta z dziedziny, której on dotyczy (SME),

na przykład inżyniera budowy sieci wodno-kanalizacyjnych w eksperymencie poświęconym proaktywnemu zarządzaniu urządzeniami kontrolującymi sieć wodociągową.

1.3.
Wiedza i proces uczenia

Wiedzę definiuje się jako ogół wiarygodnych informacji o świecie wraz z umiejętnością ich wykorzystywania. Adekwatnie do tej definicji – mającej zastosowanie zarówno do ludzi, jak i do sztucznej inteligencji – możemy przeanalizować proces uczenia się (training) modeli opartych na danych [80].

Pamiętajmy, że informacje, w przeciwieństwie do danych, zawsze cechują się pewnym poziomem ogólności. Przy czym uogólnianie nie sprowadza się do automatycznego sumowania danych – jego celem jest nadanie im znaczenia. Czyli gdyby te same dane zostały w inny sposób uogólnione (np. pogrupowane na poziomie miesięcy, a nie dni), przedstawiałyby odmienne informacje. Ryzyko niewłaściwej interpretacji danych źródłowych jest jednym z głównych powodów, dla którego wiedza z zakresu eksploracji danych nie wystarcza do przeprowadzania udanych eksperymentów data science.

▸▸ Nasza wiedza i poglądy na temat świata nie są niezmienne. Im więcej wiemy na dany temat, tym łatwiej jest nam zrozumieć nowe zdarzenia z dziedziny, w której jesteśmy ekspertami, i tym efektywniej umiemy je wykorzystać do osiągnięcia założonych celów. Jeżeli dodatkowo potrafimy pod wpływem nowych informacji zmodyfikować naszą wiedzę opartą na obowiązujących w danym modelu założeniach (paradygmatach), to możemy uzyskać zaskakujące wyniki, skłaniające nas do wprowadzenia zmian w modelu lub nawet zastąpienia go nowym, lepiej pasującym do naszej wiedzy i oczekiwań. Celem eksperymentów data science jest właśnie pomoc użytkownikom w dostosowywaniu obowiązujących modeli do nowych sytuacji. Nie oznacza to jednak, że jakiekolwiek narzędzie do eksploracji danych jest w stanie zastąpić naszą kreatywność. Choć wynikiem eksperymentu może być wykrycie nowych wzorców ukrytych w danych, to analityk wspólnie z ekspertem z danej dziedziny powinni ocenić te wyniki i zdecydować, które z nich mają praktyczną wartość.

Powszechnie cytowana formalna definicja uczenia maszynowego pochodzi od Toma Mitchella [61]: „Program komputerowy uczy się na podstawie doświadczeń E rozwiązywania problemów T względem kryterium oceny P, jeśli jakość P, z jaką rozwiązuje on problemy T, rośnie wraz z doświadczeniem E”. Na przykład problemem T może być gra w szachy, kryterium oceny P procent wygranych partii, a doświadczeniem E partie rozgrywane przez komputer z samym sobą. Definicja ta jest precyzyjna, ale niewiele mówi o tym, w jaki sposób programy komputerowe się uczą. Przyjrzyjmy się więc procesowi uczenia, odnosząc go do sztucznej inteligencji.

Pierwszym etapem przekształcania naszych doświadczeń i będących ich wynikiem obserwacji w uporządkowany system informacji – w wiedzę – jest abstrahowanie. W jej trakcie jakościowe opisy zdarzeń zamieniane są na ich ilościowe opisy.

Wynikiem abstrahowania nie muszą jednak być liczby. Duża część naszej wiedzy jest reprezentowana za pomocą innych symboli, takich jak etykiety. Przykładem etykiet są nazwy kolorów (zielony, czerwony itd.) oraz opisy stanów cywilnych (żonaty, zamężna, wdowiec, wdowa itd.). Chociaż etykiety są mniej abstrakcyjne od liczb, ich wartości również muszą być (w ramach przyjętych modeli) mierzalne. Żeby na przykład określić jakiś kolor jako zielony, musimy dysponować kryteriami pozwalającymi odróżnić ten kolor od innych.

W przypadku ludzi ta, z reguły dokonywana nieświadomie, abstrahowanie odbywa się według reguł obowiązujących w przyjętym modelu. W przypadku sztucznej inteligencji procesem tym możemy sterować, odpowiednio przygotowując dane źródłowe.

Drugim etapem uczenia jest uogólnianie (generalizacja). Zdolność do generalizacji pozwala na zastosowanie doświadczeń zdobytych w przeszłości do bieżących sytuacji. Dotyczy to również sztucznej inteligencji [89].

Jeżeli jakaś osoba nie potrafi uogólniać posiadanych informacji, nie będzie w stanie działać w nowych sytuacjach, bo nie będzie potrafiła dostrzec ich zasadniczych cech wspólnych z sytuacjami, których wcześniej doświadczyła. Taka osoba będzie jednak bardzo efektywna w sytuacjach, które już zna (celem treningu sportowców i wielu szkoleń, np. żołnierzy, jest właśnie wyrobienie w nich automatycznych, powtarzalnych reakcji na te same sytuacje). W przypadku sztucznej inteligencji problem ten nazywamy przeuczeniem (overtraining/overfitting) – przeuczone modele eksploracji danych zachowują się tak, jakby zapamiętały poszczególne przypadki treningowe i choć potrafią doskonale wnioskować na podstawie zapamiętanych danych, to jakakolwiek zmiana ocenianych danych powoduje, że ich wyniki stają się niedokładne i niewiarygodne.

▸▸ Problem przeuczenia modeli eksploracji danych można porównać do problemu występującego w przypadku próby przygotowania się do egzaminu przez zapamiętywanie odpowiedzi na wszystkie pytania, które już kiedyś na tym egzaminie zadano. Strategia ta jest nieskuteczna, ponieważ odpowiedzi na nieznane pytania będą nietrafne. Lepsze wyniki uzyskamy, koncentrując się na poznaniu mniejszej liczby kluczowych zagadnień i reguł.

Lecz osoba nadmiernie generalizująca posiadane informacje nie będzie w stanie dostrzec istotnych różnic między sytuacją, w której się w danej chwili znajduje, a uogólnioną sytuacją z przeszłości, i będzie podejmować albo błędne decyzje, albo nawet zawsze te same.

≡ W przypadku sztucznej inteligencji problem niedouczenia (underfitting) występuje, jeśli model nie był w stanie uogólnić danych treningowych albo jeśli wynikiem tego uogólnienia jest zbyt mały zbiór wzorców i reguł (rys. 1.4).

▸▸ Problem niedouczenia modeli eksploracji danych można porównać do próby przygotowania się do egzaminu przez poznanie tylko kilku najbardziej ogólnych zagadnień i reguł. Strategia ta jest nieskuteczna, bo odpowiedzi na pytania będą niedokładne.

Rysunek 1.4. Przeuczony model (po lewej) idealnie zapamiętał przypadki treningowe, ale ich nie uogólnił, czyli nie będzie w stanie prawidłowo ocenić nowych przypadków. Niedouczony model (po prawej) nie jest w stanie dostrzec subtelnych różnic pomiędzy różnymi przypadkami, czyli nowe przypadki będzie oceniać w sposób uproszczony

W przypadku sztucznej inteligencji możemy sterować procesem uogólniania przez odpowiednie przygotowanie danych treningowych, wybór odpowiedniego algorytmu oraz jego właściwą parametryzację.

1.4.
Hipotezy

Hipotezy to przypuszczenia dotyczące występowania pewnych zjawisk lub zależności (wzorców). Najczęściej te przypuszczenia wynikają z doświadczenia oraz intuicji specjalistów z danej dziedziny, a ich uzasadnienia są jakościowe, nie ilościowe. Celem eksperymentów data science jest ilościowe zweryfikowanie postawionych hipotez na podstawie posiadanych danych źródłowych i wybór najlepszego, czyli najlepiej rozwiązującego dany problem, modelu eksploracji danych.

Hipotezy są formułowane w celu rozwiązania konkretnych problemów. Nie wszystkie problemy (a więc nie wszystkie hipotezy) nadają się do rozwiązywania za pomocą eksperymentów data science. Tego typu eksperymenty umożliwiają skuteczne rozwiązywanie problemów, które dają się definiować w kontekście danych, a nie reguł niemożliwych do zmiany. Na przykład model służący do analizy czynników wpływających na zakup przez klientów alkoholu prawdopodobnie wykryje, że osoby niepełnoletnie rzadziej kupują alkohol, czyli znajdzie w danych zależność wynikającą wprost z obowiązującego prawa (reguł niemożliwych do zmiany w ramach modelu), której ponadto w żaden sposób nie da się wykorzystać do rozwiązania problemu (zwiększenia sprzedaży alkoholu).

Hipotezy mogą:

opisowo uzasadniać daną sytuację (hipotezy zamknięte) – tego typu hipotezy najczęściej zawierają słowo „ponieważ” („Obniżyliśmy cenę produktu X, ponieważ konkurencja wypuściła na rynek podobny produkt w niższej cenie”).

wskazywać na pożądany skutek (hipotezy otwarte) – takie hipotezy można poznać po tym, że zawierają słowa „żeby” lub „po to” („Obniżyliśmy cenę produktu X, żeby przyciągnąć nowych klientów”).

Data science umożliwia nie tylko formułowanie hipotez obu typów, lecz także obiektywne ich uzasadnianie i porównywanie. Formułując hipotezy, należy wyjść od ogólnie ujętych celów eksperymentu (np. „Celem jest optymalizacja kampanii marketingowej”), a następnie je skonkretyzować („Celem jest binarna klasyfikacja klientów na podstawie tego, czy zareagują oni na kampanię marketingową. Klasyfikacji dokona się na podstawie danych demograficznych klientów. Dane zostaną uzupełnione o historię współpracy z klientami”). Precyzyjnie określone cele powinny być podstawą opisanej poniżej analizy kontekstowej.

Pomocne w sformułowaniu hipotez będzie ustalenie związków przyczynowo-skutkowych między modelowanymi obiektami i zdarzeniami. Jednym ze sposobów badania tego typu związków jest reprezentowanie ich na diagramach Ishikawy (diagramach rybiej ości). Pokazany na rysunku 1.5 diagram Ishikawy tworzy się, zaczynając od stwierdzenia pewnego skutku (np. uszkodzenia elementu, utraty klienta). Następnie odnotowuje się wszystkie możliwe przyczyny jego wystąpienia, dzieląc je na odpowiednią do analizowanego zagadnienia liczbę kategorii:

ludzie,

zasoby,

sprzęt/maszyna,

stosowana metoda,

ocena,

środowisko/otoczenie,

zarządzanie.

Rysunek 1.5. Uproszczony przykład analizy przy użyciu diagramu Ishakawy czynników wpływających na powodzenie eksperymentu data science

Diagramy Ishikawy ułatwiają też właściwe przygotowanie i ocenę danych źródłowych, w szczególności pozwalają sprawdzić, czy te dane obejmują cały zakres modelowanego zagadnienia. Jeżeli na diagramie pojawiają się zagadnienia nieodwzorowane w dostępnych danych, szanse na sukces eksperymentu będą mniejsze.

1.5.
Założenia eksperymentu data science

Choć technicznie możliwe jest przeprowadzenie eksperymentu data science, którego celem nie jest rozwiązanie żadnego problemu, z reguły ustalając jego cele, powinniśmy odpowiedzieć na pytanie o praktyczne znaczenie spodziewanych wyników (pierwszy moduł w metodyce CRISP-DM).

▸▸ Zadaniem analityka nie powinno jednak być ani tworzenie problemów (chyba że jest on jednocześnie ekspertem z dziedziny, której dotyczy eksperyment), ani przyjęcie sugerowanego przez użytkowników rozwiązania. Na przykład pytając o cel projektu, możemy usłyszeć, że mamy wybrać osoby, które prawdopodobnie kupią produkty z nowego katalogu. Po zbudowaniu i wdrożeniu modelu, który o 100% zwiększy szansę zakupu produktów przez wskazane przez nas osoby, okazuje się, że zakończył się on porażką. Dlaczego? Możliwe, że katalog przynosił straty i nawet wysłanie go do wyselekcjonowanych osób nie zmieniło tej sytuacji, czyli problemem nie był niski procent pozytywnych odpowiedzi jego odbiorców. Może przyczyną strat był wybór oferowanych w tym katalogu produktów? A może winna była nieatrakcyjna forma katalogu?

Jeżeli przyjmiemy, że celem eksperymentu jest rozwiązanie problemu (rozumianego również jako znalezienie sposobu poprawy bieżącej sytuacji, niekoniecznie problematycznej w wąskim znaczeniu), to cel ten można osiągnąć na kilka różnych sposobów. Wybór najlepszego sposobu wymaga podjęcia decyzji, w czym właśnie mają pomóc wyniki eksperymentu data science. Wsparcie decyzji może mieć formę:

wyjaśnienia prawdopodobnych przyczyn problemu (opisania zastanej sytuacji) – po znalezieniu odpowiedzi na pytania użytkowników (np.: „Dlaczego produkty z serii X psują się znacznie częściej niż pozostałe?”, „Dlaczego sprzedaż pewnych produktów spada od 6 miesięcy?”), będą się oni chcieli dowiedzieć, co zrobić, żeby rozwiązać wyjaśniony problem;

określenia możliwych rozwiązań problemu i ich porównania – możliwe decyzje są podejmowane w sytuacjach, w których:

dopuszczalne jest tylko jedno rozwiązanie problemu i oczekiwany jest tylko jeden skutek;

dopuszczalne jest tylko jedno rozwiązanie problemu, ale oczekiwane są różne skutki;

istnieje wiele możliwych rozwiązań problemu i  oczekiwane są różne skutki.

jest wiele powiązanych ze sobą sytuacji, w których istnieje wiele możliwych rozwiązań problemu i w których oczekiwane są różne skutki.

oceny ryzyka związanego z poszczególnymi decyzjami. Jeżeli możliwe jest tylko jedno rozwiązanie problemu, moduł sprowadza się do oszacowania jego ryzyka. W pozostałych przypadkach należy wziąć pod uwagę, że prawdopodobnie możliwe rozwiązania są ze sobą powiązane i nie powinny być oceniane niezależnie. Jeśli na przykład skuteczność bezpośredniej kampanii marketingowej wynosi 5%, a skuteczność reklam w mediach 2%, nie należy spodziewać się, że 7% z osób, które otrzymały katalog wysyłkowy i obejrzały reklamę, zostanie klientami firmy. Wręcz przeciwnie, niektóre strategie niwelują nawzajem swoje skutki – przykładem takiej sytuacji jest utrata klientów, którzy wcześniej pozytywnie odpowiedzieli na kampanię mailową, lecz w wyniku natrętnego wydzwaniania do nich telemarketera zniechęcili się do produktu.

1.6.
Dwa typy analiz

Celem eksperymentu data science może być:

znalezienie i przedstawienie zależności (wzorców) ukrytych w danych oraz wyjaśnienie przyczyn ich występowania – wtedy mamy do czynienia z analizą deskrypcyjną. Jej cechami charakterystycznymi są:

konieczność posługiwania się terminologią z modelowanej dziedziny (model ma dostarczać wyjaśnień);

wymóg uwzględnienia wszystkich, również nietypowych, przypadków i zjawisk (ich występowanie lub brak mogą być najciekawsze dla użytkowników);

to, że jakość wyników analizy deskrypcyjnej jest oceniana przede wszystkim na podstawie ich przydatności dla użytkowników;

zastosowanie utworzonego modelu danych do uzupełniania brakujących danych – mówimy wtedy o analizie predykcyjnej. Takie analizy charakteryzują:

przekształcenie obejmujące celowe zniekształcanie danych treningowych;

możliwość stosowania algorytmów, których wyniki są niemożliwe lub trudne do zinterpretowania;

możliwość statystycznej oceny dokładności i wiarygodności wyników (predykcji).

Choć eksperymenty, w których używa się analiz obu typów, są do siebie podobne, w dalszej części książki skoncentrujemy się na analizie predykcyjnej.

1.7.
Data science jako metoda naukowa

Rozwój nauk ścisłych przebiega według schematu przedstawionego na rysunku 1.6.

Rysunek 1.6. Schemat rozwoju nauk ścisłych

W teorii badacze formułują hipotezy na podstawie poczynionych obserwacji, a następnie weryfikują je na podstawie przeprowadzonych doświadczeń, posługując się statystyką jako narzędziem do oceny danych. Jeżeli hipoteza okazuje się prawdziwa, publikowane są płynące z niej wnioski. W praktyce ta metoda naukowa przeżywa głęboki kryzys, a większość opublikowanych wniosków jest fałszywa [42].

Jednym z powodów tego kryzysu jest to, że wiele badań zaczyna się od przyjęcia wniosku za prawdziwy i polega na takim dostosowaniu danych bądź metod ich analizy, żeby z góry przyjęta teza została potwierdzona.

Innym powodem jest nieuprawomocnione uogólnianie hipotez. Przykładem takiego podejścia są analizy krzywej Phillipsa, czyli krzywej ilustrującej zależność między stopą bezrobocia a inflacją płac. Negatywna korelacja między tymi zmiennymi została zauważona w 1958 r., i choć od 50 lat jej prawdziwość jest podważana, nadal ma ona wpływ na politykę finansową wielu krajów, a sześć z pośród wielu analiz krzywej Phillipsa zostało nagrodzonych nagrodą Nobla.

Rysunek 1.7 przedstawia wykres punktowy zależności między stopą bezrobocia a inflacją płac dla Stanów Zjednoczonych. Jaśniejszym kolorem zostały zaznaczone dane z lat 1961–1969, po ich połączeniu rzeczywiście uzyskaliśmy krzywą reprezentującą silną zależność odwrotnie proporcjonalną. Jednak pozostałe 42 obserwacje w żaden sposób nie dają się umieścić na tej krzywej.

Rysunek 1.7. Na wykresie punktowym widać brak zależności między stopą bezrobocia a inflacją płac w USA w latach 1961–2012

Metoda data science przebiega natomiast według schematu pokazanego na rysunku 1.8.

Rysunek 1.8. Schemat metody data science

Punktem wyjścia zawsze są dane. I chociaż są one przygotowywane na potrzeby konkretnej analizy, to w przeciwieństwie do hipotez można je bezpiecznie uogólniać. Możemy na przykład pogrupować dane o pacjentach na poziomie miast, krajów czy przedziałów wiekowych.

Prawdziwość wniosków zależy od tego, czy dane treningowe były reprezentatywne. To jednak można sprawdzić, oceniając dokładność i wiarygodność modeli przy użyciu danych kontrolnych. Ponadto w metodzie data science wszystkie wnioski wyciągnięte na podstawie wyników modelowania muszą być konserwacją zrozumienia danych, a więc muszą być zweryfikowane przez eksperta z danej dziedziny.

1.8.
Przykładowy eksperyment – optymalizacja kampanii marketingowej

Przedstawione w tym rozdziale wiadomości zastosujemy w praktyce do przeanalizowania jednego z przykładowych eksperymentów dostępnych w galerii Cortana Intelligence (https://gallery.cortanaintelligence.com/).

Żeby samodzielnie wykonać to ćwiczenie należy:

Zalogować się do portalu http://studio.azureml.net/ na wcześniej utworzone konto w Azure ML.

Utworzyć nowy eksperyment (w dolnym rogu ekranu znajduje się przycisk New) na podstawie szablonu Binary Classification: Direct marketing[5] (rys. 1.9).

Rysunek 1.9. Tworzenie eksperymentów data science w Studiu Azure ML polega na łączeniu i konfigurowaniu modułów realizujących poszczególne zadania

1.8.1.
Zrozumienie problemu i określenie celów eksperymentu

Naszym celem jest przewidzenie (predykcja), czy dana osoba odwiedzi sklep po otrzymaniu mailingu reklamowego. W tym celu zbudujemy modele klasyfikujące klientów jako tych, którzy odwiedzą sklep, i tych, którzy nie zareagują na otrzymaną reklamę. Ponieważ wynikowy atrybut visit przyjmuje tylko dwa stany (1, jeżeli dana osoba wcześniej pozytywnie zareagowała na kampanię marketingową, lub 0, jeśli ją zignorowała), naszym celem jest utworzenie modeli klasyfikacji binarnej (albo krócej, klasyfikatora binarnego).

▸▸ Precyzyjne określenie typu tworzonych modeli jest potrzebne do właściwego wyboru algorytmów eksploracji danych.

1.8.2.
Zrozumienie danych

Dane źródłowe zawierają opis 64 000 przypadków. Pojedynczym przypadkiem jest zaobserwowana reakcja klienta na jedną z wcześniejszych kampanii marketingowych. Każdy przypadek jest opisany za pomocą dziewięciu atrybutów wejściowych (zamodelowanych cech), takich jak:

recency – atrybut określający, kiedy ostatnio dana osoba kupiła coś w sklepie;

history_segment – wartość zakupów klienta w podziale na zakresy;

history – wartość zakupów klienta;

mens – atrybut binarny zawierający 1 (prawda), jeśli dana osoba jest mężczyzną;

womens – atrybut binarny zawierający 1 (prawda), jeśli dana osoba jest kobietą;

zip_code – atrybut określający, czy dana osoba mieszka w mieście, w obszarze podmiejskim czy na wsi;

newbie – atrybut binarny zawierający 1 (prawda), jeśli dana osoba jest nowym klientem;

channel – atrybut określający sposób kontaktu z klientem;

segment – atrybut określający, czy dana osoba podała adres e-mail; a jeśli go podała, to również informację, czy jest mężczyzną czy kobietą.

Ponadto zbiór danych źródłowych zawiera trzy atrybuty wyjściowe (objaśniane) oraz jeden będący wynikiem ich wcześniejszej analizy, czyli:

visit – atrybut binarny zawierający 1 (prawda), jeśli dana osoba zareagowała na kampanię reklamową;

conversion – atrybut binarny zawierający 1 (prawda), jeśli dana osoba kupiła coś w wyniku skierowanej do niej kampanii;

spend – kwota wydanych przez tę osobę pieniędzy;

DM_category – numer klastra, do którego został automatycznie przypisany dany przypadek.

Żeby wyświetlić dane źródłowe w edytorze Microsoft Azure Machine Learning Studio, należy:

kliknąć prawym przyciskiem myszy moduł Import data i wybrać z menu kontekstowego polecenie Run selected – wybrane moduły zostaną uruchomione, a po zakończeniu analizy poprawnie wykonane moduły zostaną oznaczone zieloną ikoną akceptacji;

kliknąć prawym przyciskiem myszy wyjście modułu Import data – moduły mają różną liczbę wejść i wyjść, a moduł typu Import data ma tylko jedno wyjście; spowoduje to wyświetlenie menu kontekstowego zawierającego polecenie Visualize – aby wyświetlić dane, należy wybrać to polecenie (rys. 1.10).

Rysunek 1.10. Dane źródłowe eksperymentu są zawarte w tabeli, której wiersze odpowiadają analizowanym przypadkom, a kolumny – atrybutom

Ocenie danych źródłowych został poświęcony następny rozdział, w tym miejscu podamy tylko kilka wniosków:

Zmienna[6] history_segment będąca wynikiem transformacji atrybutu history zostanie usunięta ze zbioru danych treningowych.

Atrybuty binarne powinny być oznaczone jako zmienne kategoryczne.

Atrybuty wyjściowe, z wyjątkiem atrybutu visit, jako niepotrzebne do realizacji założonego celu zostaną ze zbioru danych treningowych usunięte.

Żeby powyższe operacje zostały wykonane, należy zaznaczyć i wykonać polecenia Edit Metadata i Select Columns in Dataset.

1.8.3.
Wstępne przetwarzanie danych

Otrzymany zbiór danych treningowych nie zawiera brakujących ani błędnych wartości, a więc jego przygotowanie do modelowania sprowadzi się do podzielenia na zbiór danych treningowych i testowych (w ten sposób umożliwimy poprawną ocenę dokładności oraz wiarygodności modeli eksploracji danych).

Jedynym problemem, który musimy rozwiązać, jest nierównomierny rozkład atrybutu wyjściowego visit – zaledwie w 15% przypadków przyjmuje on wartość 1. Na potrzeby optymalizacji (automatycznego dobrania właściwych parametrów algorytmów eksploracji danych) zmienimy tę wartość: w 30% visit przyjmie wartość 1, a w 70% – 0. W tym celu uruchomimy wszystkie trzy moduły Split data.

1.8.4.
Modelowanie

Do utworzenia modeli klasyfikacyjnych użyjemy dwóch algorytmów: drzew decyzyjnych oraz maszyny wektorów nośnych. Odpowiednie wersje tych algorytmów zostały zaimplementowane w modułach Two-Class Boosted Decision Trees oraz Two-Class Support Vector Machine. Powodem, dla którego tworzymy różne modele eksploracji danych, jest potrzeba porównania ich jakości mierzonej np. dokładnością zwracanych przez nie predykcji.

Każdy z algorytmów uczenia maszynowego może być sparametryzowany – przeznaczenie poszczególnych parametrów jest opisane w dalszej części książki, w rozdziałach poświęconych poszczególnym algorytmom. Usługa Azure ML umożliwia również automatyczne wybranie najlepszych wartości parametrów dla użytych danych treningowych (względem wybranego kryterium). Do tego celu służy moduł Tune Model Hyperparameters – jego działanie polega na zmianie wartości parametrów tworzonych modułów (a więc w rezultacie w ramach eksperymentu zostaną utworzone nie dwa modele eksploracji danych, ale znacznie więcej, każdy inaczej sparametryzowany). Najlepszy (według wybranego kryterium) model zostaje automatycznie wybrany i zwrócony na drugim (prawym) wyjściu modułu.

Aby nauczyć modele eksploracji danych, należy zaznaczyć oba moduły klasyfikatorów i oba moduły Tune Model Hyperparameters, po czym je uruchomić.

1.8.5.
Ocena

Jakość modelu predykcyjnego możemy ocenić, klasyfikując za jego pomocą wydzielone dane testowe (dane, które nie zostały użyte do treningu modeli) i porównując otrzymane wyniki (predykcje) z wartościami atrybutu visit odczytanymi ze zbioru danych testowych. Operacja ta sprowadza się do uruchomienia obu modułów Score Model.

Studio Azure ML umożliwia również porównanie (zestawienie ze sobą) wyników zwróconych przez dwa różne modele predykcyjne – służy do tego moduł Evaluate Model. Po wykonaniu wszystkich trzech wspomnianych modułów można wyświetlić ich porównanie (wyniki porównania są zwracane na wyjściu modułu Evaluate Model) (rys. 1.11).

Rysunek 1.11. Zaznaczony model utworzony przy użyciu algorytmu drzew decyzyjnych wydaje się nieznacznie lepszy od modelu utworzonego z wykorzystaniem algorytmu maszyny wektorów nośnych

Widoczne na rysunku 1.9 kryteria są omówione w rozdziale 10. Na razie ograniczymy się do stwierdzenia, że trafność obu modeli mierzona kryteriami opartymi na macierzy pomyłek jest na tyle do siebie zbliżona, że do wyboru lepszego modelu konieczna będzie ocena ich wyników na podstawie odpowiedniego testu statystycznego.

Wykorzystamy do tego fakt, że wartości uzyskane w wyniku wykonania modułów Score Model zawierają, oprócz wyników predykcji (atrybutu Scored labels), również wartości prawdopodobieństwa, z jakim dany przypadek został oceniony jako 0 lub 1. Możemy więc porównać dokładność modeli, zestawiając ze sobą wyniki tych predykcji, których prawdopodobieństwo poprawności przekroczyło określony próg, na przykład 15%. Innymi słowy, sprawdzimy, który z porównywanych klasyfikatorów zwraca bardziej prawdopodobne (według niego samego) wyniki.

Do przygotowania danych użyjemy modułów Edits metadata, Apply Math Operation, Convert to Indicator Values oraz Select Columns in Dataset. Polega ono na porównaniu wartości atrybutu Scored Probabilities ze stałą 15% i zapisaniu wyniku w kolumnie bdt_labels. Dodatkową kolumnę do danych dodamy za pomocą modułu Add Columns.

Jeżeli wbudowane moduły nie realizują danego zadania, możemy je zrealizować przy użyciu modułu Execute R Script. Umożliwia on wykonanie dowolnego skryptu w języku R, którego danymi wejściowymi mogą być dane podawane na dwa początkowe wejścia modułu Execute R Script, a wynik może mieć zarówno postać tabelaryczną, komunikatu, jak i wykresu. W tym przypadku język R zostanie użyty do przeprowadzenia testu McNemara, a miara p otrzymanego wyniku zostanie przekazana na wyjście modułu (listing 1.1).

Listing 1.1. Dzięki specjalistycznym bibliotekom analiza danych z wykorzystaniem języka R z reguły sprowadza się do wywołania odpowiedniej funkcji [49]

dataset <- maml.mapInputPort(1)

# read in two different classification results

aresults <- dataset[,1]

bresults <- dataset[,2]

# compare the classification results using McNemar’s test’

mtest <- mcnemar.test(aresults, bresults)

# output the p-value of McNemar’s test’

data.set <- data.frame(mtest["p.value"])

maml.mapOutputPort("data.set");

Po uruchomieniu tych modułów będzie można się przekonać, że miara p testu McNemara w przybliżeniu wynosi 0,01, co oznacza, że prawdopodobieństwo, iż porównywane zbiory danych są takie same, jest praktycznie równe zeru. W ten sposób potwierdziliśmy przewagę modelu tworzonego przy użyciu algorytmu drzew decyzyjnych.

1.8.6.
Wdrożenie

Wdrożenie gotowego eksperymentu Azure ML przebiega w kilku krokach, w dużym stopniu zautomatyzowanych. Najpierw, ponieważ nasz eksperyment zawiera więcej niż jeden model predykcyjny, musimy wskazać ten, który wybraliśmy jako najlepszy. W tym celu należy zaznaczyć moduł trenujący wybrany model, w tym wypadku moduł Tune Model Hyperparameters połączony z modułem Two-Class Boosted Decision Trees.

Po kliknięciu przycisku SETUP WEB SERVICE/Predictive Web Service (Recommended), znajdującego się na dole ekranu, zostanie utworzona produkcyjna wersja eksperymentu – ta wersja będzie zawierać tylko te moduły, które są potrzebne do odpowiadania na zapytania predykcyjne. Ponadto nauczony moduł predykcyjny zostanie zapisany jako osobny komponent, dostępny w sekcji Trained Models, i dodany do produkcyjnej wersji eksperymentu.

Następnie należy uruchomić eksperyment. Studio Azure ML odczyta wówczas potrzebne metadane – tylko z tego powodu do produkcyjnej wersji eksperymentu zostały dodane moduł Import Data (ta wersja eksperymentu nie odczytuje danych źródłowych) oraz niektóre moduły przekształcające dane treningowe.

Po udanym wykonaniu eksperymentu zostało nam jedynie ograniczyć liczbę atrybutów wejściowych i wyjściowych, dzięki czemu korzystanie z automatycznie utworzonych i opublikowanych usług WWW będzie prostsze. Najpierw ograniczymy dane zwracane przez usługę WWW do wyników predykcji i ich prawdopodobieństwa. W tym celu należy:

dodać do eksperymentu moduł Select Columns in Dataset (aby go znaleźć, można wykorzystać pole wyszukiwania znajdujące się nad przybornikiem z modułami – wystarczy wpisać w nim fragment nazwy dodawanego modułu);

połączyć wejście dodanego modułu z wyjściem modułu Score Model;

zaznaczyć moduł Select Columns in Dataset – z prawej strony ekranu zostaną wyświetlone jego właściwości, w tym przycisk służący do wybrania kolumny;

wybrać kolumnę Scored labels;

podłączyć wejście modułu Web service output z wyjściem skonfigurowanego moduł Select Columns in Dataset.

Aby ograniczyć liczbę parametrów wejściowych, wykorzystamy fakt, że produkcyjna wersja eksperymentu zawiera już moduł Select Columns in Dataset podłączony do wejścia modułu Score model. Należy wykonać następujące czynności:

wyświetlić właściwości modułu Select Columns in Dataset i usunąć z listy wybranych kolumn atrybut visit;

połączyć wyjście modułu Web service input z drugim wejściem modułu Score model (rys. 1.12).

▸▸ Konfigurując moduły eksperymentu, możemy dodać ich opisy – w tym celu wystarczy dwukrotnie kliknąć moduł lewym przyciskiem myszki. Opisy te pełnią funkcję komentarzy w kodzie i mają ułatwić twórcy eksperymentu i osobom, które będą z nim pracowały, zrozumienie funkcji danego modułu i jego konfiguracji.

Rysunek 1.12. Finalna wersja eksperymentu, gotowa do opublikowania jako predykcyjna usługa WWW

Korzystanie z modelu predykcyjnego wymaga opublikowania go jako usługi WWW. W tym celu należy kliknąć przycisk DEPLOY WEB SERVICE. Usługa zostanie opublikowana, po czym zostanie wyświetlony ekran jej właściwości. W rzeczywistości są tworzone dwie wersje tej usługi: jedna służąca do wykonywania zapytań predykcyjnych ad-hoc i druga – przeznaczona do wykonywania zapytań predykcyjnych dla całych zbiorów danych.

Żeby przetestować działanie usługi ad-hoc za pomocą zainstalowanego lokalnie arkusza Excel, należy:

kliknąć odnośnik odpowiadający zainstalowanej wersji programu Microsoft Excel;

wygenerować (i ewentualne poprawić) dane testowe, podać pierwszą kolumnę wyniku i kliknąć przycisk Predict (rys. 1.13); można to zrobić po zezwoleniu zewnętrznej aplikacji na działanie, gdy zostanie wyświetlony arkusz Excel z dodatkowym paskiem Azure Machine Learning.

Rysunek 1.13. Żadna z pięciu przykładowych osób nie została sklasyfikowana jako potencjalny odbiorca kampanii marketingowej, ale prawdopodobieństwa, że te osoby nie zareagują na kampanię, są różne

Po przetestowaniu działania usługi WWW pozwalającej korzystać z utworzonego modelu predykcyjnego możemy zaimplementować ją w aplikacji klienckiej. Pomogą nam w tym gotowe szablony umożliwiające wywołanie tej usługi z aplikacji napisach w językach C#, R oraz Python. Na przykład żeby dodać do skryptu w R wywołanie utworzonej usługi, a więc wzbogacić go o możliwość wykonywania zapytań predykcyjnych, należy:

kliknąć odnośnik REQUEST/RESPONSE znajdujący się w kolumnie API HELP PAGE;

w wyświetlonej dokumentacji tego interfejsu przejść do sekcji Sample code i wybrać język R;

skopiować szablon kodu i wkleić go do edytora R Studio;

skopiować klucz zabezpieczeń usługi WWW dostępny na jej stronie właściwości (tylko aplikacje, które posługują się poprawnym kluczem, mogą wysyłać zapytania predykcyjne) i podstawić go jako wartość zmiennej api_key:

api_key = "abc123" # Replace this with the API key for the web service

wpisać wartości poszczególnych atrybutów klasyfikowanych przypadków (zmienne wejściowe) do listy Values;

uruchomić skrypt – jeżeli na komputerze nie zostały wcześniej zainstalowane wymagane biblioteki, należy je doinstalować, korzystając z polecenia Install dostępnego na zakładce Packages lub wykonując instrukcję install.packages
(c("RCurl","rjson")) (rys. 1.14).

Podsumowanie

Eksperyment data science składa się z następujących kroków, powtarzanych w miarę potrzeb:

zdefiniowanie celów (pytań, problemów, które należy rozwiązać);

określenie idealnego zbioru danych źródłowych (wspierającego postawione hipotezy);

określenie dostępnych danych;

pobranie danych;

ocena przydatności danych źródłowych;

przygotowanie tych danych na potrzeby modeli eksploracji danych, w szczególności uzupełnienie brakujących wartości i poprawienie wartości błędnych;

wzbogacenie danych o dodatkowe zmienne;

utworzenie modeli eksploracji danych;

ocena i interpretacja wyników modelowania;

zweryfikowanie otrzymanych wyników (w miarę możliwości przez inny zespół badawczy);

opracowanie i przedstawienie wyników (często w sposób graficzny);

udokumentowanie eksperymentu w sposób umożliwiający innym jego powtórzenie.

Rysunek 1.14. Program kliencki (w tym przypadku napisany w języku R), który komunikując się z automatycznie opublikowaną usługą WWW, wysyła do utworzonego modelu zapytania predykcyjne

Modelowanie (w sensie tworzenia matematycznych modeli eksploracji danych) jest tylko jednym z etapów eksperymentu data science, etapem najciekawszym i wcale nie najbardziej czasochłonnym. Powodzenie całego eksperymentu zależy od przebiegu wszystkich jego etapów, a przede wszystkim od przydatności, przygotowania i wzbogacenia danych źródłowych.

Opracowane w ciągu ostatnich kilkunastu lat metodyki eksploracji danych wciąż są aktualne i mogą być z powodzeniem stosowane do eksperymentów data science.

Jeż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) [20].

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[7]. 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 <Ctrl+Enter> lub kliknięciu przycisku run

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 [71]:

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 [78].

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 = log2 (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 –log2 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ł –log2 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