Сначала зафиксируйте grain данных, допущения, метрику и риск leakage, затем обсуждайте модель, инструмент или инфраструктуру.
Вопросы и ответы
11 подробных ответов
01Дайте определение precision и recall через матрицу ошибок. Когда какая метрика важнее?
junior
Короткий ответ: Precision (точность) = TP/(TP+FP) — доля настоящих позитивов среди всех, кого модель назвала позитивными. Recall (полнота) = TP/(TP+FN) — доля найденных среди всех реальных позитивов. Recall критичен там, где дорог пропуск (скрининг рака, fraud); precision — там, где дорога ложная тревога (спам-фильтр, блокировка контента).
Подробно:
| Факт: 1 | Факт: 0 | |
|---|---|---|
| Прогноз: 1 | TP | FP |
| Прогноз: 0 | FN | TN |
- Precision — читаем строку «прогноз: 1»: сколько из срабатываний модели настоящие. Метрика цены ложной тревоги.
- Recall — читаем столбец «факт: 1»: какую долю реальных позитивов мы поймали. Метрика цены пропуска.
- Trade-off через порог — понизили порог → ловим больше позитивов (recall растёт), но растут и ложные срабатывания (precision падает). Одна модель — целая кривая пар (P, R), а не одна точка.
⚠️ Частая ошибка: назвать формулы и остановиться. Сильный ответ начинается с вопроса «что дороже — пропустить или ложно сработать», и только из него следует, какая метрика главная.
02Что на самом деле означает ROC-AUC = 0.8?
middle
Короткий ответ: ROC-AUC — это вероятность того, что случайно взятый позитивный объект получит скор выше, чем случайно взятый негативный. Метрика качества ранжирования, не зависящая от порога: 0.5 — случайное упорядочивание, 1.0 — идеальное.
Подробно:
- Вероятностная интерпретация — AUC = P(score(x⁺) > score(x⁻)) для случайной пары «позитив–негатив». AUC 0.8 = в 80% таких пар позитив стоит выше.
- Инвариантность к монотонным преобразованиям — умножьте все скоры на 2, возведите в куб, прогоните через сигмоиду — AUC не изменится: важен только порядок. Любимый follow-up интервьюеров.
- Ничего о калибровке — AUC не гарантирует, что скор 0.8 означает «вероятность 80%»: модель может идеально ранжировать и при этом безбожно врать в вероятностях.
скоры по убыванию: 0.9 0.7 0.6 0.4 0.2
классы: + + − + −
пар (+,−) всего 6, верно упорядочено 5
→ AUC = 5/6 ≈ 0.83
⚠️ Частая ошибка: ответить «площадь под ROC-кривой» и остановиться. Интервьюер ждёт вероятностную интерпретацию и понимание инвариантности к порогу и монотонным преобразованиям скоров.
03Модель показывает accuracy 99%. Это хорошая модель?
junior
Короткий ответ: Неизвестно — сначала нужно спросить про баланс классов. При 99% негативов константный прогноз «все негативные» даёт те же 99% accuracy при нулевом recall. Это accuracy paradox — классический скрининговый вопрос.
Подробно:
1000 объектов: 990 негативных, 10 позитивных
модель «всегда 0»: accuracy = 990/1000 = 99%
recall = 0/10 = 0 ← бесполезна
- Сравнение с baseline — accuracy имеет смысл только относительно доли мажоритарного класса: 99% при 99% негативов — ноль информации о модели.
- Метрики по классам — precision и recall (полнота) по минорному классу, матрица ошибок, PR-AUC: они мгновенно вскрывают вырожденную модель.
- Правильный ход на собеседовании — встречный вопрос: «какой баланс классов и какова цена FP и FN?» Само наличие этого вопроса — уже половина ответа.
⚠️ Частая ошибка: ответить «да, 99% — отлично». Это вопрос-фильтр: секунда колебания перед «а какой баланс классов?» — и интервьюер уже сделал вывод.
04ROC-AUC или PR-AUC при сильном дисбалансе классов — что выбрать и почему?
senior
Короткий ответ: PR-AUC. FPR в ROC-кривой делится на число всех негативов, которых при дисбалансе огромное количество, поэтому даже сотни ложных срабатываний почти не двигают кривую. Precision делится на число срабатываний модели и честно показывает коллапс. И baseline у PR-AUC — это prevalence (доля позитивов), а не 0.5.
Подробно:
Fraud: 100 000 транзакций, 100 позитивов (0.1%). Модель: TP = 80, FN = 20, FP = 900.
| Метрика | Формула | Значение | Впечатление |
|---|---|---|---|
| FPR (ось ROC) | 900 / 99 900 | 0.9% | «почти идеал» |
| Recall | 80 / 100 | 80% | хорошо |
| Precision (ось PR) | 80 / 980 | 8.2% | 11 из 12 алертов ложные |
- Знаменатель решает — негативов так много, что ROC «прощает» любые разумные объёмы FP; precision смотрит только на то, что модель пометила, и разоблачает её.
- Baseline — у ROC-AUC случайный уровень всегда 0.5; у PR-AUC — prevalence (здесь 0.001), поэтому PR-AUC 0.4 на таких данных может быть блестящим результатом.
- Когда ROC-AUC уместен — сбалансированные классы, сравнение ранжирования на всей выборке, стабильность к смене prevalence между выборками.
⚠️ Частая ошибка: гордиться ROC-AUC 0.98 на антифрод-данных. Это фирменный вопрос fraud- и скоринговых команд: они тут же спросят precision при рабочем recall.
05Что такое F1-мера, почему именно гармоническое среднее и когда F1 — плохой выбор?
middle
Короткий ответ: F1 = 2PR/(P+R) — гармоническое среднее precision и recall. Гармоническое, потому что оно жёстко наказывает перекос: высокая одна метрика не компенсирует провальную другую. F1 — плохой выбор, когда цены FP и FN разные (нужна Fβ) или когда бизнесу нужны калиброванные вероятности и прямой учёт стоимости ошибок.
Подробно:
- Почему не арифметическое среднее — при P = 0.9 и R = 0.1 арифметическое среднее 0.5 выглядит терпимо, а F1 = 2·0.9·0.1/1.0 = 0.18 честно кричит о провале: одна компонента не прячет другую.
- Fβ — если recall важнее в β раз: F2 для скрининга (пропуск дорог), F0.5 для модерации (ложная тревога дорога).
- Когда F1 не годится — асимметричные издержки (лучше минимизировать ожидаемую стоимость напрямую), нужны вероятности (log-loss, Brier score), сравнение моделей без фиксации порога (PR-AUC).
| P | R | Арифм. среднее | F1 |
|---|---|---|---|
| 0.9 | 0.1 | 0.50 | 0.18 |
| 0.5 | 0.5 | 0.50 | 0.50 |
⚠️ Частая ошибка: ставить F1 «по умолчанию», не спросив о ценах ошибок. F1 неявно предполагает, что precision и recall равноценны — в реальных задачах это почти никогда не так.
06Как выбрать порог классификации и чем плох дефолтный 0.5?
middle
Короткий ответ: Порог выбирают из бизнес-цен ошибок: минимизацией ожидаемой стоимости FP и FN, максимизацией Fβ или целевой точкой на ROC/PR-кривой. 0.5 — артефакт, а не закон: просто граница argmax по вероятности; при дисбалансе классов и асимметричных ценах он почти всегда неоптимален.
Подробно:
- Через стоимость — предсказывать «1», если p·C_FN > (1−p)·C_FP, откуда порог = C_FP / (C_FP + C_FN).
- Мини-пример — пропуск фрода стоит 10 000 ₽, ложная блокировка — 500 ₽: порог = 500 / 10 500 ≈ 0.048. Блокируем уже при 5% уверенности, и это рационально.
- Через метрику — перебрать пороги на валидации: максимум Fβ, либо зафиксировать recall ≥ 0.9 и выжать максимум precision.
- Операционные ограничения — «аналитики разбирают 200 алертов в день»: порог задаётся как top-k по скору, а не по вероятности вовсе.
порог ↓ → recall ↑, precision ↓
порог ↑ → precision ↑, recall ↓
0.5 — дефолт библиотеки, а не решение задачи
⚠️ Частая ошибка: ни разу не усомниться в 0.5. Вопрос «а почему у вас порог 0.5?» — стандартная проверка, думает ли кандидат о задаче или о predict() из sklearn.
07Какие есть способы борьбы с дисбалансом классов и как их сравнить?
middle
Короткий ответ: Веса классов / cost-sensitive loss (первый выбор — данные не искажаются), undersampling, oversampling/SMOTE, сдвиг порога — и честный вопрос «а проблема ли это данных, или просто нужна другая метрика». Железное правило: ресемплировать только train-фолд внутри CV, иначе лик.
Подробно:
| Приём | Суть | Цена |
|---|---|---|
| Class weights / cost-sensitive loss | ошибка на минорном классе штрафуется сильнее | почти бесплатно — начинать отсюда |
| Undersampling | выбрасываем часть мажоритарного класса | теряем данные |
| Oversampling / SMOTE | дублируем минорный / интерполируем между k-NN-соседями | синтетические точки, риск подгонки под шум |
| Сдвиг порога | модель не трогаем, двигаем порог решения | нужен хоть какой-то сигнал в скорах |
| «Это не проблема данных» | сменить метрику: PR-AUC, recall@precision | часто это и есть решение |
- SMOTE — синтетические точки на отрезках между минорными соседями; на табличных данных с категориальными фичами и выбросами часто вредит.
- Главное правило — ресемплинг строго внутри train-фолда каждой итерации CV: oversampling до сплита раскладывает копии/интерполяции одного объекта в train и test → лик и фантастические метрики.
- Побочный эффект — ресемплинг меняет prevalence в train и ломает калибровку вероятностей: после него скоры придётся калибровать заново.
⚠️ Частая ошибка: SMOTE до train/test-сплита. Модель «узнаёт» тест по синтетическим близнецам — оценка завышена, в проде всё разваливается.
08Что такое калибровка вероятностей, как её проверить и как починить?
senior
Короткий ответ: Модель калибрована, если среди объектов с предсказанием p ≈ 0.8 позитивных действительно около 80%. Проверяют reliability diagram и Brier score, чинят Platt scaling или isotonic regression. Критично везде, где скор конвертируется в деньги: кредитный скоринг, pricing, ожидаемые потери.
Подробно:
- Диагностика — бьём предсказания на бины и в каждом сравниваем средний p с эмпирической долей позитивов:
бин p реально позитивных
0.0–0.2 9%
0.4–0.6 44%
0.8–1.0 71% ← модель переуверена: 0.9 ≠ 0.9
- Кто врёт из коробки — бустинг, SVM и современные нейросети систематически некалиброваны (чаще переуверены); логистическая регрессия обычно почти калибрована.
- Лечение — Platt scaling (сигмоида поверх скоров: мало данных, S-образное искажение) или isotonic regression (много данных, любая монотонная кривая). Калибровать на отдельном фолде, не на train.
- Связь с дисбалансом — under/oversampling меняет prevalence в train → вероятности систематически смещены; после ресемплинга калибровка обязательна.
⚠️ Частая ошибка: «AUC высокий — значит, вероятностям можно верить». AUC про порядок, калибровка про значения; понимание разницы — маркер сеньорности в скоринговых командах.
09Как связаны коэффициент Gini и ROC-AUC?
middle
Короткий ответ: Линейно: Gini = 2·AUC − 1. Это одна и та же информация о качестве ранжирования, просто в другом масштабе: случайная модель — AUC 0.5 → Gini 0, идеальная — AUC 1 → Gini 1.
Подробно:
Gini = 2·AUC − 1
AUC 0.50 → Gini 0.0 (случайное ранжирование)
AUC 0.75 → Gini 0.5
AUC 1.00 → Gini 1.0
диапазон: [−1, 1]; в живом кредитном скоринге
хороший Gini ≈ 0.3–0.6 (AUC ≈ 0.65–0.8)
- Геометрия — Gini равен отношению площади между ROC-кривой и диагональю к площади идеального треугольника над диагональю; отсюда линейная формула.
- Словарь банковского скоринга — Сбер, Т-Банк и любые кредитные команды говорят «Gini», а не «AUC»: мониторинг моделей, валидационные отчёты, алерты деградации — всё в Gini.
- Практический смысл — ничего нового относительно AUC: то же ранжирование, те же инвариантности. «Gini упал с 0.45 до 0.38» — стандартная фраза model-мониторинга, и вы обязаны её понимать.
⚠️ Частая ошибка: на собеседовании в банк не знать, что Gini и AUC — одно и то же с точностью до линейного преобразования. Для скоринговой команды это словарный минимум, а не бонусный вопрос.
10RMSE, MAE и MAPE: что оптимизирует каждая метрика и когда какую выбирать?
middle
Короткий ответ: RMSE минимизируется условным средним и квадратично штрафует большие ошибки — выбросы доминируют. MAE минимизируется медианой — робастна. MAPE не определена при нулевых фактах и асимметрична: перепрогноз штрафуется неограниченно, недопрогноз — максимум на 100%, поэтому оптимизация MAPE занижает прогнозы. При асимметричных бизнес-ценах — quantile loss.
Подробно:
| Метрика | Оптимум | Выбросы | Главная ловушка |
|---|---|---|---|
| RMSE | среднее | доминируют | одна аномалия портит всю метрику |
| MAE | медиана | робастна | не видит редкие крупные промахи |
| MAPE | смещён вниз | в процентах | нули в факте; премирует занижение |
| Quantile loss | заданный квантиль τ | управляемы | нужно осознанно выбрать τ |
- RMSE vs MAE — вопрос «что больнее: средний промах или редкая катастрофа». Спрос с редкими всплесками: RMSE заставит модель «страховаться» от них.
- MAPE — деление на факт: при нулевом спросе взрывается; ошибка перепрогноза не ограничена (>100% бывает), недопрогноза — ограничена 100%.
- Асимметричные цены — упущенные продажи дороже лишнего стока? Quantile (pinball) loss с τ > 0.5 — стандарт demand forecasting.
⚠️ Частая ошибка: оптимизировать MAPE на спросе с нулями и всплесками: метрика взрывается на нулях и системно премирует заниженные прогнозы.
11Precision@k, MAP, MRR, NDCG: что измеряет каждая метрика ранжирования?
senior
Короткий ответ: Все четыре оценивают качество топа выдачи, а не классификацию. Precision@k — доля релевантных в топ-k; MRR — насколько высоко стоит первый релевантный; MAP — средняя precision по позициям всех релевантных; NDCG — градуированная релевантность с логарифмическим дисконтом по позиции, нормированная на идеальную выдачу.
Подробно:
- Precision@k — пользователь видит только первый экран: считаем релевантные в топ-k, хвост не важен.
- MRR — 1/позиция первого релевантного, усреднить по запросам: для сценариев «нужен один правильный ответ» (поиск, автокомплит, QA).
- MAP — среднее average precision по запросам: учитывает и полноту, и порядок, но релевантность только бинарная.
- NDCG — релевантность градуированная (0–3), вклад позиции i равен rel/log2(i+1), сумма делится на DCG идеальной сортировки.
выдача (rel): [2, 0, 3, 1]
DCG = 2/log2(2) + 0/log2(3) + 3/log2(4) + 1/log2(5)
= 2 + 0 + 1.5 + 0.43 = 3.93
идеал [3, 2, 1, 0]: IDCG = 3 + 1.26 + 0.5 + 0 = 4.76
NDCG = 3.93 / 4.76 ≈ 0.83
- Когда ранжирующие, а не классификационные — поиск и рекомендации: релевантность не бинарна, а позиция решает всё. Дежурный вопрос в Яндексе, Авито, Ozon.
⚠️ Частая ошибка: оценивать рекомендательную систему глобальным ROC-AUC по всем парам «пользователь–товар»: он не видит, что пользователю показывают только топ, и позиция внутри него решает.
Источники
Источники и редакционная политика
Материалы RecallDeck сопоставлены с официальной документацией и открытыми публикациями компаний, когда первичный источник доступен. Мы не связаны с упомянутыми работодателями, не публикуем конфиденциальные задания и не продаём места в подборках. Формат найма может меняться — уточняйте его у рекрутера.
От чтения к воспроизведению
Отрепетируйте полный цикл интервью.
RecallDeck возвращает сложные темы по расписанию и помогает удерживать в памяти язык, SQL, архитектуру и поведенческие истории.