Сколько стоит A/B-тест стороннего сервиса?

Михаил Кечинов

Центр управления конверсией REES46, CEO

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

Маркетологи интернет-магазинов принимают решение по принципу «Этот сервис с крупными клиентами работает, а там не дураки, свое дело знают, так что и мне подойдет». А те, которые крупные, в свою очередь делали точно так же.

Хотя, казалось бы, проведи A/B-тест, пойми, сколько тебе этот сервис приносит, и тогда решай, нужен он тебе или нет.

Я недавно с некоторым недоумением узнал, что A/B-тесты сторонних сервисов не практикуются почти совсем. Потому что игроки рынка рассказывают, что проведение теста — это очень дорого. Конкретизируя в цифрах, провести A/B-тест двух сервисов товарных рекомендаций стоит от 300 000 рублей. Трижды пересчитав нули, я спросил: откуда дровишки?

Мне ответили (цитата):

  1. Необходимо настроить серверное разделение трафика и передать нужные dimensions в Google Analytics через Measurement Protocol.
  2. Учитывая то, что экспериментальные сессии должны делиться/считаться начиная с первой страницы даже для новых пользователей — придется отказаться от стандартного Google cid (который генерится на клиенте) и использовать свой собственный идентификатор клиента.
  3. Необходимо настроить трекинг статуса заказов в Google Analytics через Measurement Protocol (полную синхронизацию с CRM/ERP).
  4. По прошествии предполагаемого периода теста необходимо выгрузить информацию обо всех заказах и сессиях из Google Analytics при помощи API.
  5. Необходимо соединить полученные данные с маржинальностью каждого заказа, чтобы посчитать EBITDA от каждого заказа.
  6. Нужно загрузить все полученные цифры по EBITDA в R/Python/Excel и оценить распределение выборки.
  7. Также надо отсечь все аномалии (95/99-percentile) и рассчитать среднеквадратическое отклонение.
  8. И еще рассчитать доверительные интервалы и статистическую значимость для полученной выборки.
  9. Продолжить тест, если доверительные интервалы слишком большие и не достигнута значимость.

Уже это обойдется больше 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, Доставка.ру и Уютерра.

Подпишитесь на рассылку

Два письма в месяц: полезные статьи про маркетинг, исследования, инструкции, гайды, чек-листы и кейсы с лучшими практиками наших клиентов.