Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

Gravas por ni kompreni, kio okazas al niaj studentoj dum trejnado kaj kiel ĉi tiuj eventoj influas la rezulton, do ni konstruas Klienta Vojaĝan Mapon - mapo de klienta sperto. Post ĉio, la lernado ne estas io kontinua kaj integra, ĝi estas ĉeno de interligitaj eventoj kaj agoj de la studento, kaj ĉi tiuj agoj povas multe varii inter malsamaj studentoj. Nun li finis sian lecionon: kion li faros poste? Ĉu ĝi iros al hejmtasko? Ĉu ĝi lanĉos poŝtelefonan aplikaĵon? Ĉu li ŝanĝos kurson, petos ŝanĝi instruistojn? Ĉu vi iros rekte al la sekva leciono? Aŭ ĉu li simple foriros seniluziigita? Ĉu eblas, analizante ĉi tiun mapon, identigi ŝablonojn, kiuj kondukas al la sukcesa fino de la kurso aŭ, male, al la "forlaso" de la studento?

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

Tipe, specialecaj, tre multekostaj fermitfontaj iloj estas uzataj por konstrui CJM. Sed ni volis elpensi ion simplan, postulantan minimuman penon kaj, se eble, malferman fonton. Do aperis la ideo uzi Markov-ĉenojn - kaj ni sukcesis. Ni konstruis mapon, interpretis datumojn pri studenta konduto en formo de grafeo, vidis tute neevidentajn respondojn al tutmondaj komercaj problemoj, kaj eĉ trovis profunde kaŝitajn cimojn. Ni faris ĉion ĉi uzante malfermfontajn Python-skriptosolvojn. En ĉi tiu artikolo mi parolos pri du kazoj kun tiuj tre neevidentaj rezultoj kaj dividos la skripton kun ĉiuj.

Do, Markov-ĉenoj montras la probablecon de transiroj inter eventoj. Jen primitiva ekzemplo el Vikipedio:

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

Ĉi tie "E" kaj "A" estas eventoj, la sagoj estas transiroj inter ili (inkluzive de la transiro de evento al la sama), kaj la pezoj de la sagoj estas la probablo de transiro ("peza direktita grafeo").

Kion vi uzis?

La cirkvito estis trejnita kun norma Python-funkcieco, kiu estis provizita per studentaj agadprotokoloj. La grafeo sur la rezulta matrico estis konstruita de la biblioteko NetworkX.

La protokolo aspektas jene:

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

Ĉi tio estas csv-dosiero enhavanta tabelon de tri kolumnoj: studenta id, nomo de la evento, tempo kiam ĝi okazis. Ĉi tiuj tri kampoj sufiĉas por spuri la movojn de la kliento, konstrui mapon kaj finfine akiri Markov-ĉenon.

La biblioteko resendas la konstruitajn grafikaĵojn en .dot aŭ .gexf formato. Por bildigi la unuan, vi povas uzi la senpagan Graphviz-pakaĵon (gvedit-ilo), ni laboris kun .gexf kaj Gephi, ankaŭ senpage.

Poste mi ŝatus doni du ekzemplojn pri uzado de Markov-ĉenoj, kiuj permesis al ni rigardi novajn celojn, edukajn procezojn kaj la ekosistemon Skyeng mem. Nu, riparu la cimojn.

Unua kazo: poŝtelefona aplikaĵo

Komence, ni esploris la studentan vojaĝon tra nia plej populara produkto—la Ĝenerala kurso. En tiu momento, mi laboris en la infana fako de Skyeng kaj ni volis vidi kiel efike la poŝtelefona aplikaĵo funkciis kun nia infana publiko.

Prenante la protokolojn kaj kurante ilin tra la skripto, mi ricevis ion tian:

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

La komenca nodo estas Komenco Ĝenerala, kaj malsupre estas tri elignodoj: la studento "endormiĝis", ŝanĝis kurson kaj finis la kurson.

  • Endormiĝis, "Endormiĝis" - tio signifas, ke li ne plu prenas klasojn, plej verŝajne li defalis. Ni optimisme nomas ĉi tiun staton "dorma", ĉar... teorie, li ankoraŭ havas la ŝancon daŭrigi siajn studojn. Plej malbona rezulto por ni.
  • Forigita generalo, Ŝanĝita kurso - ŝanĝis de Generalo al io alia kaj perdiĝis por nia Markov-ĉeno.
  • Finita kurso, Finita la kurso - ideala kondiĉo, la persono kompletigis 80% de la lecionoj (ne ĉiuj lecionoj estas bezonataj).

Eniri la sukcesan klasnodon signifas sukcese kompletigi la lecionon sur nia platformo kune kun la instruisto. Ĝi registras progreson laŭlonge de la kurso kaj alproksimiĝon al la dezirata rezulto - "Finigis la kurson." Gravas por ni, ke studentoj ĉeestu kiel eble plej multe.

Por akiri pli precizajn kvantajn konkludojn por la poŝtelefona aplikaĵo (aplika sesionodo), ni konstruis apartajn ĉenojn por ĉiu el la finaj nodoj kaj poste komparis la randpezojn duope:

  • de la aplika sesio reen al ĝi;
  • de app-sesio al sukcesa klaso;
  • de sukcesa klaso ĝis aplika sesio.

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto
Maldekstre estas studentoj kiuj kompletigis la kurson, dekstre estas tiuj kiuj "endormiĝis"

Ĉi tiuj tri randoj montras la rilaton inter la sukceso de studento kaj ilia uzo de la poŝtelefona aplikaĵo. Ni atendis vidi, ke studentoj, kiuj kompletigis la kurson, havos pli fortan rilaton al la aplikaĵo ol studentoj, kiuj endormiĝis. Tamen, fakte ni ricevis ĝuste la kontraŭajn rezultojn:

  • ni certigis, ke malsamaj grupoj de uzantoj interagas kun la poŝtelefona aplikaĵo malsame;
  • sukcesaj studentoj uzas la moveblan aplikaĵon malpli intense;
  • studentoj, kiuj endormiĝas, uzas la poŝtelefonan aplikaĵon pli aktive.

Ĉi tio signifas, ke studentoj, kiuj endormiĝas, komencas pasigi pli kaj pli da tempo en la poŝtelefona aplikaĵo kaj, finfine, restas en ĝi por ĉiam.

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

Komence ni surpriziĝis, sed pensinte pri tio, ni konstatis, ke tio estas tute natura efiko. Iam mi mem studis la francan per du iloj: poŝtelefona aplikaĵo kaj gramatikaj prelegoj en Jutubo. Komence, mi dividis la tempon inter ili en proporcio de 50 al 50. Sed la aplikaĵo estas pli amuza, estas ludado, ĉio estas simpla, rapida kaj klara, sed en la prelego oni devas enprofundiĝi en ĝi, noti ion. , ekzercu en kajero. Iom post iom, mi komencis pasigi pli da tempo sur mia inteligenta telefono, ĝis ĝia parto kreskis al 100%: se vi pasigas tri horojn sur ĝi, vi kreas falsan senton de finita laboro, pro kiu vi ne emas iri aŭskulti ion ajn. .

Sed kiel tio povas esti? Post ĉio, ni speciale kreis moveblan aplikaĵon, konstruis en ĝi la Ebbinghaus-kurbon, ludigis ĝin, igis ĝin alloga por ke homoj pasigu tempon en ĝi, sed montriĝas, ke ĝi nur distras ilin? Fakte, la kialo estas, ke la teamo de la poŝtelefona aplikaĵo tro bone traktis siajn taskojn, sekve de tio ĝi fariĝis bonega, memsufiĉa produkto kaj komencis elfali el nia ekosistemo.

Rezulte de la esploro, evidentiĝis, ke la poŝtelefona aplikaĵo necesas iel ŝanĝiĝi, por ke ĝi malpli distras de la ĉefa kurso de studo. Kaj kaj infanoj kaj plenkreskuloj. Tiu ĉi laboro estas nuntempe daŭranta.

Dua kazo: enigaj cimoj

Enŝipiĝo estas laŭvola kroma proceduro dum registrado de nova studento, forigante eblajn teknikajn problemojn en la estonteco. La baza scenaro supozas, ke persono registris sur la landpaĝo, akiris aliron al sia persona konto, estas kontaktita kaj donita enkondukan lecionon. Samtempe, ni rimarkas grandan procenton de teknikaj malfacilaĵoj dum la enkonduka leciono: la malĝusta versio de la retumilo, la mikrofono aŭ sono ne funkcias, la instruisto ne povas tuj proponi solvon, kaj ĉio ĉi estas speciale malfacila kiam temas. al infanoj. Tial ni evoluigis aldonan aplikaĵon en via persona konto, kie vi povas plenumi kvar simplajn paŝojn: kontroli vian retumilon, fotilon, mikrofonon kaj konfirmi, ke gepatroj estos proksime dum la enkonduka leciono (finfine, ili estas tiuj, kiuj pagas por edukado de siaj infanoj).

Ĉi tiuj malmultaj eniĝaj paĝoj montris funelon kiel ĉi tion:

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto
1: startbloko kun tri iomete malsamaj (depende de la kliento) ensalutaj kaj pasvortformularoj.
2: markobutono konsentante la aldonan enŝipigan proceduron.
2.1-2.3: Kontrolu gepatra ĉeesto, Chrome-versio kaj sono.
3: fina bloko.

Ĝi aspektas tre nature: en la unuaj du paŝoj, la plej multaj el la vizitantoj foriras, rimarkante, ke estas io por plenigi, kontroli, sed ne estas tempo. Se la kliento atingis la trian paŝon, tiam li preskaŭ certe atingos la finalon. Ne estas unu kialo por suspekti ion ajn sur la funelo.

Tamen ni decidis analizi nian enŝipiĝon ne sur klasika unudimensia funelo, sed uzante Markov-ĉenon. Ni ŝaltis iom pli da eventoj, prizorgis la skripton kaj ricevis ĉi tion:

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

En ĉi tiu kaoso, nur unu afero povas esti klare komprenita: io misfunkciis. La enŝipiĝa procezo estas lineara, ĉi tio estas eneca en la dezajno, ne devus ekzisti tia reto de ligoj en ĝi. Kaj ĉi tie tuj evidentiĝas, ke la uzanto estas ĵetita inter ŝtupoj, inter kiuj tute ne devus esti transiroj.

Kiel ni uzas Markov-ĉenojn por taksi solvojn kaj trovi cimojn. Kun Python-skripto

Povas esti du kialoj por ĉi tiu stranga bildo:

  • svarmoj ŝteliris en la ŝtipan datumbazon;
  • Estas eraroj en la produkto mem - enŝipiĝo.

La unua kialo estas plej verŝajne vera, sed provi ĝin estas sufiĉe laborforta, kaj korekti la protokolojn ne helpos plibonigi la UX. Sed kun la dua, se ĝi ekzistas, oni devis fari ion urĝe. Tial ni iris rigardi la nodojn, identigi randojn, kiuj ne devus ekzisti, kaj serĉi la kialojn de ilia apero. Ni vidis, ke iuj uzantoj blokiĝis kaj marŝis ronde, aliaj falis el la mezo al la komenco, kaj aliaj, principe, ne povis eliri el la unuaj du paŝoj. Ni transdonis la datumojn al QA - kaj jes, montriĝis, ke estis sufiĉe da eraroj en enŝipiĝo: ĉi tio estas tia kromprodukto, iom lambastono, ĝi ne estis sufiĉe profunde provita, ĉar... Ni ne atendis problemojn. Nun la tuta registra procezo ŝanĝiĝis.

Ĉi tiu rakonto montris al ni neatenditan aplikon de Markov-ĉenoj en la kampo de QA.

Provu ĝin mem!

Mi afiŝis la mian Python-skripto por trejnado de Markov-ĉenoj en la publika domeno - uzu ĝin por via sano. Dokumentado en GitHub, demandoj povas esti faritaj ĉi tie, mi provos respondi ĉion.

Nu, utilaj ligiloj: Biblioteko NetworkX, Vidilo Graphviz. Kaj ĉi tie estas artikolo pri Habré pri Markov-ĉenoj. La grafikaĵoj en la artikolo estas faritaj uzante Gephi.

fonto: www.habr.com

Aldoni komenton