Результаты обучения
После изучения урока вы сможете:
- Отличать физический тип хранения от семантического типа признака.
- Различать номинальные, порядковые, интервальные и относительные шкалы измерения.
- Выбирать представление числовых, категориальных, временных и текстовых данных.
- Понимать компромиссы one-hot, ordinal, frequency и target encoding.
- Обрабатывать пропуски, редкие и неизвестные категории, масштаб и выбросы.
- Предотвращать утечку данных и проверять доступность признака на момент прогноза.
- Составлять паспорт признаков и объяснять каждое решение подготовки данных.
1. Сначала смысл, затем формат хранения
Представим CSV-столбец со значениями 101, 205 и 307. Технически это целые числа. Но что они означают: расход в литрах, номера помещений или коды типов оборудования? Для расхода имеют смысл разность и среднее. Для номера помещения среднее 204,3 ничего не описывает. Следовательно, тип столбца в файле ещё не определяет тип признака в модели.
Полезно различать три уровня. Физический тип — как значение записано (строка, integer, float, timestamp). Семантический тип — что оно означает в предметной области (измерение, счёт, категория, дата, идентификатор). Роль в задаче — как поле используется (входной признак X, целевая переменная y, ключ группировки, служебное поле). Одно поле может иметь разные роли в разных задачах.
Практический вопрос: какие операции над этим значением имеют смысл? Можно ли сравнивать, складывать, усреднять, упорядочивать? Ответ часто раскрывает семантику лучше, чем имя столбца.
2. Шкалы измерения: что означают числа
Классическая классификация шкал помогает не приписывать данным лишние свойства. Номинальная шкала только различает классы. Порядковая добавляет осмысленное ранжирование. Интервальная допускает сравнение разностей, но ноль условен. Шкала отношений имеет естественный ноль, поэтому осмысленны и отношения величин.
Температура в °C — интервальная шкала: разность между 10 и 20 градусами такая же, как между 20 и 30, но 20 °C не означает «вдвое теплее» 10 °C. Масса в килограммах — шкала отношений: 20 кг действительно вдвое больше 10 кг. Рейтинг «низкий / средний / высокий» порядковый: порядок известен, но расстояние между уровнями не обязательно одинаково.
3. Числовые признаки: измерения и счёт
Непрерывные признаки описывают измеряемые величины и могут принимать значения внутри диапазона: температура, давление, площадь, время работы. Дискретные признаки обычно считают события или объекты: число заявок, этажей, дефектов. Это различие влияет на проверку диапазонов, визуализацию, выбор преобразований и иногда на тип модели.
Проверяйте единицы измерения, точность и физически допустимые границы. Смешение °C и °F или м² и ft² создаёт правдоподобные, но неверные данные. Отдельно анализируйте выбросы: значение 9000 может быть ошибкой ввода, редким реальным событием или другой единицей. Не удаляйте его автоматически — сначала выясните происхождение.
Пропуск тоже имеет смысл. Пустая ячейка, строка «нет данных», ноль и специальное значение −999 — не одно и то же. Иногда сам факт отсутствия измерения информативен: например, датчик чаще отключается при определённом режиме. Можно добавить индикатор пропуска, но нельзя подменять неизвестное значение произвольным числом без объяснения.
4. Категории: номинальные и порядковые
Номинальные категории не имеют естественного порядка: материал стены, тип оборудования, город, канал обращения. Порядковые категории имеют смысловую последовательность: низкий, средний, высокий; начальный, продвинутый, экспертный. Но даже если записать уровни как 1, 2, 3, расстояния между ними не становятся измеренными величинами.
Опасная ошибка — закодировать тип здания числами 1, 2, 3 и передать их алгоритму, который интерпретирует расстояния. Тогда модель может решить, что тип 3 «больше» типа 1 и что разница 1→2 равна 2→3. Для номинальных значений это искусственная геометрия, которой нет в предметной области.
5. Кодирование категорий: варианты и компромиссы
One-hot encoding создаёт отдельный бинарный столбец для каждой категории. Для трёх типов здания получаем три индикатора. Это сохраняет отсутствие порядка, но увеличивает размерность. При тысячах уникальных значений матрица становится широкой и разреженной; тогда нужно оценить частоту категорий, группировку редких значений, hashing или специализированные алгоритмы.
Ordinal encoding назначает категориям целые коды. Он уместен для настоящей порядковой шкалы, если порядок задан явно. Для номинальных категорий его применение зависит от алгоритма: деревья и модели с нативной поддержкой категорий могут трактовать их иначе, чем линейная модель или метод расстояний. Нельзя выбирать кодирование только потому, что оно компактнее.
Frequency encoding заменяет категорию её частотой. Target encoding использует статистику целевой переменной внутри категории. Эти методы могут быть полезны при высокой кардинальности, но особенно чувствительны к утечке и переобучению. Статистики рассчитывают только на обучающих данных, а для target encoding используют out-of-fold схему и сглаживание. Неизвестная категория при применении модели должна иметь заранее определённую обработку.
6. Даты, время и циклические закономерности
Временная метка может включать дату, время, часовой пояс и точность измерения. Прежде чем извлекать признаки, определите событие, к которому относится время: создание заявки, фактическое начало работ, регистрация в системе или получение записи. Это разные моменты. Храните единый стандарт времени и явно учитывайте локальный календарь.
Из даты можно получить год, месяц, день недели, час, выходной, сезон или время с начала события. Но такие признаки оправданы только если доступны в момент прогноза. Для периодических величин простой номер часа создаёт искусственный разрыв между 23 и 0. Циклическое кодирование переносит значения на окружность: соседние часы оказываются близки и по синусу, и по косинусу.
7. Текст и идентификаторы
Короткая метка («авария», «плановый осмотр») — категориальный признак. Свободное описание заявки — текст. Для текста применяют мешок слов, TF-IDF, n-граммы или эмбеддинги. Простые представления хорошо работают для некоторых задач классификации, а эмбеддинги помогают учитывать семантическое сходство, но требуют дополнительных вычислений и контроля качества.
Идентификатор обычно служит ключом, а не описанием объекта. Номер клиента, устройства или заявки может позволить модели запомнить конкретные сущности, а не закономерность. Однако ID иногда полезен для группового разбиения, объединения таблиц, аудита и мониторинга. Поэтому правильное решение не «всегда удалить», а отделить служебную роль от роли входного признака.
8. Масштабирование и преобразования
Многие алгоритмы чувствительны к масштабу. Если площадь измеряется тысячами, а температура десятками, расстояния и градиенты могут определяться преимущественно площадью. StandardScaler центрирует данные и делит на стандартное отклонение; MinMaxScaler переносит значения в заданный диапазон; RobustScaler использует медиану и межквартильный размах и меньше реагирует на экстремальные значения.
Деревьям решений и ансамблям деревьев масштабирование обычно не требуется, поскольку разбиения строятся по порогам признаков. Логарифмирование может уменьшить асимметрию положительных величин, но требует проверки нулей и отрицательных значений. Преобразование должно соответствовать природе признака и целевой задаче, а не быть ритуальным этапом.
9. Пропуски, выбросы и утечка: три источника ложной уверенности
Пропуски могут возникать случайно, зависеть от других наблюдаемых полей или быть связаны с самим неизвестным значением. Поэтому сначала изучают механизм пропусков и их распределение по группам и времени. Среднее, медиана, наиболее частая категория, отдельная категория «неизвестно» и индикатор пропуска — разные гипотезы, а не взаимозаменяемые кнопки.
Утечка возникает, когда при подготовке или формировании признака используется информация, недоступная в реальном сценарии прогноза. Пример: предсказываем завтрашнее энергопотребление, но включаем фактическую загрузку здания за завтра. Другой пример — вычисляем среднее и словарь категорий по всей таблице до разделения на train и test. Метрика становится оптимистичной, но модель не сможет повторить такой результат в работе.
10. Паспорт признаков и воспроизводимый процесс
Для каждого поля зафиксируйте смысл, физический и семантический тип, единицы или допустимые значения, источник, время доступности, долю пропусков, преобразование, поведение неизвестных значений и риск утечки. Такой паспорт делает подготовку данных проверяемой: другой специалист может понять не только что было сделано, но и почему.
Любые параметры, которые модель должна выучить из данных — среднее для заполнения пропусков, масштаб, словарь категорий, частоты или статистика target encoding — подгоняются только на train. Затем тот же объект преобразования применяют к validation, test и новым данным без повторного обучения. В scikit-learn для этого используют Pipeline и ColumnTransformer.
Правило: сначала разделите данные по сценарию применения, затем обучайте преобразования на train, после чего применяйте их к остальным частям. Не позволяйте будущему или тесту влиять на подготовку прошлого.
Практикум: прогноз суточного энергопотребления здания
Для таблицы building_id, date, temperature_c, floor_area_m2, building_type, occupancy_plan, occupancy_actual, energy_kwh составьте паспорт признаков. Цель — прогноз energy_kwh на следующие сутки до их начала. Для каждого поля укажите роль, тип, шкалу, единицы/категории, доступность на момент прогноза, способ кодирования и возможную утечку. Отдельно предложите обработку пропусков и неизвестного building_type. Объясните, какие параметры предобработки обучаются только на train.
| Поле | Семантический тип | Единицы / значения | Решение и риск |
|---|---|---|---|
| temperature_c | Числовой · непрерывный | °C | Масштабирование по необходимости; проверить диапазон |
| floor_area_m2 | Числовой · непрерывный | м² | Проверить единицы и положительность; возможен log |
| building_type | Категориальный · номинальный | список категорий | One-hot / нативная категория; неизвестные значения |
| date | Временной | дата и часовой пояс | Календарные и циклические признаки; без будущего |
| building_id | Идентификатор / группа | уникальный ключ | Для join и группового split; не включать автоматически |
| occupancy_actual | Числовой или категориальный | человек / статус | Недоступен для прогноза до начала суток |
Задание для самостоятельной работы
- Заполните паспорт для каждого поля таблицы.
- Отметьте поля, недоступные до начала прогнозируемых суток.
- Обоснуйте кодирование категорий и обработку неизвестных значений.
- Опишите, какие операции fit выполняются только на train.
Источники и дополнительное чтение
Словарь урока
Самопроверка
Выберите один ответ. После проверки появится объяснение.
Вопрос 1
Поле room_number содержит числа 101, 102, 201. Что следует сделать до кодирования?
Вопрос 2
Какая шкала позволяет говорить, что 20 кг вдвое больше 10 кг?
Вопрос 3
Почему коды 1, 2, 3 опасны для номинального признака в линейной модели?
Вопрос 4
Что делает one-hot encoding?
Вопрос 5
Как корректно использовать target encoding?
Вопрос 6
Почему sin/cos полезны для часа суток?
Вопрос 7
Когда идентификатор лучше оставить вне X?
Вопрос 8
На каких данных обучают scaler и imputer?