Live coding на английском: как я завалила техничку в UK fintech не на коде
🔍
Live coding на английском: как я завалила техничку в UK fintech не на коде
Недавно проходила техничку на роль Risk/Fraud Analyst в одном UK fintech. Формат: 30 минут лайв-кодинга, 2 задачи, под присмотром интервьюера. Описание вакансии прямо моё: identify anomalies, build fraud detection rules from scratch. То, чем я занимаюсь каждый день
Спойлер: меня реджектнули. И не из-за SQL
👇
Task 1: Identify Transaction Outliers
Есть таблица
transactions
(transaction_id, transaction_amount, transaction_date, customer_id). Нужно найти транзакции, которые значительно отклоняются от средней суммы
по каждому клиенту
You may use statistical functions such as average, standard deviation, approximate quantiles, or any other appropriate method to identify outliers
Зависла
🥲
Дело не в том, что задача сложная. В моей работе антифрод обычно строится на других инструментах: графы пользователей, связи между аккаунтами, fingerprints, поведенческие паттерны. А z-score и std я использовала давно, ещё продуктовым аналитиком. Плюс лайв-кодинг: ~15 минут на задачу, интервьюер над душой, времени на спокойно подумать нет
😏
Теория за решением (на случай если у вас тоже подзабылось)
Метод опирается на нормальное распределение - ту самую колокольную кривую - работает правило
68–95–99.7
:
±1σ от среднего покрывает ~68% всех значений
±2σ - ~95%
±3σ - ~99.7%
То есть значение дальше 3σ от среднего - это что-то из 0.3% самых редких. По сути: настолько странная сумма, что в нормальной работе клиента такое почти не случается
Z-score
- это просто ответ на вопрос "на сколько сигм значение отличается от среднего":
z = (value - mean) / std_dev
Если |z| > 2 - выброс по порогу 2σ. Если |z| > 3 - по более строгому 3σ
Применительно к задаче: avg и std считаем
отдельно по каждому клиенту
, потому что у разных людей разный обычный чек. Транзакция на £500 у фрилансера, который обычно тратит по £50 - аномалия. У владельца ресторана, который каждый день закупает на £400–600 норма
Реализация:
with cte as (
select customer_id,
avg(transaction_amount) as avg_amnt,
stddev(transaction_amount) as std_dev
from transactions
group by customer_id
)
select t.transaction_id,
t.customer_id,
t.transaction_amount,
t.transaction_date,
c.avg_amnt,
c.std_dev,
abs(t.transaction_amount - c.avg_amnt) / c.std_dev as score
from transactions t
join cte c on t.customer_id = c.customer_id
where abs(t.transaction_amount - c.avg_amnt) / c.std_dev > 2
Запрос работает, выбросы находит. Но при разборе после увидела дыры: порог 2σ слишком чувствительный для финансовых данных (там тяжёлые хвосты, надо 3σ), у новых клиентов с 1-2 транзакциями std = 0 и формула не работает, а само нормальное распределение для сумм платежей - плохое приближение. Честнее работали бы квантили или IQR, и в условии задачи прямо был намёк "approximate quantiles". Я этот хинт проигнорировала
🤍
А теперь почему меня реджектнули
Не из-за кода.
Из-за английского.
Когда интервьюер попросил объяснить решение - что такое стандартное отклонение, почему именно 2 сигмы, как работает z-score - я поняла, что мне не хватает лексики. На русском я бы рассказала свободно. На английском застряла на словах deviation, distribution, начала путаться, формулировки получались кривые. SQL был ок. Объяснение нет
И это, наверное, самый важный вывод для тех, кто планирует релокацию и собесы на английском:
🕊️
Английский SQL ≠ английский для собеса.
Писать запросы это узкий технический язык, ты его уже знаешь. А объяснять решение интервьюеру это совсем другой словарь: статистика, бизнес-логика, trade-offs, edge cases. Этому надо учиться отдельно
🕊️
Готовиться нужно проговаривать вслух, на английском.
Не просто решать LeetCode молча. Брать задачу, решать, и потом вслух объяснять что и почему. Записывать себя, переслушивать
🕊️
Знание домена не спасает, если не можешь его проговорить.
Я фрод-аналитик уже второй год. Но под таймером, на чужом языке опыт не вытащил - потому что нужны были конкретные слова, а их не было
В следующем посте будет вторая задача с той же тех
Откликнуться в Telegram →
⚠️ Никогда не платите «за оформление» или «гарантию трудоустройства» — это признак мошенников. Работа ТРУ не несёт ответственности за содержание вакансии.