Wszyscy zdajemy sobie sprawę, jak ważna jest umiejętność analizowania gromadzonych przez nas danych i wydobywania z nich przydatnych informacji. 2UDA jest krokiem w tym kierunku i ma na celu połączenie przechowywania i zarządzania danymi (PostgreSQL) z eksploracją i analizą danych (Orange).
pgpredict jest projektem w fazie rozwoju i ma być kolejnym krokiem, który zatoczy cały krąg. Zaczynając od danych (w naszym przypadku przechowywanych w bazie danych), najpierw musimy udostępnić je ekspertom, którzy mogą je przeanalizować za pomocą specjalistycznych narzędzi i metod. Ale potem, kiedy na przykład wytrenują model predykcyjny, który może rozwiązać coś ważnego i korzystnego dla nas, muszą być w stanie przekazać te wyniki z powrotem, abyśmy mogli je wykorzystać. Właśnie to próbuje rozwiązać pgpredict – wdrażając modele predykcyjne bezpośrednio w bazie danych w celu wydajnego wykonania w czasie rzeczywistym.
Projekt rozpoczął się jako kontynuacja 2UDA, która już pozwala na wykorzystanie Orange do pracy z danymi przechowywanymi w bazie danych PostgreSQL. Potrzebny był sposób na wyeksportowanie wyszkolonych modeli predykcyjnych, przeniesienie ich tam, gdzie są potrzebne (np. serwer produkcyjny) i wdrożenie. Projekt jest więc podzielony na rozszerzenia dla Orange, które mogą eksportować modele do plików .json, oraz dla postgresa, który może ładować i uruchamiać te modele. Ponieważ modele są przechowywane w plikach tekstowych, można je śledzić w systemie kontroli wersji. Format json umożliwia również ich łatwe przechowywanie w bazie danych po załadowaniu, wykorzystując możliwości json PostgreSQL.
Obecnie istnieje działająca implementacja dla ograniczonej liczby modeli predykcyjnych i nie została jeszcze poddana gruntownej optymalizacji. Ale już pokazuje wielką obietnicę.
Aby to przetestować, wygenerowałem tabelę wyimaginowanych klientów z 10 milionami wierszy z kilkoma niezależnymi zmiennymi losowymi (wiek, wynagrodzenie, wizyty) i zmienną wyjściową (wydane). Orange został następnie wykorzystany do załadowania tabeli i uzyskania modelu predykcyjnego. Ponieważ korzysta z TABLESAMPLE (funkcja PostgreSQL 9.5), próbowanie różnych parametrów i ustawień działa szybko (nawet dla danych znacznie większych niż w tym teście). Naukowcy zajmujący się danymi mogą zatem interaktywnie wypróbowywać różne rozwiązania, oceniać je i na koniec opracować dobry model. Ostateczny model regresji grzbietowej został następnie wyeksportowany i załadowany do bazy danych. Tam można go wykorzystać w czasie rzeczywistym do przewidywania kwoty wydanej na pojawienie się nowych klientów w bazie.
Skorzystanie z pgbench pokazało, że o ile wybranie istniejącej kolumny dla pojedynczego klienta z tabeli wymagało 0,086 ms, to było tylko nieznacznie dłużej aby uzyskać zmienne niezależne i dokonać prognozy wartości wydanych:0,134 ms.
Przewidywanie kwoty wydanej dla klientów 10^6 nie zajmuje 10^6 razy więcej czasu (134 s) od zakończenia inicjalizacji modelu pierwszy raz, a następnie ponownie użyty. Tak więc faktycznie zajęło to 13,6 s, co czyni go około 10 razy szybszym.
Te liczby zostały uzyskane dla prostego modelu na moim laptopie z kodem, który ma potencjał do znacznie większej optymalizacji. Spodziewaj się bardziej rygorystycznej oceny wkrótce, kiedy będziemy gotowi do opublikowania pgpredict dla opinii publicznej. Ale nawet teraz uważam, że wykazana wydajność i łatwość użycia sprawią, że będzie to wielka zaleta dla większości potencjalnych użytkowników szukających analiz predykcyjnych dla swoich hurtowni danych opartych na PostgreSQL.