Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Eğitim sırasında öğrencilerimizin başına neler geldiğini ve bu olayların sonucu nasıl etkilediğini anlamak bizim için önemli, bu nedenle müşteri deneyiminin bir haritası olan Müşteri Yolculuğu Haritası oluşturuyoruz. Sonuçta, öğrenme süreci sürekli ve bütünleyici bir şey değildir; öğrencinin birbirine bağlı olaylar ve eylemleri zinciridir ve bu eylemler farklı öğrenciler arasında büyük farklılıklar gösterebilir. Artık dersini tamamladı: Bundan sonra ne yapacak? Ev ödevine gidecek mi? Mobil uygulama başlatacak mı? Rotayı değiştirecek mi, öğretmenlerini değiştirmeyi mi isteyecek? Bir sonraki derse doğrudan mı geçeceksiniz? Yoksa hayal kırıklığıyla mı ayrılacak? Bu haritayı analiz ederek kursu başarıyla tamamlamaya veya tam tersine öğrencinin "okulu bırakmasına" yol açan kalıpları belirlemek mümkün müdür?

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Tipik olarak CJM'yi oluşturmak için özel, çok pahalı kapalı kaynak araçlar kullanılır. Ancak basit, minimum çaba gerektiren ve mümkünse açık kaynaklı bir şey bulmak istedik. Böylece Markov zincirlerini kullanma fikri ortaya çıktı ve biz de başardık. Bir harita oluşturduk, öğrenci davranışına ilişkin verileri bir grafik biçiminde yorumladık, küresel iş sorunlarına tamamen açık olmayan yanıtlar gördük ve hatta derinlemesine gizlenmiş hatalar bulduk. Tüm bunları açık kaynaklı Python komut dosyası çözümlerini kullanarak yaptık. Bu yazıda sonuçları pek belli olmayan iki vakadan bahsedeceğim ve senaryoyu herkesle paylaşacağım.

Yani Markov zincirleri olaylar arasındaki geçiş olasılığını gösterir. İşte Wikipedia'dan ilkel bir örnek:

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Burada “E” ve “A” olayları, oklar bunlar arasındaki geçişleri (bir olaydan aynıya geçiş dahil) ve okların ağırlıkları geçiş olasılığını göstermektedir (“ağırlıklı yönlendirilmiş grafik”).

Ne kullandın?

Devre, öğrenci etkinlik günlükleriyle beslenen standart Python işlevselliğiyle eğitildi. Ortaya çıkan matristeki grafik NetworkX kütüphanesi tarafından oluşturuldu.

Günlük şöyle görünür:

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Bu, üç sütundan oluşan bir tablo içeren bir csv dosyasıdır: öğrenci kimliği, olayın adı, gerçekleştiği zaman. Bu üç alan müşterinin hareketlerini takip etmek, bir harita oluşturmak ve sonuçta bir Markov zinciri elde etmek için yeterlidir.

Kütüphane, oluşturulan grafikleri .dot veya .gexf formatında döndürür. İlkini görselleştirmek için ücretsiz Graphviz paketini (gvedit aracı) kullanabilirsiniz, biz .gexf ve Gephi ile çalıştık, yine ücretsiz.

Daha sonra hedeflerimize, eğitim süreçlerimize ve Skyeng ekosistemine yeni bir bakış atmamızı sağlayan Markov zincirlerinin kullanımına ilişkin iki örnek vermek istiyorum. Peki, hataları düzeltin.

Birinci durum: mobil uygulama

Başlangıç ​​olarak, en popüler ürünümüz olan Genel kurs aracılığıyla öğrenci yolculuğunu araştırdık. O an Skyeng'in çocuk bölümünde çalışıyordum ve mobil uygulamanın çocuk izleyicilerimiz üzerinde ne kadar etkili çalıştığını görmek istedik.

Günlükleri alıp komut dosyasında çalıştırdığımda şunun gibi bir şey elde ettim:

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Başlangıç ​​düğümü Genel Başlat'tır ve altta üç çıkış düğümü vardır: öğrenci "uyuyakaldı", rotayı değiştirdi ve kursu tamamladı.

  • Uyuyakaldı, "Uyuyakaldı" - bu onun artık ders almadığı, büyük olasılıkla düştüğü anlamına gelir. Bu durumu iyimser bir şekilde "uykuda" olarak adlandırıyoruz çünkü... teoride hâlâ çalışmalarına devam etme fırsatı var. Bizim için en kötü sonuç.
  • Generali düşürdüm, rotayı değiştirdim; General'den başka bir şeye geçtim ve Markov zincirimizde kaybolduk.
  • Kursu bitirmiş, Kursu bitirmiş - ideal durum, kişi derslerin %80'ini tamamlamıştır (tüm dersler gerekli değildir).

Başarılı sınıf düğümüne girmek, platformumuzdaki dersi öğretmenle birlikte başarıyla tamamlamak anlamına gelir. Kurs boyunca ilerlemeyi ve istenen sonuca yaklaşımı kaydeder - "Kursu tamamladı." Öğrencilerin mümkün olduğunca katılımı bizim için önemlidir.

Mobil uygulama (uygulama oturumu düğümü) için daha doğru niceliksel sonuçlar elde etmek amacıyla, son düğümlerin her biri için ayrı zincirler oluşturduk ve ardından kenar ağırlıklarını ikili olarak karşılaştırdık:

  • uygulama oturumundan ona geri dönün;
  • uygulama oturumundan başarılı sınıfa;
  • Başarılı sınıftan uygulama oturumuna.

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile
Solda dersi tamamlayan öğrenciler, sağda “uyuya kalanlar”

Bu üç kenar, öğrencinin başarısı ile mobil uygulamayı kullanımı arasındaki ilişkiyi gösterir. Kursu tamamlayan öğrencilerin, uykuya dalan öğrencilere göre uygulamayla daha güçlü bir bağ kuracağını görmeyi bekliyorduk. Ancak gerçekte tam tersi sonuçlar elde ettik:

  • farklı kullanıcı gruplarının mobil uygulamayla farklı etkileşimde bulunmasını sağladık;
  • Başarılı öğrenciler mobil uygulamayı daha az yoğun olarak kullanıyor;
  • Uykuya dalan öğrenciler mobil uygulamayı daha aktif kullanıyor.

Bu da uykuya dalan öğrencilerin mobil uygulamada giderek daha fazla zaman geçirmeye başlaması ve sonuçta sonsuza kadar mobil uygulamada kalması anlamına geliyor.

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

İlk başta şaşırdık ama düşündükten sonra bunun tamamen doğal bir etki olduğunu anladık. Bir zamanlar iki aracı kullanarak kendi başıma Fransızca çalışıyordum: bir mobil uygulama ve YouTube'daki dil bilgisi dersleri. İlk başta zamanı 50'ye 50 oranında bölüştürdüm. Ama uygulama daha eğlenceli, oyunlaştırma var, her şey basit, hızlı ve anlaşılır ama derste bunu derinlemesine araştırmanız, bir şeyler yazmanız gerekiyor. , bir defterde pratik yapın. Yavaş yavaş, payı% 100'e çıkana kadar akıllı telefonumda daha fazla zaman geçirmeye başladım: eğer üzerinde üç saat geçirirseniz, sahte bir tamamlanmış iş hissi yaratırsınız, bu nedenle gidip hiçbir şey dinleme arzunuz olmaz. .

Ama bu nasıl olabilir? Sonuçta özel olarak bir mobil uygulama oluşturduk, Ebbinghaus eğrisinin içine yerleştirilmiş, oyunlaştırıldı, insanların vakit geçirmesi için çekici hale getirildi, ancak bunun yalnızca dikkatlerini dağıttığı mı ortaya çıktı? Aslında bunun nedeni mobil uygulama ekibinin görevlerini çok iyi halletmesi ve bunun sonucunda havalı, kendi kendine yeten bir ürün haline gelmesi ve ekosistemimizin dışına çıkmaya başlamasıdır.

Araştırma sonucunda mobil uygulamanın asıl dersten daha az dikkat dağıtacak şekilde değiştirilmesi gerektiği ortaya çıktı. Ve hem çocuklar hem de yetişkinler. Bu çalışma şu anda devam ediyor.

İkinci durum: katılım hataları

İlk katılım, yeni bir öğrenciyi kaydederken isteğe bağlı bir ek prosedürdür ve gelecekte olası teknik sorunları ortadan kaldırır. Temel senaryo, bir kişinin açılış sayfasına kaydolduğunu, kişisel hesabına erişim sağladığını, onunla iletişime geçildiğini ve bir giriş dersi verildiğini varsayar. Aynı zamanda, giriş dersi sırasında teknik zorlukların büyük bir yüzdesine dikkat çekiyoruz: tarayıcının yanlış sürümü, mikrofon veya ses çalışmıyor, öğretmen hemen bir çözüm öneremiyor ve tüm bunlar özellikle söz konusu olduğunda zor. çocuklara. Bu nedenle, kişisel hesabınızda dört basit adımı tamamlayabileceğiniz ek bir uygulama geliştirdik: tarayıcınızı, kameranızı, mikrofonunuzu kontrol edin ve giriş dersi sırasında ebeveynlerin yakında olacağını onaylayın (sonuçta, derslerin ücretini ödeyenler onlardır) çocuklarının eğitimi).

Bu birkaç katılım sayfasında şunun gibi bir dönüşüm hunisi görülüyordu:

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile
1: üç farklı (istemciye bağlı olarak) kullanıcı adı ve şifre giriş formuyla başlangıç ​​bloğu.
2: ek katılım prosedürünü kabul eden onay kutusu.
2.1-2.3: Ebeveyn varlığını, Chrome sürümünü ve sesi kontrol edin.
3: son blok.

Çok doğal görünüyor: İlk iki adımda ziyaretçilerin çoğu doldurulması, kontrol edilmesi gereken bir şey olduğunu fark ederek ayrılıyor, ancak zaman yok. Eğer müşteri üçüncü adıma ulaşmışsa, o zaman neredeyse kesin olarak finale ulaşacaktır. Hunideki herhangi bir şeyden şüphelenmek için tek bir neden yok.

Yine de, işe alım sürecimizi klasik tek boyutlu bir dönüşüm hunisi üzerinden değil, Markov zincirini kullanarak analiz etmeye karar verdik. Biraz daha etkinlik açtık, senaryoyu çalıştırdık ve şunu elde ettik:

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Bu kaosun içinde tek bir şey net olarak anlaşılıyor: Bir şeyler ters gitti. Katılım süreci doğrusaldır, bu tasarımın doğasında vardır, içinde böyle bir bağlantı ağı olmamalıdır. Ve burada kullanıcının, aralarında hiçbir geçiş olmaması gereken adımlar arasında atıldığı hemen anlaşılıyor.

Çözümleri değerlendirmede ve hataları bulmada Markov zincirlerini nasıl kullanıyoruz? Python betiği ile

Bu tuhaf tablonun iki nedeni olabilir:

  • sürüler günlük veritabanına sızdı;
  • Ürünün kendisinde hatalar var - katılım.

İlk neden büyük olasılıkla doğrudur, ancak bunu test etmek oldukça emek gerektirir ve günlükleri düzeltmek kullanıcı deneyimini iyileştirmeye yardımcı olmaz. Ama ikincisi varsa acilen bir şeyler yapılması gerekiyordu. Bu nedenle düğümlere bakmaya, olmaması gereken kenarları belirlemeye ve bunların oluşma nedenlerini aramaya gittik. Bazı kullanıcıların takılıp daireler çizerek yürüdüğünü, bazılarının ortasından başlangıca düştüğünü, bazılarının ise prensip olarak ilk iki adımdan çıkamadıklarını gördük. Verileri QA'ya aktardık - ve evet, işe alımda yeterince hata olduğu ortaya çıktı: bu öyle bir yan ürün, biraz koltuk değneği, yeterince derinlemesine test edilmedi, çünkü... Herhangi bir sorun beklemiyorduk. Artık tüm kayıt süreci değişti.

Bu hikaye bize Markov zincirlerinin QA alanında beklenmedik bir uygulamasını gösterdi.

Kendiniz deneyin!

benimkini yayınladım Markov zincirlerini eğitmek için Python betiği kamu malı - sağlığınız için kullanın. GitHub'daki dokümantasyon, sorular burada sorulabilir, her şeyi cevaplamaya çalışacağım.

Peki, faydalı bağlantılar: NetworkX kitaplığı, Graphviz görselleştiricisi. Ve burada Habré hakkında bir makale var Markov zincirleri hakkında. Makaledeki grafikler kullanılarak yapılmıştır. gefi.

Kaynak: habr.com

Yorum ekle