Как я реализовывал А/Б-тестирование на PHP

от автора

Возникла задача проведения сплит-тестирования нашего интернет-магазина. Погуглил на эту тему. Нашел пару сервисов, но по тем или иным причинам они нам не подошли.

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

Другие сервисы, типа abtest.ru (который, кстати, почему-то не работает) или подобных ему, тоже не подходят, т.к. там можно изменить лишь внешний вид чего-либо. А нам, например, нужно протестировать сайт на предмет вывода/не вывода той или иной информации из базы (ну как пример, выводить ли краткое описание товара в списке товаров или еще выводить спецификации и т.д.).

Решил попробовать реализовать А/Б-тестирование собственными силами, дописав в сайт немного php-кода (интернет-магазин самописный, на php).
Необходимо проверить как будет действовать на конверсию изменение того или иного элемента сайта. Т.е. всех посетителей сайта условно делим на «посетителей-А» и «посетителей-Б». Делим естественно поровну, т.е. каждый первый – это «А», каждый второй – это «Б». В зависимости от того «А» это или «Б», показываем ему соответствующий вариант элемента сайта. По окончании фиксируем оформил ли посетитель заказ или нет

Код описывать не буду, а лишь кратко поясню что и как делал:

1. При входе на сайт каждому пользователю в сессию (скажем $_SESSION[‘split’]) записывается значение «А» или «Б». Каждому первому – «А», каждому второму – «Б». Для этого в базе данных имеется специальный «счетчик последнего посетителя», который содержит данные о последнем зашедшем на сайт посетителе. Т.е., зашел посетитель на сайт, ему в $_SESSION[‘split’] записали значение «А» и в базе счетчик тоже изменился на «А». При заходе следующего посетителя на сайт, скрипт берет из базы значение счетчика, и если оно = «А», то посетителю в сессию записывается «Б» и наоборот. Т.е. таким образом, обеспечивается чередование пользователей. Кстати, вопрос: может кто подкажет как реализовать чередуемость посетителей без обращения к БД, как узнать какое значение присваивать посетителю «А» или «Б»? Ведь для этого нужно знать какое значение было у предыдущего. Или же можно не париться и просто назначать рандомно 1-ый или 2-ой вариант и этим рандомом? Разделятся ли в этом случае посетители поровну?

2. После того как в сессию пользователю записали значение «А» или «Б», то теперь в зависимости от этого значения, пользователю показывается либо первый либо второй вариант тестируемого элемента. Т.е. зашел человек на страницу где находится тестируемый элемент, сразу же осуществляется проверка что записано в $_SESSION[‘split’] и в зависимости от результата показывается 1-ый или 2-ой вариант.

3. Сохранение результатов. Для этого в базе имеются счетчики для подсчета результатов (для подсчета количества заказов «посетителями-А» и «посетителями-Б». Т.е. для каждого из двух вариантов «А» или «Б» ведется свой счетчик. Если посетитель у которого в $_SESSION[‘split’] сидит значение «А» оформил заказ, то счетчик «А» увеличивается на 1. Если посетитель «Б» оформил заказ, то счетчик «Б» увеличивается на 1.

По сути получается довольно простой код. Но это и пугает. Кажется что я не учел какие-то тонкости и нюансы процесса А/Б тестирования и все гораздо сложнее и глубже. Ведь возможны различные спорные ситуации. Например, как учитывать посетителей, которые зашли на сайт, затем сайт покинули и снова вернулись? Показывать ли им при повторном посещении сайта тот вариант тестируемого элемента, который им был показан при первом посещении, или же заново учитывать этого посетителя в очереди чередования. И тут уже встает вопрос использования не механизма сессий, а механизма cookies.

Я написал этот пост чтобы поделиться своей реализацией простейшего А/Б – тестирования и заодно выслушать мнения специалистов по этому поводу. Может будут какие подсказки, замечания и т.д.

ссылка на оригинал статьи http://habrahabr.ru/post/177959/


Комментарии

Добавить комментарий

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