Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Adalah penting bagi kami untuk memahami perkara yang berlaku kepada pelajar kami semasa latihan dan cara peristiwa ini mempengaruhi keputusan, jadi kami membina Peta Perjalanan Pelanggan - peta pengalaman pelanggan. Lagipun, proses pembelajaran bukanlah sesuatu yang berterusan dan integral, ia merupakan rantaian peristiwa dan tindakan pelajar yang saling berkaitan, dan tindakan ini boleh berbeza-beza di kalangan pelajar yang berbeza. Sekarang dia telah menyelesaikan pelajarannya: apa yang akan dia lakukan seterusnya? Adakah ia akan pergi ke kerja rumah? Adakah ia akan melancarkan aplikasi mudah alih? Adakah dia akan menukar kursus, meminta tukar guru? Adakah anda akan terus ke pelajaran seterusnya? Atau adakah dia akan pergi dengan kecewa? Adakah mungkin, dengan menganalisis peta ini, untuk mengenal pasti corak yang membawa kepada kejayaan menyelesaikan kursus atau, sebaliknya, kepada "keciciran" pelajar?

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Biasanya, alat sumber tertutup yang khusus dan sangat mahal digunakan untuk membina CJM. Tetapi kami ingin menghasilkan sesuatu yang mudah, memerlukan usaha yang minimum dan, jika boleh, sumber terbuka. Jadi tercetus idea untuk menggunakan rantai Markov - dan kami berjaya. Kami membina peta, mentafsir data tentang tingkah laku pelajar dalam bentuk graf, melihat jawapan yang tidak jelas sepenuhnya kepada isu perniagaan global, malah menemui pepijat yang tersembunyi secara mendalam. Kami melakukan semua ini menggunakan penyelesaian skrip Python sumber terbuka. Dalam artikel ini saya akan bercakap tentang dua kes dengan keputusan yang sangat tidak jelas itu dan berkongsi skrip dengan semua orang.

Jadi, rantai Markov menunjukkan kebarangkalian peralihan antara peristiwa. Berikut ialah contoh primitif dari Wikipedia:

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Di sini "E" dan "A" ialah peristiwa, anak panah ialah peralihan antara mereka (termasuk peralihan daripada peristiwa kepada peristiwa yang sama), dan berat anak panah ialah kebarangkalian peralihan ("graf berwajaran").

Apa yang anda gunakan?

Litar ini dilatih dengan kefungsian Python standard, yang disuap dengan log aktiviti pelajar. Graf pada matriks yang terhasil telah dibina oleh perpustakaan NetworkX.

Log kelihatan seperti ini:

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Ini ialah fail csv yang mengandungi jadual tiga lajur: id pelajar, nama acara, masa ia berlaku. Tiga medan ini cukup untuk mengesan pergerakan pelanggan, membina peta dan akhirnya mendapatkan rantai Markov.

Pustaka mengembalikan graf yang dibina dalam format .dot atau .gexf. Untuk menggambarkan yang pertama, anda boleh menggunakan pakej Graphviz percuma (alat gvedit), kami bekerja dengan .gexf dan Gephi, juga percuma.

Seterusnya saya ingin memberikan dua contoh penggunaan rantai Markov, yang membolehkan kami melihat semula matlamat kami, proses pendidikan dan ekosistem Skyeng itu sendiri. Baik, betulkan pepijat.

Kes pertama: aplikasi mudah alih

Sebagai permulaan, kami meneroka perjalanan pelajar melalui produk kami yang paling popularβ€”kursus Umum. Pada masa itu, saya bekerja di jabatan kanak-kanak Skyeng dan kami ingin melihat sejauh mana keberkesanan aplikasi mudah alih itu berfungsi dengan penonton anak-anak kami.

Mengambil log dan menjalankannya melalui skrip, saya mendapat sesuatu seperti ini:

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Nod permulaan ialah Mula Umum, dan di bahagian bawah terdapat tiga nod keluaran: pelajar "tertidur," menukar kursus dan menamatkan kursus.

  • Tertidur, "Tidur" - ini bermakna dia tidak lagi mengikuti kelas, kemungkinan besar dia terjatuh. Kami secara optimis memanggil keadaan ini "tidur", kerana... secara teorinya, dia masih berpeluang menyambung pelajaran. Keputusan yang paling teruk untuk kita.
  • Menggugurkan umum, Mengubah kursus - bertukar daripada Umum kepada sesuatu yang lain dan tersesat untuk rantai Markov kami.
  • Tamat kursus, Tamat kursus - keadaan ideal, orang itu telah menyelesaikan 80% pelajaran (tidak semua pelajaran diperlukan).

Masuk ke nod kelas yang berjaya bermakna berjaya menyelesaikan pelajaran di platform kami bersama-sama dengan guru. Ia merekodkan kemajuan sepanjang kursus dan pendekatan kepada hasil yang diingini - "Tamat kursus." Adalah penting bagi kami bahawa pelajar hadir sebanyak mungkin.

Untuk mendapatkan kesimpulan kuantitatif yang lebih tepat untuk aplikasi mudah alih (nod sesi apl), kami membina rantaian berasingan untuk setiap nod akhir dan kemudian membandingkan pemberat tepi secara berpasangan:

  • dari sesi apl kembali kepadanya;
  • daripada sesi aplikasi ke kelas yang berjaya;
  • daripada kelas yang berjaya ke sesi aplikasi.

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python
Di sebelah kiri adalah pelajar yang menamatkan kursus, di sebelah kanan adalah mereka yang "tertidur"

Ketiga-tiga kelebihan ini menunjukkan hubungan antara kejayaan pelajar dan penggunaan aplikasi mudah alih mereka. Kami menjangkakan untuk melihat bahawa pelajar yang menamatkan kursus akan mempunyai sambungan yang lebih kuat dengan aplikasi berbanding pelajar yang tertidur. Walau bagaimanapun, pada hakikatnya kami mendapat keputusan yang betul-betul bertentangan:

  • kami memastikan kumpulan pengguna yang berbeza berinteraksi dengan aplikasi mudah alih secara berbeza;
  • pelajar yang berjaya menggunakan aplikasi mudah alih dengan kurang intensif;
  • pelajar yang tertidur menggunakan aplikasi mudah alih dengan lebih aktif.

Ini bermakna pelajar yang tertidur mula menghabiskan lebih banyak masa dalam aplikasi mudah alih dan, pada akhirnya, kekal di dalamnya selama-lamanya.

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Pada mulanya kami terkejut, tetapi setelah memikirkannya, kami menyedari bahawa ini adalah kesan semula jadi. Pada satu masa, saya belajar bahasa Perancis sendiri menggunakan dua alatan: aplikasi mudah alih dan kuliah tatabahasa di YouTube. Pada mulanya, saya membahagikan masa antara mereka dalam nisbah 50 hingga 50. Tetapi aplikasinya lebih menyeronokkan, terdapat gamifikasi, semuanya mudah, cepat dan jelas, tetapi dalam kuliah anda perlu menyelidikinya, tulis sesuatu , berlatih dalam buku nota. Secara beransur-ansur, saya mula menghabiskan lebih banyak masa pada telefon pintar saya, sehingga bahagiannya meningkat kepada 100%: jika anda menghabiskan tiga jam padanya, anda mencipta perasaan palsu tentang kerja yang telah selesai, kerana itu anda tidak mempunyai keinginan untuk pergi dan mendengar apa-apa .

Tetapi bagaimana ini boleh berlaku? Lagipun, kami mencipta aplikasi mudah alih khas, dibina ke dalamnya lengkung Ebbinghaus, memperagakannya, menjadikannya menarik supaya orang ramai akan menghabiskan masa di dalamnya, tetapi ternyata ia hanya mengganggu mereka? Sebenarnya, sebabnya ialah pasukan aplikasi mudah alih mengatasi tugasnya dengan baik, akibatnya ia menjadi produk yang sejuk dan berdikari dan mula terkeluar daripada ekosistem kita.

Hasil daripada penyelidikan, ternyata bahawa aplikasi mudah alih perlu diubah entah bagaimana supaya ia kurang mengganggu daripada kursus utama pengajian. Dan kedua-dua kanak-kanak dan orang dewasa. Kerja ini sedang dijalankan.

Kes kedua: pepijat onboarding

Onboarding ialah prosedur tambahan pilihan semasa mendaftarkan pelajar baharu, menghapuskan potensi masalah teknikal pada masa hadapan. Senario asas menganggap bahawa seseorang telah mendaftar di halaman pendaratan, mendapat akses ke akaun peribadinya, dihubungi dan diberi pelajaran pengenalan. Pada masa yang sama, kami perhatikan peratusan besar kesukaran teknikal semasa pelajaran pengenalan: versi penyemak imbas yang salah, mikrofon atau bunyi tidak berfungsi, guru tidak boleh segera mencadangkan penyelesaian, dan semua ini amat sukar apabila ia datang. kepada kanak-kanak. Oleh itu, kami telah membangunkan aplikasi tambahan dalam akaun peribadi anda, di mana anda boleh melengkapkan empat langkah mudah: semak penyemak imbas, kamera, mikrofon anda dan sahkan bahawa ibu bapa akan berada berdekatan semasa pelajaran pengenalan (lagipun, mereka yang membayar untuk pendidikan anak-anak mereka).

Beberapa halaman onboarding ini menunjukkan corong seperti ini:

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python
1: blok permulaan dengan tiga borang log masuk dan kata laluan yang berbeza sedikit (bergantung kepada pelanggan).
2: kotak semak bersetuju dengan prosedur kemasukan tambahan.
2.1-2.3: Semak kehadiran ibu bapa, versi Chrome dan bunyi.
3: blok akhir.

Ia kelihatan sangat semula jadi: dalam dua langkah pertama, kebanyakan pelawat pergi, menyedari bahawa ada sesuatu yang perlu diisi, semak, tetapi tidak ada masa. Jika pelanggan telah mencapai langkah ketiga, maka dia hampir pasti akan ke final. Tidak ada satu pun sebab untuk mengesyaki apa-apa pada corong.

Namun begitu, kami memutuskan untuk menganalisis onboarding kami bukan pada corong satu dimensi klasik, tetapi menggunakan rantai Markov. Kami menghidupkan lebih sedikit acara, menjalankan skrip dan mendapat ini:

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Dalam kekacauan ini, hanya satu perkara yang boleh difahami dengan jelas: sesuatu telah berlaku. Proses onboarding adalah linear, ini adalah wujud dalam reka bentuk, tidak sepatutnya ada web sambungan sedemikian di dalamnya. Dan di sini segera jelas bahawa pengguna dilemparkan di antara langkah-langkah, di antaranya tidak sepatutnya ada peralihan sama sekali.

Cara kami menggunakan rantai Markov dalam menilai penyelesaian dan mencari pepijat. Dengan skrip Python

Mungkin terdapat dua sebab untuk gambar aneh ini:

  • beting menyelinap ke dalam pangkalan data log;
  • Terdapat kesilapan dalam produk itu sendiri - onboarding.

Sebab pertama kemungkinan besar benar, tetapi mengujinya agak intensif buruh, dan membetulkan log tidak akan membantu meningkatkan UX. Tetapi dengan yang kedua, jika ia wujud, sesuatu perlu dilakukan dengan segera. Oleh itu, kami pergi untuk melihat nod, mengenal pasti tepi yang tidak sepatutnya wujud, dan mencari sebab kejadiannya. Kami melihat bahawa sesetengah pengguna terperangkap dan berjalan dalam bulatan, yang lain jatuh dari tengah ke permulaan, dan yang lain, pada dasarnya, tidak dapat keluar dari dua langkah pertama. Kami memindahkan data ke QA - dan ya, ternyata terdapat cukup pepijat dalam onboarding: ini adalah produk sampingan, sedikit tongkat, ia tidak diuji dengan cukup mendalam, kerana... Kami tidak menjangkakan sebarang masalah. Kini keseluruhan proses rakaman telah berubah.

Kisah ini menunjukkan kepada kami aplikasi rantai Markov yang tidak dijangka dalam bidang QA.

Cuba sendiri!

Saya menyiarkan saya Skrip Python untuk melatih rantai Markov dalam domain awam - gunakannya untuk kesihatan anda. Dokumentasi di GitHub, soalan boleh ditanya di sini, saya akan cuba menjawab segala-galanya.

Nah, pautan berguna: Pustaka NetworkX, Visualizer graphviz. Dan di sini terdapat artikel mengenai HabrΓ© tentang rantai Markov. Graf dalam artikel dibuat menggunakan Gephi.

Sumber: www.habr.com

Tambah komen