Онбординг Telegram-бота и его A/B-тест
В пока еще «прошлом» 2019 году на хакатоне мы вместе с сокомандниками сделали телеграмм бота @pussybotsbot. В те времена бот работал следующим образом: просил селфи у пользователей и какое-нибудь предложение или фразу, а в ответ применял к отправленному селфи забавный фильтр (его подбор делался по отправленной фразе при помощи ML, всего фильтров было несколько сотен). После хакатона бот остался у меня, но денег на поддержку нейронки не было — ее пришлось отключить, а фильтры бот стал применять рандомно.
Чуть позже я добавил для пользователей возможность применять определенный фильтр по id, а также поделил все фильтры на разделы и добавил кнопку «настройки» для выбора нужного раздела. Своей аналитики не было, кроме сохранения id пользователей. В таком виде бот просуществовал полтора года.
Времени заниматься ботом не было до этой осени. Поэтому, когда в октябре я открыл статистику по пользователям, был приятно удивлен: активаций (количество пользователей с момента релиза) оказалось более 180 000. Мне сразу захотелось немного изменить логику работы бота, прикрутить аналитику действий пользователей, накопить данные, а затем попробовать улучшить некоторые из его метрик.
Эта статья о том, какую метрику телеграм бота я решил вырастить при помощи онбординга и как проводил A/B тест перед его запуском для всех новых пользователей.
Изменения в боте по сравнению со старой версией
Перед тем, как внедрять онбординг и проводить A/B-тест, я добавил некоторые функции в старую версию бота. Путь нового пользователя в актуальной версии бота без онбординга показан на скриншотах, а все изменения по сравнению со старой версией описаны в тексте ниже.
Появилась аналитика действий пользователей.
Это было первое, что я сделал. Не буду останавливаться на техническом описании своего решения — просто скажу, что в итоге аналитика собирается по всем событиям в боте, можно легко доставать из базы любые данные или визуализировать их в дашбордах.
Кнопка «избранное» для сохранения понравившихся фильтров.
Пользователям это дало возможность применять понравившийся фильтры без запоминания их id. Мне же появление этой функции дало возможность выявить наиболее популярные фильтры. При онбординге я использовал эти знания (об этом будет ниже).
Подписка на канал после трех обработок.
Если пользователь 3 раза получил результат обработки, бот требует от него подписаться на канал для продолжения работы. Пока требуется подписаться на канал, созданный для этого бота — в нем публикуются обновления бота (новые функции, добавление фильтров, информация о неисправностях). Возможно, в будущем таким способом получится продавать рекламу, но пока у меня нет никаких сведений относительно интереса со стороны рекламодателей к такого рода продвижению.
Насколько мне известно, самый популярный формат рекламы в ботах — это делать рассылки по всем пользователям бота, но это негативно воспринимается пользователями. Кстати, интересно узнать у владельцев ботов — как вы их монетизируете?
Описание онбординга
При проектировании онбординга, я старался добиться двух целей:
- с самого начала показать такую обработку, которая понравится пользователю и тем самым подтолкнуть его к продолжению работы с ботом;
- продемонстрировать работу основных управляющих элементов бота (кнопка «обновить» для применения нового фильтра и «настройки» для выбора группы фильтров).
Первый шаг при онбординге такой же, как и при обычной работе бота: пользователя просят прислать селфи. После этого бот присылает обработку и показывает лишь 1 кнопку «обновить», а не все элементы управления, доступные в обычном режиме. Кроме того, заранее устанавливается фильтр для первой обработки пользователя.
Я выбрал фильтр «омультяшивание», который придает фотографии эффект векторного рисунка, так как знал, что данный фильтр популярен среди пользователей и результат обработки скорее всего понравится новому пользователю. Расчет был на то, что применение популярных фильтров приведет больше новых пользователей к целевому действию — подписки на канал.
При нажатии «обновить», пользователь получает обработку уже другим фильтром и видит кнопку «настройки», которая отображает доступные для выбора категории фильтров. На этом шаге онбординга также используется популярный среди текущих пользователей фильтр. В дальнейшем я планирую устроить A/B-тесты по разным фильтрам в онбординге, но пока просто взял один из самых популярных, которые добавляют в «избранное».
После выбора категории, пользователь получает обработку случайным фильтром из выбранной категории, а онбординг на этом заканчивается и становится доступным обычное меню управления. На этом шаге бот ожидает от пользователя команды и при попытке получить следующую обработку попросит пользователя подписаться на канал: отправляет ссылку для перехода в канал и кнопку, которую требуется нажать после подписки. В дальнейшем при помощи telegram api бот проверяет подписку на канал при каждой обработке и выдает результат только тем, кто подписан.
Как проводил A/B-тест и какую метрику сделал ключевой
В A/B тесте принимали участия только новые пользователи бота, так как онбординг запускается лишь на старте. Группе A показывалась версия бота без онбординга, а группе B — версия с онбордингом. Пользователи разделялись по группам случайным образом (если telegram id нового пользователя был нечетный, он попадал в группу A, а если четный — в группу B).
Это стандартные правила проведения A/B теста. Перед началом, я определил этапы воронки, через которые проходят все новые пользователи бота. Всего получилось 5 этапов:
- Начало работы — стартовый этап, на котором бот просит у нового пользователя селфи.
- Получение результата — наступает в момент выдачи новому пользователю первого результата обработки.
- Получение ссылки — наступает, когда новый пользователь уже получил три обработки и бот выдал ему ссылку на канал с требованием подписаться.
- Переход по ссылке — фиксируется переход по отправленной ссылке. Пользователям давалась не прямая ссылка на телеграм канал, а ссылка на web страницу с редиректом в канал. Кстати, конверсия при переходе по прямой ссылке и по ссылке с редиректом отличаются, но так как редирект использовался для обеих версий, это не имеет значения.
- Подписка на канал — бот отслеживает подписку на канал при каждой обработке, а также по таймауту спустя некоторое время после получения ссылки (на случай, если кто-то из пользователей подписался, но не стал осуществлять обработку).
Далее начертил 2 таблицы. Первая понадобилась для записи количества пользователей в группе А и в группе B на каждом из этапах воронки. Вторая таблица — для подсчета относительных конверсий на каждом из этапов воронки, а также абсолютной конверсии в подписчика. Относительные конверсии в таблице это конверсии с C1 по C4, а абсолютная — C абс.
Ключевой метрикой выбрал относительную конверсию C2 «получение результата» — «получение ссылки». Дело в том, что до момента получения первого результата работа версии бота с онбордингом ничем не отличается от работы версии без онбординга, а сразу перед этапом «получение ссылки», версия с онбордингом начинает работать также, как и версия без онбординга. Таким образом, чем больше пользователей окажется на этапе «получение ссылки», тем лучше работет онбординг.
Значения остальных относительных конверсий я ожидал увидеть примерно одинаковые в обеих группах, за исключением конверсии в переход по ссылке. Я предполагал, что пользователи, прошедшие через онбординг, будут активнее кликать по ссылке, но в реальности это оказалось не так.
Результаты
A/B тестирование дает ответ на вопрос какой из двух вариантов обладает лучшей конверсией, но зачастую для получения статистически значимого результата, исключающего случайную ошибку, приходится ждать много времени.
До начала проектирования теста, я подсчитал необходимое количество пользователей и время ожидания в калькуляторе Эвана Миллера. У меня уже были накоплены данные по исследуемой конверсии: в своем прогнозе я предполагал, что она увеличится примерно на 15% при добавлении онбординга.
Калькулятор дал прогноз, что ожидать набора пользователей при таком прогнозе для статистически значимого результата придется около 4 дней — для меня это было приемлемо. В итоге изменение конверсии оказалось существеннее прогнозируемого и статистически значимый результат удалось получить менее чем за 2 дня.
Как видно из заполненных таблиц с результатом, все конверсии кроме ключевой C2 и C абс. оказались примерно одинаковыми. Разницу конверсий C2 в группах я выделил в таблице зеленым, так как статистическая значимость этого результата была подтверждена калькулятором Эвана Миллера. Конверсия C3 в обеих группах также оказалась примерно одинаковой — это значит, что те пользователи, которые дошли до этапа получения ссылки имели примерно равную мотивацию ее нажать в обеих группах.
При этом онбординг отлично справился со своей задачей и довел гораздо больше новых пользователей до этапа получения ссылки и требования подписаться на канал, чем версия без онбординга. Абсолютная конверсия изменилась примерно на тоже значение, что и C2 — это говорит о том, что отрицательного влияния онбординга на нее не было. После окончания теста онбординг был запущен для всех новых пользователей.
Полученный в калькуляторе результат дает понимание, что конверсия в группе B (с онбордингом) оказалась выше. Также в калькуляторе можно посмотреть доверительный интервал полученной конверсии. В моем случае этот интервал достаточно существенный, но пока я решил не тратить время на его сужение. Мне было достаточно простого сравнения двух версий.
Что важно помнить про онбординг и A/B-тесты
- Онбординг в телеграм ботах так же важен, как и в других продуктах.
- Чтобы сделать хороший онбординг, нужно знать предпочтения пользователей.
- При проведении A/B-тестов пользователи в двух группах должны совершать действия в один период времени, то есть нельзя сначало давать пользователям версию A, замерять результат, а затем давать версию B.
Если какие-то метрики на этапе тестирования противоречат здравому смыслу, нужно обязательно перепроверить все шаги на наличие программных ошибок.
- При проектировании A/B-теста удобно начинать с построения воронки, через которую проходят пользователи и только после этого выбирать ключевую для исследования метрику.
До начала тестирования стоит спрогнозировать вероятное время накопления данных, иначе вы рискуете потратить на тест больше времени, чем у вас есть.
- Для получения выводов по численным результатам A/B теста существуют готовые калькуляторы, но нужно уметь их верно интерпретировать.
Если вас интересуют продуктовые исследования и эксперименты, то загляните на мой телеграмм канал @petprojectblog — в нем я описываю реальные продуктовые кейсы, а для данной статьи там есть небольшой скринкаст. В комментариях под статьей хотел бы пообщаться с другими разработчиками ботов и продакт менеджерами. Мне особенно интересны аналитика и способы монетизации ботов.
Статья натолкнула на ряд мыслей - я почему-то мыслил достаточно ограниченно и не применял практику аб к ботострою) Спасибо за материал! Нужно попробовать прикрутить)
Кстати, сбор аналитики самописный или пользовались готово тулзой?
Привет! Использовал matomo - это опенсорс решение для web аналитики, но я его адаптировал к боту. Возможно напишу статью о том, как это было сделано. Если интересно - могу создать аккаунт в поднятой системе и помочь прикрутить твоего бота. Мне интересно посмотреть, насколько норм работает решение с разными ботами.