PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

pgpredict – Analisi predittiva in PostgreSQL

Ci rendiamo tutti conto di quanto sia importante poter analizzare i dati che raccogliamo ed estrarne informazioni utili. 2UDA è un passo in quella direzione e mira a riunire l'archiviazione e la gestione dei dati (PostgreSQL) con l'estrazione e l'analisi dei dati (arancione).
pgpredict è un progetto in sviluppo e mira a essere il prossimo passo che chiuderà il cerchio. Partendo dai dati (nel nostro caso archiviati in un database), dobbiamo prima darne accesso a esperti che possano analizzarli con strumenti e metodi specializzati. Ma in seguito, quando ad esempio addestrano un modello predittivo in grado di risolvere qualcosa di importante e vantaggioso per noi, devono essere in grado di trasmettere quei risultati in modo che possiamo sfruttarli. Questo è esattamente ciò che pgpredict cerca di risolvere:implementando modelli predittivi direttamente all'interno del database per un'esecuzione efficiente e in tempo reale.

Il progetto è iniziato come una continuazione di 2UDA, che consente già di utilizzare Orange per lavorare con i dati archiviati in un database PostgreSQL. Ciò che serviva era un modo per esportare modelli predittivi addestrati, trasferirli dove sono necessari (ad esempio il server di produzione) e distribuirli. Quindi il progetto è suddiviso in estensioni per Orange che può esportare modelli in file .json e per Postgres che può caricare ed eseguire quei modelli. Poiché i modelli sono archiviati in file di testo, possono essere monitorati in un sistema di controllo della versione. Il formato json consente inoltre di archiviarli facilmente nel database dopo il caricamento, utilizzando le funzionalità json di PostgreSQL.

Attualmente esiste un'implementazione funzionante per un numero limitato di modelli predittivi e non è stata ancora oggetto di un'ottimizzazione completa. Ma sta già mostrando grandi promesse.
Per testarlo, ho generato una tabella di clienti immaginari con 10 milioni di righe con alcune variabili casuali indipendenti (età, salario, visite) e una variabile di output (spese). L'arancione è stato quindi utilizzato per caricare la tabella e ottenere un modello predittivo. Perché fa uso di TABLESAMPLE (una funzionalità di PostgreSQL 9.5) provare diversi parametri e impostazioni funziona rapidamente (anche per dati molto più grandi rispetto a questo test). Il data scientist può quindi provare in modo interattivo diverse soluzioni, valutarle e alla fine elaborare un buon modello. Il modello di regressione della cresta finale è stato quindi esportato e caricato nel database. Lì può essere utilizzato in tempo reale per prevedere l'importo speso per i nuovi clienti che appaiono nel database.
L'utilizzo di pgbench ha mostrato che mentre la selezione di una colonna esistente per un singolo cliente dalla tabella richiedeva 0,086 ms, era solo leggermente più lunga per ottenere le variabili indipendenti e fare una previsione per il valore di speso:0,134 ms.
La previsione dell'importo speso per 10^6 clienti non richiede 10^6 volte più tempo (134 s) poiché l'inizializzazione del modello viene eseguita la prima volta e poi riutilizzato. Quindi in realtà ci sono voluti 13,6 s, rendendolo circa 10 volte più veloce.
Questi numeri sono stati ottenuti per un modello semplice, sul mio laptop, con codice che ha il potenziale per una maggiore ottimizzazione. Aspettatevi presto una valutazione più rigorosa, quando saremo pronti a rilasciare pgpredict al pubblico. Ma anche ora, penso che l'efficienza e la facilità d'uso mostrate lo renderebbero un grande vantaggio per la grande maggioranza dei potenziali utenti che cercano analisi predittive per i loro data warehouse basati su PostgreSQL.