第 145 题:时间上下文的多尺度,小时/天/周的周期性编码?
题目
时间上下文的多尺度,小时/天/周的周期性编码?
完整讲解
一、时间上下文的多尺度
时间包含多种尺度:小时(一天内时段)、天(星期几、是否周末)、周/月(周期、节假日)。不同尺度刻画不同模式:小时反映「早晚高峰」、天反映「工作日 vs 周末」、周反映「周内节奏」。多尺度即同时使用这些尺度作为特征,使模型能学到时序与周期性。
二、周期性编码
- 离散:将小时(0~23)、星期(0~6)、月内日(1~31)等作为类别特征,做嵌入或 one-hot。简单但周期不连续:23 与 0 在数值上差 23,语义上应相邻(都是夜间)。
- 连续周期:用 $\sin/cos$ 编码,使周期首尾连续。例如小时 $h$:
\(\sin(2\pi h/24),\quad \cos(2\pi h/24);\)
星期 $d$:$\sin(2\pi d/7), \cos(2\pi d/7)$;可再加「是否周末」「是否节假日」等二值或嵌入。
- 多尺度拼接:同时用「小时 sin/cos」「星期 sin/cos」「月内日 sin/cos」或再加「月份」「年」等,组成时间特征向量输入模型,即多尺度周期性编码。
三、作用与实现
- 作用:模型可学到「晚上点击高」「周末浏览时长长」等模式;sin/cos 保证同一周期内平滑、跨周期连续。
- 实现:离线与在线统一用同一时区与同一编码公式;节假日可用单独二值或列表匹配。
- 扩展:可加「距某节日天数」「工作/休息日」等业务相关时间特征,与多尺度一起输入。
四、注意点
- 若只用数值(如 hour=14),模型难以自然学到 23 与 0 的相邻性;sin/cos 或离散+嵌入可缓解。
- 多尺度不必过多(小时+天+周常用),避免冗余与过拟合。
面试要点
- 能说明时间多尺度:小时、天、周等,以及各自刻画的模式(时段、工作日、周期)。
- 能写出 sin/cos 周期编码(如 $h/24$、$d/7$)并说明连续性与首尾相接的好处。
- 能说清多尺度拼接、与离散/二值(周末、节假日)的结合,以及实现一致性。
记忆要点
- 时间多尺度:小时(时段)、天(星期)、周(周期);可加周末、节假日。
- 周期编码:sin/cos 使首尾连续;小时 2πh/24、星期 2πd/7;多尺度拼接输入。
- 离散数值难表周期相邻;sin/cos 或离散嵌入可缓解。