PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

pgpredict – Analiza predykcyjna w PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepszy sposób na zainstalowanie hstore na wielu schematach w bazie danych Postgres?

  2. Pobierz nazwę właściciela bazy danych w PostgreSql

  3. Policz liczbę dni między 2 datami w JPA

  4. Zapobieganie sąsiednim/nakładającym się wpisom za pomocą EXCLUDE w PostgreSQL

  5. Jak utworzyć indeks na polu JSON w Postgresie?