车辆驾驶行为分析——比赛复盘(二).

这一部分是比赛的思路复盘,由于时隔两个多月,只能够写个大概。

数据预处理

在前面简单地抽出了一些文件进行了人工分析,我们发现数据出现了不同程度的遗漏,并且经纬度的值也会有着很大的偏差。于是乎现在就需要将所有的数据进行预处理,从而方便后面的分析。

  1. 缺失值。缺失值我们采用常规的处理手段,即缺失值中的速度值和角度值等全部继承上一个点的数据;经纬度用上一个点的经纬度、速度和角度进行计算。
  2. 经纬度漂移。这个地方其实比较玄学,因为经纬度可以通过算法结合速度、角度进行计算,然而这两个参数所给的数据也存在误差。所以导致一段路上的经纬度利用算法修正也会存在一定量的漂移;后来我们尝试使用高德地图的绑路 API ,但是由于数据的限制以及调用次数的限制也存在瓶颈;再后来我们尝试动态修复,即经纬度出错的地方用速度和角度修正,速度角度出错的地方我们用经纬度修正(在第一步实现的情况下),但判断阈值很难敲定。于是最后我们选择相信速度角度数据的准确性,然后找出漂移的区块进行修正。

预处理后,丢弃一部分无用数据,然后送入分析算法之中分析。

分析维度

一级指标 阈值界定
疲劳驾驶 采用驾驶人连续驾驶时间不得超过 4 小时,每次停车休息时间不少于 20 分钟的标准界定疲劳驾驶
急加速 设定急加速行为的加速度阈值为 3m/s² ,为避免误差,计算加速度时间间隔取为 3s
急减速 设定急加速行为的加速度阈值为 -3m/s² ,为避免误差,计算加速度时间间隔取为 3s
怠速预热 怠速预热的条件:行驶速度 v = 0;ACC 状态为 on;
超长怠速 超长怠速的条件:行驶速度 v = 0;ACC 状态为 on;怠速预热时间 t ≥ 60s
熄火滑行 熄火滑行的条件:ACC 状态为 off;速度 0 < V < 5km/h;持续时间 t ≥ 3s
超速 条件:速度 ≥ 60km/h;持续 3s 或以上
急变道 短时间内的角度变化范围在 (20°, 70°) 之间;持续时间 3-5s

上文中所有的阈值以及判断标准均是采用了国家标准或者行业规定及习惯,从而确保准确性。超速那一部分需要读取到每一个经纬度所对应的地理位置,由于调用 API 的次数有限,加之大部分的行驶路段为城市公路,所以定位了 60km/h。

如今我觉着这一部分做得并不完美,主要是因为当时的比赛经验比较少,技术也不够好。有很多的地方界定的阈值调了很多次。像是超速等其实可以用动态的方式进行行为判决,行为数可能也少了一点。 这里的代码结构简单,略过。

自然气象

第三题中的要求是结合自然气象,并给了一系列的省市区不同日期的天气图。所以这就需要我们进行车辆行驶过程中天气的分类,这一部分我用到了百度的坐标逆运算 API 去求出不同经纬度对应的具体行政地址。

由于 API 的限制,同时考虑到极短时间内的跨市区行为低概率,我们采用了 10-20min 的采样间隔对数据进行抽稀以缓解压力,然后去除重复得出每一辆车的途径地点以及日期。

对天气数据进行按地点和时间分类,再将车辆的途径地点一一进行匹配不同的天气环境,然后再根据特定天气环境下的判断标准进行驾驶行为的分析汇总。

分析方法

这一部分由金融的小伙伴负责,大致是先利用识别出的各不良驾驶行为的数据进行直方图分析、百分位值统计分析,建立评分模型对不良驾驶行为进行打分,再用 SPSS 和 Excel 筛选出最高最低分群,并分析单项不良驾驶行为得分分布情况。

此方法可以挖掘出各项驾驶行为表现最安全的司机、各项驾驶行为表现最恶劣的司机,以及总体上不良驾驶行为的恶劣程度分布。

最后结合权重,利用层次分析法建立综合评价指标体系。(有很长的表格,就不贴了)

总结

第一次认真地参加一个比赛,也有了一些心得。

  1. 写算法的时候要注意算法的逻辑速度,因为要计算的数据往往在百万级或千万级,有一个理想的速度是非常必要的;但同时也不要痴迷于优化速度,要把更多时间放到得出的结果上。
  2. 在一开始应该做好项目的管理以及代码的区分,这样能事半功倍。不同的部分应该区分开来,降低耦合度。
  3. 与队友的配合是十分重要的,不仅在于分工,还有平时的交流和资料的分享都可以创造出很多想法。
  4. 多尝试不同的算法以及工具,这不仅是比赛也是学习的平台。

最后也十分感谢金融的小伙伴,她用完美的专业知识填补了我完美的专业空缺,完成了论文的大部分以及最终的综合评价体系和分析。