Đại diện thứ hai của bạn là truyền thống hơn cho các biến phân loại như ngày trong tuần.
Điều này còn được gọi là tạo các biến giả và là một phương pháp được sử dụng rộng rãi để mã hóa các biến phân loại. Nếu bạn đã sử dụng mã hóa 1-7, bạn đang nói với mô hình rằng ngày 4 và 5 rất giống nhau, trong khi ngày 1 và 7 rất khác nhau. Trong thực tế, ngày 1 và 7 cũng tương tự như ngày 4 và 5. Logic tương tự giữ mã hóa 0-30 cho các ngày trong tháng.
Ngày trong tháng khó hơn một chút, bởi vì trong khi mỗi tuần có 7 ngày giống nhau, không phải tháng nào cũng có 30 ngày giống nhau: một số tháng có 31 ngày và một số tháng có 28 ngày. Vì cả tuần và tháng đều theo chu kỳ, bạn có thể sử dụng các phép biến đổi phạm vi để chuyển đổi chúng thành các biến tuyến tính trơn tru.
Ví dụ: ( sử dụng R, ngôn ngữ lập trình tôi chọn ):
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'))
(Tôi đã chia tỷ lệ các biến sin / cosine thành 0/30, thay vì -1/1 để biểu đồ trông tốt hơn)
Như bạn có thể thấy, trong khi "biến số của tháng" thô trở về 0 vào cuối mỗi tháng, các phép biến đổi sin và cos tạo ra sự chuyển đổi suôn sẻ cho phép mô hình biết các ngày vào cuối một tháng tương tự như ngày vào đầu tháng tiếp theo.
Bạn có thể thêm phần còn lại của các điều khoản phạm lỗi như sau:
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ỗi cặp sóng sin / cos tạo thành một vòng tròn:
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)
Trang này có một lời giải thích thực sự tiện dụng về cách điều khiển sóng sin và cos.