vM_zFrmp1JI

Курс “Data Driven Growth Hacking”. Часть 1.

21 и 27 сентября 2019 проходил воркшоп Data Driven Growth Hacking от команды Retentioneering. Retentioneering – это бесплатный фреймворк на Python, с помощью которого можно анализировать траектории пути пользователей и находить важные инсайты для улучшения продукта. (Ребята недавно выпустили новую версию, лучше почитать о релизе тут).

vM_zFrmp1JI

Про Retentioneering я знала давно из докладов  Байрама Аннакова из App in the Air и Едадила,  но было совершенно непонятно с какой стороны подойти к фреймворку и начать применять его на практике. Воркшоп с этой задачей справился на 200%.

В первый день курса Макс Годзи рассказал нам очень увлекательную историю возникновения Retentioneering. Ребята выходцы из научной сферы с очень сильным математическим бэкграундом и подобного рода переходы и “кросс-опыление” очень интересны.

Retentioneering – это библиотека на Python, которая позволяет не только строить траектории пользователей из размеченных вами событий (GA 360, ЯМетрика, Firebase), но и извлекать из этих траекторий инсайты. На вход фреймворка подается табличка из трех переменных: название события, дата события, user_id. Пример:

Screenshot at Oct 12 15-04-01

Событием может быть просмотр определенной страницы, онбординг, авторизация, скролл, клик на кнопку, задержки между действиями на сайте, заполнение формы, добавления в корзину, просмотр блога, подписка на новости и пр. Необходимо отметить, что ивентом могут быть и действия пользователя в оффлайне (звонок, приезд в офис, просмотр квартиры, запись к врачу, покупка в рознице и пр).

Чтобы не запутаться в передаваемых данных нужно ввести правильную разметку событий. Завести себе табличку (я последнее время предпочитаю AirTable) и в ней расписать структуру ваших событий (Механика_Событие) и то как вы их будете кодировать, чтобы не запутаться дальше при анализе траекторий. Например, в кейсе приложения Netprint было выделено 15 основных механик и 120 событий.

Кстати, даже этот первый этап с разметкой и систематизацией ивентов и дальнейшим выводом их на дашборд в DataStudio уже полезен, тк позволяет видеть какие-то выбросы или скачки в данных и оперативно на них реагировать. У меня это выглядит как-то так (тут в качестве ивентов просмотры важных страниц):

Screenshot at Oct 12 14-00-09

В чем история с траекториями пользователей и зачем их нужно изучать? Чтобы найти паттерны в поведении успешных пользователей и провести по этой траектории как можно больше остальных. Скорректировать свой онбоардинг (в блоге AppCues очень много полезного на эту тему), сообщения в пушах, рассылках и пр.

Вы можете сказать – вот у меня есть Вебвизор, я отсмотрю на нем N-человек и все пойму.

«Нельзя делать выводы о поведении БОЛЬШИНСТВА львов, просто сходив в зоопарк, потому что БОЛЬШИНСТВО львов не живут в зоопарках.»

Ок, если у вас лендинг и 100 человек в день на нем, а если трафик 100.000 уников и сайт – это портал с очень сложным функционалом как в самом каталоге, так и в личном кабинете, то упражнение с Вебвизором вряд ли даст вам какие-то достоверные знания обо всех 100.000 траекториях в сутки и главное о том почему какие-то сегменты пользователей проходят весь путь по воронке и совершают нужное вам действие (или действия), а какие-то нет.

На графе, который строится с помощью библиотеки Retentioneering, видно в каких узлах мы теряем пользователей (техническая проблема на сайте или функция слишком сложная для пользователя и пр), в каких узлах они зацикливаются в петли (при этом есть прямая взаимосвязь – чем больше циклов, тем меньше возврат), в каких зависают на долгое время (тк не понимают ваш интерфейс) и потом отваливаются. (Кстати, если на графе видно, что какие-то фичи невостребованы, их проще убить, чем поддерживать).

Screenshot at Oct 12 14-33-42

 

Мне интуитивно никогда не нравился паттерн воронок, тк как раз на Вебвизоре ты всегда видишь, что по факту никакой воронки нет –  это долгое блуждание по сайту, уход с него, возврат, попадание в корзину, уход из нее, снова возврат и тд и тп. Воронка же сильно упрощает и искажает картину реального мира. К тому же не секрет, что воронки в Google Analytics считаются неверно (см доклад Красинского на эту тему). При этом 99% рынка продолжают принимать решения исходя из воронок, упуская системные проблемы в своем продукте.

В первый день очень помог в понимании того как работать с библиотекой подробный кейс NetPrint (Общий оборот приложения за месяц после внесения изменений по гипотезам вырос более чем в 1,5 раза). Было рассказано про баги и проблемы которые могут всплыть при анализе (неверный сбор данных, неправильно настроенный АБ тест и пр).

Между занятиями на неделе было дано домашнее задание для того, чтобы освежить знания Pandas, ООП, а также познакомиться с библиотекой NetworkX. Например, у меня получились такие волшебные картинки (это сгенерированный случайным образом граф):

Screenshot at Oct 12 15-11-24

Второй день курса был полностью посвящен практической работе с фреймворком на тестовых данных или на своих. Расскажу о полезных новых фишках, которые узнала. Сначала о том, что такое степ-матрицы. Строки в степ-матрице – это наши события. Столбцы – это номер шага в пользовательской траектории. На пересечении доли пользователей. Например шаг 1 – человек зашел на сайт. Шаг 2 – перешел из меню в каталог. Шаг 3 – воспользовался поиском. Пример степ-матрицы (картинка кликабельна):

Screenshot at Oct 12 14-18-19

На 24 шаге мы видим, что 40% пользователей ушли из приложения, 60% прошли игру. Теперь мы можем построить разностную матрицу по тем кто ушел и кто выполнил нужное нам действие и посмотреть какие события (экраны приложения или функционал) положительно влияют на то, чтобы человек остался. “Такая разность, позволяет заметить характерные отличия в поведении между двумя группами”.

При этом не нужно изобретать велосипед – все функции для построения степ-матриц, графов, кластеризации в библиотеке уже реализованы. И иногда это две строчки кода в прямом смысле:

# create group filter based on target events
diff_filter = data.retention.create_filter()

# calculate difference table between two groups
diff_table = data.retention.get_step_matrix_difference(diff_filter, max_steps=30) 

Мы можем кластеризовать пользователей (в библиотеке реализованы методы кластеризации TSNE, DBSCAN, GMM) и изучать уже отдельные кластеры и траектории в них.

Screenshot at Oct 12 14-28-25

 

Что самое важное, что мы можем на наших данных (как обычно разбив на train и test) обучить модельку (логистическая регрессия, RandomForest, CatBoost и пр), которая будет по начальным шагам пользователя в приложении или на сайте, предсказывать отвалится ли этот пользователь или останется с нами.

Зачем это нужно? Чтобы в риалтайм показать ему сообщение и вернуть на нужный нам “конвертящий” путь, особенно если человек пришел с платного канала. В этом случае наш интерфейс по факту становится динамическим и меняется, подстраиваясь под пользователя и его траекторию.

На сегодня все. В продолжении будет рассказ о том как получить данные по событиям из Logs API ЯМетрики и какие-то инсайты, которые я надеюсь обнаружить уже на своих данных.

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>