Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Mahalagang maunawaan namin kung ano ang nangyayari sa aming mga mag-aaral sa panahon ng pagsasanay at kung paano nakakaapekto ang mga kaganapang ito sa resulta, kaya bumuo kami ng Customer Journey Map - isang mapa ng karanasan ng customer. Pagkatapos ng lahat, ang proseso ng pag-aaral ay hindi isang bagay na tuluy-tuloy at mahalaga, ito ay isang kadena ng magkakaugnay na mga kaganapan at aksyon ng mag-aaral, at ang mga pagkilos na ito ay maaaring mag-iba nang malaki sa iba't ibang mga mag-aaral. Ngayon ay natapos na niya ang kanyang aralin: ano ang susunod niyang gagawin? Mapupunta ba ito sa takdang-aralin? Maglulunsad ba ito ng isang mobile application? Magpapalit ba siya ng kurso, magpalit ng guro? Diretso ka ba sa susunod na aralin? O aalis lang siyang bigo? Posible ba, sa pamamagitan ng pagsusuri sa mapa na ito, upang matukoy ang mga pattern na humahantong sa matagumpay na pagkumpleto ng kurso o, sa kabaligtaran, sa "dropout" ng mag-aaral?

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Karaniwan, ginagamit ang espesyalisado, napakamahal na mga closed-source na tool upang bumuo ng CJM. Ngunit nais naming makabuo ng isang bagay na simple, na nangangailangan ng kaunting pagsisikap at, kung maaari, open source. Kaya ang ideya ay dumating sa paggamit ng mga kadena ng Markov - at nagtagumpay kami. Bumuo kami ng isang mapa, nag-interpret ng data sa pag-uugali ng mag-aaral sa anyo ng isang graph, nakakita ng ganap na hindi halatang mga sagot sa mga pandaigdigang isyu sa negosyo, at kahit na nakakita ng malalim na nakatagong mga bug. Ginawa namin ang lahat ng ito gamit ang open source Python script solutions. Sa artikulong ito ay magsasalita ako tungkol sa dalawang kaso na may mga hindi-halatang resulta at ibabahagi ang script sa lahat.

Kaya, ipinapakita ng mga chain ng Markov ang posibilidad ng mga paglipat sa pagitan ng mga kaganapan. Narito ang isang primitive na halimbawa mula sa Wikipedia:

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Narito ang "E" at "A" ay mga kaganapan, ang mga arrow ay mga transition sa pagitan ng mga ito (kabilang ang paglipat mula sa isang kaganapan patungo sa pareho), at ang mga timbang ng mga arrow ay ang posibilidad ng paglipat ("weighted directed graph").

Ano ang ginamit mo?

Ang circuit ay sinanay gamit ang karaniwang pag-andar ng Python, na pinakain ng mga log ng aktibidad ng mag-aaral. Ang graph sa resultang matrix ay itinayo ng NetworkX library.

Ang log ay ganito ang hitsura:

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Isa itong csv file na naglalaman ng talahanayan ng tatlong column: student id, pangalan ng event, oras kung kailan ito naganap. Ang tatlong field na ito ay sapat na upang masubaybayan ang mga galaw ng kliyente, bumuo ng mapa at sa huli ay makakuha ng Markov chain.

Ibinabalik ng library ang mga ginawang graph sa .dot o .gexf na format. Upang mailarawan ang dating, maaari mong gamitin ang libreng Graphviz package (gvedit tool), nagtrabaho kami sa .gexf at Gephi, libre din.

Susunod, gusto kong magbigay ng dalawang halimbawa ng paggamit ng mga chain ng Markov, na nagbigay-daan sa amin na tingnan ang aming mga layunin, proseso ng edukasyon, at ang Skyeng ecosystem mismo. Well, ayusin ang mga bug.

Unang kaso: mobile application

Upang magsimula, ginalugad namin ang paglalakbay ng mag-aaral sa aming pinakasikat na produktoβ€”ang Pangkalahatang kurso. Sa sandaling iyon, nagtatrabaho ako sa departamento ng mga bata ng Skyeng at gusto naming makita kung gaano kaepektibo ang mobile application sa madla ng aming mga anak.

Ang pagkuha ng mga log at pagpapatakbo ng mga ito sa script, nakakuha ako ng ganito:

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Ang panimulang node ay Start General, at sa ibaba ay may tatlong output node: ang estudyante ay "nakatulog," nagbago ng kurso, at natapos ang kurso.

  • Nakatulog, "Nakatulog" - nangangahulugan ito na hindi na siya kumukuha ng mga klase, malamang na nahulog siya. Inaasahan naming tinatawag ang estado na ito na "natutulog", dahil... sa teorya, may pagkakataon pa siyang ipagpatuloy ang kanyang pag-aaral. Pinakamasamang resulta para sa amin.
  • Bumaba sa pangkalahatan, Binago ang kurso - lumipat mula sa Heneral sa ibang bagay at nawala para sa aming Markov chain.
  • Natapos ang kurso, Natapos ang kurso - perpektong kondisyon, ang tao ay nakakumpleto ng 80% ng mga aralin (hindi lahat ng aralin ay kinakailangan).

Ang pagpasok sa matagumpay na node ng klase ay nangangahulugan ng matagumpay na pagkumpleto ng aralin sa aming platform kasama ang guro. Itinatala nito ang pag-unlad sa kurso at diskarte sa nais na resulta - "Nakumpleto ang kurso." Mahalaga sa amin na dumalo ang mga mag-aaral hangga't maaari.

Upang makakuha ng mas tumpak na dami ng mga konklusyon para sa mobile application (app session node), bumuo kami ng magkakahiwalay na mga chain para sa bawat isa sa mga huling node at pagkatapos ay inihambing ang mga timbang ng gilid nang magkapares:

  • mula sa session ng app pabalik dito;
  • mula sa session ng app hanggang sa matagumpay na klase;
  • mula sa matagumpay na klase hanggang sa session ng app.

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python
Sa kaliwa ay ang mga mag-aaral na nakatapos ng kurso, sa kanan ay ang mga "nakatulog"

Ang tatlong gilid na ito ay nagpapakita ng kaugnayan sa pagitan ng tagumpay ng isang mag-aaral at ang kanilang paggamit ng mobile app. Inaasahan naming makikita na ang mga mag-aaral na nakatapos ng kurso ay magkakaroon ng mas malakas na koneksyon sa aplikasyon kaysa sa mga mag-aaral na nakatulog. Gayunpaman, sa katotohanan nakuha namin ang eksaktong kabaligtaran na mga resulta:

  • tiniyak namin na ang iba't ibang grupo ng mga user ay nakikipag-ugnayan sa mobile application nang iba;
  • ang matagumpay na mga mag-aaral ay gumagamit ng mobile application nang hindi gaanong intensibo;
  • mas aktibong ginagamit ng mga mag-aaral na natutulog ang mobile application.

Nangangahulugan ito na ang mga mag-aaral na natutulog ay nagsisimulang gumugol ng mas maraming oras sa mobile application at, sa huli, mananatili dito magpakailanman.

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Sa una kami ay nagulat, ngunit pagkatapos ng pag-iisip tungkol dito, natanto namin na ito ay isang ganap na natural na epekto. Sa isang pagkakataon, nag-aral ako ng French nang mag-isa gamit ang dalawang tool: isang mobile application at grammar lectures sa YouTube. Sa una, hinati ko ang oras sa pagitan nila sa isang ratio na 50 hanggang 50. Ngunit ang application ay mas masaya, mayroong gamification, lahat ay simple, mabilis at malinaw, ngunit sa lecture kailangan mong bungkalin ito, magsulat ng isang bagay , magsanay sa isang kuwaderno. Unti-unti, nagsimula akong gumugol ng mas maraming oras sa aking smartphone, hanggang sa ang bahagi nito ay lumago sa 100%: kung gumugol ka ng tatlong oras dito, lumikha ka ng isang maling pakiramdam ng natapos na trabaho, dahil kung saan wala kang pagnanais na pumunta at makinig sa anumang bagay .

Ngunit paano ito mangyayari? Pagkatapos ng lahat, espesyal kaming lumikha ng isang mobile application, binuo ang Ebbinghaus curve dito, pinasaya ito, ginawa itong kaakit-akit upang gugulin ng mga tao ang oras dito, ngunit lumalabas na nakakaabala lamang ito sa kanila? Sa katunayan, ang dahilan ay ang koponan ng mobile application ay napakahusay na nakayanan ang mga gawain nito, bilang isang resulta kung saan ito ay naging isang cool, self-sufficient na produkto at nagsimulang mahulog sa ating ecosystem.

Bilang resulta ng pananaliksik, naging malinaw na ang mobile application ay kailangang baguhin kahit papaano upang ito ay hindi gaanong nakakagambala sa pangunahing kurso ng pag-aaral. At parehong mga bata at matatanda. Ang gawaing ito ay kasalukuyang isinasagawa.

Pangalawang kaso: onboarding bug

Ang onboarding ay isang opsyonal na karagdagang pamamaraan kapag nagrerehistro ng bagong mag-aaral, na inaalis ang mga potensyal na teknikal na problema sa hinaharap. Ipinapalagay ng pangunahing senaryo na ang isang tao ay nakarehistro sa landing page, nakakuha ng access sa kanyang personal na account, nakipag-ugnayan at binigyan ng panimulang aralin. Kasabay nito, napansin namin ang isang malaking porsyento ng mga teknikal na paghihirap sa panahon ng panimulang aralin: ang maling bersyon ng browser, ang mikropono o tunog ay hindi gumagana, ang guro ay hindi maaaring agad na magmungkahi ng isang solusyon, at lahat ng ito ay lalong mahirap pagdating sa sa mga bata. Samakatuwid, bumuo kami ng karagdagang application sa iyong personal na account, kung saan maaari mong kumpletuhin ang apat na simpleng hakbang: suriin ang iyong browser, camera, mikropono at kumpirmahin na ang mga magulang ay nasa malapit sa panahon ng panimulang aralin (pagkatapos ng lahat, sila ang nagbabayad para sa edukasyon ng kanilang mga anak).

Nagpakita ang ilang onboarding page na ito ng funnel na tulad nito:

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python
1: panimulang bloke na may tatlong bahagyang naiiba (depende sa kliyente) na mga form sa pag-login at pagpasok ng password.
2: checkbox na sumasang-ayon sa karagdagang pamamaraan sa onboarding.
2.1-2.3: Tingnan kung may presensya ng magulang, bersyon ng Chrome at tunog.
3: huling bloke.

Mukhang napaka natural: sa unang dalawang hakbang, ang karamihan sa mga bisita ay umalis, na napagtatanto na mayroong isang bagay na dapat punan, suriin, ngunit walang oras. Kung naabot ng kliyente ang ikatlong hakbang, halos tiyak na makakarating siya sa pangwakas. Walang iisang dahilan para maghinala ng anuman sa funnel.

Gayunpaman, nagpasya kaming suriin ang aming onboarding hindi sa isang klasikong one-dimensional na funnel, ngunit gamit ang isang Markov chain. Nag-on kami ng kaunti pang mga kaganapan, pinatakbo ang script at nakuha ito:

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Sa kaguluhang ito, isang bagay lang ang malinaw na mauunawaan: may nangyaring mali. Ang proseso ng onboarding ay linear, ito ay likas sa disenyo, dapat na walang ganoong web ng mga koneksyon dito. At narito agad na malinaw na ang gumagamit ay itinapon sa pagitan ng mga hakbang, sa pagitan ng kung saan ay dapat na walang mga transition sa lahat.

Paano namin ginagamit ang mga chain ng Markov sa pagsusuri ng mga solusyon at paghahanap ng mga bug. Gamit ang script ng Python

Maaaring may dalawang dahilan para sa kakaibang larawang ito:

  • shoals crept sa log database;
  • May mga pagkakamali sa mismong produkto - onboarding.

Ang unang dahilan ay malamang na totoo, ngunit ang pagsubok dito ay lubos na matrabaho, at ang pagwawasto sa mga log ay hindi makakatulong na mapabuti ang UX. Ngunit sa pangalawa, kung mayroon man, kailangang gawin nang madalian. Samakatuwid, nagpunta kami upang tingnan ang mga node, tukuyin ang mga gilid na hindi dapat umiral, at hanapin ang mga dahilan para sa kanilang paglitaw. Nakita namin na ang ilang mga gumagamit ay natigil at naglakad nang paikot, ang iba ay nahulog mula sa gitna hanggang sa simula, at ang iba, sa prinsipyo, ay hindi makalabas sa unang dalawang hakbang. Inilipat namin ang data sa QA - at oo, lumabas na may sapat na mga bug sa onboarding: ito ay isang by-product, medyo isang saklay, hindi ito nasubok nang malalim, dahil... Hindi namin inaasahan ang anumang problema. Ngayon ang buong proseso ng pag-record ay nagbago.

Ang kuwentong ito ay nagpakita sa amin ng isang hindi inaasahang aplikasyon ng mga chain ng Markov sa larangan ng QA.

Subukan ito sa iyong sarili!

pinost ko yung akin Python script para sa pagsasanay ng mga chain ng Markov sa pampublikong domain - gamitin ito para sa iyong kalusugan. Documentation sa GitHub, maaaring magtanong dito, susubukan kong sagutin ang lahat.

Well, kapaki-pakinabang na mga link: Library ng NetworkX, Graphviz visualizer. At dito mayroong isang artikulo sa HabrΓ© tungkol sa mga kadena ng Markov. Ang mga graph sa artikulo ay ginawa gamit ang Gephi.

Pinagmulan: www.habr.com

Magdagdag ng komento