# Weekend Offer для продуктовых аналитиков – тестовое задание

# Интро

Привет! В октябре мы впервые проводим Weekend Offer в команде продуктовой аналитики Kaspi.kz. Подробнее можно прочитать здесь: https://hr.kaspi.kz/weekendoffer

Чтобы участвовать в Weekend Offer, Вам нужно выполнить тестовое задание. Как выполнить тестовое задание:

- Обязательно пришлите нам на почту weekend_offer@kaspi.kz адрес своей почты на Gmail (и укажите ваши имя и фамилию) – мы дадим на этот адрес доступ к таблицам с данными в Google BigQuery для выполнения ТЗ.

- Выполните все задания, решение оформите в Google Docs или Notion. Настройте доступ на просмотр Вашего файла с решением по ссылке.

- Выполненное тестовое задание отправьте по ссылке: https://hr.kaspi.kz/productanalyst-weekendoffer/form_task

- Мы пришлем Вам сообщение с результатом на указанные в заявке телефон и email.

# Блок 1: SQL

## Интро

### Таблицы с данными

Для выполнения задания мы подготовили 3 таблицы с данными. Таблицы хранятся в Google BigQuery, для написания запросов и обработки данных предлагаем воспользоваться встроенным редактором. BigQuery поддерживает диалект Standard SQL.

- Чтобы начать работу в Google BigQuery, нужно войти в Google Cloud Platform, для этого перейдите по ссылке https://console.cloud.google.com/bigquery?project=kaspi-mobile.

- В левом верхнем меню раскройте проект kaspi-mobile, где можно найти набор данных hiring_pa_task, в котором хранятся все нужные вам таблицы:

- При клике на название таблицы в информационном окне справа можно посмотреть детальные сведения о ней:
  - схему данных (названия полей, их тип и режим);
  - общие сведения (размер таблицы, число строк, дата последнего изменения и пр.);
  - предварительный просмотр данных.

### Документация

- Здесь можно ознакомиться с документацией по работе с Google BigQuery.

- Здесь можно ознакомиться с функциями и операторами, используемыми в Standard SQL.

### Описание таблиц

У вас есть доступ к трем таблицам с данными (все данные приведены для примера, любые совпадения случайны):

1. Таблица `kaspi-mobile.hiring_pa_task.pa_hiring_task` с данными по воронкам в Kaspi Travel (Авиа) c 3 по 14 июля 2022.

       -- Пример простого запроса

       SELECT * FROM `kaspi-mobile.hiring_pa_task.pa_hiring_task`

   Описание таблицы

   Таблица содержит данные о просмотрах экранов пользователями в виде событий (events). Ниже приведено описание событий:

   № | Экран/действие | Название события | Комментарии
   --- | --- | --- | ---
   1 | Просмотр формы поиска билета | travel_search_form |
   2 | Просмотр экрана “Ищем билеты, пожалуйста, подождите” | travel_search_in_progress |
   3 | Просмотр экрана с результатами поисковой выдачи | travel_search_results |
   4 | Просмотр экрана с деталями перелета | travel_flight_details |
   5 | Просмотр экрана с подтверждением выбранного тарифа | travel_tariff_confirmation |
   6 | Просмотр экрана выбора пассажиров | travel_select_passenger |
   7 | Просмотр экрана выбора способа оплаты | travel_payment_method |
   8 | Просмотр финального экрана – успешной оплаты | 1) travel_card_payment_approved, 2) travel_credit_approved | 1) оплата с Kaspi Gold 2) оплата в кредит

   Каждое событие содержит набор полей (event_properties). Ниже приведено описание полей:

   № | Название поля | Описание
   --- | --- | ---
   1 | date | дата совершения события
   2 | timestamp | дата и время совершения события
   3 | u_id | уникальный идентификатор пользователя
   4 | event | название события, возможные значения мы перечислили выше
   5 | d_cty_name | название города отправления
   6 | d_ctry_name | название страны отправления
   7 | d_cty_code | код города отправления
   8 | a_ctry_name | название страны прибытия
   9 | a_ctry_code | код страны прибытия
   10 | a_cty_name | название города прибытия
   11 | a_cty_code | код города прибытия

2. Таблица `kaspi-mobile.hiring_pa_task.pa_hiring_task_experiment_data`, где хранятся данные по эксперименту в Kaspi Travel c 3 по 14 июля 2022:

       -- Пример простого запроса

       SELECT * FROM `kaspi-mobile.hiring_pa_task.pa_hiring_task_experiment_data`

   Описание таблицы

   Таблица содержит данные о пользователях, которые участвовали в тесте в виде событий (events). Каждое событие содержит набор полей (event_properties). Ниже приведено описание полей:

   № | Название поля | Описание
   --- | --- | ---
   1 | u_id | уникальный идентификатор пользователя
   2 | event | название события
   3 | fork | признак ветки (контрольная, тестовая)
   4 | date | дата совершения события

3. Таблица `kaspi-mobile.hiring_pa_task.has_avia_transactions`, где хранятся идентификаторы пользователей Kaspi, которые хотя бы раз совершали покупки билетов в Kaspi Travel:

       -- Пример простого запроса

       SELECT * FROM `kaspi-mobile.hiring_pa_task.has_avia_transactions`

   Поля таблицы

   № | Название поля | Описание
   --- | --- | ---
   1 | u_id | уникальный идентификатор пользователя

## Задания

### Задание 1

Посчитайте, сколько пользователей хотя бы раз купили билет в кредит за все время.

Ожидаемый результат:

- Текст SQL-запроса, примерный вид:

      SELECT column1, column2, column3, ...
      FROM `table_name`
      WHERE ...

- Полученный ответ, примерный формат:

### Задание 2

Посчитайте конверсию из просмотра результатов поисковой выдачи в покупку в выходные дни на международные направления в разрезе по сегментам новых/повторных за все время.

💡
Обратите внимание:

- международный перелет – это перелет, в котором страна отправления и/или страна прилета – не Казахстан;

- мы делим клиентов на два сегмента: новые — еще ни разу не покупали билет, повторные — хотя бы раз покупали билет;

- идентификаторы клиентов, которые хотя бы раз покупали билет, и, соответсвенно, считаются повторными, хранятся в таблице: `kaspi-mobile.hiring_pa_task.has_avia_transactions`;

- при подсчете числа пользователей на втором шаге (экран покупки) нужно учитывать только тех, кто был на первом шаге (экран с результатами);

- значение конверсии нужно округлить до десятых.

Ожидаемый результат

- Текст SQL-запроса, примерный вид:

      SELECT column1, column2, column3, ...
      FROM `table_name`
      WHERE ...

- Полученный ответ, примерный формат:

### Задание 3

Посчитайте конверсию из просмотра формы поиска в просмотр результатов поисковой выдачи, по дням c 3 по 14 июля 2022.

💡
Обратите внимание:

- при подсчете числа пользователей на втором шаге (экран с результатами поисковой выдачи) нужно учитывать только тех, кто был на первом шаге (форма поиска);

- оба шага воронки клиент должен пройти в один день;

- значение конверсии нужно округлить до десятых.

Ожидаемый результат

- Текст SQL-запроса, примерный вид:

    SELECT column1, column2, column3, ...
    FROM `table_name`
    WHERE ...

- Таблица с полученными данными. Примерный формат таблицы:

# Блок 2: Анализ результатов эксперимента

## Интро

С 3 по 14 июля 2022 был запущен А/Б-тест в Kaspi Travel, в рамках которого в тестовой ветке добавили подпись о количестве оставшихся билетов по указанной цене:

Клиентская история: Я смотрю билеты на будущую поездку, чтобы проверить наличие билетов, даты рейсов, авиаперевозчика, цены и т.д.

Проблема: Есть пользователи, которые смотрят билеты заранее, например, за 2 недели до путешествия, но откладывают покупку на пару дней. Через пару дней билеты могут закончиться.

Гипотеза: Мы предполагаем, что добавление информации о количестве оставшихся билетов по текущей цене повысит конверсию в покупку на 5%, потому что пользователи будут понимать выгоду от покупки в текущем моменте.

Решение: Добавить в результаты поиска информацию о количестве оставшихся билетов по текущей цене на определенный рейс.

Целевая метрика: Конверсия из просмотра результатов поисковой выдачи в покупку.

Момент попадания в тест: Просмотр экрана с результатами поисковой выдачи.

Базовая конверсия: 9%

Описание теста: В момент попадания в тест отправляется событие ‘viewed_experiment’ с параметром fork (признак ветки теста).

Контрольная ветка:

    WHERE event = 'viewed_experiment'
      AND fork = 'control'

Тестовая ветка:

    WHERE event = 'viewed_experiment'
      AND fork = 'last-seats'

💡
Обрати внимание:

- все шаги воронки клиент должен пройти в один день;

- значение конверсии нужно округлить до десятых.

## Задание 1

Напишите SQL-запросы:

- посчитайте и сравните конверсию в покупку в обеих ветках:
  - по всем пользователям без разделения на сегменты,
  - по сегментам:
    - тип перелета (международный, внутренний),
    - по опыту прошлых покупок у пользователей (новые, повторные).
  - посчитайте дополнительные метрики, которые считаете важными для анализа результатов.
  💡
  Обратите внимание:

  Идентификаторы клиентов, которые хотя бы раз покупали билет, и, соответсвенно, считаются повторными, хранятся в таблице: `kaspi-mobile.hiring_pa_task.has_avia_transactions`.

Ожидаемый результат

- Тексты всех SQL-запросов

## Задание 2

Вам нужно принять решение о раскатке данного функционала по итогам А/Б-теста. Как вы считаете, стоит ли нам его раскатить?

Предлагаем при выполнении принять во внимание следующие пункты:

1. Увеличилась ли конверсия в тестовой ветке? Если да, то насколько?

2. Можем ли мы принять решение о раскатке на полученных данных? Хватает ли нам данных, чтобы заметить статистически значимые различия?

3. Отличаются ли результаты в зависимости от типа перелета?

4. Отличаются ли результаты в зависимости от опыта прошлых покупок?

5. Есть ли дополнительные метрики, которые мы можем замерить и которые нам могут быть интересны в контексте анализа итогов?

Ожидаемый результат

- Ответ по пунктам 1-5 в произвольной форме

# Блок 3: Продуктовые навыки

## Интро

В бэклоге продакт-менеджера авиабилетов в Kaspi Travel есть идеи по увеличению конверсии новых пользователей в покупку:

- группировка прямых рейсов на странице результатов (ниже – пример реализации в Aviasales),

- подписка на цены билетов на дату (ниже – пример реализации в Aviasales),

- метки “Самый дешевый”, “Самый быстрый” на билетах в выдаче билетов (ниже – пример реализации в Aviasales).

## Задания

### Задание 1

Помогите продакт-менеджеру оценить потенциал каждой из идей и приоритизировать бэклог. Для этого подумайте и опишите:

- Какая клиентская проблема или потребность может скрываться за каждой идеей?
  - Как бы вы оценили, сколько пользователей может сталкиваться с этой проблемой?
  - Как бы вы валидировали эту проблему / потребность (проверили и доказали, что она действительно есть у пользователей)?

- На какие показатели может повлиять предлагаемое решение (фича)?
  - Как бы вы оценили, какое конкретно влияние на эти показатели она окажет?

- Какой принцип вы бы предложили использовать, чтобы сравнить потенциал идей между собой и приоритизировать бэклог?

💡
Обратите внимание:

- Можете исходить из того, что вам доступны любые данные о поведении пользователей в Travel.

### Задание 2

Выберите из бэклога идею, получившую наибольший приоритет при выполнении предыдущего задания. Предположим, вы с продакт-менеджером решили запустить A/B-тест для проверки влияния предлагаемой фичи на показатели продукта. Опишите:

- Как бы вы подготовили А/Б-тест?

- Как бы анализировали результаты теста и какие решения принимали в зависимости от результатов?