sql >> Database >  >> RDS >> PostgreSQL

pgpredict – Voorspellende analyses in PostgreSQL

We beseffen allemaal hoe belangrijk het is om de gegevens die we verzamelen te kunnen analyseren en er nuttige informatie uit te halen. 2UDA is een stap in die richting en heeft als doel dataopslag en -beheer (PostgreSQL) samen te brengen met datamining en -analyse (Oranje).
pgpredict is een project in ontwikkeling en heeft als doel de volgende stap te zijn die de cirkel rond zal maken. Beginnend met gegevens (in ons geval opgeslagen in een database), moeten we er eerst toegang toe geven aan experts die deze kunnen analyseren met gespecialiseerde tools en methoden. Maar daarna, wanneer ze bijvoorbeeld een voorspellend model trainen dat iets belangrijks en heilzaams voor ons kan oplossen, moeten ze die resultaten kunnen overbrengen zodat we ze kunnen exploiteren. Dit is precies wat pgpredict probeert op te lossen:voorspellende modellen direct in de database implementeren voor efficiënte en realtime uitvoering.

Het project begon als een voortzetting van 2UDA, waarmee Orange al kan worden gebruikt om te werken met gegevens die zijn opgeslagen in een PostgreSQL-database. Wat nodig was, was een manier om getrainde voorspellende modellen te exporteren, ze over te brengen naar waar ze nodig zijn (bijvoorbeeld de productieserver) en ze te implementeren. Het project is dus opgesplitst in extensies voor Orange die modellen naar .json-bestanden kunnen exporteren, en voor postgres die die modellen kunnen laden en uitvoeren. Doordat de modellen zijn opgeslagen in tekstbestanden, kunnen ze worden gevolgd in een versiebeheersysteem. Het json-formaat maakt het ook mogelijk ze na het laden gemakkelijk in de database op te slaan, gebruikmakend van PostgreSQL json-mogelijkheden.

Momenteel bestaat er een werkende implementatie voor een beperkt aantal voorspellende modellen en heeft deze nog geen grondige optimalisatie ondergaan. Maar het is al veelbelovend.
Om het te testen, heb ik een tabel met denkbeeldige klanten gegenereerd met 10 miljoen rijen met enkele onafhankelijke willekeurige variabelen (leeftijd, loon, bezoeken) en een uitvoervariabele (uitgegeven). Orange werd vervolgens gebruikt om de tabel te laden en een voorspellend model te verkrijgen. Omdat het gebruik maakt van TABLESAMPLE (een PostgreSQL 9.5-functie) werkt het proberen van verschillende parameters en instellingen snel (zelfs voor gegevens die veel groter zijn dan in deze test). De datawetenschapper kan dus interactief verschillende oplossingen uitproberen, evalueren en uiteindelijk met een goed model komen. Het uiteindelijke nokregressiemodel werd vervolgens geëxporteerd en in de database geladen. Daar kan het in realtime worden gebruikt om het uitgegeven bedrag te voorspellen voor nieuwe klanten die in de database verschijnen.
Het gebruik van pgbench toonde aan dat hoewel het selecteren van een bestaande kolom voor een enkele klant uit de tabel 0,086 ms vereiste, deze slechts iets langer was om de onafhankelijke variabelen te krijgen en een voorspelling te doen voor de waarde van de uitgaven:0,134 ms.
Het voorspellen van het uitgegeven bedrag voor 10^6 klanten kost niet 10^6 keer meer tijd (134 s) sinds de initialisatie van het model is voltooid de eerste keer en daarna hergebruikt. Dus het duurde eigenlijk 13,6 s, waardoor het ongeveer 10x sneller was.
Deze cijfers werden verkregen voor een eenvoudig model, op mijn laptop, met code die potentieel heeft voor veel meer optimalisatie. Verwacht binnenkort een meer rigoureuze evaluatie, wanneer we klaar zijn om pgpredict voor het publiek vrij te geven. Maar zelfs nu denk ik dat de getoonde efficiëntie en het gebruiksgemak het een groot voordeel zouden maken voor een grote meerderheid van potentiële gebruikers die op zoek zijn naar voorspellende analyses voor hun door PostgreSQL aangedreven datawarehouses.


  1. Hoe de datumstijl in PostgreSQL te veranderen?

  2. Wereldback-updag:4 interessante feiten over gegevensverlies om te weten

  3. Ik begrijp Collatie niet? (Mysql, RDBMS, Tekensets)

  4. mysql selecteer dynamische rijwaarden als kolomnamen, een andere kolom als waarde