Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Është e rëndësishme për ne të kuptojmë se çfarë ndodh me studentët tanë gjatë trajnimit dhe se si këto ngjarje ndikojnë në rezultat, kështu që ne ndërtojmë një Hartë Udhëtimi me Klientin - një hartë e përvojës së klientit. Në fund të fundit, procesi i të mësuarit nuk është diçka e vazhdueshme dhe integrale, është një zinxhir ngjarjesh dhe veprimesh të ndërlidhura të nxënësit dhe këto veprime mund të ndryshojnë shumë midis nxënësve të ndryshëm. Tani ai ka përfunduar mësimin e tij: çfarë do të bëjë më pas? A do të shkojë në detyrat e shtëpisë? A do të nisë një aplikacion celular? A do të ndryshojë kurs, do të kërkojë të ndryshojë mësues? Do të shkoni direkt në mësimin tjetër? Apo do të largohet i zhgënjyer? A është e mundur, duke analizuar këtë hartë, të identifikohen modele që çojnë në përfundimin me sukses të kursit ose, anasjelltas, në “braktisjen” e studentit?

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Në mënyrë tipike, mjete të specializuara, shumë të shtrenjta me burim të mbyllur përdoren për të ndërtuar CJM. Por ne donim të gjenim diçka të thjeshtë, që kërkon përpjekje minimale dhe, nëse është e mundur, me burim të hapur. Kështu lindi ideja për të përdorur zinxhirët Markov - dhe ia dolëm. Ne ndërtuam një hartë, interpretuam të dhënat mbi sjelljen e studentëve në formën e një grafiku, pamë përgjigje krejtësisht jo të dukshme për çështjet globale të biznesit dhe madje gjetëm gabime thellësisht të fshehura. Ne i bëmë të gjitha këto duke përdorur zgjidhje të skripteve Python me burim të hapur. Në këtë artikull do të flas për dy raste me ato rezultate shumë jo të dukshme dhe do ta ndaj skenarin me të gjithë.

Pra, zinxhirët Markov tregojnë probabilitetin e tranzicionit midis ngjarjeve. Këtu është një shembull primitiv nga Wikipedia:

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Këtu "E" dhe "A" janë ngjarje, shigjetat janë kalime midis tyre (duke përfshirë kalimin nga një ngjarje në të njëjtën), dhe peshat e shigjetave janë probabiliteti i tranzicionit ("grafiku i drejtuar i ponderuar").

Çfarë keni përdorur?

Qarku u trajnua me funksionalitetin standard Python, i cili ushqehej me regjistrat e aktiviteteve të studentëve. Grafiku në matricën që rezulton është ndërtuar nga biblioteka NetworkX.

Regjistri duket si ky:

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Ky është një skedar csv që përmban një tabelë me tre kolona: ID-ja e studentit, emri i ngjarjes, koha kur ndodhi. Këto tre fusha janë të mjaftueshme për të gjurmuar lëvizjet e klientit, për të ndërtuar një hartë dhe në fund për të marrë një zinxhir Markov.

Biblioteka i kthen grafikët e ndërtuar në formatin .dot ose .gexf. Për të vizualizuar të parën, mund të përdorni paketën falas Graphviz (mjet gvedit), kemi punuar me .gexf dhe Gephi, gjithashtu falas.

Më pas do të doja të jap dy shembuj të përdorimit të zinxhirëve Markov, të cilat na lejuan të hedhim një vështrim të ri në qëllimet tona, proceset arsimore dhe vetë ekosistemin Skyeng. Epo, rregulloni gabimet.

Rasti i parë: aplikacioni celular

Për të filluar, ne eksploruam udhëtimin e studentëve përmes produktit tonë më të njohur - kursit të Përgjithshëm. Në atë moment, unë punoja në departamentin e fëmijëve të Skyeng dhe donim të shihnim se sa efektivisht funksiononte aplikacioni celular me audiencën e fëmijëve tanë.

Duke marrë regjistrat dhe duke i drejtuar ato nëpër skenar, mora diçka të tillë:

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Nyja fillestare është Start General, dhe në fund ka tre nyje dalëse: studenti "ra gjumi", ndryshoi kurs dhe mbaroi kursin.

  • Ra në gjumë, "Ra në gjumë" - kjo do të thotë se ai nuk po merr më klasa, ka shumë të ngjarë që ai ra. Ne e quajmë me optimizëm këtë gjendje “në gjumë”, sepse... teorikisht ai ka ende mundësi të vazhdojë studimet. Rezultati më i keq për ne.
  • Ra gjenerali, Ndryshoi kursin - kaloi nga Gjenerali në diçka tjetër dhe humbi për zinxhirin tonë Markov.
  • Kursi i përfunduar, Kursi i mbaruar - gjendje ideale, personi ka përfunduar 80% të mësimeve (jo të gjitha mësimet janë të nevojshme).

Hyrja në nyjen e klasës së suksesshme do të thotë të përfundoni me sukses mësimin në platformën tonë së bashku me mësuesin. Ai regjistron përparimin përgjatë kursit dhe qasjen ndaj rezultatit të dëshiruar - "Kursi përfundoi". Është e rëndësishme për ne që studentët të ndjekin sa më shumë që të jetë e mundur.

Për të marrë përfundime sasiore më të sakta për aplikacionin celular (nyja e sesionit të aplikacionit), ne ndërtuam zinxhirë të veçantë për secilën nga nyjet përfundimtare dhe më pas krahasuam peshat e skajeve në çift:

  • nga sesioni i aplikacionit përsëri në të;
  • nga sesioni i aplikacionit në klasën e suksesshme;
  • nga klasa e suksesshme në sesionin e aplikacionit.

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python
Në të majtë janë studentët që kanë përfunduar kursin, në të djathtë janë ata që "kanë zënë gjumi"

Këto tre skaje tregojnë lidhjen midis suksesit të një studenti dhe përdorimit të aplikacionit celular. Ne prisnim të shihnim që studentët që përfunduan kursin do të kishin një lidhje më të fortë me aplikacionin sesa studentët që ranë në gjumë. Megjithatë, në realitet kemi marrë saktësisht rezultatet e kundërta:

  • u siguruam që grupe të ndryshme përdoruesish të ndërveprojnë ndryshe me aplikacionin celular;
  • studentët e suksesshëm e përdorin aplikacionin celular më pak intensivisht;
  • studentët që bien në gjumë e përdorin më aktiv aplikacionin celular.

Kjo do të thotë që studentët që bien në gjumë fillojnë të kalojnë gjithnjë e më shumë kohë në aplikacionin celular dhe, në fund, mbeten në të përgjithmonë.

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Në fillim u habitëm, por pasi e menduam, kuptuam se ky ishte një efekt krejtësisht natyral. Në një kohë, unë studioja frëngjisht vetë duke përdorur dy mjete: një aplikacion celular dhe leksione gramatikore në YouTube. Në fillim e ndava kohën mes tyre në një raport 50 me 50. Por aplikacioni është më argëtues, ka gamification, gjithçka është e thjeshtë, e shpejtë dhe e qartë, por në leksion duhet të thellohesh në të, të shkruash diçka. , praktikoni në një fletore. Gradualisht, fillova të kaloj më shumë kohë në smartfonin tim, derisa pjesa e tij u rrit në 100%: nëse shpenzon tre orë në të, krijon një ndjenjë të rreme të punës së përfunduar, për shkak të së cilës nuk ke dëshirë të shkosh dhe të dëgjosh asgjë. .

Por si mund të jetë kjo? Në fund të fundit, ne krijuam posaçërisht një aplikacion celular, ndërtoi në të kurbën Ebbinghaus, e luajti, e bëri tërheqëse që njerëzit të kalonin kohë në të, por rezulton se vetëm i shpërqendron ata? Në fakt, arsyeja është se ekipi i aplikacionit celular i përballoi shumë mirë detyrat e tij, si rezultat i së cilës u bë një produkt i lezetshëm, i vetë-mjaftueshëm dhe filloi të binte jashtë ekosistemit tonë.

Si rezultat i hulumtimit, u bë e qartë se aplikacioni celular duhej të ndryshohej disi në mënyrë që të shpërqendrohej më pak nga kursi kryesor i studimit. Dhe si fëmijët ashtu edhe të rriturit. Kjo punë aktualisht është duke u zhvilluar.

Rasti i dytë: defekte në hyrje

Inboarding është një procedurë shtesë opsionale gjatë regjistrimit të një studenti të ri, duke eliminuar problemet e mundshme teknike në të ardhmen. Skenari bazë supozon që një person është regjistruar në faqen e uljes, ka fituar akses në llogarinë e tij personale, kontaktohet dhe jepet një mësim hyrës. Në të njëjtën kohë, vërejmë një përqindje të madhe të vështirësive teknike gjatë mësimit hyrës: versioni i gabuar i shfletuesit, mikrofoni ose zëri nuk funksionon, mësuesi nuk mund të sugjerojë menjëherë një zgjidhje dhe e gjithë kjo është veçanërisht e vështirë kur bëhet fjalë ndaj fëmijëve. Prandaj, ne kemi zhvilluar një aplikacion shtesë në llogarinë tuaj personale, ku mund të kryeni katër hapa të thjeshtë: kontrolloni shfletuesin, kamerën, mikrofonin dhe konfirmoni që prindërit do të jenë afër gjatë mësimit hyrës (në fund të fundit, ata janë ata që paguajnë për arsimimi i fëmijëve të tyre).

Këto pak faqe hyrëse treguan një gyp si ky:

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python
1: blloku fillestar me tre forma paksa të ndryshme (në varësi të klientit) të hyrjes dhe fjalëkalimit.
2: kutia e kontrollit duke rënë dakord me procedurën shtesë të hyrjes në bord.
2.1-2.3: Kontrolloni për praninë e prindit, versionin e Chrome dhe zërin.
3: blloku përfundimtar.

Duket shumë e natyrshme: në dy hapat e parë, shumica e vizitorëve largohen, duke kuptuar se ka diçka për të plotësuar, kontrolluar, por nuk ka kohë. Nëse klienti ka arritur në hapin e tretë, atëherë ai pothuajse me siguri do të arrijë në finale. Nuk ka asnjë arsye të vetme për të dyshuar për ndonjë gjë në hinkë.

Sidoqoftë, ne vendosëm të analizonim hyrjen tonë jo duke përdorur një gyp klasik njëdimensional, por duke përdorur një zinxhir Markov. Ne aktivizuam pak më shumë ngjarje, ekzekutuam skenarin dhe morëm këtë:

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Në këtë kaos, vetëm një gjë mund të kuptohet qartë: diçka shkoi keq. Procesi i hyrjes është linear, kjo është e natyrshme në dizajn, nuk duhet të ketë një rrjet të tillë lidhjesh në të. Dhe këtu është menjëherë e qartë se përdoruesi është hedhur midis hapave, midis të cilëve nuk duhet të ketë fare kalime.

Si i përdorim zinxhirët Markov në vlerësimin e zgjidhjeve dhe gjetjen e gabimeve. Me një skript Python

Mund të ketë dy arsye për këtë pamje të çuditshme:

  • tufat u futën në bazën e të dhënave të regjistrave;
  • Ka gabime në vetë produktin - futja në bord.

Arsyeja e parë ka shumë të ngjarë të jetë e vërtetë, por testimi i tij kërkon mjaft punë intensive dhe korrigjimi i regjistrave nuk do të ndihmojë në përmirësimin e UX. Por me të dytin, nëse ekziston, duhej bërë diçka urgjentisht. Prandaj, ne shkuam të shikojmë nyjet, të identifikojmë skajet që nuk duhet të ekzistojnë dhe të kërkojmë arsyet e shfaqjes së tyre. Ne pamë që disa përdorues u mbërthyen dhe ecën në rrathë, të tjerë ranë nga mesi në fillim, dhe të tjerët, në parim, nuk mund të dilnin nga dy hapat e parë. Ne i transferuam të dhënat në QA - dhe po, doli që kishte mjaft defekte në hyrje: ky është një nënprodukt i tillë, pak paterica, nuk u testua aq thellë, sepse... Nuk prisnim asnjë problem. Tani i gjithë procesi i regjistrimit ka ndryshuar.

Kjo histori na tregoi një aplikim të papritur të zinxhirëve Markov në fushën e QA.

Provojeni vetë!

Unë postova timen Skript Python për trajnimin e zinxhirëve Markov në domenin publik - përdorni atë për shëndetin tuaj. Dokumentacioni në GitHub, pyetjet mund të bëhen këtu, do të përpiqem t'i përgjigjem gjithçkaje.

Epo, lidhje të dobishme: Biblioteka NetworkX, Vizualizues Graphviz. Dhe këtu ka një artikull për Habré rreth zinxhirëve Markov. Grafikët në artikull janë bërë duke përdorur Gefi.

Burimi: www.habr.com

Shto një koment