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

Bolt:
тестовое задание для позиции «Fraud Analyst»

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

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

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

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

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

Задание #1

Анализ первых платежей

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

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

Теперь следующий шаг — остановить людей, которые совершают мошеннические транзакции впервые.

Задача

На основе данных выборки:

1. Предложить 2–5 ключевых доработок, которые помогут снизить процент неудавшихся платежей (is_successful_payment = 0).

2. Учитывая, что команда разработчиков небольшая (3–4 человека), объяснить, почему выбраны именно эти меры.

3. При описании предложений важно показать:

не только результат,

но и процесс: как вы пришли к выводу, как подходите к решению проблемы.

Образец данных

Вот дамп первых заказов по кредитной карте (по всему миру).

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

Легенда полей:

created — время создания запроса на первый заказ.

device_name – имя устройства, используемого для оформления заказа

device_os_version – версия ОС устройства

country – 2-символьный код страны

city_id – внутренний системный идентификатор города (неважно, какой из них какой)

lat – широта места получения заказа

lng – долгота места получения заказа

real_destination_lat – широта места назначения заказа

real_destination_lng – долгота места назначения заказа

user_id – внутренний идентификатор пользователя

order_id – внутренний идентификатор заказа

order_try_id – внутренний идентификатор попытки заказа (попытки заказа происходят до того, как клиент и водитель будут сопоставлены с заказом)

distance – расстояние водителя до места получения клиента в метрах

ride_distance – расстояние поездки в метрах

price – цена, взимаемая с клиента, может быть ниже «ride_price», если у клиента была скидка, валюты различаются и не определены

ride_price – расчетная цена окончательной поездки, валюты различаются и не определены

price_review_status – «Проверка цены» — это когда мы отправляем «ride_price» на проверку человеком для проверки на наличие системных ошибок. 99% заказов являются окончательными и должны иметь уже установленное «ok». Некоторые из них могут все еще находиться в состоянии ожидания, скорее всего, вы можете их отклонить.

price_review_reason — автоматическая или ручная причина запроса проверки цены.

is_successful_payment — 1 означает, что заказ был успешно списан, 0 означает, что он не был списан (включая все попытки повторного списания)

name — данные карты, не имеет значения.

card_bin — данные о BIN карты.

failed_attempts — количество неудачных попыток заказа до этого первого завершенного заказа.

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

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

01

Python

Обработка данных и расчёты: pandas, скрипты, автоматизация.

02

SQL

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

03

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

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

04 / как решать

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

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

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

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

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

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

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

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

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

08 / разборы в telegram

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

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

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

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

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