Skyeng
Alexey Korneev
4478

Бесплатный Python-скрипт, который поможет вам улучшить анализ воронок, CJM и даже поиск багов в продукте

В закладки

Обычно вы используете кучу дорогих тяжелых приложений с закрытым кодом, чтобы анализировать путь клиента и интерпретировать данные о его поведении. Наш коллега Марк Сысоев создал свой простой инструмент для тех же задач и выложил на Github в виде небольшого открытого проекта. Пользуйтесь и давайте фидбек! В статье вы найдете пару историй, которые доказали эффективность этого решения.

Сегодня Марк работает на Skyeng из Франции (но вы могли встретить его на Матемаркетинге), он тимлид команды аналитиков в проекте обучения детей математике и, кажется, это только начало славной карьеры. А еще недавно — этой весной, он был студентом Вышки и писал диплом "[Используем] Большие данные для анализа пути клиента в онлайн-образовании".

В процессе написания диплома родился и инструмент. Марк решил применить цепи Маркова (они показывают вероятность того или иного события на основе предыдущих действий пользователя), чтобы визуализировать поведение наших учеников и сделать выводы для нескольких рабочих задач.

Слайд из того самого диплома, объясняющий цепи Маркова “на пальцах”: зная, как действовал этот персонаж и его предшественники, мы можем предсказать, чем закончится история. Основано на реальном кейсе

Немного фантазии + «Витязь на распутье» (1882) (В.М. Васнецов, Русский музей)

Результат превзошел ожидания. Мы по-новому взглянули на учебные и рабочие процессы, а также саму экосистему Skyeng. С лета другие аналитики в компании тоже используют этот инструмент. А мы работаем над ошибками.

Кейс #1: продукты, призванные дополнять друг друга, на деле могут друг другу мешать

Учить английский на разных платформах “бесшовно” — классная идея.

Вот есть основной интерактивный учебник и видеосвязь с преподавателем в браузере, а вот приложения, где можно заниматься дополнительно хоть на бегу, хоть в дороге или в любом перерыве: подучить слова, что назначил педагог, сделать задания и так далее. Но подозрения, что так идеально не всегда и не у всех, нет-нет да возникали у части команды. И мы решили феерически расставить все точки над i.

С чего все началось. Мы решили посмотреть, насколько эффективно работает мобильное приложение с нашей детской аудиторией, и исследовал путь юных учеников по нашему самому популярному продукту — курсу английского под названием General.

​Для работы нам потребовались логи активности студентов (пример на картинке) и библиотека NetworkX — она будет строить графы

Имея id студента, набор ключевых событий (начал курс, прошел урок с преподавателем и сменил курс на другой), а также время, когда эти события произошли, мы можем достроить карту его активности и в итоге получить цепь Маркова — прогноз, что он сделает дальше: продолжит заниматься, сменит курс или вовсе “отвалится”.

Вот что получилось:

​Для такой визуализации можно пользоваться Graphviz (инструмент gvedit) и Gephi, это также бесплатные решения.

Как читать схему. Стартовав в узле Start General (слева сверху), ученик пользуется приложением (App session) и занимается с преподавателем на веб-платформе (Successful class). По итогам он попадает в одну из категорий снизу:

  • Fell asleep — больше не проходит занятия: мы оптимистично говорим “заснул”, хотя, скорее всего, он “отвалился”,
  • Dropped General — сменил курс,
  • Finished course — прошел 80% уроков (не все уроки обязательны) и закончил курс.

Ок, а что с приложением? Мы построили отдельные цепи для каждого из результатов (отвалился, закончил курс) и далее сравнивали, что было, если:

  • После сессии в приложении человек опять возвращался к нему,
  • Начинал с приложения, продолжал занятием,
  • После занятия шел в приложение.
Слева - студенты, завершившие курс, справа - “заснувшие”.​

Что мы ожидали увидеть: связь успеха студента с занятиями в приложении.

Что мы увидели: успешные ученики использовали приложение не так интенсивно, а вот те, кто отвалился, начинали проводить в нем все больше времени — и, в конце концов, “засыпали”.

​Приложение требовало свежей крови: слайд из дипломной работы Марка) Немного самодеятельности +  «Иван Грозный и сын его Иван 16 ноября 1581 года» (1883—1885) (И.Е. Репин, ГТГ)

Сперва мы удивились, но затем поняли логику. Приложение веселое, там геймификация, все просто, быстро и понятно — и если провисеть в нем достаточно долго, создастся ложное ощущение выполненной работы. Идти что-то слушать в браузере, включаться в работу с преподавателем, вникать нет никакого желания. А ведь основная наша метрика — прогресс студента. Надо исправлять...

Мы узнали страшное: команда мобильного приложения слишком хорошо справилась с задачей сделать приложение привлекательным — оно стало настолько самодостаточным, что начало вываливаться из нашей экосистемы. Сейчас работаем над тем, чтобы оно оттягивало меньше внимания: причем и у детей, и у взрослых.

Кейс #2: одномерная воронка ничего не предвещала, а затем мы подняли QA по тревоге — баг

Результаты прохождения через несколько страниц онбординга выглядели обычно:

​Данные в классической одномерной воронке — кажется, все идет, как и должно.

Онбординг — необязательная процедура при регистрации нового ученика. Мы проверяем, что у него современный браузер, правильно настроен микрофон и звук, а если это школьник — что родители будут с ним на вводном занятии. На первых двух шагах большая часть посетителей “сливается”, поняв, что надо что-то заполнять и проверять. А вот все, кто дошел до третьего шага, уже почти наверняка дойдет до финала.

Мы решили проверить наш онбординг на цепях Маркова. Включили чуть больше событий, запустили скрипт и получили вот такое:

​Однозначно понять в этом хаосе можно только одно: что-то пошло не так.

Онбординг — линейный процесс, в нем не должно быть паутины связей. А пользователя кидало между шагами, у которыми вообще не должно быть переходов. Некоторые пользователи зацикливались и ходили по кругу, другие — вываливались из середины в начало, третьи в принципе не могли выбраться из первых двух шагов.

​Слайд из все той же дипломной работы Немного самоиронии +  «Прогулка заключённых» (1890) (Винсент ван Гог, Пушкинский музей)

Причины обычно две:

  • косяки в базе логов;
  • косяки в самом продукте — онбординге.

Лечить надо обе, но с UX надо было срочно что-то делать.

Мы выяснили страшное: передали данные в QA — и выяснилось, что продукт простой, проблем никто не ждал и его не тестировали достаточно глубоко.

В результате, мы поменяли весь процесс записи.

А что найдете вы?

Python-скрипт для обучения цепей Маркова лежит в открытом доступе - пользуйтесь на здоровье, библиотека NetworkX и визуализатор Graphviz тоже доступны вам. Пробуйте, а если не хватит документации на GitHub, пишите, подскажем.

{ "author_name": "Alexey Korneev", "author_type": "self", "tags": ["2","1"], "comments": 3, "likes": 15, "favorites": 20, "is_advertisement": false, "subsite_label": "skyeng", "id": 92219, "is_wide": true, "is_ugc": true, "date": "Fri, 15 Nov 2019 13:17:02 +0300", "is_special": false }
0
{ "id": 92219, "author_id": 12744, "diff_limit": 1000, "urls": {"diff":"\/comments\/92219\/get","add":"\/comments\/92219\/add","edit":"\/comments\/edit","remove":"\/admin\/comments\/remove","pin":"\/admin\/comments\/pin","get4edit":"\/comments\/get4edit","complain":"\/comments\/complain","load_more":"\/comments\/loading\/92219"}, "attach_limit": 2, "max_comment_text_length": 5000, "subsite_id": 199517, "last_count_and_date": null }
3 комментария
Популярные
По порядку
1

На первый взгляд выглядит очень перспективно, главное в команде иметь людей, кто верно все сможет настроить и что еще важнее - правильно интерпретировать)

Ответить
0

Вот сейчас не понял. Скайенг еще и пайтону обучает?

Ответить
0

Математике и английскому) 

А в Python аналитики умеют по работе

Ответить
{ "page_type": "article" }

Прямой эфир

[ { "id": 1, "label": "100%×150_Branding_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox_method": "createAdaptive", "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfl" } } }, { "id": 2, "label": "1200х400", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfn" } } }, { "id": 3, "label": "240х200 _ТГБ_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fizc" } } }, { "id": 4, "label": "Article Branding", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cfovx", "p2": "glug" } } }, { "id": 5, "label": "300x500_desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "ezfk" } } }, { "id": 6, "label": "1180х250_Interpool_баннер над комментариями_Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "ffyh" } } }, { "id": 7, "label": "Article Footer 100%_desktop_mobile", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjxb" } } }, { "id": 8, "label": "Fullscreen Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjoh" } } }, { "id": 9, "label": "Fullscreen Mobile", "provider": "adfox", "adaptive": [ "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fjog" } } }, { "id": 10, "disable": true, "label": "Native Partner Desktop", "provider": "adfox", "adaptive": [ "desktop", "tablet" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyb" } } }, { "id": 11, "disable": true, "label": "Native Partner Mobile", "provider": "adfox", "adaptive": [ "phone" ], "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "clmf", "p2": "fmyc" } } }, { "id": 12, "label": "Кнопка в шапке", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "bscsh", "p2": "fdhx" } } }, { "id": 13, "label": "DM InPage Video PartnerCode", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox_method": "createAdaptive", "adfox": { "ownerId": 228129, "params": { "pp": "h", "ps": "bugf", "p2": "flvn" } } }, { "id": 14, "label": "Yandex context video banner", "provider": "yandex", "yandex": { "block_id": "VI-223676-0", "render_to": "inpage_VI-223676-0-1104503429", "adfox_url": "//ads.adfox.ru/228129/getCode?pp=h&ps=bugf&p2=fpjw&puid1=&puid2=&puid3=&puid4=&puid8=&puid9=&puid10=&puid21=&puid22=&puid31=&puid32=&puid33=&fmt=1&dl={REFERER}&pr=" } }, { "id": 15, "label": "Баннер в ленте на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byudx", "p2": "ftjf" } } }, { "id": 16, "label": "Кнопка в шапке мобайл", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "adfox": { "ownerId": 228129, "params": { "p1": "byzqf", "p2": "ftwx" } } }, { "id": 17, "label": "Stratum Desktop", "provider": "adfox", "adaptive": [ "desktop" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvb" } } }, { "id": 18, "label": "Stratum Mobile", "provider": "adfox", "adaptive": [ "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "pp": "g", "ps": "bugf", "p2": "fzvc" } } }, { "id": 19, "disable": true, "label": "Тизер на главной", "provider": "adfox", "adaptive": [ "desktop", "tablet", "phone" ], "auto_reload": true, "adfox": { "ownerId": 228129, "params": { "p1": "cbltd", "p2": "gazs" } } }, { "id": 20, "label": "Кнопка в сайдбаре", "provider": "adfox", "adaptive": [ "desktop" ], "adfox": { "ownerId": 228129, "params": { "p1": "cgxmr", "p2": "gnwc" } } } ] { "page_type": "default" }