Ваше друге представлення є більш традиційним для категоричних змінних, таких як день тижня.
Це також відоме як створення фіктивних змінних і широко використовується метод кодування категоричних змінних. Якщо ви використовували кодування 1-7, ви повідомляєте моделі, що 4 і 5 дні дуже схожі, тоді як дні 1 і 7 дуже відрізняються. Насправді дні 1 та 7 настільки ж схожі, як 4 та 5. День цієї ж логіки дотримується кодування 0-30 для днів місяця.
День місяця трохи складніший, оскільки хоча кожен тиждень має однакові 7 днів, не кожен місяць має однакові 30 днів: деякі місяці мають 31 день, а деякі місяці мають 28 днів. Оскільки і тиждень, і місяці мають циклічний характер, ви можете використовувати перетворення Фур'є для перетворення їх на гладкі лінійні змінні.
Наприклад ( використовуючи R, мою мову програмування на вибір ):
day_of_month = c(1:31, 1:28, 1:30)
day_of_year <- 1:length(day_of_month)
s = sin((2*pi)/30*day_of_month)
c = cos((2*pi)/30*day_of_month)
plot(day_of_month ~ day_of_year)
lines(15*s+15 ~ day_of_year, col='blue')
lines(15*c+15 ~ day_of_year, col='red')
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))
(Я масштабував змінні синуси / косинуси до 0/30, а не -1/1, так що графік виглядає краще)
Як бачимо, в той час як сира "зміна дня місяця" стрибає назад до нуля в кінці кожного місяця, перетворення синуса і косинуса роблять плавний перехід, завдяки якому модель може знати, що дні наприкінці місяця схожі на днів на початку наступного місяця.
Ви можете додати решту термінів фур'є таким чином:
for(i in 1:3){
s = sin((2*pi)/30*day_of_month + 30 * i/4)
c = cos((2*pi)/30*day_of_month + 30 * i/4)
lines(15*s+15 ~ day_of_year, col='blue')
lines(15*c+15 ~ day_of_year, col='red')
}
legend(10, 30, c('raw', 'sin', 'cos'), c('black', 'blue', 'red'))
Кожна пара синусоїдних і косинусних хвиль робить коло:
m <- lapply(1:4, function(i){
as.matrix(
data.frame(
s = sin((2*pi)/30*day_of_month + 30 * i/4),
c = cos((2*pi)/30*day_of_month + 30 * i/4)
)
)
})
m <- do.call(cbind, m)
pairs(m)
На цій сторінці є дуже зручне пояснення, як маніпулювати хвилями синуса та косинуса.