- Вопрос или проблема
- Ответ или решение
- Почему нельзя использовать дату и время в линейной регрессии и как toordinal() отличается от других целочисленных типов данных
- 1. Модели машинного обучения и числовые данные
- 2. Преобразование даты в целочисленный формат с помощью toordinal()
- 3. Как sklearn распознает целые числа, полученные с помощью toordinal()
- Заключение
Вопрос или проблема
Я впервые работаю с датами. Сначала я знал, что мне нужно преобразовать их в временные метки, что дало мне значения в формате “datetime64”. Но потом я узнал, что линейная регрессия из sklearn не принимает datetime как тип данных для регрессии. Почему так? Также после выполнения df.date = df.date.map(datetime.toordinal)
я увидел, что тип данных для столбца – “int64”. Как линейная регрессия sklearn знает, что это не какие-то случайные данные int64, а данные даты (учитывая тот факт, что я получил нужную модель после построения графика)?
Линейная регрессия связывает любое числовое (или бинарное, что является особым случаем числового) значение с коэффициентом. Умножая эти значения на коэффициенты, вы получаете выходные данные, и устанавливая порог, вы знаете, предсказывает ли модель 1 или 0. (Это краткое резюме, вы найдёте множество людей, объясняющих подробно, как это работает).
Если ваша переменная – это дата, у вас есть формат, например “Год/Месяц/День”, и регрессия не знает, как это интерпретировать, поскольку ей нужны числовые данные.
Чтобы использовать дату в регрессии, вы можете в основном взять год в качестве переменной. Если вы хотите быть более точным, вам придется создать свою собственную переменную с нужным значением (например: бинарная переменная, принимающая 1, если день – это суббота или воскресенье, 0 в противном случае).
Замечание: Будьте осторожны, когда используете переменные дат, если вы хотите использовать свою модель для прогнозирования новых, будущих данных. Например, если у вас есть переменная Год, и вы тестируете свою модель в кросс-валидации, это повлияет на результат, поскольку тренд может изменяться с годами. Более того, если вы хотите прогнозировать новые значения ввода, Год всегда будет ‘2020’, так что это не будет очень полезно. Использование его для оценки вашей модели может исказить ваши результаты.
Ответ или решение
Почему нельзя использовать дату и время в линейной регрессии и как toordinal() отличается от других целочисленных типов данных
Когда мы работаем с линейной регрессией, важно понимать, что этот метод требует числовых значений для выполнения своих расчетов. Нельзя напрямую передавать тип данных datetime в регрессионные модели, такие как линейная регрессия из библиотеки Scikit-learn, поскольку они не способны интерпретировать значение в формате даты и времени. Рассмотрим, почему это происходит и как функция toordinal()
помогает в этой задаче.
1. Модели машинного обучения и числовые данные
Линейная регрессия — это статистический метод, который устанавливает отношения между зависимой переменной и одной или несколькими независимыми переменными с помощью линейной функции. Это означает, что модель анализирует, как изменения в независимых переменных (признаках) влияют на зависимую переменную.
Для корректной работы линейной регрессии требуется:
-
Непрерывные числовые значения: Модель требует наличия числовых данных, которые могут быть умножены на коэффициенты, чтобы предсказать результаты. Дата как таковая, представленная в формате "год/месяц/день", не является числом и не может быть интерпретирована как таковая.
-
Интерпретация значений: Даже если бы модель смогла принимать даты, она не имела бы четкой интерпретации, что означают разные даты — например, разницу между двумя днями или месяца, что будет необходимо для построения прогноза.
2. Преобразование даты в целочисленный формат с помощью toordinal()
Функция toordinal()
из модуля datetime
Python преобразует дату в целочисленный формат, который представляет количество дней, прошедших с определенной точки времени (первого номера в григорианском календаре). Например, дата 2023-01-01 будет преобразована в 738156.
Преимущества использования toordinal()
:
-
Сравнимость: Значения, полученные с помощью
toordinal()
, представляют собой последовательные целые числа, которые корректно отображают временные отношения между датами. Например, дата 2023-01-02 будет больше, чем 2023-01-01. -
Сохранение свойств временной линии: Поскольку каждая дата имеет уникальное целочисленное представление, временные зависимости могут быть учтены. Модель может анализировать, как изменение одной даты относительно другой влияет на зависимую переменную.
3. Как sklearn распознает целые числа, полученные с помощью toordinal()
Хотя после применения метода toordinal()
данные действительно становятся целочисленными типами (например, int64), модель линейной регрессии не "знает" изначально, что данные были датами. Более того, она не обязательно требует различия между контекстами данных, когда они представлены в виде чисел. Вся логика в том, что:
- Модель просто работает с числовыми значениями.
- Если данные были правильно преобразованы, то модель будет производить предсказания на основе чисел, которые имеют смысл в контексте, в котором они были созданы (например, дни, прошедшие с определенной даты).
Заключение
Линейная регрессия требует числовых данных для работы, и даты, представленное в формате datetime, не соответствуют этому критерию. Преобразование дат с использованием toordinal()
позволяет сохранить временные отношения и сделать данные более подходящими для моделирования. Этот процесс гарантирует, что значения будут понятны модели, что в конечном счете приводит к более точным прогнозам. Важно также учитывать последствия временных переменных при построении моделей, чтобы избежать потерь в точности предсказаний.