Тестовые задания по Data
Здесь собраны реальные тестовые задания, которые дают соискателям на стажировках и junior-позициях. Эти задания помогут лучше подготовиться к отбору, потренироваться и пополнить портфолио
Dodo Brands Data Analyst • Средняя сложность
Тестовое задание по Data от компании Dodo Brands Data Analyst
Data Analyst Тестовое задание Для участия в конкурсе на позицию предлагаем вам решить следующие задания. Каждое задание направлено на проверку вашего уровня определенных компетенций, важных для аналитика. Задание 1 ``` **Проверяемая компетенция:** аналитическое мышление **Формат решения:** опишите логику решения ``` <div style="border: 2px solid black; padding: 10px;"> *Задание:** Представьте, что вы работаете аналитиком в Додо. Вам доступны все внутренние данные (данные по чекам, клиентам, локациям). В марте 2022 часть Макдональдсов закрылась, часть продолжала работать. Вам необходимо ответить на следующие вопросы: 1. На какие наши метрики, на ваш взгляд, могли повлиять закрытие конкурента? 2. Вам необходимо оценить эффект в рублях на нашу выручку от закрытия конкурента. Опишите, какую методологию бы использовали, чтобы рассчитать эффект. 3. Какие общедоступные данные по Макдональдсам можно было бы использовать для ответа на второй вопрос? Опишите, как бы вы их использовали.| </div> |**Ваше решение:** | |-----------------------------------------------------------| Задание 2 ``` **Проверяемая компетенция:** основы статистики/проверка гипотез **Формат решения:** приложить ipynb/ссылку на colab ``` <div style="border: 2px solid black; padding: 10px;"> **Задание:** Предположим, в ряде городов в определенный период проведен тест: - В тестовых городах на веб-сайте пиццы располагаются по популярности - Во всех остальных — по увеличению цены на пиццу **Вопросы:** 1. На какие метрики мог повлиять тест? 2. Сделайте визуальный анализ датасета. Как ведут себя метрики в динамике? Какие распределения в данных? 3. Как можно оценить эффект от теста? Если знаете несколько способов, реализуйте один, а другие опишите письменно. 4. Порассуждайте письменно, какие метрики можно было бы еще оценить, если бы вам были доступны все данные компании. **Тестовый период:** 7 апреля - 19 мая **Тестовые города:** Пенза, Уфа, Курск, Нижний Тагил, Новокуйбышевск, Орск **Описание датасета:** - `Date` : дата - `CityName` : город - `OrderSource` : источник заказа - mp: мобильное приложение, web: веб-сайт, other - другое - `Category` : категория товара - `rto` : выручка после скидок - `rto_do` : выручка до скидок - `cost` : затраты на себестоимость товаров - `tickets` : кол-во заказов - `qty` : кол-во продуктов - `clients_qty` : уникальное кол-во клиентов - `avg_time` : среднее время сессии (только по тем, кто оформил заказ) - `avg_price` : средняя цена ! В исходном датасете данные уже сгруппированы по `Date`, `CityName`, `OrderSource`, `Category`. </div> |**Ссылка на датасет:** [Датасет](оценка_категорий_4.csv) | |------------------------------------------------------------------| | **Ваше решение:** | |----------------------------------------------------------| Задание 3 ``` **Проверяемая компетенция:** знание SQL **Формат решения:** вставьте текст запроса в рамку ``` <div style="border: 2px solid black; padding: 10px;"> **Задание:** В нашей компании замеряется такой показатель, как “30-дневная активная база”. Для любого дня - это число клиентов за предыдущие 30 дней. (Например, для 2022-01-01 - это число уникальных клиентов, совершивших визит за 30 дней до 2022-01-01, включая 2022-01-01. Для 2022-01-02 - это число уникальных клиентов, совершивших визит за 30 дней до 2022-01-02, включая 2022-01-02 и т.д.) Допустим у вас есть таблица с чековыми данными по двум городам со следующими полями: - `cityname` - наименование города - `date` - дата чека - `orderid` - id чека - `clientid` - id клиента - `sales` - сумма чека в рублях Данные в таблице с 2022-01-01 по 2022-06-30. Посчитайте подневную динамику 30-дневной активной базы по каждому городу, отсортируйте по городу и дате по возрастанию. **Пример результирующей таблицы:** | cityname | date | active_base | | -------- | ---------- | ----------- | | city1 | 2022-02-01 | 534 | | ... | ... | ... | | city1 | 2022-06-30 | 976 | | city2 | 2022-02-01 | 3450 | | ... | ... | ... | | city2 | 2022-06-30 | 4210 | </div> | **Ссылка на датасет:** [Датасет](DA_sql_sample%20-%20sql_task.csv) | |--------------------------------------------------------------------| Формат предоставления результатов Любой — документ, презентация, а может быть что-то еще. Будем рады, если ответ будет на Google-диске. Проверьте, пожалуйста, доступ к документу - нужен «доступен всем по ссылке». Также, вместе с результатами можете поделиться, насколько вам было интересно выполнять задание. Желаем успешного выполнения!
CloudReports • Средняя сложность
Тестовое задание по Data от компании CloudReports
ЗАДАЧА Есть таблица истории просмотров фильмов в онлайн-кинотеатре. Два поля: Пользователь, Фильм Множество строк: тысячи пользователей и фильмов. Нужно сделать SQL, который бы реализовал логику алгоритма рекомендаций фильмов к просмотру, которые пользователи еще не смотрели. Логику рекомендаций предлагайте на свое усмотрение. На выходе нужна таблица: Пользователь, Рекомендованный фильм, Рейтинг рекомендации РЕШЕНИЕ Система рекомендаций будет построена на принципе коллаборативной фильтрации. Коллаборативная фильтрация позволяет предсказать интересы пользователя на базе интересов другого пользователя. Основная идея состоит в том, что если пользователи А и Б выбирают какой-то фильм, то высока вероятность схожести их интересов и по другим фильмам. В рамках данной задачи схожесть интересов пользователей определяется как N% общих просмотренных фильмов. То есть если у пользователя А N% общих просмотренных фильмов с пользователем Б, то мы можем рекомендовать пользователю А фильмы, которые посмотрел пользователь Б. Рейтинг рекомендации построен индивидуально для каждого пользователя на основании количества просмотров фильма у пользователей со схожими интересами. **База данных ** В качестве базы данных используется таблица likes, которая имеет два столбца – id пользователя (user\_id) и id фильма (movie\_id): ``` create table likes ( user_id int, movie_id int ); ``` Пример базы данных | **user_id ** | **movie_id ** | |-----------------| ---------------| | 1 | 4 | | 1 | 8 | | 2 | 2 | | 2 | 3 | | 2 | 1 | | 2 | 6 | | 2 | 7 | | 2 | 9 | | 2 | 11 | | 2 | 12 | | 3 | 13 | | 3 | 6 | | 3 | 8 | | 3 | 3 | | 3 | 11 | | 3 | 2 | | 4 | 1 | | 4 | 7 | | 4 | 8 | | 4 | 11 | | 4 | 3 | | 5 | 1 | | 5 | 8 | | 5 | 7 | | 5 | 2 | | 5 | 3 | SQL-запрос (PostgreSQL) ``` with users as ( /* 2. Таблица users содержит сгруппированную информацию о пользователях, которые имеют >= 10% общих просмотренных фильмов */ select distinct user1_id, user2_id from /* 1. Кросс-джойн таблица following для всех пользователей и фильмов со столбцом common_interest позволяет отследить какие фильмы были просмотрены обоими пользователями */ (select cus.user_id as user1_id, ous.user_id as user2_id, cus.movie_id as movie1_id, ous.movie_id as movie2_id, (cus.movie_id = ous.movie_id) as common_interest from likes as ous join likes as cus on cus.user_id <> ous.user_id) following group by user1_id, user2_id having ((count(*) filter (where "common_interest")::float) / (count(*)::float)) >= 0.1 ), user_likes as ( /* 3. Таблица user_likes содержит информацию о пользователях, фильмах и количестве просмотров фильмов пользователей с общими интересами, включая самого пользователя */ select users.user1_id, likes.movie_id, count(likes.user_id) as like_count from users left join likes on users.user2_id = likes.user_idgroup by users.user1_id, likes.movie_id ) /* 4. Таблица user_likes фильтруется таким образом, чтобы не рекомендовать пользователю уже просмотренные им фильмы. Выводится результат рекомендации для каждого пользователя в финальном виде. Значения отсортированы по убыванию id пользователя */ select user_likes.user1_id as "Пользователь", user_likes.movie_id as "Рекомендованный фильм", user_likes.like_count as "Рейтинг рекомендации" from user_likes left join likes on user_likes.user1_id = likes.user_id and user_likes.movie_id = likes.movie_id where likes.movie_id is null order by user_likes.user1_id, user_likes.like_count desc ``` Результат | **Пользователь ** | **Рекомендованный фильм ** | **Рейтинг рекомендации ** | | -------------------| ----------------------------| --------------------------| | 1 | 3 | 2 | | 1 | 7 | 2 | | 1 | 2 | 1 | | 1 | 11 | 1 | | 2 | 8 | 2 | | 3 | 1 | 2 | | 3 | 7 | 2 | | 4 | 2 | 3 | | 4 | 6 | 2 | | 4 | 4 | 1 | | 4 | 9 | 1 | | 4 | 12 | 1 | | 4 | 13 | 1 | | 5 | 11 | 3 | | 5 | 6 | 2 | | 5 | 9 | 1 | | 5 | 4 | 1 | | 5 | 12 | 1 | | 5 | 13 | 1 | Решение на SQL Fiddle: [*http://sqlfiddle.com/\#!17/3b4915/21/0*](http://sqlfiddle.com/#!17/3b4915/21/0)
LESTA • Средняя сложность
Тестовое задание по Data от компании LESTA
Тестовое задание на позицию Data Analyst Во вложении Вы получили SQLite3 базу данных со случайной выборкой из free-to-play игры «Мир Кораблей». Выполните задания ниже, используя любые инструменты для анализа и визуализации данных на ваше усмотрение. Исходные данные 1. Таблица `arenas` Характеристики боя (режим, карта, длительность и т.п.) | Столбец | Комментарий | |-------------------|-------------------------------------------------------------------------| | arena_id | Уникальный ID боя | | periphery_id | Уникальный ID кластера | | winner_team_id | ID команды-победителя, -1 означает ничью | | start_dt | Время начала боя | | duration_sec | Продолжительность боя (в секундах) | | map_type_id | ID игровой карты (ref catalog_items, категория ‘ARENA_TYPES’) | | team_build_type_id| ID игрового режима (ref catalog_items, категория ‘TEAM_BUILD_TYPE’) | | battle_level_id | ID уровня боя (обычно максимальный уровень корабля в бою) | 2. Таблица `arena_members` Данные по пользователям в сыгранных боях: техника игрока, успехи в бою и т.п. Отрицательные значения ID игроков соответствуют ботам. | Столбец | Комментарий | |-------------------|-------------------------------------------------------------------------| | arena_id | Уникальный ID боя | | periphery_id | Уникальный ID кластера | | account_db_id | ID игрока. Отрицательный ID - игроки, управляемые ИИ (боты) | | team_id | Команда игрока, обычно 0 или 1 | | clan_db_id | ID клана | | vehicle_type_id | Идентификатор используемого корабля | | ships_killed | Количество уничтоженных вражеских кораблей | | planes_killed | Количество уничтоженных вражеских самолетов | | damage | Урон, нанесенный вражеским кораблям | | team_damage | Урон, нанесенный по союзникам | | received_damage | Урон, полученный в бою | | regen_hp | Восстановленное здоровье | | max_hp | Максимальный объем здоровья корабля | | is_alive | 1 – если корабль игрока «выжил к концу боя» | | distance | Проделанный путь | | credits | Заработанные кредиты | | exp | Заработанный опыт | 3. Таблица `glossary_ships` Словарь для расшифровки техники. 4. Таблица `catalog_items` Словарь для расшифровки других игровых сущностей (например, игрового режима). Часть 1. Анализ игровых логов Задание 1.1 Проанализируйте популярность игровых режимов (`team_build_type_id` из таблицы `arenas`) среди игроков и визуализируйте наблюдения. Объясните выбранный подход к анализу и визуализации. Задание 1.2 Проанализируйте показатели эффективности кораблей, выбрав методологию на ваш взгляд. Визуализируйте результаты и объясните выбор методологии. Часть 2. Разработка SQL-запросов Задание 2.1 Определите топ 5% игроков по суммарному урону за все бои. Запрос должен возвращать таблицу: | account_db_id | total_damage | |---------------|--------------| | | | Задание 2.2 Для каждого игрока из задания 2.1 определите корабль, на котором он нанес больше всего урона за все бои. Ограничьте выгрузку 10-ю лучшими результатами. Запрос должен возвращать таблицу: | account_db_id | ship_name | dealt_damage | |---------------|-----------|--------------| | | | | Оформление результатов - Результаты заданий части 1 оформить в PDF-отчете для менеджмента. Приложить отдельный архив с кодом. - Результаты заданий части 2 предоставить в виде текстового файла с SQL-запросами.
Альфа Банк • Средняя сложность
Тестовое задание по Data от компании Альфа Банк
#Тестовое задание для продуктового аналитика мобильного и интернет-банка Задание 1 (SQL) Приведите в качестве решения скриншот с результатом, скрипт (или ссылку на запрос в среде, в которой решали задания, например http://sqlfiddle.com/), а также свои комментарии относительно предложенного решения. **SQL1** Отобрать клиентов по г. Москва с суммарными остатками по клиенту от 20 000 на последнюю дату. create table #Клиенты (client_id varchar(1), FIO varchar (255) , Region varchar(50), account_num int) insert into #Клиенты values ('A','Иванов','Москва',111), ('A','Иванов','Москва',222), ('B','Петров','Иваново',333), ('C','Сидоров','Москва',444) create table #Cчета ([Date] date, Summa_USD money, Account_num int) insert into #Cчета values ('2012-01-01',15000,111), ('2012-02-01',10000,111), ('2012-02-01',5000,222), ('2012-03-01',30000,333), ('2012-04-01',20000,444) SQL2 Таблица #oper хранит информацию о количестве произведенных операций на каждую календарную дату. Вывести на каждую дату количества операций, совершенное с начала месяца по указанную дату включительно накопительным итогом. create table #oper (date date, cnt int) insert into #oper values ('2019-06-02', 1985), ('2019-06-03', 1577), ('2019-06-04', 1597), ('2019-06-05', 1468), ('2019-07-06', 82), ('2019-07-08', 1689), ('2019-07-09', 1556), ('2019-07-10', 1480), ('2019-07-11', 1405), ('2019-07-12', 1502) SQL3 Даны месячные срезы сегментов клиентов, нужно получить по каждому клиенту периоды действия каждого сегмента. create table #segment ([date] date, ClientID varchar(6),SegmentID int) insert into #segment values ('2018-01-31' ,'A11111', 2), ('2018-02-28' ,'A11111', 2), ('2018-03-31' ,'A11111', 1), ('2018-04-30' ,'A11111', 1), ('2017-11-30' ,'B22222', 1), ('2017-10-31' ,'B22222', 1), ('2017-09-30' ,'B22222', 3), ('2017-09-30' ,'C33333', 1), ('2017-10-31' ,'C33333', 1) Задание 2 (разметка и метрики) Партнерская витрина - это набор предложений партнеров банка, которые предоставляют различного рода скидки нашим клиентам. <p float="left"> <img src="media/1.png" width="200" /> <img src="media/2.png" width="200" /> <img src="media/3.png" width="200" /> </p> На витрину можно перейти разными способами: через внешние и внутренние коммуникации (SMS, email, push, баннеры/уведомления внутри приложения). Партнеры могут предоставлять данные о совершенных нашими клиентами конверсиях (транзакциях). ● Какие наборы метрик для оценки эффективности партнерской витрины вы можете предложить? ● Опишите возможный набор систем и способы их интеграции, которые позволят осуществлять трекинг полного пути пользователя и его конверсионных действий. ● Какие сырые данные нужны и в каком виде для полноты картины? ● Какая разметка коммуникаций и действий пользователя вам понадобится для отслеживания всего пути клиента? Задание 3 (когортный анализ) Приведите в качестве решения скриншот с результатом, а также свои комментарии относительно предложенного решения (с указанием среды, в которой решали задания). в приложенном файле хранятся данные об активности клиентов с сентября 2021 года по февраль 2022 Необходимо на основе этих данных провести когортный анализ Данные: [data_test.csv](https://raw.githubusercontent.com/Propsih/test/main/data_test.csv) Описание полей: CLIENT_ID - идентификатор клиента; VALUE_DAY - отчетная дата; DIGITAL_30_CNT - кол-во входов в мобильное приложение за последние 30 дней на отчетную дату; TRAN_ACTIVE_30_CNT - кол-во транзакций в мобильном приложении за последние 30 дней на отчетную дату; OPER_ACTIVE_30_CNT - кол-во операций (транзакции+нефинансовые операции) в мобильном приложении за последние 30 дней на отчетную дату ● постройте визуальное представление удержания клиентов в статусе: ○ активных клиентов банка (наличие строки для клиента на отчетную дату); ○ диджитал активных (активных в мобильном приложении: наличие хотя бы одного входа); ○ операционно активных; ○ транзакционно активных; ● какие выводы можно сделать на основе этих данных?; ● если построить проникновение транзакционно активных клиентов в когорты диджитал активных клиентов, то мы увидим, что существенная часть клиентов использует мобильное приложение, но не совершает транзакции (платежи и переводы) в нем. Какие гипотезы такого поведения можно предположить? Как их можно проверить ?; ● как можно исправить эту ситуацию и увеличить проникновение транзакционно активных клиентов в диджитал активных? Задание 4 (портфолио) Сделайте мини-портфолио по 2-3 сделанным вами ранее отчетам/исследованиям (чувствительную информацию можете упустить, если прикладываете скрины отчетов - “заблюрить” значения): ● какая цель и задачи стояли, какие пользователи результата, ● для исследований - какие методы и инструменты были выбраны, ● опишите источники данных, требовались ли доработки в источниках для обеспечения полноты данных и для матчинга, ● какие инструменты использовались для выгрузки данных из источников и для их объединения, для автоматизации, ● каким образом производился матчинг данных разных систем-источников, ● какие средства визуализации использовались и каким образом выглядел конечный результат.
без ограничений.
Чтобы получить полный доступ,
вам необходимо зарегистрироваться.