{"id":38424,"date":"2019-10-31T22:23:40","date_gmt":"2019-10-31T19:23:40","guid":{"rendered":"https:\/\/prohoster.info\/blog\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\/"},"modified":"2026-07-06T16:02:25","modified_gmt":"2026-07-06T14:02:25","slug":"retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","title":{"rendered":"Retentioneering: hvordan vi har skrevet open-source v\u00e6rkt\u00f8jer til produktanalyse med Python og Pandas","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, Habr. Denne artikel handler om resultaterne af fire \u00e5rs udvikling af en r\u00e6kke metoder og v\u00e6rkt\u00f8jer til behandling af brugerbev\u00e6gelser i en applikation eller p\u00e5 et website. Udvikleren er <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/mgodzi\/\">Maksim Godzi<\/a><\/noindex>, som st\u00e5r i spidsen for teamet af produktets skabere, og han er ogs\u00e5 forfatter til artiklen. Selve produktet har f\u00e5et navnet Retentioneering, som nu er omdannet til et open-source bibliotek og er tilg\u00e6ngeligt p\u00e5 Github, s\u00e5 enhver kan anvende det. Alt dette kan v\u00e6re interessant for dem, der arbejder med produkt- og marketinganalyse, promovering og udvikling af produkter. For \u00f8vrigt er der allerede blevet offentliggjort en artikel p\u00e5 Habr om et af casestudierne med Retentioneering. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/binarydistrict\/blog\/437534\/\">. I det nye materiale fort\u00e6lles der om, hvad produktet er i stand til, og hvordan det kan anvendes.<\/a><\/noindex>N\u00e5r du har l\u00e6st artiklen, vil du selv kunne skrive dit eget Retentioneering; det kan blive enhver standardiseret metode til behandling af brugerbev\u00e6gelser i applikationen og uden for den, som g\u00f8r det muligt at se detaljerne i adf\u00e6rden og udtr\u00e6kke indsigter til v\u00e6kst i forretningsmetrikker.<\/p>\n<p>Hvad er Retentioneering, og hvorfor er det n\u00f8dvendigt? <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Oprindeligt var vores m\u00e5l at overs\u00e6tte Growth Hacking fra en verden af 'digital hekseri' til en verden af tal, analyse og forudsigelser. Som f\u00f8lge heraf blev produktanalysen forenklet til ren matematik og programmering for dem, der foretr\u00e6kker tal frem for fantastiske historier, og formler frem for smarte ord som 'rebranding', 'repositionering' osv., der lyder flot, men som i praksis sj\u00e6ldent hj\u00e6lper.<\/h3>\n<p>\nTil at l\u00f8se de n\u00e6vnte opgaver var der behov for et rammev\u00e6rk til analyse gennem grafer og bev\u00e6gelser, samtidig med at vi havde brug for et bibliotek, der forenkler de typiske rutiner for analytikere som en m\u00e5de at beskrive regelm\u00e6ssige opgaver inden for produktanalyse, der ville v\u00e6re forst\u00e5elig b\u00e5de for mennesker og maskiner. Biblioteket giver mulighed for at beskrive brugeradf\u00e6rd og forbinde dette med produktets forretningsmetrikker p\u00e5 et s\u00e5 formelt og klart sprog, at det forenkler og automatiserer udvikleres og analytikeres rutineopgaver og letter deres kommunikation med forretningen. <\/p>\n<p>Retentioneering er en metode og analytiske softwarev\u00e6rkt\u00f8jer, der kan tilpasses og integreres i ethvert digitalt (og ikke kun) produkt.<\/p>\n<p><b>Retentioneering er en metode og analytiske softwarev\u00e6rkt\u00f8jer, der kan tilpasses og integreres i ethvert digitalt (og ikke kun) produkt. <\/b><\/p>\n<p>Vi begyndte arbejdet p\u00e5 produktet i 2015. Nu er det allerede et f\u00e6rdigt, omend ikke perfekt s\u00e6t v\u00e6rkt\u00f8jer i Python og Pandas til databehandling, maskinl\u00e6ringsmodeller med sklearn-lignende API, og v\u00e6rkt\u00f8jer til fortolkning af resultaterne fra maskinl\u00e6ringsmodeller som eli5 og shap. <\/p>\n<p>Alt dette er pakket <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/retentioneering\/retentioneering-tools\">ind i et brugervenligt open-source bibliotek i det \u00e5bne Github-repository \u2014 retentioneering-tools<\/a><\/noindex>. Det er ikke sv\u00e6rt at bruge biblioteket, n\u00e6sten enhver, der interesserer sig for produktoplysning, men som ikke har skrevet kode f\u00f8r, kan selv anvende vores analysemetoder p\u00e5 sine data uden betydelig tidsinvestering. <\/p>\n<p>Og en programm\u00f8r, skaber af en applikation eller medlem af udviklings- eller testteamet, som aldrig f\u00f8r har arbejdet med analyse, kan begynde at lege med denne kode og se brugsm\u00f8nstre af sin applikation uden hj\u00e6lp udefra. <\/p>\n<h3>Brugerens forl\u00f8b som grundl\u00e6ggende element i analysen og metoderne til dets behandling<\/h3>\n<p>\n<b>Brugerens forl\u00f8b \u2014 en sekvens af brugerens tilstande p\u00e5 bestemte tidspunkter.<\/b> Desuden kan begivenheder stamme fra forskellige datakilder, b\u00e5de online og offline. Begivenheder, der fandt sted med brugeren \u2014 en del af hans forl\u00f8b. Eksempler:<br \/>\n\u2022 trykkede p\u00e5 en knap<br \/>\n\u2022 s\u00e5 et billede<br \/>\n\u2022 blev ledt til en sk\u00e6rm<br \/>\n\u2022 modtog en mail<br \/>\n\u2022 anbefalede produktet til en ven<br \/>\n\u2022 udfyldte en formular<br \/>\n\u2022 tappede p\u00e5 sk\u00e6rmen<br \/>\n\u2022 scrollede<br \/>\n\u2022 gik til kassen<br \/>\n\u2022 bestilte en burrito<br \/>\n\u2022 spiste burritoen<br \/>\n\u2022 blev syg af den spiste burrito<br \/>\n\u2022 gik ind i caf\u00e9en fra bagindgangen<br \/>\n\u2022 gik ind fra hovedindgangen<br \/>\n\u2022 lukkede applikationen<br \/>\n\u2022 modtog en push-besked<br \/>\n\u2022 gloede p\u00e5 sk\u00e6rmen l\u00e6ngere end tid X<br \/>\n\u2022 betalte for ordren<br \/>\n\u2022 hentede ordren<br \/>\n\u2022 fik afslag p\u00e5 l\u00e5net<\/p>\n<p>Hvis man tager data fra forl\u00f8bene for en gruppe brugere og unders\u00f8ger, hvordan overgange er struktureret, kan man f\u00f8lge, hvordan deres adf\u00e6rd i applikationen opbygges. Dette kan nemt g\u00f8res gennem en graf, hvor tilstande er noder, og overgange mellem tilstandene er kanter:<\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: hvordan vi har skrevet open-source v\u00e6rkt\u00f8jer til produktanalyse med Python og Pandas\" src=\"\/wp-content\/uploads\/2019\/09\/07d7a7cf4f023f5d42ef9b31ed07a0ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n\u00bbTrajectory\u00ab er et meget praktisk begreb \u2014 det indeholder detaljerede oplysninger om alle brugerhandlinger med mulighed for at tilf\u00f8je enhver supplerende information til beskrivelsen af disse handlinger. Dette g\u00f8r det til et universelt objekt. Hvis du har smukke og praktiske v\u00e6rkt\u00f8jer, der g\u00f8r det muligt at arbejde med traektorier, kan du finde ligheder og segmentere dem.<\/p>\n<p>Segmentering af traektorier kan i starten virke som noget meget komplekst. Normalt er det ogs\u00e5 tilf\u00e6ldet \u2014 det kr\u00e6ver brug af sammenligning af forbindelsesmatricer eller sekvensjustering. Vi har fundet en enklere metode \u2014 at studere et stort antal traektorier og segmentere dem gennem klyngedannelse.<\/p>\n<p>Det viser sig, at man kan transformere en traektorie til et punkt ved hj\u00e6lp af kontinuerlige repr\u00e6sentationer, for eksempel, <noindex><a rel=\"nofollow\" href=\"http:\/\/datameetsmedia.com\/bag-of-words-tf-idf-explained\/\">TF-IDF<\/a><\/noindex>. Efter transformationen bliver traektorien et punkt i rummet, hvor de normaliserede frekvenser af forskellige h\u00e6ndelser og overgange i traektorien er afsat langs akserne. Denne ting fra et k\u00e6mpe tusinde- og mere dimensionelt rum (dimS=sum(event types)+sum(ngrams_2 types)), kan projiceres ned p\u00e5 en plan ved hj\u00e6lp af <noindex><a rel=\"nofollow\" href=\"https:\/\/www.quora.com\/How-does-t-SNE-work-in-simple-words\">TSNE<\/a><\/noindex>. TSNE \u2014 transformationen reducerer dimensionen af rummet til 2 akser og fors\u00f8ger at bevare de relative afstande mellem punkterne. Derfor bliver det muligt at studere, hvordan punkterne fra forskellige traektorier var placeret i det flade kort, det billedlige projiceringskort af traektorier. Der analyseres, hvor t\u00e6t eller forskelligt de var i forhold til hinanden, om de dannede klynger eller spredte sig over kortet osv.:<\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: hvordan vi har skrevet open-source v\u00e6rkt\u00f8jer til produktanalyse med Python og Pandas\" src=\"\/wp-content\/uploads\/2019\/09\/3f0386c33885cb842aec8ec01a5f47ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnalytiske v\u00e6rkt\u00f8jer fra Retentioneering giver mulighed for at transformere et s\u00e6t komplekse data og traektorier til en repr\u00e6sentation, der kan sammenlignes med hinanden, og derefter unders\u00f8ge og fortolke resultatet af transformationen.<\/p>\n<p>N\u00e5r vi taler om standardmetoder til behandling af traektorier, henvises der til tre grundl\u00e6ggende v\u00e6rkt\u00f8jer, som vi har implementeret i Retentioneering \u2014 grafer, step matricer og projiceringskort for traektorier. <\/p>\n<p>At arbejde med Google Analytics, Firebase og lignende analysev\u00e6rkt\u00f8jer er ofte komplekst og ikke altid 100% effektivt. Problemet ligger i en r\u00e6kke brugerm\u00e6ssige begr\u00e6nsninger, hvilket f\u00e5r analytikerens arbejde til at blive begr\u00e6nset til museklik og valg af segmenter. Retentioneering giver mulighed for at arbejde med brugerbaner og ikke kun med traktorer, som det er tilf\u00e6ldet i Google Analytics, hvor detaljeringsgraden ofte reduceres til en trakt, selvom den er bygget til et bestemt segment. <\/p>\n<h3>Retentioneering og cases<\/h3>\n<p>\nSom et eksempel p\u00e5 brugen af det udviklede v\u00e6rkt\u00f8j kan n\u00e6vnes en stor niche-service i Rusland. Denne virksomhed har en mobilapp til Android, som er popul\u00e6r blandt kunderne. Den \u00e5rlige oms\u00e6tning fra mobilappen var omkring 7 millioner rubler, med s\u00e6sonm\u00e6ssige udsving p\u00e5 mellem 60.000 og 130.000. Virksomheden har ogs\u00e5 en iOS-app, og den gennemsnitlige ordre for brugeren af den '\u00e6ble'-app var h\u00f8jere end den for kunden, der brugte Android-appen \u2014 1080 rubler imod 1300 rubler.<\/p>\n<p>Virksomheden besluttede at \u00f8ge effektiviteten af Android-appen, og derfor foretog de en grundig analyse. Der blev formuleret flere dusin hypoteser om forbedring af appens effektivitet. Efter brugen af Retentioneering viste det sig, at problemet l\u00e5 i de beskeder, der blev vist til nye brugere. De fik information om brandet, virksomhedens fordele og priserne. Men det viste sig, at beskederne skulle hj\u00e6lpe brugeren med at l\u00e6re at bruge appen. <\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: hvordan vi har skrevet open-source v\u00e6rkt\u00f8jer til produktanalyse med Python og Pandas\" src=\"\/wp-content\/uploads\/2019\/09\/9e6718eb967ae65d047605e4b8a92b3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDet blev der gjort noget ved, hvilket resulterede i f\u00e6rre afinstallationer af appen, og konverteringsv\u00e6ksten til bestilling steg med 23%. I starten blev 20 procent af den indkommende trafik afsat til testen, men efter et par dage, efter at have analyseret de f\u00f8rste resultater og vurderet trenden \u2014 blev proportionerne \u00e6ndret spejlvendt, og i stedet blev 20 procent for kontrolgruppen, mens de 80 procent blev placeret i testen. En uge senere blev det besluttet gradvist at tilf\u00f8je testning af endnu to hypoteser. I alt blev oms\u00e6tningen fra Android-appen efter syv uger \u00f8get med 50% i forhold til det tidligere niveau.<\/p>\n<h3>Hvordan arbejder man med Retentioneering?<\/h3>\n<p>\nDe f\u00f8rste skridt er ganske enkle \u2013 vi henter biblioteket med kommandoen pip install retentioneering. I selve repositoryet ligger der klarlagte eksempler og cases til behandling af data for nogle opgaver inden for produktanalyse. S\u00e6ttet bliver l\u00f8bende opdateret, men det er tilstr\u00e6kkeligt til en f\u00f8rste introduktion. Alle kan tage de f\u00e6rdige moduler og straks anvende dem p\u00e5 deres opgaver \u2013 det g\u00f8r det muligt hurtigere og mere effektivt at indstille processen for en mere detaljeret analyse og optimering af brugerrejser. Alt dette giver mulighed for at finde m\u00f8nstre i brugen af applikationen gennem forst\u00e5elig kode og dele denne erfaring med kolleger.<\/p>\n<p>Retentioneering \u2013 et v\u00e6rkt\u00f8j, som b\u00f8r anvendes i hele applikationens livscyklus, og her er hvorfor:<\/p>\n<ul>\n<li>Retentioneering er effektivt til at spore og kontinuerligt optimere brugerrejser og forbedre forretningsresultater. For eksempel tilf\u00f8jes der ofte nye funktioner i ecommerce-applikationer, hvis indflydelse p\u00e5 produktet ikke altid kan forudses korrekt. I nogle tilf\u00e6lde opst\u00e5r der problemer med kompatibiliteten mellem nye og gamle funktioner \u2013 for eksempel \u201ckanibaliserer\u201d de nye allerede eksisterende. Og i denne situation er der netop behov for konstant analyse af rejserne. <\/li>\n<li>En lignende situation g\u00f8r sig g\u00e6ldende i arbejdet med reklamekanaler: nye trafik-kilder og kreative reklamer testes hele tiden, det er n\u00f8dvendigt at spore s\u00e6sonm\u00e6ssige tendenser og indflydelsen af andre begivenheder, hvilket f\u00f8rer til opst\u00e5en af stadig flere klassiske problemer. Her kr\u00e6ves der ogs\u00e5 konstant overv\u00e5gning og fortolkning af brugerens mekanikker. <\/li>\n<li>Der er en r\u00e6kke faktorer, der konstant p\u00e5virker applikationens drift. For eksempel nye versioner fra udviklerne: n\u00e5r de l\u00f8ser et aktuelt problem, kan de utilsigtet geninds\u00e6tte en gammel fejl eller skabe en helt ny. Over tid vokser antallet af nye versioner, og processen med at spore fejl skal automatiseres \u2013 herunder ved hj\u00e6lp af analyse af brugerrejser.<\/li>\n<\/ul>\n<p>\nGenerelt set er Retentioneering et effektivt v\u00e6rkt\u00f8j. Men perfektion har ingen gr\u00e6nser \u2013 det kan og skal forbedres, udvikles og danne grundlag for nye sp\u00e6ndende produkter. Jo mere aktivt projektets f\u00e6llesskab er, jo flere forks vil der v\u00e6re, og der vil dukke op nye interessante anvendelsesmuligheder.<\/p>\n<p>Yderligere information om Retentioneering-v\u00e6rkt\u00f8jerne:<\/p>\n<ul>\n<li>Vores hjemmeside: <noindex><a rel=\"nofollow\" href=\"http:\/\/retentioneering.com\">retentioneering.com<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/retentioneering.tilda.ws\/#rec89053099\">M\u00f8deskemaer<\/a><\/noindex> og tilmelding til deltagelse<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/t-do.ru\/retentioneering_meetups\">Chat for produkteksperter og analytikere i Telegram<\/a><\/noindex><\/li>\n<li>Gratis <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/retentioneering\/retentioneering-tools\">Retentioneering-repositoriet p\u00e5 GitHub<\/a><\/noindex> <\/li>\n<\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/468721\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435. \u0410\u0432\u0442\u043e\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u041c\u0430\u043a\u0441\u0438\u043c \u0413\u043e\u0434\u0437\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u043e\u0438\u0442 \u0432\u043e \u0433\u043b\u0430\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043e\u043d \u0436\u0435 \u2014 \u0430\u0432\u0442\u043e\u0440 \u0441\u0442\u0430\u0442\u044c\u0438. \u0421\u0430\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 Retentioneering, \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d \u0432 open-source \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u043d\u0430 Github, \u0447\u0442\u043e\u0431\u044b \u043b\u044e\u0431\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28843,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-38424","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Retentioneering: \u043a\u0430\u043a \u043c\u044b open-source \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 Python \u0438 Pandas \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:23:40+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-07-06T14:02:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Retentioneering: hvordan vi skrev open-source v\u00e6rkt\u00f8jer til produktanalyse i Python og Pandas | ProHoster","description":"Hej, Habr. Denne artikel handler om resultaterne af fire \u00e5rs udvikling af en r\u00e6kke metoder og v\u00e6rkt\u00f8jer til behandling af brugerens bev\u00e6gelsestr\u00e6k i applikationen eller p\u00e5 hjemmesiden.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Retentioneering: \u043a\u0430\u043a \u043c\u044b open-source \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u043e\u0439 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438 \u043d\u0430 Python \u0438 Pandas \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0438\u0442\u043e\u0433\u0430\u043c \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u043b\u0435\u0442\u043d\u0435\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0430\u0431\u043e\u0440\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0442\u0440\u0430\u0435\u043a\u0442\u043e\u0440\u0438\u0439 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435.","og:url":"https:\/\/prohoster.info\/da\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:23:40+00:00","article:modified_time":"2026-07-06T14:02:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38424","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 22:00:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:09:23","updated":"2026-01-23 22:00:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/38424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=38424"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/38424\/revisions"}],"predecessor-version":[{"id":182486,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/38424\/revisions\/182486"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/28843"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=38424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=38424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=38424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}