Что делали с данными после получения и какую предобработку проводили
Что проверяют
Был ли у вас в руках сырой датасет, а не готовый учебный файл. Смотрят на порядок шагов, на то, чем вы обосновываете каждое преобразование, и главное, понимаете ли вы утечку данных. Ответ уровня «чистил пропуски и нормализовал» закрывает вопрос за минуту и не в вашу пользу.
Как отвечать
Идите по своему проекту, от сырых данных к матрице признаков:
- осмотр: размер, типы, доля пропусков по колонкам, дубликаты, распределение целевой переменной, дисбаланс классов;
- разбиение в самом начале: отложенная выборка, для временных данных строго по времени, и только после этого любые статистики;
- пропуски: сначала природа (не собирали, не применимо, потеряли), потом заполнение через
SimpleImputerвнутриPipelineплюс бинарный признак «значение отсутствовало»; - выбросы: проверка на ошибки ввода, отсечение по квантилям либо устойчивая модель, а не автоматическое удаление хвостов;
- категориальные признаки:
OneHotEncoderс параметромhandle_unknown, при высокой кардинальности целевое кодирование, посчитанное внутри фолда; - масштабирование: нужно линейным моделям, kNN и нейросетям, деревьям и градиентному бустингу безразлично.
Где спотыкаются
Считают статистики по всему датасету до разбиения: среднее для заполнения, параметры скейлера, кодировку категорий. Валидация показывает завышенное качество, в проде метрика падает. Лечится связкой Pipeline и кросс-валидации, где каждое преобразование обучается только на обучающей части фолда.
Утверждают, что StandardScaler приводит данные к нормальному распределению. Он вычитает среднее и делит на стандартное отклонение, форма распределения при этом не меняется. За форму отвечают логарифм, PowerTransformer или QuantileTransformer.
Применяют pd.get_dummies() отдельно к обучающей и тестовой выборке. Наборы и порядок колонок расходятся, модель получает не те признаки, а на новой категории всё ломается молча. Кодировщик обучают один раз и сохраняют вместе с моделью.