01 / тестовое задание

Finstar:
тестовое задание для аналитика данных

Реальное тестовое с собеседования на Middle Data Analyst: исходный текст задания, как решать и частые ошибки.

02 / оригинальный текст

Текст тестового задания

Исходный текст задания без редактуры — так, как его прислали кандидату.

Данные к заданиюОткрыть данные →

Задание #1

Есть 2 таблицы:

employee - справочник сотрудников

tasks - задачи, назначенные на сотрудников

drop table if exists #employee create table #employee ( id smallint, emp_name varchar(255), rating int ) insert into #employee values (1,'Vasya',5) insert into #employee values (2,'Vasya',3) insert into #employee values (3,'Petya',9) insert into #employee values (4,'Igor',4) insert into #employee values (5,'Nikita',2) ;

drop table if exists #tasks create table #tasks ( id smallint, assignee_id smallint, rating smallint ) insert into #tasks values (1,1,5) insert into #tasks values (2,1,4) insert into #tasks values (3,2,2) insert into #tasks values (4,5,5) insert into #tasks values (5,5,1) insert into #tasks values (6,5,7) insert into #tasks values (7,5,9) insert into #tasks values (8,5,3) insert into #tasks values (9,5,3) insert into #tasks values (10,5,5) insert into #tasks values (11,2,7) insert into #tasks values (12,3,8) insert into #tasks values (13,3,8) insert into #tasks values (14,2,7) insert into #tasks values (15,3,9) insert into #tasks values (16,5,4) insert into #tasks values (17,1,5)

Необходимо написать SQL запрос, который покажет всех сотрудников, у кого в работе менее трех задач. Результат предоставить в виде:

имя сотрудника

количество задач в работе

Задание #2

Есть 2 таблицы:

payments_principal - платежи по основному долгу

payments_interest - платежи по процентам

drop table if exists #payments_principal create table #payments_principal ( payment_dt date, agr_id smallint, payment_sum int ) insert into #payments_principal values ('2019-05-11',31,8281) insert into #payments_principal values ('2019-05-12',7,4622) insert into #payments_principal values ('2019-05-13',5,7686) insert into #payments_principal values ('2019-07-01',1,9917) insert into #payments_principal values ('2019-07-23',1,6534) insert into #payments_principal values ('2019-08-20',64,4336) insert into #payments_principal values ('2019-08-24',3,7464) insert into #payments_principal values ('2019-08-25',9,8505) insert into #payments_principal values ('2019-08-27',1,9857) insert into #payments_principal values ('2019-07-07',7,6294) insert into #payments_principal values ('2019-07-17',7,3182) insert into #payments_principal values ('2019-08-28',4,9708) insert into #payments_principal values ('2019-08-29',4,8632) insert into #payments_principal values ('2019-08-30',3,8303) insert into #payments_principal values ('2019-09-01',7,3141) insert into #payments_principal values ('2019-08-25',1,9139) insert into #payments_principal values ('2019-08-25',2,7624) insert into #payments_principal values ('2019-09-01',7,3793) insert into #payments_principal values ('2019-09-01',3,3260) insert into #payments_principal values ('2019-08-21',5,9002) insert into #payments_principal values ('2019-08-22',2,5500) insert into #payments_principal values ('2019-05-12',7,4622) insert into #payments_principal values ('2019-08-23',2,3980) insert into #payments_principal values ('2019-08-29',2,5849) ;

drop table if exists #payments_interest create table #payments_interest ( payment_dt date, agr_id smallint, payment_sum int ) insert into #payments_interest values ('2019-05-11',31,98) insert into #payments_interest values ('2019-05-12',7,90) insert into #payments_interest values ('2019-05-13',5,39) insert into #payments_interest values ('2019-07-01',1,82) insert into #payments_interest values ('2019-07-23',1,59) insert into #payments_interest values ('2019-08-20',50,96) insert into #payments_interest values ('2019-08-24',3,1) insert into #payments_interest values ('2019-08-25',9,22) insert into #payments_interest values ('2019-08-27',1,95) insert into #payments_interest values ('2019-07-07',7,79) insert into #payments_interest values ('2019-07-17',7,72) insert into #payments_interest values ('2019-08-28',4,61) insert into #payments_interest values ('2019-08-29',4,49) insert into #payments_interest values ('2019-08-30',3,78) insert into #payments_interest values ('2019-09-01',7,29) insert into #payments_interest values ('2019-08-25',1,88) insert into #payments_interest values ('2019-08-25',2,77) insert into #payments_interest values ('2019-09-01',6,6) insert into #payments_interest values ('2019-09-01',3,18) insert into #payments_interest values ('2019-08-21',5,15) insert into #payments_interest values ('2019-08-22',2,28) insert into #payments_interest values ('2019-08-23',2,23) insert into #payments_interest values ('2019-08-29',2,84)

Необходимо написать SQL запрос, который покажет сумму платежей по основному долгу и процентам. Суммы необходимо считать только по тем договорам, которые платили и основной долг, и проценты. Результат предоставить в виде:

id договора

сумма платежей по основному долгу

сумма платежей по процентам.

Задание #3

Ниже представлен график с количеством клиентов, которые закрыли кредит в конкретный день. Линиями отображается Retention X days, т.е. доля клиентов (из зелёного столбца), взявших повторный кредит в течение X дней.

Пример: 2-го сентября закрылось 4000 кредитов, из них сразу же в дату закрытия 20% клиентов взяли повторный кредит (0 days, голубая линия). К концу следующего дня – уже 35% (т.е. 20% в день закрытия и еще 15% на следующий день).

Итак, на графике показана динамика по поколениям закрытых кредитов (дата = поколение), и каждая точка на линиях Retention привязана к конкретному поколению. Retention линии по одному поколению идут накопительным итогом, кумулятивно от меньшего срока (0 дней) к большему (30 дней).

Допустим, что сегодня 23 сентября. Скажите, какие выводы можно сделать на основе этого графика? Есть ли какие-то логические ошибки на графике?

Задание #4

Вам предоставлена выборка данных, в которой содержится информация по заявкам (строчка в таблице) за определенный период времени.

В предоставленный промежуток времени произошло ухудшение конверсии к completed заявкам, что негативно повлияло на выручку компании.

Необходимо разобраться чем обусловлено такое падение и найти «корень проблемы».

Для выполнения задачи необходимо всю выборку сначала перенести в базу данных (представьте, что вы работаете с реальной SQL таблицей) и затем уже работать с SQL таблицей.

Также постройте отчет в Power BI и визуально отобразите следующее:

- Иерархиями отобразите количество заявок в разрезе дней и недель

- Метрику Completed rate

- Таблицу (матрицу) в разрезе дней где будут иерархией отображены отношения up_stage, mid_stage, page_status, sub_stage к количеству заявок (см. скрин ниже как пример отображения)

03 / что проверяют

Что проверяет это задание

01

SQL

Выборки, агрегаты, джойны и оконные функции для анализа данных.

02

Продуктовый кейс

Разложить задачу, выбрать метрики и сделать выводы.

03

Аналитическое мышление

Как разложить задачу, выбрать подход и обосновать решение.

04 / как решать

Как подойти к решению

  1. 1

    Разберите условие: что именно просят посчитать и в каких разрезах.

  2. 2

    Сверьтесь с данными: какие таблицы есть, период и нужные фильтры.

  3. 3

    Решайте по шагам и фиксируйте промежуточные результаты и допущения.

  4. 4

    Доведите до финальных чисел и коротких выводов или рекомендаций.

05 / частые ошибки

Частые ошибки

  • Неверный период, разрез или единицы измерения.
  • Не учтены фильтры и сегменты из условия.
  • Решение без промежуточных шагов — только финальная цифра.
  • Нет выводов и рекомендаций по результату.
06 / хороший ответ

Каким должен быть сильный ответ

Хороший ответ — это не просто финальные числа или код. Работодатель должен увидеть, как вы думаете, как проверяете ограничения задачи и как оформляете результат.

  • короткое описание логики решения;
  • промежуточные таблицы, запросы и фильтры;
  • финальные значения по каждому пункту задания;
  • понятные выводы и рекомендации.
07 / похожие задания

Похожие задания

08 / разборы в telegram

Хочешь больше таких разборов?

В Telegram-канале разбираю тестовые с собеседований, метрики и типичные ошибки кандидатов.

Подписаться в Telegram →
09 / следующий шаг

Разбираешь тестовые, но не уверен в решении?

На интенсиве разбираем реальные кейсы, A/B-секции, метрики, SQL, Python и типовые ошибки кандидатов.