Sua segunda representação é mais tradicional para variáveis categóricas como dia da semana.
Isso também é conhecido como criar variáveis fictícias e é um método amplamente usado para codificar variáveis categóricas. Se você usou a codificação 1-7, está dizendo ao modelo que os dias 4 e 5 são muito semelhantes, enquanto os dias 1 e 7 são muito diferentes. De fato, os dias 1 e 7 são tão parecidos quanto os dias 4 e 5. A mesma lógica vale para codificação de 0 a 30 nos dias do mês.
O dia do mês é um pouco mais complicado, porque enquanto toda semana tem os mesmos 7 dias, nem todo mês tem os mesmos 30 dias: alguns meses têm 31 dias e outros têm 28 dias. Como as semanas e os meses são cíclicos, você pode usar transformações de quatro camadas para convertê-las em variáveis lineares suaves.
Por exemplo ( usando R, minha linguagem de programação preferida ):
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'))
(Dimensionei as variáveis seno / cosseno para 0/30, em vez de -1/1, para que o gráfico pareça melhor)
Como você pode ver, enquanto a "variável dia do mês" bruta volta a zero no final de cada mês, as transformações seno e cosseno fazem uma transição suave que permite ao modelo saber que os dias no final de um mês são semelhantes a dias no início do próximo mês.
Você pode adicionar o restante dos termos de quatro camadas da seguinte maneira:
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'))
Cada par de ondas seno / cosseno forma um círculo:
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)
Esta página tem uma explicação realmente útil de como manipular ondas seno e cosseno.