Перейти к содержанию
Данные и AI

10 вопросов по теме «Фичи, подготовка данных и утечки» на собеседовании

В этом материале — 10 вопросов из русской колоды RecallDeck по теме «Фичи, подготовка данных и утечки». Сначала сформулируйте короткий ответ сами, затем откройте подробный разбор и проверьте примеры, ограничения и отказные случаи.

8 мин чтения10 подробных ответовПроверено 24 августа 2026
Главная мысль

Сначала зафиксируйте grain данных, допущения, метрику и риск leakage, затем обсуждайте модель, инструмент или инфраструктуру.

Вопросы и ответы

10 подробных ответов

01

Что такое утечка данных (data leakage)? Назовите три конкретных механизма.

Короткий ответ: Утечка (лик) — в обучение просачивается информация, недоступная в момент реального предсказания. Метрики на валидации отличные, в проде модель разваливается.

Подробно:

  1. Препроцессинг на всей выборке до сплита — скейлер, импьютер, отбор фич или SMOTE, обученные на train+test, уже «видели» тестовое распределение.
  2. Фичи из будущего или пост-фактум — churn_reason, агрегаты по всей истории клиента: значение известно только после наступления таргета.
  3. Дубликаты и связанные строки в разных сплитах — один и тот же пользователь в 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

Как кодировать категориальные признаки и от чего зависит выбор метода?

Короткий ответ: Универсального кодирования нет: выбор диктуют семейство модели и кардинальность фичи. 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 и как применять его безопасно?

Короткий ответ: Target encoding подменяет категорию средним таргета по ней — то есть кладёт таргет прямо в фичу. Наивная версия (среднее по всей выборке) даёт утечку и завышенную CV-оценку. Безопасная схема: out-of-fold кодирование + сглаживание к глобальному среднему + при желании шум.

Подробно:

  1. Механизм лика — собственный таргет строки участвует в среднем её категории; редкие категории почти запоминают ответ.
  2. Out-of-fold — значения кодировки для фолда считаются только по остальным фолдам; для теста — по всему трейну.
  3. Сглаживание (регуляризация) — усадка к глобальному среднему: enc = (n·mean_cat + m·mean_global) / (n + m); редкие категории тянутся к глобальному среднему, а не к своим 2–3 наблюдениям.
  4. 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

Каким моделям нужно масштабирование признаков и почему?

Короткий ответ: Скейлинг нужен моделям, которые опираются на расстояния, скалярные произведения или градиентный спуск: kNN, SVM, k-means, PCA, линейные с регуляризацией, нейросети. Деревьям, лесам и бустингу — не нужен: они инвариантны к монотонным преобразованиям.

Подробно:

Модель Скейлинг Почему
kNN, k-means, SVM обязателен расстояния: фича в метрах «задавит» фичу в километрах
PCA обязателен дисперсия: компоненты уйдут в фичу с большим масштабом
Линейные + L1/L2 обязателен штраф на веса зависит от масштаба фич
Нейросети нужен сходимость градиентного спуска
Деревья / RF / бустинг не нужен сплиты по порогам, порядок значений не меняется

И ключевое: скейлер — часть модели. Fit только на train, transform на valid/test — иначе утечка статистик теста в обучение.

⚠️ Частая ошибка: «скейлю всё на всякий случай» до сплита — безобидная привычка превращается в лик; и наоборот, тратить время на скейлинг для XGBoost.

05

Как обрабатывать пропущенные значения и когда пропуск — сам по себе информация?

Короткий ответ: Сначала понять механизм пропусков, потом выбирать метод: медиана/среднее, модельная импутация, отдельная категория, плюс индикаторная колонка «был пропуск». Бустинги работают с NaN нативно. Если пропуск связан с самим значением (MNAR), он несёт сигнал — его нельзя просто «замазать».

Подробно:

Механизм Смысл Пример
MCAR пропуск полностью случаен сбой сенсора
MAR зависит от других наблюдаемых фич молодые чаще пропускают поле «телефон»
MNAR зависит от самого значения доход не указывают те, у кого он очень высокий или низкий

Практика:

  1. Медиана/среднее/мода — быстрый бейзлайн; медиана устойчивее к выбросам.
  2. Индикатор пропуска — колонка is_missing сохраняет сигнал MNAR.
  3. Модельная импутация (kNN, iterative) — точнее, дороже; обучать только на train.
  4. Нативная обработка — XGBoost/LightGBM/CatBoost сами учат, в какую ветку сплита отправлять NaN.

⚠️ Частая ошибка: «удалю строки с пропусками» как весь ответ: теряем данные и смещаем выборку всюду, где пропуски не MCAR.

06

Как обнаружить и обработать выбросы — и когда их нельзя удалять?

Короткий ответ: Найти: IQR, z-score (для примерно нормальных данных), isolation forest для многомерных случаев. Но первый вопрос — не «как удалить», а «это ошибка или сигнал»: во фроде и детекции аномалий выбросы и есть таргет.

Подробно:

  1. Диагностика — ошибка данных (рост 250 см из-за опечатки, цена −1) или реальное редкое событие (клиент с чеком ×100)?
  2. Ошибки — чинить или удалять, логируя причину.
  3. Реальные экстремумы — не удалять, а снижать влияние:
Приём Что делает
Log / Box-Cox сжимает тяжёлый правый хвост
Winsorizing клиппинг на 1-м/99-м перцентиле
Робастные потери (MAE, Huber) модель меньше штрафуется за экстремумы
RobustScaler скейлинг по медиане и IQR
  1. Границы клиппинга и статистики считаются на train — иначе очередной лик.

⚠️ Частая ошибка: автоматически «чистить» выбросы в задаче фрода или аномалий — выбросить именно те объекты, которые модель должна ловить.

07

Отбор признаков: filter, wrapper и embedded — в чём разница и где здесь прячется утечка?

Короткий ответ: Filter оценивает фичи независимо от модели (корреляция, mutual information), wrapper перебирает подмножества, обучая модель (RFE), embedded отбирает прямо в процессе обучения (L1, важности деревьев). Критично: отбор — часть обучения и обязан жить внутри CV-цикла, иначе оценка завышена ликом.

Подробно:

Класс Примеры Плюсы Минусы
Filter корреляция, mutual info, χ² дёшево, масштабируется игнорирует взаимодействия фич
Wrapper RFE, forward/backward учитывает модель и взаимодействия дорого: модель × подмножества
Embedded L1/lasso, важности бустинга бесплатно при обучении привязан к семейству модели

Где лик: отобрать топ-фичи по корреляции с таргетом на ВСЕХ данных, а потом кросс-валидироваться — фичи уже выбраны с подглядыванием в тестовые фолды, и CV покажет сказку. Правильно: селектор внутри Pipeline, отбор заново на каждом train-фолде.

⚠️ Частая ошибка: «сначала отберу признаки, потом сделаю честную кросс-валидацию» — сам отбор уже был нечестным.

08

Почему встроенная feature importance у бустинга и лесов ненадёжна и что использовать вместо неё?

Короткий ответ: Impurity/gain-важности смещены в пользу непрерывных фич и фич с высокой кардинальностью (у них больше кандидатов на сплит), считаются на train (переобученные сплиты выглядят «важными»), а коррелированные фичи делят важность произвольно. Надёжнее: permutation importance на валидации и SHAP.

Подробно:

Метод Где считается Слабое место
Impurity / gain train смещение к high-cardinality; шумовая фича вроде id может выйти в топ
Permutation validation у коррелированных фич важность занижена: модель «подстраховывается» дублёром
SHAP любой сет честная декомпозиция вкладов, но дороже; корреляции всё равно размывают картину

Практика:

  1. Permutation на отложенной выборке — важность как падение метрики при перемешивании колонки.
  2. SHAP — вклад на уровне объекта плюс глобальная агрегация.
  3. Сгруппировать коррелированные фичи (кластеризация по корреляции) и оценивать группами, а не поодиночке.

⚠️ Частая ошибка: читать feature_importances_ как истину и на её основе выкидывать фичи или делать бизнес-выводы.

09

Мультиколлинеарность: что именно ломается, у каких моделей и что с ней делать?

Короткий ответ: Сильно коррелированные фичи делают коэффициенты линейных моделей нестабильными: огромные стандартные ошибки, знаки меняются от выборки к выборке. Качество предсказания при этом почти не страдает — ломается интерпретация. Диагноз — VIF; лечение — удалить/объединить фичи, ridge, PCA.

Подробно:

  1. Что ломается — матрица XᵀX почти вырожденна → оценки коэффициентов имеют огромную дисперсию; «важность» фичи по коэффициенту читать нельзя.
  2. Кому больно — линейной и логистической регрессии как инструменту вывода. Деревьям и бустингу для точности почти безразлично, но важности размазываются между фичами-дублёрами.
  3. Диагностика — VIF_j = 1/(1−R²_j) из регрессии фичи j на остальные; VIF > 5–10 — тревога; плюс корреляционная матрица.
  4. Лечение — выкинуть или объединить дубли (сумма, отношение), ridge (L2 стабилизирует оценки), PCA в ортогональные компоненты — ценой интерпретируемости.

⚠️ Частая ошибка: «мультиколлинеарность портит предсказания» — нет, прогноз обычно в порядке; страдают коэффициенты, их знаки и доверительные интервалы.

10

Постройте признаки для модели оттока из сырых логов событий — пройдите процесс по шагам.

Короткий ответ: Начинать не с фич, а с определений: дата предсказания и окно метки (например, «уйдёт ли в течение 30 дней после даты X»). Затем as-of-time дисциплина: каждая фича считается только по данным строго до даты предсказания. Дальше оконные агрегаты (RFM), тренды, tenure — и валидация по времени.

Подробно:

  1. Дизайн таргета — prediction date + label window; одна строка датасета = (клиент, дата предсказания).
  2. As-of-time — джойны только «по состоянию на дату»; ни один агрегат не заглядывает правее.
  3. Оконные агрегаты (RFM) — recency (дни с последнего события), frequency (события за 7/30/90 дней), monetary (траты за окно).
  4. Динамика — дельты и тренды: активность за последние 7 дней vs предыдущие 30 — именно падение и есть предвестник оттока.
  5. Статика — tenure, тариф, число обращений в поддержку.
  6. Валидация по времени — train на ранних датах предсказания, test на поздних; не случайный сплит.
──── логи событий ──────────►│ prediction date │──── label window ───►
  фичи: только отсюда        ▲                    таргет: churn здесь
  (окна 7/30/90 дней, RFM)   └─ правее этой точки ничего не трогаем

⚠️ Частая ошибка: любая фича, заглядывающая за дату предсказания (агрегат «за всю историю», статус подписки на конец месяца) — модель с AUC 0.99 в офлайне и бесполезная в проде.

Источники

Источники и редакционная политика

Материалы RecallDeck сопоставлены с официальной документацией и открытыми публикациями компаний, когда первичный источник доступен. Мы не связаны с упомянутыми работодателями, не публикуем конфиденциальные задания и не продаём места в подборках. Формат найма может меняться — уточняйте его у рекрутера.

От чтения к воспроизведению

Отрепетируйте полный цикл интервью.

RecallDeck возвращает сложные темы по расписанию и помогает удерживать в памяти язык, SQL, архитектуру и поведенческие истории.

Начать подготовку

Продолжить подготовку

Библиотека собеседований RecallDeck

Подробные русские ответы, разборы этапов найма и планы подготовки для российского IT-рынка.

RSS