Machine Learning, czyli uczenie maszynowe to obszar data science bardzo intensywnie rozwijający się w ostatnich latach. Oprócz coraz szerszego obszaru zastosowań ML stał się również dużo bardziej przystępny. Jeszcze kilka lat temu był to obszar zarezerwowany dla naukowców, potem dla programistów, a obecnie – staje się dostępny również dla analityków. Rozwój języków programowania typu Python czy R sprzyja temu trendowi. Obecnie bez zaawansowanej znajomości matematyki czy statystyki analitycy przy wykorzystaniu pakietów typu Scikit-learn są w stanie tworzyć modele Machine Learning i czerpać korzyści biznesowe z ich wdrożenia. Jak w tej układance można wykorzystać Tableau? Postaram się przybliżyć w poniższym wpisie.
Eksplorujemy dane w Tableau
Zaczynając jakikolwiek projekt przy wykorzystaniu nauczania maszynowego, pierwszym krokiem jest eksploracja danych. I tutaj Tableau pokazuje swoje zalety, umożliwiając szybką analizę przy wykorzystaniu prostej metody drag&drop. W najprostszym ujęciu, mając problem wymagający nauczania maszynowego, mamy zmienną docelową, cechy kategorialne (opisowe) oraz cechy numeryczne (liczbowe). Zanim przejdziemy do tworzenia modelu ML, musimy zrozumieć co kryją nasze dane i jaki mamy problem (inaczej: na jakie pytanie poszukujemy odpowiedzi). Zacznijmy od przykładu, który stanowi bardzo często wstęp do nauki ML – katastrofa Titanica. Jest to dobry przykład do wykorzystania metod nauczania maszynowego nadzorowanego, w którym mamy do czynienia z klasyfikacją binarną. Chcemy na podstawie informacji o tym, kto przeżył katastrofę, przewidywać szanse przeżycia podobnej katastrofy w przyszłości. Zacznijmy od eksploracji zmiennej docelowej:
Widzimy od razu, że nasz zbiór jest dość zbilansowany – rozkład zmiennej docelowej jest w miarę równomierny. Znajduje tutaj również zastosowanie często odradzany wykres pie chart. W sytuacji dwóch kategorii, gdy chcemy pokazać udział w całości, jest to dobry wybór.
Kolejnym elementem eksploracji są zmienne – kategorialne i numeryczne. Jeśli chodzi o kategorie – korzystamy z bar chartów. Przykładowo poniżej, rozkład pasażerów pomiędzy płeć i klasę podróży:
Jeśli chodzi o dane numeryczne to najlepiej wykorzystać histogramy. Wykres tego rodzaju mamy dostępny z poziomu Show Me – potrzebujemy jedynie miary, którą chcemy analizować:
Czy to wszystko? Oczywiście, że nie. Możemy łączyć ze sobą zmienne budując przykładowo heatmapy:
Lub scatter plot:
Wykorzystując interfejs Tableau jesteśmy w stanie szybko wizualizować dane, z którym mamy do czynienia. Tym samym budujemy wiedzę na temat informacji, które będziemy wykorzystywać przy budowie modelu uczenia maszynowego. Tym samym przyśpieszamy cały proces analityczny.
Konfiguracja środowiska pod połączenia Tableau z Python
Kwestie teoretyczne budowy modeli ML zdecydowanie wybiegają poza granice tego wpisu, natomiast pokażę jak gotowy model w postaci skryptu możemy wykorzystać bezpośrednio w Tableau. Aby móc korzystać z modelu, potrzebujemy zainstalowanego środowiska Python na naszym komputerze (na przykład darmowy pakiet Anaconda). Potrzebne będą również przynajmniej pakiety Pandas, Numpy oraz Scikit-learn. Dodatkowo do integracji z Tableau potrzebujemy biblioteki TabPy. Instalację pakietów najprościej przeprowadzić poprzez komendy pip install nazwa_pakietu. Mając zainstalowany pakiet Tabpy, uruchamiamy go poprzez wpisanie Tabpy w linii komend Anacondy:
Po kliknięciu Enter uruchamiany jest serwer Tabpy na naszej maszynie (localhost):
Kolejnym krokiem jest podłączenie się do tego serwera z poziomu Tableau. Robimy to wybierając kolejno Help > Settings and Performance > Manage Analytics Extension Connection:
Następnie pojawi się okienko z wyborem rodzaju połączenia – oprócz podłączenia TabPy (język Python), możemy podłączyć RServe (język R), Einstein Discovery lub inne rozszerzenie. Wybieramy TabPy:
Dostajemy okienko konfiguracji połączenia. Jeżeli TabPy uruchomiliśmy na naszym komputerze, to wpisujemy localhost jako Hostname i 9004 w Port. Jeżeli korzystamy z zewnętrznego serwera, na którym postawiony jest Tabpy, to musimy podać tutaj szczegóły połączenia. Jest możliwa konfiguracja TabPy również na Tableau Online.
Jeżeli wszystko jest ok, to po kliknięciu Test Connection dostajemy komunikat:
I teraz możemy już działać z modelem w Tableau.
Używamy modelu Machine Learning w Tableau
Mając skonfigurowane środowisko i serwer Tabpy, możemy przystąpić do integracji modelów nauczania maszynowego z Tableau. Mamy dwie możliwości korzystania ze skryptów Pythona w Tableau:
- Umieszczamy skrypt bezpośrednio w Tableau
- Tworzymy model (skrypt) w narzędziu typu Jupyter Notebook, następnie odwołanie do modelu umieszczamy w Tableau
Zacznijmy od pierwszego przypadku. Skrypty umieszczamy tworząc pole kalkulowane SCRIPT_REAL:
Właściwy skrypt umieszczamy pomiędzy cudzysłowami („”). Kod nieco różni się od tego, który byśmy wykorzystali tworząc skrypt poza Tableau. Żeby to dobrze zrozumieć, rozbierzmy kod na części pierwsze.
- Pierwszym elementem jest import bibliotek – ten krok jest identyczny:
- Następnie ładujemy dane – ten krok jest inny. Tworząc skrypt np. w Jupyterze, w tym kroku ładowalibyśmy dane z pliku. W Tableau dane są już załadowane. Podajemy tylko listę argumentów, nadajemy im nazwy i tworzymy Dataframe:
- Kolejny krok to tworzenie modelu ML. W poniższym przykładzie stosujemy bardzo prosty model. Struktura kodu jest taka sama w Tableau jak i w Jupyterze:
- Ostatni etap to zwrócenie wartości predykcji – ważne jest, aby robiąc to w Tableau zwrócić wyniki w postaci listy:
- Ostatnim elementem jest drugi argument funkcji SCRIPT_REAL, gdzie podajemy które argumenty model ma wykorzystać z danych załadowanych do Tableau w miejsce podanych wcześniej argumentów (_arg1 i _arg2 z punktu nr 2)
Tak stworzone pole obliczeniowe jest funkcją tablicową, która zwraca wartość predykcji dla zadanych argumentów.
Integracja bardziej zaawansowanych modeli
Drugim sposobem integracji modelu ML z Tableau jest wykorzystanie innego środowiska do stworzenia kodu i następnie podłączenie do Tableau. Pisanie kodu bezpośrednio w Tableau może być uciążliwe, zwłaszcza gdy mamy dostępne narzędzia typu Jupyter które do tego celu zostały stworzone. W tym podejściu cały development robimy w oddzielnym środowisku, a Tableau wykorzystujemy jako punkt dostępu. Aby to zrobić, potrzebujemy stworzyć model uczenia maszynowego, następnie w notebooku z tym kodem stworzyć funkcję zwracającą predykcję, i na koniec zrobić deployment tej funkcji na serwer Tabpy. Po kolei:
- Tworzymy model w Jupyter Notebook:
- Tworzymy funkcję zwracającą predykcję z wytrenowanego w p. 1 modelu. Warto zwrócić uwagę, że funkcja ta ma bardzo podobną postać do kodu, który umieszczaliśmy w funkcji SCRIPT_REAL w poprzednim akapicie:
- Robimy deployment funkcji z p. 2 na serwer Tabpy:
Po wykonaniu powyższych kroków, aby móc korzystać z predykcji w Tableau, również wykorzystujemy funkcję SCRIPT_REAL, ale o nieco innej składni:
Dzięki temu mamy dostęp do predykcji z modelu bezpośrednio w Tableau. Możemy to wykorzystać w następujący sposób:
- Symulacja wyniku predykcji w zależności od zmiennych – w tym celu możemy zmodyfikować funkcję Advanced_prediction, zamieniając wartości argumentów na wartości parametrów, którymi możemy sterować. W ten sposób ustawiając odpowiednie wartości znajdujemy predykcję zmiennej docelowej z modelu:
Uzyskujemy tym samym symulator wyniku predykcji:
- Predykcja dla zbioru danych – jeżeli model wytrenowaliśmy na danych historycznych, możemy dane aktualne czy też prognozowane załadować do Tableau i wykorzystać model do stworzenia predykcji dla tych danych.
Tableau i Machine Learning to świetny duet
Dzięki integracji skryptów Python (czy też R) z Tableau powstaje naprawdę użyteczny kombajn analityczny. Tableau jest świetne w szybkiej, wizualnej analityce danych, co pozwala sprawnie odnaleźć się w danych. Zapewnia również dużą interaktywność, czyniąc eksplorację danych dużo prostszą niż przykładowo przy wykorzystaniu bibliotek wizualnych w Pythonie (jak Plotly czy Matplotlib). Dodatkowo dzięki wykorzystaniu Tabpy i Tableau Servera Tableau tak naprawdę okazuje się użytecznym frameworkiem, w ramach którego możemy udostępniać modele ML użytkownikom w ramach organizacji, tworząc je dużo bardziej dostępnymi dla użytkowników końcowych.
Mateusz Karmalski, Tableau Author