Сначала зафиксируйте grain данных, допущения, метрику и риск leakage, затем обсуждайте модель, инструмент или инфраструктуру.
Вопросы и ответы
10 подробных ответов
01Что такое утечка данных (data leakage)? Назовите три конкретных механизма.
middle
Короткий ответ: Утечка (лик) — в обучение просачивается информация, недоступная в момент реального предсказания. Метрики на валидации отличные, в проде модель разваливается.
Подробно:
- Препроцессинг на всей выборке до сплита — скейлер, импьютер, отбор фич или SMOTE, обученные на train+test, уже «видели» тестовое распределение.
- Фичи из будущего или пост-фактум — churn_reason, агрегаты по всей истории клиента: значение известно только после наступления таргета.
- Дубликаты и связанные строки в разных сплитах — один и тот же пользователь в train и test: модель узнаёт его, а не обобщает.
# Неправильно: скейлер обучен до сплита
X = StandardScaler().fit_transform(X)
X_tr, X_te, y_tr, y_te = train_test_split(X, y)
# Правильно: всё внутри Pipeline, fit только на train
pipe = Pipeline([("scaler", StandardScaler()),
("clf", LogisticRegression())])
pipe.fit(X_tr, y_tr)
Лечение: весь препроцессинг внутри Pipeline на train-фолдах; для временных данных — сплит по времени, для повторяющихся пользователей — GroupKFold.
⚠️ Частая ошибка: говорить «делю данные и обучаю», не проговорив «сплит ДО препроцессинга» — интервьюер проверяет именно этот порядок.
02Как кодировать категориальные признаки и от чего зависит выбор метода?
middle
Короткий ответ: Универсального кодирования нет: выбор диктуют семейство модели и кардинальность фичи. One-hot — для линейных моделей и малой кардинальности, label — только для деревьев, target encoding и hashing — для высокой кардинальности.
Подробно:
| Кодирование | Когда уместно | Главный риск |
|---|---|---|
| One-hot | линейные модели, низкая кардинальность | взрыв размерности на тысячах категорий |
| Label / ordinal | деревья и бустинг | навязывает ложный порядок линейным и kNN |
| Target (mean) encoding | высокая кардинальность | лик таргета без out-of-fold |
| Frequency / counters | деревья, быстрый бейзлайн | разные категории с равной частотой сливаются |
| Hashing trick | онлайн-обучение, огромные словари | коллизии, необратимость |
| Embeddings | нейросети, очень много категорий | нужны данные и обучение |
Два вопроса перед выбором: (1) чувствительна ли модель к порядку и расстояниям — линейным и метрическим ложный порядок вреден, деревьям безразличен; (2) сколько уникальных значений — на тысячах категорий one-hot раздувает матрицу, нужны target/hashing/embeddings.
⚠️ Частая ошибка: label encoding для логистической регрессии — модель начинает верить, что город с кодом 17 «больше» города с кодом 5.
03Чем опасен target encoding и как применять его безопасно?
senior
Короткий ответ: Target encoding подменяет категорию средним таргета по ней — то есть кладёт таргет прямо в фичу. Наивная версия (среднее по всей выборке) даёт утечку и завышенную CV-оценку. Безопасная схема: out-of-fold кодирование + сглаживание к глобальному среднему + при желании шум.
Подробно:
- Механизм лика — собственный таргет строки участвует в среднем её категории; редкие категории почти запоминают ответ.
- Out-of-fold — значения кодировки для фолда считаются только по остальным фолдам; для теста — по всему трейну.
- Сглаживание (регуляризация) — усадка к глобальному среднему: enc = (n·mean_cat + m·mean_global) / (n + m); редкие категории тянутся к глобальному среднему, а не к своим 2–3 наблюдениям.
- CatBoost — ordered target statistics: кодирует строку только по «более ранним» строкам внутри перестановки — та же идея из коробки.
for tr, val in KFold(5).split(df):
means = df.iloc[tr].groupby("cat")["y"].mean()
df.loc[df.index[val], "cat_te"] = df.iloc[val]["cat"].map(means)
⚠️ Частая ошибка: предложить target encoding и не сказать «out-of-fold» — для интервьюера это маркер кандидата, которого этот лик ещё ни разу не обжигал на практике.
04Каким моделям нужно масштабирование признаков и почему?
junior
Короткий ответ: Скейлинг нужен моделям, которые опираются на расстояния, скалярные произведения или градиентный спуск: kNN, SVM, k-means, PCA, линейные с регуляризацией, нейросети. Деревьям, лесам и бустингу — не нужен: они инвариантны к монотонным преобразованиям.
Подробно:
| Модель | Скейлинг | Почему |
|---|---|---|
| kNN, k-means, SVM | обязателен | расстояния: фича в метрах «задавит» фичу в километрах |
| PCA | обязателен | дисперсия: компоненты уйдут в фичу с большим масштабом |
| Линейные + L1/L2 | обязателен | штраф на веса зависит от масштаба фич |
| Нейросети | нужен | сходимость градиентного спуска |
| Деревья / RF / бустинг | не нужен | сплиты по порогам, порядок значений не меняется |
И ключевое: скейлер — часть модели. Fit только на train, transform на valid/test — иначе утечка статистик теста в обучение.
⚠️ Частая ошибка: «скейлю всё на всякий случай» до сплита — безобидная привычка превращается в лик; и наоборот, тратить время на скейлинг для XGBoost.
05Как обрабатывать пропущенные значения и когда пропуск — сам по себе информация?
junior
Короткий ответ: Сначала понять механизм пропусков, потом выбирать метод: медиана/среднее, модельная импутация, отдельная категория, плюс индикаторная колонка «был пропуск». Бустинги работают с NaN нативно. Если пропуск связан с самим значением (MNAR), он несёт сигнал — его нельзя просто «замазать».
Подробно:
| Механизм | Смысл | Пример |
|---|---|---|
| MCAR | пропуск полностью случаен | сбой сенсора |
| MAR | зависит от других наблюдаемых фич | молодые чаще пропускают поле «телефон» |
| MNAR | зависит от самого значения | доход не указывают те, у кого он очень высокий или низкий |
Практика:
- Медиана/среднее/мода — быстрый бейзлайн; медиана устойчивее к выбросам.
- Индикатор пропуска — колонка is_missing сохраняет сигнал MNAR.
- Модельная импутация (kNN, iterative) — точнее, дороже; обучать только на train.
- Нативная обработка — XGBoost/LightGBM/CatBoost сами учат, в какую ветку сплита отправлять NaN.
⚠️ Частая ошибка: «удалю строки с пропусками» как весь ответ: теряем данные и смещаем выборку всюду, где пропуски не MCAR.
06Как обнаружить и обработать выбросы — и когда их нельзя удалять?
middle
Короткий ответ: Найти: IQR, z-score (для примерно нормальных данных), isolation forest для многомерных случаев. Но первый вопрос — не «как удалить», а «это ошибка или сигнал»: во фроде и детекции аномалий выбросы и есть таргет.
Подробно:
- Диагностика — ошибка данных (рост 250 см из-за опечатки, цена −1) или реальное редкое событие (клиент с чеком ×100)?
- Ошибки — чинить или удалять, логируя причину.
- Реальные экстремумы — не удалять, а снижать влияние:
| Приём | Что делает |
|---|---|
| Log / Box-Cox | сжимает тяжёлый правый хвост |
| Winsorizing | клиппинг на 1-м/99-м перцентиле |
| Робастные потери (MAE, Huber) | модель меньше штрафуется за экстремумы |
| RobustScaler | скейлинг по медиане и IQR |
- Границы клиппинга и статистики считаются на train — иначе очередной лик.
⚠️ Частая ошибка: автоматически «чистить» выбросы в задаче фрода или аномалий — выбросить именно те объекты, которые модель должна ловить.
07Отбор признаков: filter, wrapper и embedded — в чём разница и где здесь прячется утечка?
middle
Короткий ответ: Filter оценивает фичи независимо от модели (корреляция, mutual information), wrapper перебирает подмножества, обучая модель (RFE), embedded отбирает прямо в процессе обучения (L1, важности деревьев). Критично: отбор — часть обучения и обязан жить внутри CV-цикла, иначе оценка завышена ликом.
Подробно:
| Класс | Примеры | Плюсы | Минусы |
|---|---|---|---|
| Filter | корреляция, mutual info, χ² | дёшево, масштабируется | игнорирует взаимодействия фич |
| Wrapper | RFE, forward/backward | учитывает модель и взаимодействия | дорого: модель × подмножества |
| Embedded | L1/lasso, важности бустинга | бесплатно при обучении | привязан к семейству модели |
Где лик: отобрать топ-фичи по корреляции с таргетом на ВСЕХ данных, а потом кросс-валидироваться — фичи уже выбраны с подглядыванием в тестовые фолды, и CV покажет сказку. Правильно: селектор внутри Pipeline, отбор заново на каждом train-фолде.
⚠️ Частая ошибка: «сначала отберу признаки, потом сделаю честную кросс-валидацию» — сам отбор уже был нечестным.
08Почему встроенная feature importance у бустинга и лесов ненадёжна и что использовать вместо неё?
senior
Короткий ответ: Impurity/gain-важности смещены в пользу непрерывных фич и фич с высокой кардинальностью (у них больше кандидатов на сплит), считаются на train (переобученные сплиты выглядят «важными»), а коррелированные фичи делят важность произвольно. Надёжнее: permutation importance на валидации и SHAP.
Подробно:
| Метод | Где считается | Слабое место |
|---|---|---|
| Impurity / gain | train | смещение к high-cardinality; шумовая фича вроде id может выйти в топ |
| Permutation | validation | у коррелированных фич важность занижена: модель «подстраховывается» дублёром |
| SHAP | любой сет | честная декомпозиция вкладов, но дороже; корреляции всё равно размывают картину |
Практика:
- Permutation на отложенной выборке — важность как падение метрики при перемешивании колонки.
- SHAP — вклад на уровне объекта плюс глобальная агрегация.
- Сгруппировать коррелированные фичи (кластеризация по корреляции) и оценивать группами, а не поодиночке.
⚠️ Частая ошибка: читать feature_importances_ как истину и на её основе выкидывать фичи или делать бизнес-выводы.
09Мультиколлинеарность: что именно ломается, у каких моделей и что с ней делать?
middle
Короткий ответ: Сильно коррелированные фичи делают коэффициенты линейных моделей нестабильными: огромные стандартные ошибки, знаки меняются от выборки к выборке. Качество предсказания при этом почти не страдает — ломается интерпретация. Диагноз — VIF; лечение — удалить/объединить фичи, ridge, PCA.
Подробно:
- Что ломается — матрица XᵀX почти вырожденна → оценки коэффициентов имеют огромную дисперсию; «важность» фичи по коэффициенту читать нельзя.
- Кому больно — линейной и логистической регрессии как инструменту вывода. Деревьям и бустингу для точности почти безразлично, но важности размазываются между фичами-дублёрами.
- Диагностика — VIF_j = 1/(1−R²_j) из регрессии фичи j на остальные; VIF > 5–10 — тревога; плюс корреляционная матрица.
- Лечение — выкинуть или объединить дубли (сумма, отношение), ridge (L2 стабилизирует оценки), PCA в ортогональные компоненты — ценой интерпретируемости.
⚠️ Частая ошибка: «мультиколлинеарность портит предсказания» — нет, прогноз обычно в порядке; страдают коэффициенты, их знаки и доверительные интервалы.
10Постройте признаки для модели оттока из сырых логов событий — пройдите процесс по шагам.
senior
Короткий ответ: Начинать не с фич, а с определений: дата предсказания и окно метки (например, «уйдёт ли в течение 30 дней после даты X»). Затем as-of-time дисциплина: каждая фича считается только по данным строго до даты предсказания. Дальше оконные агрегаты (RFM), тренды, tenure — и валидация по времени.
Подробно:
- Дизайн таргета — prediction date + label window; одна строка датасета = (клиент, дата предсказания).
- As-of-time — джойны только «по состоянию на дату»; ни один агрегат не заглядывает правее.
- Оконные агрегаты (RFM) — recency (дни с последнего события), frequency (события за 7/30/90 дней), monetary (траты за окно).
- Динамика — дельты и тренды: активность за последние 7 дней vs предыдущие 30 — именно падение и есть предвестник оттока.
- Статика — tenure, тариф, число обращений в поддержку.
- Валидация по времени — train на ранних датах предсказания, test на поздних; не случайный сплит.
──── логи событий ──────────►│ prediction date │──── label window ───►
фичи: только отсюда ▲ таргет: churn здесь
(окна 7/30/90 дней, RFM) └─ правее этой точки ничего не трогаем
⚠️ Частая ошибка: любая фича, заглядывающая за дату предсказания (агрегат «за всю историю», статус подписки на конец месяца) — модель с AUC 0.99 в офлайне и бесполезная в проде.
Источники
Источники и редакционная политика
Материалы RecallDeck сопоставлены с официальной документацией и открытыми публикациями компаний, когда первичный источник доступен. Мы не связаны с упомянутыми работодателями, не публикуем конфиденциальные задания и не продаём места в подборках. Формат найма может меняться — уточняйте его у рекрутера.
От чтения к воспроизведению
Отрепетируйте полный цикл интервью.
RecallDeck возвращает сложные темы по расписанию и помогает удерживать в памяти язык, SQL, архитектуру и поведенческие истории.