- -
- 100%
- +

Перед первой задачей
Что SQL может дать A/B-тесту
SQL не заменяет статистическое решение, но помогает аккуратно собрать базовые метрики эксперимента.
Перед выводами нужно проверить назначение пользователей, дубли, размер групп и то, что знаменатель выбран правильно.
Эта книга фокусируется на практической подготовке данных: конверсия, выручка, прибыль, возвраты и сегменты.
Граница ответственности
Задачи не обещают доказать победителя эксперимента автоматически.
Они учат собрать чистые таблицы и увидеть типовые ошибки, из-за которых красивый процент может быть неверным.
Все данные маленькие и синтетические, без внешних файлов и без привязки к реальным пользователям.
Маршрут по задачам
1. Посчитать конверсию двух вариантов
2. Проверить равномерность распределения
3. Найти пользователей в двух вариантах
4. Сравнить средний чек по вариантам
5. Посчитать выручку на пользователя
6. Разделить конверсию по устройствам
7. Проверить дубликаты назначений
8. Собрать чистое назначение пользователя
9. Посчитать клики по вариантам
10. Сравнить оплату после клика
11. Проверить минимальный размер выборки
12. Посчитать разницу конверсий
13. Сравнить возвраты по вариантам
14. Посчитать валовую прибыль по вариантам
15. Сравнить среднюю прибыль на пользователя
16. Проверить платящих пользователей с несколькими заказами
17. Отделить тестовых пользователей
18. Собрать компактный итог эксперимента
Практические задачи
Задача 1. Посчитать конверсию двух вариантов
Рабочий вопросНужно сравнить варианты A и B по доле оплат, не смешивая число пользователей и число событий.
ДанныеCREATE TABLE experiment(user_id INTEGER, variant TEXT, paid INTEGER);
INSERT INTO experiment VALUES (1,'A',1),(2,'A',0),(3,'A',0),(4,'B',1),(5,'B',1),(6,'B',0);
ЗапросSELECT variant,
COUNT(*) AS users,
SUM(paid) AS payers,
ROUND(1.0 * SUM(paid) / COUNT(*), 2) AS conversion
FROM experiment
GROUP BY variant
ORDER BY variant;
Ожидаемый результат[["A", 3, 1, 0.33], ["B", 3, 2, 0.67]]
Почему работаетSUM(paid) считает оплаты, COUNT(*) считает пользователей варианта, а дробное деление даёт конверсию.
Запрос намеренно работает на маленькой таблице, поэтому результат можно проверить глазами до переноса приёма в рабочий отчёт.
ORDER BY или явная агрегация делают вывод устойчивым: строки не зависят от случайного порядка хранения данных.
Где легко ошибитьсяТакая таблица показывает метрику, но сама по себе не доказывает статистическую значимость различия.
Самостоятельная проверкаУ какого варианта выше конверсия? Объясните ответ, опираясь на строки исходных данных.
Ответ: У B: две оплаты из трёх против одной из трёх у A.
Задача 2. Проверить равномерность распределения
Рабочий вопросНужно увидеть, сколько пользователей попало в каждый вариант, потому что сильный перекос ломает доверие к сравнению.
ДанныеCREATE TABLE assignments(user_id INTEGER, variant TEXT);
INSERT INTO assignments VALUES (1,'A'),(2,'A'),(3,'A'),(4,'B'),(5,'B');
ЗапросSELECT variant, COUNT(*) AS users
FROM assignments
GROUP BY variant
ORDER BY variant;
Ожидаемый результат[["A", 3], ["B", 2]]
Почему работаетGROUP BY variant показывает размер каждой группы эксперимента.
Запрос намеренно работает на маленькой таблице, поэтому результат можно проверить глазами до переноса приёма в рабочий отчёт.
ORDER BY или явная агрегация делают вывод устойчивым: строки не зависят от случайного порядка хранения данных.
Где легко ошибитьсяДаже равные размеры групп не гарантируют чистый эксперимент, но сильный перекос сразу требует внимания.
Самостоятельная проверкаКакой вариант получил меньше пользователей?
Ответ: B получил двух пользователей, A получил трёх.
Задача 3. Найти пользователей в двух вариантах
Рабочий вопросНужно поймать нарушение эксперимента, когда один пользователь оказался сразу в A и B.
ДанныеCREATE TABLE assignments(user_id INTEGER, variant TEXT);
INSERT INTO assignments VALUES (1,'A'),(2,'A'),(2,'B'),(3,'B');
ЗапросSELECT user_id, COUNT(DISTINCT variant) AS variants_seen
FROM assignments
GROUP BY user_id
HAVING COUNT(DISTINCT variant) > 1
ORDER BY user_id;
Ожидаемый результат[[2, 2]]
Почему работаетCOUNT(DISTINCT variant) показывает, сколько разных вариантов видел пользователь.
Запрос намеренно работает на маленькой таблице, поэтому результат можно проверить глазами до переноса приёма в рабочий отчёт.
ORDER BY или явная агрегация делают вывод устойчивым: строки не зависят от случайного порядка хранения данных.
Где легко ошибитьсяЕсли такие пользователи есть, их нельзя молча оставлять в простом сравнении конверсии.
Самостоятельная проверкаКакой пользователь нарушил правило? Объясните ответ, опираясь на строки исходных данных.
Ответ: Пользователь 2 видел оба варианта.
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.




