Retentioneering: hoe we open-source tools voor productanalyses in Python en Pandas hebben geschreven

Hallo, Habr. Dit artikel is gewijd aan de resultaten van vier jaar ontwikkeling van een set methoden en tools voor het verwerken van gebruikersbewegingspaden in een applicatie of op een website. De auteur van de ontwikkeling is Maxim Godzi, die aan het hoofd staat van het team van productmakers en tevens de auteur van dit artikel is. Het product zelf heeft de naam Retentioneering gekregen, en is nu omgevormd tot een open-source bibliotheek en is op Github geplaatst, zodat iedereen het kan gebruiken. Dit kan interessant zijn voor degenen die betrokken zijn bij product- en marketinganalyse, promotie en productontwikkeling. Trouwens, op Habr is al een artikel gepubliceerd over een van de cases met Retentioneering. In het nieuwe materiaal wordt uitgelegd waartoe het product in staat is en hoe het gebruikt kan worden.

Na het lezen van het artikel kunt u uw eigen Retentioneering schrijven, dat kan elke gestandaardiseerde methode voor het verwerken van gebruikerspaden in de applicatie en daarbuiten zijn, waarmee de gedragskenmerken gedetailleerd zichtbaar worden en inzichten voor de groei van zakelijke metrics kunnen worden verkregen.

Wat is Retentioneering en waarom is het nodig?

Oorspronkelijk was ons doel om Growth Hacking van de wereld van 'digitale sjamanisme' naar de wereld van cijfers, analyses en voorspellingen te vertalen. Dit leidde tot het reduceren van productanalyse tot pure wiskunde en programmeren voor degenen die in plaats van fantastische verhalen de voorkeur geven aan cijfers, en waarbij formules meer zijn dan slimme woorden zoals 'rebranding', 'herpositionering' enz., die mooi klinken, maar praktisch weinig helpen.

Voor het oplossen van de genoemde taken was een framework nodig voor analyses via grafen en trajecten, en tegelijkertijd een bibliotheek die typische routinetaken van analisten vergemakkelijkt, als een manier om reguliere taken van productanalyse te beschrijven die zowel voor mensen als voor robots begrijpelijk zou zijn. De bibliotheek biedt de mogelijkheid om gebruikersgedrag te beschrijven en het te koppelen aan de zakelijke metrics van het product in een formele en duidelijke taal, zodat routineachtige taken van ontwikkelaars en analisten worden vereenvoudigd en geautomatiseerd, en hun communicatie met het bedrijfsleven wordt vergemakkelijkt.

Retentioneering is een methode en analytische softwaretools die kunnen worden aangepast en geïntegreerd in elk digitaal (en niet alleen) product.

We begonnen in 2015 met de ontwikkeling van het product. Nu is het al een kant-en-klaar, hoewel nog niet perfect, pakket van tools in Python en Pandas voor dataverwerking, machine learning modellen met een sklearn-achtige API, en tools voor het interpreteren van de resultaten van machine learning modellen zoals eli5 en shap.

Dit alles is verpakt in een handige open-source bibliotheek in een openbaar GitHub-repository — retentioneering-tools.De bibliotheek is gemakkelijk te gebruiken, vrijwel iedereen die geïnteresseerd is in productanalyse, maar nog nooit eerder code heeft geschreven, kan onze analysemethoden zelfstandig en zonder veel tijd te verliezen toepassen op zijn eigen gegevens.

Een programmeur, een app-ontwikkelaar of een lid van het ontwikkelingsteam of de testgroep, die nog nooit eerder met analytics bezig is geweest, kan beginnen te experimenteren met deze code en patronen in het gebruik van zijn app zien zonder hulp van buitenaf.

De gebruikersroute als basisanalyseelement en methoden voor het verwerken ervan.

De gebruikersroute is de reeks toestanden van de gebruiker op bepaalde tijdstippen. Bovendien kunnen de gebeurtenissen uit verschillende gegevensbronnen komen, zowel online als offline. Gebeurtenissen die zich met de gebruiker hebben voorgedaan, zijn een deel van zijn route. Voorbeelden:
• drukte op de knop
• zag een afbeelding
• kwam op het scherm terecht
• ontving een e-mail
• raadde het product aan een vriend
• vulde een formulier in
• tikte op het scherm
• scrolde
• kwam bij de kassa
• bestelde een burrito
• at de burrito op
• kreeg een voedselvergiftiging van de gegeten burrito
• kwam het café binnen via de achteringang
• kwam binnen via de hoofdingang
• sloot de app af
• ontving een pushmelding
• staarde langer op het scherm dan tijd X
• betaalde de bestelling
• haalde de bestelling op
• kreeg een kredietweigering

Als je de gegevens van de routes van een groep gebruikers neemt en bestudeert hoe de overgangen zijn opgebouwd, kun je volgen hoe hun gedrag in de applicatie tot stand komt. Dit kan handig worden gedaan via een grafiek, waarin de toestanden knooppunten zijn en de overgangen tussen toestanden de randen zijn:

Retentioneering: hoe we open-source tools voor productanalyses in Python en Pandas hebben geschreven

Het begrip "Traject" is zeer praktisch – het bevat gedetailleerde informatie over alle acties van de gebruiker, met de mogelijkheid om aanvullende gegevens aan de beschrijving van deze acties toe te voegen. Dit maakt het tot een universeel object. Als je mooie en handige tools hebt die het werken met trajecten mogelijk maken, kun je overeenkomsten vinden en deze segmenteren.

Segmentatie van trajecten kan aanvankelijk als iets zeer complex worden ervaren. In normale situaties is dat ook zo – je moet matrixvergelijkingen gebruiken of sequenties uitlijnen. Wij hebben echter een eenvoudigere manier gevonden: het bestuderen van een groot aantal trajecten en deze segmenteren via clustering.

Het blijkt mogelijk om een traject in een punt om te zetten met behulp van continue representaties, bijvoorbeeld, TF-IDF. Na de transformatie wordt het traject een punt in de ruimte, waar de genormaliseerde frequentie van verschillende gebeurtenissen en overgangen tussen deze gebeurtenissen op de assen is uitgezet. Dit object uit een enorm duizend- en meer-dimensionaal ruimte (dimS=sum(event types)+sum(ngrams_2 types)) kan worden geprojecteerd op een vlak met behulp van TSNE. TSNE is een transformatie die de dimensionaliteit van de ruimte reduzert tot 2 assen en zoveel mogelijk de relatieve afstanden tussen de punten behoudt. Het is dus mogelijk om op een platte kaart, een beeldvormende projectiekaart van trajecten, te bestuderen hoe de punten van verschillende trajecten zich tot elkaar verhielden. Het wordt geanalyseerd hoe dicht of verschillend ze van elkaar waren, of er clusters werden gevormd of dat ze verspreid waren over de kaart, enzovoort:

Retentioneering: hoe we open-source tools voor productanalyses in Python en Pandas hebben geschreven

Analyseertools van Retentioneering maken het mogelijk om een complexe dataset en trajecten om te zetten in een representatie die met elkaar vergeleken kan worden, om vervolgens het resultaat van de transformatie te onderzoeken en te interpreteren.

Wanneer we spreken over de standaardmethoden voor het verwerken van trajecten, verwijzen we naar drie belangrijke tools die we in Retentioneering hebben geïmplementeerd: grafen, stapmatrices en projectiekaarten van trajecten.

Werken met Google Analytics, Firebase en vergelijkbare analysetools is behoorlijk complex en niet 100% effectief. Het probleem ligt in een aantal beperkingen voor de gebruiker, waardoor het werk van een analist in dergelijke systemen beperkt blijft tot klikken met de muis en het kiezen van segmenten. Retentioneering biedt de mogelijkheid om te werken met gebruikerspaden, niet alleen met funnels, zoals in Google Analytics, waar het detailniveau vaak wordt teruggebracht tot een funnel, zelfs als deze is gebouwd voor een bepaald segment.

Retentioneering en casestudy's

Als voorbeeld van het gebruik van het ontwikkelde hulpmiddel kan de casus van een grote niche-service in Rusland worden genoemd. Dit bedrijf heeft een mobiele applicatie voor Android die populair is bij klanten. De jaarlijkse omzet van de mobiele applicatie bedroeg ongeveer 7 miljoen roebel, met seizoensgebonden fluctuaties tussen 60 en 130 duizend. Hetzelfde bedrijf heeft ook een iOS-applicatie, en de gemiddelde besteding per gebruiker van de 'Apple'-app was hoger dan die van de klant die de Android-app gebruikte — 1080 roebel versus 1300 roebel.

Het bedrijf besloot de effectiviteit van de Android-app te verhogen en voerde een grondige analyse uit. Er werden verschillende tientallen hypotheses opgesteld om de effectiviteit van de applicatie te verhogen. Na gebruik van Retentioneering bleek dat het probleem lag in de berichten die aan nieuwe gebruikers werden getoond. Ze ontvingen informatie over het merk, de voordelen van het bedrijf en de prijzen. Maar zoals bleek, hadden de berichten de gebruiker moeten helpen om te leren werken met de applicatie.

Retentioneering: hoe we open-source tools voor productanalyses in Python en Pandas hebben geschreven

Dit is gedaan, waardoor het aantal verwijderingen van de applicatie afnam en de conversiegroei naar bestellingen 23% bedroeg. Aanvankelijk werd 20 procent van het binnenkomende verkeer voor de test gebruikt, maar na enkele dagen, na het analyseren van de eerste resultaten en het evalueren van de trend, werden de verhoudingen omgekeerd en werden 20 procent voor de controlegroep gelaten, terwijl tachtig procent in de test werd geplaatst. Een week later werd besloten om ook de test van twee extra hypotheses geleidelijk toe te voegen. In totaal steeg de omzet van de Android-app in zeven weken tijd anderhalf keer in vergelijking met het vorige niveau.

Hoe werkt je met Retentioneering?

De eerste stappen zijn vrij eenvoudig — installeer de bibliotheek met het commando pip install retentioneering. In de repository staan kant-en-klare voorbeelden en case studies voor het verwerken van gegevens voor bepaalde productanalyses. De set wordt voortdurend aangevuld, maar is voorlopig voldoende voor een eerste kennismaking. Iedereen kan kant-en-klare modules gebruiken en deze onmiddellijk toepassen op zijn taken — dit stelt je in staat om het proces van gedetailleerdere analyses en optimalisatie van gebruikerspaden snel en effectief op te zetten. Dit alles biedt de mogelijkheid om gebruikspatronen van de applicatie te ontdekken door middel van begrijpelijke code en deze ervaring door te geven aan collega's.

Retentioneering is een tool die gedurende de hele levensduur van een applicatie gebruikt moet worden, en hier is waarom:

  • Retentioneering is effectief voor het volgen en continu optimaliseren van gebruikerspaden en het verbeteren van zakelijke prestaties. Zo worden in e-commerceapplicaties vaak nieuwe functies toegevoegd waarvan de invloed op het product niet altijd correct kan worden voorspeld. In sommige gevallen ontstaan er compatibiliteitsproblemen tussen nieuwe en oude functies — bijvoorbeeld, nieuwe functies 'kannibaliseren' al bestaande. En in deze situatie is continue analyse van paden precies wat nodig is.
  • Een vergelijkbare situatie doet zich voor bij het werken met reclamekanalen: er worden voortdurend nieuwe verkeersbronnen en advertentiecreaties getest, en het is noodzakelijk om de seizoensgebondenheid, trends en de invloed van andere gebeurtenissen te volgen, wat leidt tot nieuwe klassen problemen. Ook hier is continue monitoring en interpretatie van gebruikersmechanismen vereist.
  • Er zijn een hele reeks factoren die voortdurend invloed uitoefenen op de werking van de applicatie. Bijvoorbeeld, nieuwe releases van ontwikkelaars: door een actueel probleem op te lossen, brengen ze onbedoeld een oud probleem terug of creëren ze een geheel nieuw probleem. Na verloop van tijd groeit het aantal nieuwe releases, en het proces van foutopsporing moet worden geautomatiseerd — ook door middel van het analyseren van gebruikerspaden.

Over het geheel genomen is Retentioneering een effectief instrument. Maar perfectie kent geen grenzen — het kan en moet verbeterd worden, ontwikkeld worden en er kunnen nieuwe geweldige producten op gebaseerd worden. Hoe actiever de community van het project, hoe meer forks er zullen zijn en hoe meer interessante gebruiksmogelijkheden er zullen ontstaan.

Extra informatie over de tools van Retentioneering:

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster