You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

随机森林:循环编码vs独热编码?事故时间预测异常原因排查

事故预测问题解答

任务背景:需要预测特定路线不同时段的事故发生数量,先判断各地点是否发生事故再汇总总数。当前使用的特征包括年中日、星期几、小时、天气属性,还通过DBSCAN划分了事故热点区域。训练数据观测到事故峰值在7-10点或13-15点,但预测结果仅在23点出现峰值;尝试用循环编码处理时间特征(代码如下)后效果更差:

import math
modelFeatures['hour_sin'] = modelFeatures.apply(lambda row: math.sin(2 * math.pi * row['Hour']/24.0),axis=1)
modelFeatures['hour_cos'] = modelFeatures.apply(lambda row: math.cos(2 * math.pi * row['Hour']/24.0),axis=1)
modelFeatures['weekday_sin'] = modelFeatures.apply(lambda row: math.sin(2 * math.pi * row['Weekday']/7.0),axis=1)
modelFeatures['weekday_cos'] = modelFeatures.apply(lambda row: math.cos(2 * math.pi * row['Weekday']/7.0),axis=1)
modelFeatures['dayOfYear_sin'] = modelFeatures.apply(lambda row: math.sin(2 * math.pi * row['DayOfYear']/366.0),axis=1)
modelFeatures['dayOfYear_cos'] = modelFeatures.apply(lambda row: math.cos(2 * math.pi * row['DayOfYear']/366.0),axis=1) 

1. 随机森林中使用循环编码是否合适?

不合适。随机森林是基于决策树的集成模型,核心靠特征分裂捕捉离散模式,完全不需要特征具备连续性或循环性的数值表达。把小时、星期几这类时间特征拆成sin/cos两个连续特征,反而打乱了原有的时段聚类逻辑——比如早高峰7-10点原本是一组关联紧密的离散值,循环编码后变成分散的连续数值,树模型很难直接识别这类时段的事故规律,这也是用了循环编码后效果变差的核心原因。

2. 采用独热编码处理时间属性是否可行?

可行,但要根据特征的基数(类别数量)区分对待:

  • 像星期几(7个类别)这种低基数时间特征,独热编码完全没问题,模型能轻松处理这类维度的特征;
  • 但年中日有366个类别,属于高基数特征,独热编码会直接导致特征维度爆炸,既增加计算成本,还容易引发过拟合。这种情况更适合直接把特征标记为类别型输入(主流树模型框架都支持直接处理类别特征),或者用序数编码保留时间的顺序逻辑。
    另外要注意:随机森林本身对类别特征的兼容性很好,哪怕不做任何编码,直接把小时、星期几作为整数型类别特征输入,模型也能有效学习到时段与事故的关联。

3. 预测峰值仅出现在23点的原因分析

大概率是以下几种情况导致的:

  • 训练数据存在偏差:要么训练集中23点的事故样本量异常偏高,要么该时段的标签存在错误,让模型过度拟合了这个时段的模式;也可能23点对应的天气、热点区域等特征在训练集中和事故的关联异常强,模型优先捕捉到了这个最显著的信号。
  • 特征处理逻辑有问题:如果之前的时间特征处理不当(比如错误的编码、特征缺失),破坏了原有的时段模式,导致模型无法识别早高峰、午高峰的规律,只能捕捉到23点的特征关联;或者特征重要性失衡,比如天气特征的权重远高于时间特征,而训练集中23点的恶劣天气样本占比极高,间接让模型预测23点事故更多。
  • 模型参数设置不合理:比如随机森林的树数量太少、树深度太浅,模型拟合能力不足,只能学到最突出的一个峰值;或者正则化参数设置过严,限制了模型学习更多时段的事故模式。
  • 训练/测试集分布不一致:训练集和测试集的时段、特征分布差异大,比如测试集中23点的样本占比过高,或者测试集里23点的特征(比如天气)和训练集完全匹配,但其他时段的特征分布偏离训练集,导致模型只在23点的预测符合预期。

内容的提问来源于stack exchange,提问作者RB10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:25:25