Михаил Кечинов
Центр управления конверсией REES46, CEO
По логике, любой интернет-магазин должен использовать те сервисы автоматизации и персонализации маркетинга, которые приносят ему дополнительные деньги. И не использовать те сервисы, которые не приносят деньги или, что еще хуже, генерируют убытки. Это логично, но, к сожалению, в жизни все не так.
Маркетологи интернет-магазинов принимают решение по принципу «Этот сервис с крупными клиентами работает, а там не дураки, свое дело знают, так что и мне подойдет». А те, которые крупные, в свою очередь делали точно так же.
Хотя, казалось бы, проведи A/B-тест, пойми, сколько тебе этот сервис приносит, и тогда решай, нужен он тебе или нет.
Я недавно с некоторым недоумением узнал, что A/B-тесты сторонних сервисов не практикуются почти совсем. Потому что игроки рынка рассказывают, что проведение теста — это очень дорого. Конкретизируя в цифрах, провести A/B-тест двух сервисов товарных рекомендаций стоит от 300 000 рублей. Трижды пересчитав нули, я спросил: откуда дровишки?
Мне ответили (цитата):
- Необходимо настроить серверное разделение трафика и передать нужные dimensions в Google Analytics через Measurement Protocol.
- Учитывая то, что экспериментальные сессии должны делиться/считаться начиная с первой страницы даже для новых пользователей — придется отказаться от стандартного Google cid (который генерится на клиенте) и использовать свой собственный идентификатор клиента.
- Необходимо настроить трекинг статуса заказов в Google Analytics через Measurement Protocol (полную синхронизацию с CRM/ERP).
- По прошествии предполагаемого периода теста необходимо выгрузить информацию обо всех заказах и сессиях из Google Analytics при помощи API.
- Необходимо соединить полученные данные с маржинальностью каждого заказа, чтобы посчитать EBITDA от каждого заказа.
- Нужно загрузить все полученные цифры по EBITDA в R/Python/Excel и оценить распределение выборки.
- Также надо отсечь все аномалии (95/99-percentile) и рассчитать среднеквадратическое отклонение.
- И еще рассчитать доверительные интервалы и статистическую значимость для полученной выборки.
- Продолжить тест, если доверительные интервалы слишком большие и не достигнута значимость.
Уже это обойдется больше 300К рублей, при условии, что вы найдете специалиста, который это осилит, и магазин, который будет реализовывать.
Учитывая то, что 90% магазинов даже транзакции не умеют собирать Server-to-Server — о каком тесте на прибыль вообще идет речь?
Моя реакция:
Если бы я был маркетологом без опыта программирования, чтобы я увидел бы из этого текста? Я бы увидел слова «серверное разделение», «measurement protocol», «percentile», «доверительные интервалы» и подумал: «Жесть какая, слишком сложно и требует времени на то, чтобы разобраться, займет у нас полгода, нереально».
К сожалению, я полжизни занимаюсь программированием, и половину от этой половины — управлением программистами. Я знаю, что говорят программисты менеджерам, когда не хотят делать какую-то задачу: они говорят, что это невообразимо сложно и используют для этого множество технических слов, типа «legacy», «рефакторить надо», «архитектура не позволяет». Кстати, если слышите от своих программистов такие слова, скажите, чтобы перестали ныть.
В нашем примере с A/B-тестом то же самое.
Я постараюсь перевести его на человеческий язык, дать куски готового кода для программистов и показать, сколько это действительно стоит. Прежде чем начнем, давайте определимся со стоимостью: в среднем час работы хорошего программиста на аутсорсе стоит 2500 рублей. Исходя из оценки в 300К, подразумевается, что для проведения A/B-теста потребуется 120 часов работы специалистов. В переводе на человеческие дни — 4 недели непрерывного программирования (да, мы считаем, что программисты работают 6 часов в день, а в остальное время ходят в туалет, за кофе и покурить).
A/B-тест длится 1 месяц. Высококвалифицированный программист работает непрерывно 1 месяц. Этот программист что, держит руками сервер, чтобы тот не упал во время теста? Или все входящие заказы распределяет по сегментам вручную по мере их появления?
Теперь вернемся к нашим пунктам невероятного объема работ, перечисленного выше.
Первое, на что стоит обратить внимание в этих пунктах: в них говорится, что Google Analytics доверия нет, поэтому пользователей на сегменты нужно разделять на сервере своими силами, потом загружать все в GA, а потом, в конце, выгружать из GA и сопоставлять со своей базой. Сложновато получилось. И непонятно. В основном непонятно — зачем. Если доверия Гуглу нет, значит не нужно его использовать.
В принципе, я согласен с автором комментария: если цель A/B-теста в том, чтобы измерить чистую прибыль, то Google Analytics или Google Optimize не очень подходят. Ведь нам нужны только оплаченные заказы, только чистая прибыль, а не общий оборот, и полностью весь объем данных, а не частичная выборка, как это делает Google Analytics:
В общем, отмечаем всех посетителей по сегментам на своем сервере и записываем в заказ сегмент посетителя своими силами.
Пример кода на PHP, который выполняет пункты 1, 2, 3 и 4:
if( !$_SESSION[`abc_test_segments`] ) {
$segments = [`A`, `B`, `C`];
$segment = $segments[random_int(0, count($segments))];
$_SESSION[`abc_test_segments`] = $segment;
mysql_query(`INSERT INTO segments (segment) VALUES («` . $segment . `»)`);
}
На человеческом языке это означает: если пользователь еще не помещен в сегмент, поместить его туда и записать визит посетителя в базу данных.
И если этот пользователь оформил заказ, отметить сегмент этого заказа:
mysql_query(`UPDATE orders SET segment = «` . $segment . `» WHERE id = ` . $order_id);
Пример кода, который реализует пункты 5, 6 и 7:
SELECT (order_items.amount * items.price * items.price_margin) AS net_profit_segment_A FROM order_items LEFT JOIN items ON items.id = order_items.item_id WHERE order_items.order_id IN (SELECT id FROM orders WHERE date BETWEEN (…) AND segment = `A` AND status = `complete` AND order_sum <= (SELECT MAX(order_sum) * 0.95 FROM orders WHERE date BETWEEN(…) AND status = `complete` ) AND order_sum >= (SELECT MAX(order_sum) * 0.05 FROM orders WHERE date BETWEEN(…) AND status = `complete` ) );
Выглядит сложновато, но любой программист разберет его за пару минут. Смысл кода — получить чистую прибыль от всех исполненных заказов сегмента `A`, исключив 5% самых дорогих и самых дешевых аномальных заказов. Чтобы получить чистую прибыль сегментов `B` и `C`, достаточно просто заменить в этом запросе букву `A`.
Дальше пункт 8 — рассчитать доверительные интервалы. Что такое «доверительный интервал»? Это разница между выручкой разных сегментов, при превышении которой можно сказать, что разница имеет значение, а не является случайной. Например, сегмент A с суммой 100 000 рублей и сегмент B с суммой 100 500 рублей имеют слишком малую разницу в 500 рублей, чтобы считать, что сегмент B стабильно всегда будет на 0,5% лучше, чем сегмент A.
А вот разница в 20 000 уже имеет значение. Имеет ли значение разница в 4500 рублей? Это покажет доверительный интервал, который может рассчитать любой студент экономического или математического факультета типового ВУЗа.
Считается он так (закройте глаза, если вы не программист):
SELECT ( 1.96 * SQRT( ( (SELECT COUNT() FROM orders WHERE segment = `A`)/(SELECT COUNT() FROM segments WHERE segment = `A`) * (1 — (SELECT COUNT() FROM orders WHERE segment = `A`) / (SELECT COUNT() FROM segments WHERE segment = `A`) ) ) / SELECT COUNT(*) FROM segments WHERE segment = `A`) ) AS confidence_interval_for_A
Подобный запрос выполняете для каждого сегмента и получаете доверительный интервал для каждого из них.
Обратите внимание: решение уместилось 1147 букв. А описание проблемы и её стоимости потребовало 1429 букв.
Если разделить сумму в 300 тысяч рублей на 1147 букв, то получим стоимость одной буквы — 261 рубль 50 копеек. Даже юристы меньше зарабатывают.
При всем уважении к коллегам по рынку: я потратил на написание этого кода 15 минут, еще около 30 минут я потратил на запрос в гугле «confidence interval mysql». В итоге не больше часа. Даже если поставить такую задачу начинающему программисту и платить ему как высококвалифицированному программисту 2500 рублей в час, сделать эту задачу можно часов за 20. И её стоимость составит не более 50 000 рублей. В шесть раз меньше заявленной цены.
Выводы
Я вот о чем: проводите A/B-тесты любого сервиса, который планируете использовать. Не ведитесь на «я лидер, гарантирую прирост», «A/B-тест стоит очень дорого» и «миллионы мух не могут ошибаться». Иначе ваш магазин ждет та же участь, что и Enter, Доставка.ру и Уютерра.