Lucia Blastakova
8 min readJul 24, 2017

Záverečný projekt DA

Automatizácia RFM analýzi

“O čom môj projekt je a prečo som si vybrala práve takúto tému ”

Motivácia je asi úplne jasná. Vymyslieť niečo úžasné a skvelé na čo ešte nikdy, nikto v živote neprišiel a vytrieť všetkým zrak :) . Preto ma dosť iritovali poznámky typu “holky skúste si to vygoogliť, to čo robíte nie je žiadne objavenie Ameriky, sú to jednoduché veci ktoré pred vami robili už stovky ľudí”. A tu sa moje predstavy o tom, že náš super, truper, úžasný projekt vyrieši hladomor, nastolí svetový mier a zastaví globálne oteplovanie, rozplynuli a musela som sa vrátiť späť do reality :D . A teraz vážne!!! K téme záverečného projektu som prišla úplnou náhodou a som rada, že sa tak stalo. Aj keď som dlho nemala jasnú predstavu s akými konkrétnymi dátami budem pracovať, vedela som, že sa vo svojom projekte chcem zamerať hlavne na vytváranie nejakého GUI. Či už by sa jednalo o webovú, desktopovú alebo mobilnú aplikáciu mi bolo úplne jedno, hlavne som si chcela vyskúšať vytvoriť niečo iné, než len naťukať kód do editora, pustiť ho cez konzolu a počkať až sa vypíše hláška : “ Myslím si číslo od 1 do 10. Uhádni na aké číslo myslím” . Chcela som aby to čo vytvorím malo nejaký zmysel, aby to nebola len opičia práca, ktorú robím pretože je to podmienka absolvovania kurzu DA a po skončení to všetko zahodím a nikdy už to nikomu nebude užitočné. S týmto cieľom som si na speed datingu vyberala mentora a firmu, v ktorej absolvujem stáž. Za mentora som si vybrala strašného nadšenca, podľa ktorého bolo všetko super, úžasné, nič nebol problém a všetko je možné. V konečnom dôsledku sme sa videli za celú našu spoluprácu asi dvakrát. Prvýkrát hneď po speed datingu a druhýkrát asi o 14 dní. Na prvom stretnutí sme spoločne preberali aké máme možnosti. Čo by sme mohli vytvoriť, aby to bolo zaujímavé a užitočné, a kde by sme mohli zohnať dáta. Bohužiaľ všetky naše plány stroskotali na tom, že sa nám nepodarilo získať dáta ktoré by boli pre nás akýmkoľvek spôsobom zaujímavé. A zatiaľ, kým som rozhadzovala siete a zisťovala kto by bol ochotný poskytnúť svoje dáta na analýzu, čas stanovený na riešenie projektu neúprosne plynul a ja som bola s každým uplynulým dňom a pribúdajúcimi odmietavými odpoveďami čoraz sklamanejšia a bezradnejšia. Bála som sa,že nakoniec budem musieť vizualizovať nejaké nezaujímavé dáta , ktoré ma nebudú zaujímať a ja celú prácu odfláknem. Našťastie v tej dobe som absolvovala prvý deň spoločnej stáže s Terezou v Proficiu. A práve vtedy mi Tereza navrhla spoluprácu na projekte Automatizácia RFM analýzy. Tento návrh prišiel naozaj v pravý čas alebo ako sa hovorí “o päť minút dvanásť” , preto som po ňom skočila a pustila sa doňho s plným nasadením. Projekt sme rozdelili na dve časti - programovaciu a analytickú (zaoberajúcu sa vizualizáciou a interpretáciou dát).

Takže cieľom celého projektu bolo spracovať surové dáta a podrobiť ich RFM analýze, navrhnúť správnu interpretáciu a modeláciu výstupných dát, poprípade vytvoriť GUI, kde by RFM analýza bola plne automatická a čiastočne interaktívna.

“Teória k RFM analýze alebo kde to spáva, čo to papá …”

RFM analýza je nástroj/metóda využívajúca segmentáciu zákazníkov na základe troch sledovaných parametrov. Ako už názov napovedá jedná sa o tieto parametre: aká dlhá doba uplynula od poslednej návštevy/nákupu , tento parameter sa označuje ako “recency” , ďalším sledovaným parametrom je počet návštev/nákupov označovaná ako “frequency” a nakoniec tu máme celkovú alebo priemernú sumu všetkých minutých peňazí označovanú ako “monetary” . Potom už záleží len na preferenciách do koľkých segmentov si dané parametre rozdelíte a či má pre váš každý sledovaný parameter rovnakú váhu. Vzorec pre výpočet celkového skóre zákazníka v RFM vyzerá takto:

Ak by táto problematika niekoho zaujímala a chcel si o tom prečítať niečo viac odporúčam “Padákův deníček “ kde je táto metóda pekne a zrozumiteľne popísaná.

“Aké nástroje a prísady sme použili aby sme túto delikatesu uvarili “

Pre rozdelenie jednotlivých parametrov do požadovaných segmentov sme použili Jenksov algoritmus (Jenks natural breaks), ktorý sa snaží minimalizovať rôznorodosť hodnôt v rámci jedného segmentu a naopak zvýšiť rôznorodosť medzi segmentami navzájom. Najlepšie usporiadanie hodnôt do segmentov tento algoritmus dosiahne tak, že cyklicky minimalizuje odchýlku danej triedy (segmentu) od priemernej hodnoty triedy a maximalizuje odchýlku každej triedy od priemerov ostatných tried. Použitie tohoto algoritmu pomocou Pythonu je veľmi jednoduché a vyžaduje napísanie len minimálneho množstva kódu.

Ďalej sme pre jednoduché štatistické spracovanie dát v Pythone použili knižnice pandas, matplotlib, scipy … Komplexnejšia a zložitejšia vizualizácia prebehla za pomoci Plotly (v ktorom Tereza vizualizovala výsledky RFM v 3D) .

Ako nástroj na vytvorenie našej webovej stránky sme použili DJANGO. Jedná sa o open source webový aplikačný framework napísaný v Pythone, ktorý sa drží architektúry Model-View-Controller. Pôvodne bol navrhnutý pre správu niekoľkých spravodajsky orientovaných stránok spoločnosti The World Company, neskôr v roku 2005 bol vydaný verejne pod Open source licenciou BSD. Framework je pomenovaný podľa jazzového gitaristu Djanga Reinhardta.

A samozrejme by sme sa nezaobišli bez obrovskej podpory Stack Overflow a Google.

“Ako to celé prebiehalo “

Ako už som spomínala vyššie, na počiatku bolo svetlo ;), megalomanské a idealistické vízie čo všetko by sme mohli urobiť, nechýbalo nám ani nadšenie a odhodlanie. Ešte stále rozprávam len o fáze plánovania, preto nám trochu skeptický postoj nášho mentora nebol úplne jasný. Ten sme však pochopili hneď pri prvých pokusoch napísať funkčný kód, ktorý mal veľmi jednoduchú úlohu. Jediné čo sme od neho chceli bolo aby načítal CSV súbor, dopočítal potrebné hodnoty, na nich uskutočnil segmentáciu dát a toto všetko uložil do tabuľky, ktorú následne vyexportuje opäť do CSV. Jednoduché nie? Len škoda, že nestačí prísť k počítaču otvoriť si Python a takto pekne mu našou rečou nadiktovať čo presne od neho chcete. Miesto toho sa snažíte všetky tieto jednoduché príkazy prepísať do jazyka ktorému Python rozumie a vie s ním pracovať. A práve toto bol náš prvý kameň úrazu. Hoc odhodlané a nadšené sme narazili na riešenie pre nás obtiažnych, pre iných už triviálnych problémov s inštaláciami knižníc, zadávaním správnych príkazov, dodržiavaním syntaxe … Po dvoch dňoch neustáleho bojovania s problémami, ktoré si na nás Python pripravil začalo naše odhodlanie trochu poľavovať a začali sme skepticky uvažovať nad možnosťou, že by sme si vybrali nejaké jednoduchšie zadanie. Našťastie sme vytrvali a zanedlho sme sa dopracovali k vytúženému výsledku z ktorého sme mali obrovskú radosť.

Ukážka úvodu nášho Python kódu
Ukážka kódu obsahujúceho použitie Jenksovho algoritmu

Po úvodnom spracovaní dát sa naše cesty s Tereza rozišli a každá začala pracovať na svojej časti projektu. Ona spracovávala vizualizáciu a ja som sa mala pustiť do poznávania djanga a programovania GUI. Keďže to bol pre mňa úplne nový nástroj nevedela som ako funguje a mala som z neho trochu obavy a rešpekt, zoznamovanie s ním som odkladala ako som mohla a namiesto toho som sa pustila do vykreslovania jednoduchých grafov pomocou knižníc pandas a matplotlib. Moja výhovorka znela takto : “ veď v zadaní jasne písali, že sa projekt musí zaoberať dátovou analýzou a tak aspoň niečo vykreslím, aby nepovedali, že som nič neurobila“. Zisťovala som základné informácie o sledovanom “štatistickom súbore” a vykresľovala jednoduché grafy (napr. histogramy, koláčové grafy … ) .

Ukážka kódu pre vykreslovanie grafov
Histogramy

No a potom už sa nebolo na čo vyhovárať a čím si ospravedlňovať svoje vyhýbanie sa Djangu a musela som sa do toho pustiť po hlave. Takže som si na YouTube našla tutoriál, po ktorého zhliadnutí som mala pocit, že je to triviálna úloha navrhnúť web a nezaberie mi to viac než jedno poobedie. Ale chyba dámy a páni , až tak strašne triviálne to teda nieje, a pre začiatočníka ako ja to bola pohroma. Stále mám pocit, že na ten kód pozerám rovnako zdesene ako keď sa bacil pozerá do lekárne a čudujem sa, že vôbec funguje. Cesta k jeho funkčnosti bola dlhá a strastiplná. Pri jej absolvovaní som bola otravná, neodbytná a stále niekoho žiadala o pomoc. Ale prinieslo to svoje ovocie a ja som “happy ako dva grepy” . Vzhľadom to zatiaľ nieje žiadna designerská hviezda a jedná sa o úplne základný, ale zato funkčný koncept.

Testovacie vykreslenie priebežného výsledku

“Zhrnutie alebo čo nám čas dal a čo zase vzal“

Vytvorili sme GUI, ktoré užívateľovi umožní nahrať svoje dáta , pomenovať si ich pod názvom projektu a uskutoční RFM analýzu. V prípade že sa jedná o nový projekt dáta sa spracujú a uložia do databázy, odkiaľ sa následne načítajú a vizualizujú. V prípade, že sa chce užívateľ vrátiť k už raz spracovanému projektu, vyberie si jeho názov, proces spracovania sa preskočí a ide sa priamo na vizualizáciu dát. Toto ušetrí veľa času, ktorý zaberie nahrávanie a spracovanie (parsovanie) súboru. Samozrejme je stále veľa vecí, ktoré by sa dali vylepšovať a na ktorých budeme môcť pracovať aj po skončení DA. Napríklad by sme časom chceli aplikáciu rozšíriť o metódu k.means (ku ktorej už máme prichystaný kód) …

Práca na tomto projekte mi priniesla niekoľko bezesných nocí, veľa nervov, pocitov beznádeje a bezmocnosti, ale v závere aj pocit šťastia a hrdosti. Zlepšila moje schopnosti v práci s SQL databázami, Pythonom. Naučila ma debuggovať, aspoň základné použitie gitu a hlavne to že ak niečo neviem s viac ako 80% pravdepodobnosťou to nájdem na Stack Overflow. Takže za mňa: “Hurá, nech žije Stack Overflow :) “ .