Sobes.tech
Back to questions
Middle
9

Какие проблемы возникают при добавлении номера месяца как признака?

Companies where asked
Rubbles

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Номер месяца сам по себе задаёт искусственный порядок и расстояние между месяцами, хотя для модели это часто не имеет смысла. Из-за этого линейные модели могут интерпретировать декабрь как «больше» января, а не как отдельный сезонный период. Для временных задач обычно лучше использовать циклическое кодирование, one-hot или признаки сезона.

Определение:

Если добавить месяц как число от 1 до 12, модель начинает воспринимать его как обычную числовую величину. Это создаёт проблему, потому что месяцы категориальны и цикличны: после декабря снова идёт январь. В результате между 12 и 1 возникает ложный разрыв, а между 6 и 7 — такое же расстояние, как между 1 и 2, хотя смысл может быть другим в зависимости от задачи.

Пример использования:

Допустим, нужно предсказать продажи магазина по дате. Если использовать только month = 1..12, модель может неверно считать, что декабрь очень далёк от января, хотя по сезонности они часто соседние. Лучше добавить признаки sin(month) и cos(month), чтобы сохранить цикличность.

import math

month = 12
month_sin = math.sin(2 * math.pi * month / 12)
month_cos = math.cos(2 * math.pi * month / 12)

print(month_sin, month_cos)

Такой подход помогает модели увидеть, что январь и декабрь близки по циклу.

Пояснение кода:

Код преобразует номер месяца в две координаты на окружности.
sin и cos кодируют месяц так, что соседние месяцы оказываются близко в пространстве признаков, а декабрь и январь — тоже рядом, а не на противоположных концах шкалы.
Это особенно полезно для сезонных задач: продажи, спрос, нагрузка, температура.

Ключевые моменты:

  • Номер месяца как число вводит ложную упорядоченность и линейную дистанцию.
  • Месяцы цикличны, поэтому 12 -> 1 нельзя трактовать как большой разрыв.
  • Для линейных моделей это особенно проблемно, но и для других моделей может искажать зависимость.
  • Частые альтернативы: one-hot encoding, синус/косинус, сезонные группы.
  • Выбор способа зависит от задачи: если важен именно сезонный паттерн, циклическое кодирование обычно лучше.