{"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\/pl\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali","title":{"rendered":"Retentioneering: jak stworzyli\u015bmy narz\u0119dzia open-source do analizy produkt\u00f3w w Pythonie i Pandas","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107, Habr. Ten artyku\u0142 po\u015bwi\u0119cony jest wynikom czteroletniego rozwoju zestawu metod i narz\u0119dzi do analizy trajektorii ruchu u\u017cytkownik\u00f3w w aplikacji lub na stronie internetowej. Autor rozwoju \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/mgodzi\/\">Maksym Godzi<\/a><\/noindex>, kt\u00f3ry stoi na czo\u0142owej pozycji w zespole tw\u00f3rc\u00f3w produktu, jest te\u017c autorem artyku\u0142u. Sam produkt nosi nazw\u0119 Retentioneering, obecnie zosta\u0142 przekszta\u0142cony w bibliotek\u0119 open-source i umieszczony na Github, aby ka\u017cdy ch\u0119tny m\u00f3g\u0142 z niej skorzysta\u0107. Mo\u017cliwe, \u017ce wszystko to zainteresuje tych, kt\u00f3rzy zajmuj\u0105 si\u0119 analiz\u0105 produktow\u0105 i marketingow\u0105, promocj\u0105 i rozwojem produktu. A propos, na Habrze <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/binarydistrict\/blog\/437534\/\">ju\u017c opublikowano artyku\u0142 o jednym z przypadk\u00f3w pracy z Retentioneering<\/a><\/noindex>. W nowym materiale mowa o tym, co potrafi produkt i jak mo\u017cna go wykorzysta\u0107.<\/p>\n<p>Czytaj\u0105c artyku\u0142, samodzielnie b\u0119dziesz m\u00f3g\u0142 stworzy\u0107 w\u0142asne Retentioneering, kt\u00f3rym mo\u017ce by\u0107 ka\u017cda sformalizowana metoda analizy trajektorii u\u017cytkownik\u00f3w w aplikacji oraz poza ni\u0105, pozwalaj\u0105ca na szczeg\u00f3\u0142owe dostrzeganie cech zachowania i wydobycie st\u0105d wniosk\u00f3w dla wzrostu wska\u017anik\u00f3w biznesowych. <br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Czym jest Retentioneering i po co to potrzebne?<\/h3>\n<p>\nNa pocz\u0105tku naszym celem by\u0142o przeniesienie Growth Hacking z \u015bwiata \u00abcyfrowej magii\u00bb do \u015bwiata liczb, analizy i prognoz. W konsekwencji \u2014 sprowadzenie analizy produktowej do czystej matematyki i programowania dla tych, kt\u00f3rzy zamiast fantastycznych historii wol\u0105 liczby, a wzory \u2014 m\u0105dre s\u0142owa typu \u00abrebranding\u00bb, \u00abrepozycjonowanie\u00bb itp., kt\u00f3re \u0142adnie brzmi\u0105, ale w praktyce ma\u0142o pomagaj\u0105. <\/p>\n<p>Aby rozwi\u0105za\u0107 wspomniane zadania, potrzebny by\u0142 framework do analizy przez grafy i trajektorie, a jednocze\u015bnie biblioteka, kt\u00f3ra upro\u015bci typowe rutyny analityka, jako spos\u00f3b opisywania regularnych zada\u0144 analizy produktowej, kt\u00f3ry by\u0142by zrozumia\u0142y zar\u00f3wno dla ludzi, jak i robot\u00f3w. Biblioteka umo\u017cliwia opisywanie zachowa\u0144 u\u017cytkownik\u00f3w i powi\u0105zanie ich z metrykami biznesowymi produktu w tak formalnym i jasnym j\u0119zyku, aby upro\u015bci\u0107 i zautomatyzowa\u0107 rutynowe zadania programist\u00f3w i analityk\u00f3w, oraz u\u0142atwi\u0107 ich komunikacj\u0119 z biznesem.<\/p>\n<p><b>Retentioneering \u2014 metoda i analityczne narz\u0119dzia programowe, kt\u00f3re mo\u017cna dostosowa\u0107 i zintegrowa\u0107 w ka\u017cdym cyfrowym (i nie tylko) produkcie. <\/b><\/p>\n<p>Rozpocz\u0119li\u015bmy prace nad produktem w 2015 roku. Obecnie jest to ju\u017c gotowy, chocia\u017c wci\u0105\u017c nieidealny zestaw narz\u0119dzi w Pythonie i Pandas do pracy z danymi, modele uczenia maszynowego z interfejsem przypominaj\u0105cym sklearn, narz\u0119dzia do interpretacji wynik\u00f3w modeli uczenia maszynowego eli5 i shap. <\/p>\n<p>Wszystko to zapakowane jest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/retentioneering\/retentioneering-tools\">w wygodn\u0105 bibliotek\u0119 open-source w otwartym repozytorium Github \u2014 retentioneering-tools.<\/a><\/noindex>U\u017cycie biblioteki jest proste, praktycznie ka\u017cda osoba, kt\u00f3ra interesuje si\u0119 analiz\u0105 produktow\u0105, ale nie pisa\u0142a wcze\u015bniej kodu, mo\u017ce samodzielnie zastosowa\u0107 nasze metody analizy do swoich danych bez znacznego po\u015bwi\u0119cenia czasu. <\/p>\n<p>A programista, tw\u00f3rca aplikacji lub cz\u0142onek zespo\u0142u deweloperskiego lub testowego, kt\u00f3ry nigdy wcze\u015bniej nie zajmowa\u0142 si\u0119 analiz\u0105, mo\u017ce zacz\u0105\u0107 eksperymentowa\u0107 z tym kodem i zobaczy\u0107 wzorce u\u017cycia swojej aplikacji bez pomocy z zewn\u0105trz. <\/p>\n<h3>\u015acie\u017cka u\u017cytkownika jako podstawowy element analizy i metody jej przetwarzania<\/h3>\n<p>\n<b>\u015acie\u017cka u\u017cytkownika to sekwencja stan\u00f3w u\u017cytkownika w okre\u015blonych momentach czasowych.<\/b> Ponadto zdarzenia mog\u0105 pochodzi\u0107 z r\u00f3\u017cnych \u017ar\u00f3de\u0142 danych, zar\u00f3wno online, jak i offline. Wydarzenia, kt\u00f3re mia\u0142y miejsce z u\u017cytkownikiem, s\u0105 cz\u0119\u015bci\u0105 jego \u015bcie\u017cki. Przyk\u0142ady:<br \/>\n\u2022 nacisn\u0105\u0142 przycisk<br \/>\n\u2022 zobaczy\u0142 obrazek<br \/>\n\u2022 trafi\u0142 na ekran<br \/>\n\u2022 otrzyma\u0142 maila<br \/>\n\u2022 poleci\u0142 produkt przyjacielowi<br \/>\n\u2022 wype\u0142ni\u0142 formularz<br \/>\n\u2022 dotkn\u0105\u0142 ekranu<br \/>\n\u2022 przewin\u0105\u0142<br \/>\n\u2022 podszed\u0142 do kasy<br \/>\n\u2022 zam\u00f3wi\u0142 burrito<br \/>\n\u2022 zjad\u0142 burrito<br \/>\n\u2022 zatru\u0142 si\u0119 zjedzonym burrito<br \/>\n\u2022 wszed\u0142 do kawiarni tylnym wej\u015bciem<br \/>\n\u2022 wszed\u0142 frontowym wej\u015bciem<br \/>\n\u2022 zamkn\u0105\u0142 aplikacj\u0119<br \/>\n\u2022 otrzyma\u0142 powiadomienie push<br \/>\n\u2022 gapi\u0142 si\u0119 na ekran przez d\u0142u\u017cszy czas X<br \/>\n\u2022 op\u0142aci\u0142 zam\u00f3wienie<br \/>\n\u2022 odebra\u0142 zam\u00f3wienie<br \/>\n\u2022 otrzyma\u0142 odmow\u0119 kredytu<\/p>\n<p>Je\u015bli we\u017amiemy dane \u015bcie\u017cek grupy u\u017cytkownik\u00f3w i przeanalizujemy, jak zorganizowane s\u0105 przej\u015bcia, mo\u017cemy \u015bledzi\u0107, jak dok\u0142adnie kszta\u0142tuje si\u0119 ich zachowanie w aplikacji. Jest to wygodne do zrobienia za pomoc\u0105 grafu, w kt\u00f3rym stany s\u0105 w\u0119z\u0142ami, a przej\u015bcia mi\u0119dzy nimi s\u0105 kraw\u0119dziami:<\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: jak stworzyli\u015bmy narz\u0119dzia open-source do analizy produkt\u00f3w w Pythonie i Pandas\" src=\"\/wp-content\/uploads\/2019\/09\/07d7a7cf4f023f5d42ef9b31ed07a0ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n\u201eTrajektoria\u201d to bardzo wygodne poj\u0119cie \u2013 zawiera szczeg\u00f3\u0142owe informacje o wszystkich dzia\u0142aniach u\u017cytkownika, z mo\u017cliwo\u015bci\u0105 dodawania wszelkich dodatkowych danych do opisu tych dzia\u0142a\u0144. Dzi\u0119ki temu jest to obiekt uniwersalny. Je\u015bli masz \u0142adne i wygodne narz\u0119dzia, kt\u00f3re umo\u017cliwiaj\u0105 prac\u0119 z trajektoriami, mo\u017cesz znajdowa\u0107 podobie\u0144stwa, segmentowa\u0107 je.<\/p>\n<p>Segmentacja trajektorii na pocz\u0105tku mo\u017ce wydawa\u0107 si\u0119 czym\u015b bardzo skomplikowanym. W zwyk\u0142ej sytuacji tak w\u0142a\u015bnie jest \u2013 trzeba u\u017cy\u0107 por\u00f3wnania macierzy sp\u00f3jno\u015bci lub wyr\u00f3wnania sekwencji. Uda\u0142o nam si\u0119 znale\u017a\u0107 prostszy spos\u00f3b \u2013 bada\u0107 du\u017c\u0105 liczb\u0119 trajektorii i segmentowa\u0107 je poprzez klasteryzacj\u0119.<\/p>\n<p>Jak si\u0119 okaza\u0142o, mo\u017cna przekszta\u0142ca\u0107 trajektori\u0119 w punkt za pomoc\u0105 ci\u0105g\u0142ych reprezentacji, na przyk\u0142ad, <noindex><a rel=\"nofollow\" href=\"http:\/\/datameetsmedia.com\/bag-of-words-tf-idf-explained\/\">TF-IDF<\/a><\/noindex>. Po przekszta\u0142ceniu trajektoria staje si\u0119 punktem w przestrzeni, gdzie na osiach od\u0142o\u017cona jest znormalizowana cz\u0119sto\u015b\u0107 wyst\u0119powania r\u00f3\u017cnych wydarze\u0144 i przej\u015b\u0107 mi\u0119dzy nimi w trajektorii. Ten obiekt z ogromnej przestrzeni o tysi\u0105cach wymiar\u00f3w (dimS=sum(typy wydarze\u0144)+sum(typy ngram\u00f3w_2)), mo\u017cna sprojektowa\u0107 na p\u0142aszczyzn\u0119 za pomoc\u0105 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.quora.com\/How-does-t-SNE-work-in-simple-words\">TSNE<\/a><\/noindex>. TSNE \u2013 transformacja, zmniejsza wymiarowo\u015b\u0107 przestrzeni do 2 osi i w miar\u0119 mo\u017cliwo\u015bci zachowuje wzgl\u0119dne odleg\u0142o\u015bci mi\u0119dzy punktami. W zwi\u0105zku z tym mo\u017cliwe jest na p\u0142askiej mapie, obrazowej mapie projekcyjnej trajektorii, badanie, jak blisko siebie znajdowa\u0142y si\u0119 punkty r\u00f3\u017cnych trajektorii. Analizuje si\u0119, jak blisko lub r\u00f3\u017cnie by\u0142y one od siebie, czy tworzy\u0142y klastry, czy rozprasza\u0142y si\u0119 po mapie itd.:<\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: jak stworzyli\u015bmy narz\u0119dzia open-source do analizy produkt\u00f3w w Pythonie i Pandas\" src=\"\/wp-content\/uploads\/2019\/09\/3f0386c33885cb842aec8ec01a5f47ff.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNarz\u0119dzia analityczne Retentioneering umo\u017cliwiaj\u0105 przekszta\u0142cenie zbioru skomplikowanych danych i trajektorii w reprezentacj\u0119, kt\u00f3r\u0105 mo\u017cna ze sob\u0105 por\u00f3wna\u0107, a nast\u0119pnie bada\u0107 i interpretowa\u0107 wyniki przekszta\u0142cenia.<\/p>\n<p>M\u00f3wi\u0105c o standardowych metodach przetwarzania trajektorii, mamy na my\u015bli trzy podstawowe narz\u0119dzia, kt\u00f3re wdro\u017cyli\u015bmy w Retentioneering \u2013 grafy, macierze krok\u00f3w i mapy projekcji trajektorii. <\/p>\n<p>Praca z Google Analytics, Firebase i podobnymi systemami analitycznymi jest wystarczaj\u0105co skomplikowana i nie jest w 100% skuteczna. Problem tkwi w pewnych ograniczeniach dla u\u017cytkownik\u00f3w, przez co praca analityka w tych systemach opiera si\u0119 na klikni\u0119ciach myszk\u0105 i wyborze segment\u00f3w. Retentioneering daje mo\u017cliwo\u015b\u0107 pracy z trajektoriami u\u017cytkownik\u00f3w, a nie tylko z lejkami, jak w Google Analytics, gdzie poziom szczeg\u00f3\u0142owo\u015bci cz\u0119sto sprowadza si\u0119 do lejka, nawet je\u015bli ten zosta\u0142 zbudowany dla jakiego\u015b segmentu. <\/p>\n<h3>Retentioneering i przypadki<\/h3>\n<p>\nJako przyk\u0142ad zastosowania opracowanego narz\u0119dzia mo\u017cna przytoczy\u0107 przypadek du\u017cego niszowego serwisu w Rosji. Ta firma ma aplikacj\u0119 mobiln\u0105 na Androida, kt\u00f3ra cieszy si\u0119 popularno\u015bci\u0105 w\u015br\u00f3d klient\u00f3w. Roczny obr\u00f3t z aplikacji mobilnej wynosi\u0142 oko\u0142o 7 mln rubli, a sezonowe wahania oscylowa\u0142y w granicach 60-130 tys. Ta sama firma ma r\u00f3wnie\u017c aplikacj\u0119 na iOS, a \u015bredni koszyk u\u017cytkownika aplikacji \u201ejab\u0142kowej\u201d by\u0142 wy\u017cszy od \u015bredniego koszyka klienta korzystaj\u0105cego z aplikacji na Androida \u2014 1080 rubli w por\u00f3wnaniu do 1300 rubli.<\/p>\n<p>Firma postanowi\u0142a zwi\u0119kszy\u0107 efektywno\u015b\u0107 aplikacji na Androida, w tym celu przeprowadzono jej dok\u0142adn\u0105 analiz\u0119. Stworzono kilka dziesi\u0105tek hipotez dotycz\u0105cych zwi\u0119kszenia efektywno\u015bci aplikacji. Po zastosowaniu Retentioneering okaza\u0142o si\u0119, \u017ce problem tkwi w komunikatach, kt\u00f3re by\u0142y pokazywane nowym u\u017cytkownikom. Otrzymywali oni informacje o marce, zaletach firmy i cenach. Jednak, jak si\u0119 okaza\u0142o, komunikaty mia\u0142y pom\u00f3c u\u017cytkownikowi nauczy\u0107 si\u0119 korzysta\u0107 z aplikacji. <\/p>\n<p><img decoding=\"async\" alt=\"Retentioneering: jak stworzyli\u015bmy narz\u0119dzia open-source do analizy produkt\u00f3w w Pythonie i Pandas\" src=\"\/wp-content\/uploads\/2019\/09\/9e6718eb967ae65d047605e4b8a92b3e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI to w\u0142a\u015bnie zrobiono, w efekcie czego aplikacj\u0119 zacz\u0119to mniej usuwa\u0107, a wzrost konwersji w zam\u00f3wienia wyni\u00f3s\u0142 23%. Na pocz\u0105tku na test przeznaczono 20 procent ruchu przychodz\u0105cego, ale po kilku dniach, analizuj\u0105c pierwsze wyniki i oceniaj\u0105c trend \u2014 zamienili proporcje i, przeciwnie, zostawili 20 procent dla grupy kontrolnej, a osiemdziesi\u0105t procent umie\u015bcili w te\u015bcie. Jeszcze tydzie\u0144 p\u00f3\u017aniej podj\u0119to decyzj\u0119 o sukcesywnym dodaniu testowania jeszcze dw\u00f3ch hipotez. \u0141\u0105cznie, po siedmiu tygodniach, obr\u00f3t z aplikacji na Androida zwi\u0119kszy\u0142 si\u0119 o p\u00f3\u0142tora raza w por\u00f3wnaniu do wcze\u015bniejszego poziomu.<\/p>\n<h3>Jak pracowa\u0107 z Retentioneering?<\/h3>\n<p>\nPierwsze kroki s\u0105 do\u015b\u0107 proste \u2014 \u0142adujemy bibliotek\u0119 poleceniem pip install retentioneering. W samym repozytorium znajduj\u0105 si\u0119 gotowe przyk\u0142ady i przypadki przetwarzania danych dla niekt\u00f3rych zada\u0144 analityki produktowej. Zestaw jest stale uzupe\u0142niany, na razie wystarcza do pierwszego zapoznania si\u0119. Ka\u017cdy mo\u017ce wzi\u0105\u0107 gotowe modu\u0142y i od razu zastosowa\u0107 je do swoich zada\u0144 \u2014 pozwala to na szybkie skonfigurowanie procesu bardziej szczeg\u00f3\u0142owej analizy i optymalizacji \u015bcie\u017cek u\u017cytkownik\u00f3w. To wszystko daje mo\u017cliwo\u015b\u0107 znajdowania wzorc\u00f3w korzystania z aplikacji za pomoc\u0105 zrozumia\u0142ego kodu i przekazywania tego do\u015bwiadczenia kolegom.<\/p>\n<p>Retentioneering to narz\u0119dzie, kt\u00f3re warto stosowa\u0107 przez ca\u0142y okres \u017cycia aplikacji i oto dlaczego:<\/p>\n<ul>\n<li>Retentioneering jest skuteczny w \u015bledzeniu i ci\u0105g\u0142ej optymalizacji \u015bcie\u017cek u\u017cytkownik\u00f3w oraz poprawie wska\u017anik\u00f3w biznesowych. W aplikacjach e-commerce cz\u0119sto dodawane s\u0105 nowe funkcje, kt\u00f3rych wp\u0142yw na produkt nie zawsze mo\u017cna prawid\u0142owo przewidzie\u0107. W niekt\u00f3rych przypadkach pojawiaj\u0105 si\u0119 problemy z kompatybilno\u015bci\u0105 nowych i starych funkcji \u2014 na przyk\u0142ad nowe \u201ekanibalizuj\u0105\u201d ju\u017c istniej\u0105ce. I w tej sytuacji potrzebna jest sta\u0142a analiza \u015bcie\u017cek. <\/li>\n<li>Podobna sytuacja ma miejsce w pracy z kana\u0142ami reklamowymi: nieustannie testowane s\u0105 nowe \u017ar\u00f3d\u0142a ruchu i kreacje reklamowe, konieczne jest \u015bledzenie sezonowo\u015bci, trend\u00f3w oraz wp\u0142ywu innych wydarze\u0144, co prowadzi do pojawienia si\u0119 coraz to nowych klas problem\u00f3w. Tutaj r\u00f3wnie\u017c wymagana jest sta\u0142a obserwacja i interpretacja mechanik u\u017cytkownik\u00f3w. <\/li>\n<li>Istnieje szereg czynnik\u00f3w, kt\u00f3re nieustannie wp\u0142ywaj\u0105 na dzia\u0142anie aplikacji. Przyk\u0142adowo, nowe wydania od programist\u00f3w: rozwi\u0105zuj\u0105c bie\u017c\u0105cy problem, niechc\u0105cy przywracaj\u0105 stary lub tworz\u0105 zupe\u0142nie nowy. Z biegiem czasu liczba nowych wyda\u0144 ro\u015bnie, wi\u0119c proces \u015bledzenia b\u0142\u0119d\u00f3w nale\u017cy zautomatyzowa\u0107 \u2014 mi\u0119dzy innymi za pomoc\u0105 analizy \u015bcie\u017cek u\u017cytkownik\u00f3w.<\/li>\n<\/ul>\n<p>\nOg\u00f3lnie rzecz bior\u0105c, Retentioneering to skuteczne narz\u0119dzie. Ale nie ma granic perfekcji \u2014 mo\u017cna je i nale\u017cy poprawia\u0107, rozwija\u0107 i budowa\u0107 na jego podstawie nowe, interesuj\u0105ce produkty. Im aktywniejsza b\u0119dzie spo\u0142eczno\u015b\u0107 projektu, tym wi\u0119cej b\u0119dzie fork\u00f3w, pojawi\u0105 si\u0119 nowe interesuj\u0105ce sposoby jego wykorzystania.<\/p>\n<p>Dodatkowe informacje o narz\u0119dziach Retentioneering:<\/p>\n<ul>\n<li>Nasza strona: <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\">Harmonogram mitap\u00f3w<\/a><\/noindex> i zapis na udzia\u0142<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/t-do.ru\/retentioneering_meetups\">Czat produkt\u00f3w i analityk\u00f3w na Telegramie<\/a><\/noindex><\/li>\n<li>Darmowy <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/retentioneering\/retentioneering-tools\">repozytorium Retentioneering na GitHubie<\/a><\/noindex> <\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <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.1.1 - 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\/pl\/blog\/news\/retentioneering-kak-my-open-source-instrumenty-dlya-produktovoj-analitiki-na-python-i-pandas-napisali\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\/pl\/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: jak stworzyli\u015bmy open-source narz\u0119dzia do analityki produktowej w Pythonie i Pandas | ProHoster","description":"Cze\u015b\u0107, Habr. Ten artyku\u0142 po\u015bwi\u0119cony jest podsumowaniu czteroletnich prac nad zestawem metod i narz\u0119dzi do analizy trajektorii ruchu u\u017cytkownik\u00f3w w aplikacji lub na stronie internetowej.","canonical_url":"https:\/\/prohoster.info\/pl\/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":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/38424","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=38424"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/38424\/revisions"}],"predecessor-version":[{"id":182486,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/38424\/revisions\/182486"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/28843"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=38424"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=38424"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=38424"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}