基于LightGBM-TPE算法对交通事故严重程度的分析与可视化

news2025/7/18 19:25:45

基于LightGBM-TPE算法对交通事故严重程度的分析与可视化

原文: Analysis and visualization of accidents severity based on LightGBM-TPE

1. 引言部分

文章开篇强调了道路交通事故作为意外死亡的主要原因,引起了多学科领域的关注。分析事故严重性特征有助于明确不同风险因素与道路事故间的因果关系,从而提升道路安全。但现有研究在将数据可视化应用于交通安全调查方面存在不足。基于此,作者提出了一种结合LightGBM-TPE(Light Gradient Boosting Machine-Tree-structured Parzen Estimator)与数据可视化的分析方法,以2017年英国交通事故数据为研究对象。该方法相较于其他典型机器学习算法,在f1分数、准确率、召回率和精确率等指标上表现更优。通过LightGBM-TPE计算SHAP值,发现经度、纬度、小时和星期几是与事故严重性最密切相关的四个风险因素,可视化分析进一步验证了这一结论。研究旨在探索一种理解与评估道路交通事故特征重要性的创新方式,为改善交通安全提供建议。

2. 数据描述与预处理

2.1 数据描述

本文研究使用了 2017 年英国交通事故数据集,该数据集来源于 Kaggle 平台,包含了丰富的道路事故信息。数据集中的每一行代表一个交通事故,共提供了 34 个信息列来详细描述每个事故的各个方面。在本研究中,作者将交通事故主要分为两类,即致命事故(fatal accidents)和非致命事故(non-fatal accidents),其中非致命事故包括严重事故和轻微事故。这样的分类方式有助于研究者集中分析导致致命事故的关键因素,为改善交通安全策略提供更有针对性的建议。

研究选取了 2017 年英国发生的交通事故数据,其中致命事故有 1642 起被归类为正类案例,而非致命事故则包括 21780 起严重事故和 100308 起轻微事故,均被标记为负类案例。通过对数据集的初步统计分析,作者对数据集中的分类数据进行了描述性统计,如天气状况、道路类型、星期几、道路表面状况以及光照条件等,这些统计信息为后续的数据预处理和分析奠定了基础。

2.2 数据预处理

在将原始数据输入机器学习模型之前,数据预处理是一个关键步骤,它主要包括数据清洗和数据格式化两个部分,同时针对数据集中的类别不平衡问题进行了处理。

数据清洗

原始数据中包含了许多与事故严重性无关的信息。例如,“Did_Police_Officer_Attend_Scene_of_Accident”(是否有警官出席事故现场)这一特征对于研究事故严重性并无直接关联;“InScotland” 这一信息也因与 “Longitude”(经度)和 “Latitude”(纬度)存在冗余而被剔除。通过数据清洗,作者保留了与事故严重性密切相关的 10 个特征,这些特征可以分为以下四个类别:

  • 事故位置相关特征:“Longitude”(经度)和 “Latitude”(纬度),用于定位事故发生的地理位置。
  • 事故时间相关特征:“Hour”(小时)、“Month”(月份)和 “Day_of_Week”(星期几),用于分析事故发生的时刻及其潜在规律。
  • 环境状况相关特征:“Light Condition”(光照条件)和 “Weather Condition”(天气状况),用于考察事故发生时的环境因素。
  • 道路状况相关特征:“Speed Limit”(限速)、“Road Type”(道路类型)和 “Road Surface Condition”(道路表面状况),用于评估道路条件对事故的影响。

这些经过筛选的特征将作为模型的输入变量,而事故的严重性(致命或非致命)则作为输出变量。

数据格式化

为了使数据更适合机器学习算法的处理,作者对许多分类变量进行了独热编码(one-hot encoding)。例如,原始数据集中的 “Day_of_Week”(星期几)这一分类变量被转换为具体的每一天(如 Sunday、Friday 等),从而为算法提供更明确的信息。这种转换方式能够使模型更好地理解不同类别的特征值对事故严重性的影响,而无需依赖于变量之间的数值大小关系。

数据平衡

在交通事故数据集中,通常非致命事故的数量会远多于致命事故,这导致数据集存在类别不平衡的问题。为了解决这一问题,作者采用了合成少数过采样技术(SMOTE)。SMOTE 算法通过在少数类样本(即致命事故)周围生成新的合成样本,来平衡数据集中的正负类样本数量。相比于简单的欠采样方法,SMOTE 能够避免因减少多数类样本数量而导致的预测准确性下降问题,从而提高模型在处理不平衡数据时的性能。

综上所述,通过数据清洗、数据格式化和数据平衡等预处理步骤,作者有效地提高了数据质量,使其更适合后续的机器学习分析。这些预处理工作为确保模型的准确性和可靠性提供了重要保障,同时也为深入挖掘交通事故数据中的关键特征奠定了坚实基础。

3. 方法论

文章首先介绍了几种典型的机器学习方法,包括逻辑回归、GBDT、XGBoost、LightGBM及本文提出的LightGBM-TPE,并指出将选用预测准确率最高的模型来计算特征重要性,进而进行可视化分析。在LightGBM-TPE中,LightGBM采用基于梯度的单边采样(GOSS)和独占特征捆绑(EFB)等技术,提高了训练速度并减少了内存占用。TPE算法用于优化LightGBM的超参数,通过构建响应面模型并基于原始模型迭代收集额外数据,以找到最佳超参数组合,提升模型性能。研究中通过5折交叉验证确定了最佳超参数,包括树的最大深度(max_depth=10)、叶子数(num_leaves=246)、树的数量(n_estimators=380)和叶子中的最小数据量(min_data_in_leaf=20)。此外,文章还介绍了SHAP(SHapley Additive exPlanation)方法,用于计算每个特征对模型预测的贡献值(SHAP值),并基于此进行可视化分析,展示各特征对事故严重性的影响。

4. 结果与讨论

4.1 性能比较

在这一部分,作者对比了LightGBM-TPE与其他四种主流机器学习模型(LightGBM、逻辑回归、GBDT和XGBoost)的预测性能。对比的指标包括f1分数、准确率、召回率和精确率,而模型性能的验证则通过5折交叉验证完成。具体来说,数据集被随机分为5个连续的子集,每次将一个子集作为验证集,其余四个子集作为训练集,最终结果取五次验证的平均值。
在这里插入图片描述

结果表明,LightGBM-TPE在精确率上表现最为优异,达到了0.9268,而在f1分数、准确率和召回率方面同样取得了最优的成绩。相比之下,GBDT在这五种机器学习方法中表现最差。基于这些结果,作者选择了LightGBM-TPE作为预测模型,用于后续的SHAP值计算和特征重要性分析。这一选择与先前研究的结论一致,即模型的预测性能越高,其计算出的特征重要性结果越可信。

4.2 特征重要性与SHAP值

为了更准确地衡量特征的重要性,作者采用了SHAP值的平均绝对值作为指标。SHAP值基于合作博弈论,能够量化每个特征对模型预测的贡献。结果显示,经度、纬度和小时是影响事故严重性的三个最关键特征,其中经度的重要性位居榜首,随后是纬度和小时。
在这里插入图片描述

SHAP总结图进一步揭示了每个特征对预测输出的影响范围和分布情况。在总结图中,每个点代表一个事故数据,其在y轴和x轴上的位置分别对应特征值和SHAP值,颜色则表示特征值的大小。对于经度和纬度而言,SHAP值相对接近对称轴,这意味着相似的特征值可能对事故严重性产生截然相反的影响。因此,经度和纬度的组合效应比单一特征更能解释事故的严重性。而其他特征则可以独立分析其影响。此外,空间特征(经度和纬度)在LightGBM-TPE模型中占据最为重要的地位,时间特征(小时、星期几和月份)次之,而环境特征(如天气状况)对致命事故发生的影响则相对较弱。

4.3 可视化分析

基于SHAP值的可视化分析,作者深入探讨了关键特征对事故严重性的具体影响。以下是对主要特征的详细分析:

经度和纬度
  • SHAP依赖图显示,随着经度的变化,SHAP值呈现出非线性趋势。特别是在经度介于-4.5到-3.5或0到1.5之间时,大多数事故的SHAP值为负,表明这些区域的致命事故相对较少。
  • 图中还揭示了经度和纬度之间的复杂关系。例如,当经度约为-3.9时,纬度越高,SHAP值也越高,对应的致命事故数量也越多。
  • 进一步分析英国致命事故的地理分布,作者将研究区域划分为18×20的网格,并标出了三个主要城市区域(伦敦、伯明翰以及利物浦、曼彻斯特和谢菲尔德)。结果显示,大城市的致命事故总数显著高于其他地区。然而,高纬度地区的致命事故比例却稳定在最高水平。这表明,尽管大城市的致命事故绝对数量多,但高纬度地区的事故致命比例更高,提示这些地区需要加强交通管理和控制策略。
    在这里插入图片描述
小时和星期几
  • 时间特征的分析表明,SHAP值在凌晨1:00到3:00以及7:00到8:00期间多为负值,而在凌晨3:00到4:00以及19:00到23:00期间多为正值。这表明夜间(19:00到23:00)是致命事故的高发时段。
  • 凌晨3:00是一个显著的转折点,此时SHAP值大幅增加。此外,星期三的凌晨时段记录了最多的致命事故。
  • 通过对小时特征对致命事故数量和比例的影响分析发现,致命事故数量在17:00达到峰值(约118起),而致命事故比例则在凌晨4:00达到最高点(约4.5%)。从19:00到4:00,致命事故比例呈逐步上升趋势。这表明,尽管凌晨时段的事故总数较少,但其致命性却极高。因此,作者建议英国应从夜间到凌晨实施更严格的交通管制政策。
    在这里插入图片描述
总结

通过性能比较、特征重要性和可视化分析,作者不仅验证了LightGBM-TPE模型在预测交通事故严重性方面的优越性,还揭示了关键风险特征对事故致命性的影响机制。这些发现为城市规划者和交通管理部门提供了有价值的参考,有助于制定更有针对性的交通安全策略,特别是在高风险地理位置和时间段加强监管和控制。研究结果强调了数据可视化在理解复杂交通系统和指导政策制定中的重要作用,同时也为未来的研究方向提供了启发,例如进一步探讨制度激励对交通行为和事故演变的影响。

5. 结论

文章基于2017年英国交通事故数据,提出了一种结合LightGBM-TPE和数据可视化的混合机器学习模型,确定了经度、纬度、小时和星期几是决定事故严重性的最重要因素。研究为城市规划者提供了实际建议,例如在高纬度地区实施更有效的交通控制和管理策略,在夜间到凌晨期间加强交通管制。这项工作有助于理解重要风险因素如何影响事故严重性,并为有效控制致命事故发生提供了新方法。尽管如此,作者也指出,未来研究应深入探讨制度激励存在及其成本对交通事故演变动态的影响。

6. 其他

以下是一份基于文章的Python代码,涵盖了数据预处理、模型训练与评估、特征重要性计算及可视化等部分。在运行代码前,请确保安装了相关依赖库,如pandas、numpy、lightgbm、shap、optuna和scikit-learn等。

数据预处理部分

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from imblearn.over_sampling import SMOTE

# 加载数据
data = pd.read_csv('uk_accidents_2017.csv')

# 数据清洗:选择相关特征
features = ['Longitude', 'Latitude', 'Hour', 'Month', 'Day_of_Week', 'Light_Condition', 'Weather_Condition', 'Speed_Limit', 'Road_Type', 'Road_Surface_Condition']
target = 'Accident_Severity'  # 假设目标变量列为 Accident_Severity,需根据实际数据调整

data_selected = data[features + [target]]

# 处理缺失值(如果有)
data_selected = data_selected.dropna()

# 特征分类
categorical_features = ['Day_of_Week', 'Month', 'Light_Condition', 'Weather_Condition', 'Road_Type', 'Road_Surface_Condition']
numerical_features = ['Longitude', 'Latitude', 'Hour', 'Speed_Limit']

# 独热编码
encoder = OneHotEncoder()
encoded_features = encoder.fit_transform(data_selected[categorical_features]).toarray()
encoded_features_df = pd.DataFrame(encoded_features, columns=encoder.get_feature_names_out(categorical_features))

# 合并数值特征和编码后的分类特征
X = pd.concat([data_selected[numerical_features], encoded_features_df], axis=1)
y = data_selected[target]

# 处理类别不平衡:使用SMOTE
smote = SMOTE()
X_resampled, y_resampled = smote.fit_resample(X, y)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_resampled, y_resampled, test_size=0.2, random_state=42)

模型训练与评估部分

import lightgbm as lgb
from sklearn.metrics import f1_score, accuracy_score, recall_score, precision_score

# 转换为LightGBM数据格式
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test)

# LightGBM默认参数
params = {
    'objective': 'binary',  # 二分类问题
    'metric': 'binary_logloss',
    'boosting_type': 'gbdt',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9
}

# 使用TPE进行超参数优化
def objective(trial):
    params_tpe = {
        'objective': 'binary',
        'metric': 'binary_logloss',
        'boosting_type': 'gbdt',
        'num_leaves': trial.suggest_int('num_leaves', 20, 256),
        'max_depth': trial.suggest_int('max_depth', 1, 12),
        'min_data_in_leaf': trial.suggest_int('min_data_in_leaf', 20, 300),
        'n_estimators': trial.suggest_int('n_estimators', 10, 500),
        'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.1),
        'feature_fraction': trial.suggest_float('feature_fraction', 0.5, 1.0)
    }
    model = lgb.train(params_tpe, train_data, valid_sets=[test_data], early_stopping_rounds=50, verbose_eval=False)
    predictions = model.predict(X_test)
    preds = [1 if x > 0.5 else 0 for x in predictions]
    return f1_score(y_test, preds)

import optuna

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)

best_params = study.best_params
print("最佳超参数:", best_params)

# 使用最佳超参数训练模型
model = lgb.train(best_params, train_data, valid_sets=[test_data], early_stopping_rounds=50, verbose_eval=False)

# 模型评估
predictions = model.predict(X_test)
preds = [1 if x > 0.5 else 0 for x in predictions]

print("F1 Score:", f1_score(y_test, preds))
print("Accuracy:", accuracy_score(y_test, preds))
print("Recall:", recall_score(y_test, preds))
print("Precision:", precision_score(y_test, preds))

特征重要性计算与可视化部分

import shap

# 计算SHAP值
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)

# 特征重要性可视化
shap.summary_plot(shap_values, X_test)

# SHAP依赖图(以经度为例)
shap.dependence_plot("Longitude", shap_values[1], X_test)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2340517.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是CRM系统,它的作用是什么?CRM全面指南

CRM(Customer Relationship Management,客户关系管理)系统是一种专门用于集中管理客户信息、优化销售流程、提升客户满意度、支持精准营销、驱动数据分析决策、加强跨部门协同、提升客户生命周期价值的业务系统工具。其中,优化销售…

MYSQL之库的操作

创建数据库 语法很简单, 主要是看看选项(与编码相关的): CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] ...] create_specification: [DEFAULT] CHARACTER SET charset_name [DEFAULT] COLLATE collation_name 1. 语句中大写的是…

Linux 下的网络管理(附加详细实验案例)

一、简单了解 NM(NetworkManager) 在 Linux 中,NM 是 NetworkManager 的缩写。它是一个用于管理网络连接的守护进程和工具集。 在 RHEL9 上,使用 NM 进行网络配置,ifcfg (也称为文件)将不再…

基于SpringBoot的疫情居家检测管理系统(源码+数据库)

514基于SpringBoot的疫情居家检测管理系统,系统包含三种角色:管理员、用户、医生,主要功能如下。 【用户功能】 1. 首页:获取系统信息。 2. 论坛:参与居民讨论和分享信息。 3. 公告:查看社区发布的各类公告…

MATLAB 控制系统设计与仿真 - 35

MATLAB鲁棒控制器分析 所谓鲁棒性是指控制系统在一定(结构,大小)的参数扰动下,维持某些性能的特征。 根据对性能的不同定义,可分为稳定鲁棒性(Robust stability)和性能鲁棒性(Robust performance)。 以闭环系统的鲁棒性作为目标设计得到的…

性能比拼: Nginx vs Caddy

本内容是对知名性能评测博主 Anton Putra Nginx vs Caddy Performance 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 引言 在本期视频中,我们将对比 Nginx 和 Caddy---一个用 Go 编写的 Web 服务器和反向代理。 在第一个测试中,我们会使用…

C++项目-衡码云判项目演示

衡码云判项目是什么呢?简单来说就是这是一个类似于牛客、力扣等在线OJ系统,用户在网页编写代码,点击提交后传递给后端云服务器,云服务器将用户的代码和测试用例进行合并编译,返回结果到网页。 项目最大的两个亮点&…

李宏毅NLP-6-seq2seqHMM

比较seq2seq和HMM Hidden Markov Model(HMM) 隐马尔可夫模型(HMM)在语音识别中的应用,具体内容如下: 整体流程: 左侧为语音信号(标记为 “speech”),其特征表示为 X X X。中间蓝色模…

百度暑期实习岗位超3000个,AI相关岗位占比87%,近屿智能携AIGC课程加速人才输出

今年3月,百度重磅发布3000暑期实习岗位,聚焦大模型、机器学习、自动驾驶等AI方向的岗位比例高达87%。此次实习岗位涉及技术研发、产品策划、专业服务、管理支持、政企解决方案等四大类别,覆盖超300个岗位细分方向。值得一提的是,百…

【技术派后端篇】基于 Redis 实现网站 PV/UV 数据统计

在网站的数据分析中,PV(Page View,页面浏览量)和 UV(Unique Visitor,独立访客数)是两个重要的指标,几乎每个网站都需要对其进行统计。市面上有很多成熟的统计产品,例如百…

JAVA:利用 Apache Tika 提取文件内容的技术指南

1、简述 Apache Tika 是一个强大的工具,用于从各种文件中提取内容和元数据。📄Tika 支持解析文档、📸图像、🎵音频、🎥视频文件以及其他多种格式,非常适合构建🔍搜索引擎、📂内容管理系统和📊数据分析工具。 样例代码:https://gitee.com/lhdxhl/springboot-…

【AI】SpringAI 第二弹:接入 DeepSeek 官方服务

一、接入 DeepSeek 官方服务 通过一个简单的案例演示接入 DeepSeek 实现简单的问答功能 1.添加依赖 <dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-model-openai</artifactId> </dependency> 2…

XMLXXE 安全无回显方案OOB 盲注DTD 外部实体黑白盒挖掘

# 详细点&#xff1a; XML 被设计为传输和存储数据&#xff0c; XML 文档结构包括 XML 声明、 DTD 文档类型定义&#xff08;可 选&#xff09;、文档元素&#xff0c;其焦点是数据的内容&#xff0c;其把数据从 HTML 分离&#xff0c;是独立于软件和硬件的 信息传输…

SQL之DML(查询语句:select、where)

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 select查询语句 在开发中&#xff0c;查询语句是使用最多&#xff0c;也是CRUD中&#xff0c;复杂度最高的sql语句。 查询的语法结构 select *|字段1 [, 字段2 ……] from 表…

Oracle--用户管理

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 用户管理在 Oracle 数据库中至关重要。一个服务器通常只运行一个 Oracle 实例&#xff0c;而一个 Oracle 用户代表一个用户群&#xff0c;他们通过该用…

git忽略已跟踪的文件/指定文件

在项目开发中&#xff0c;有时候我们并不需要git跟踪所有文件&#xff0c;而是需要忽略掉某些指定的文件或文件夹&#xff0c;怎么操作呢&#xff1f;我们分两种情况讨论&#xff1a; 1. 要忽略的文件之前并未被git跟踪 这种情况常用的方法是在项目的根目录下创建和编辑.gitig…

RAG(检索增强生成)、ReAct(推理与行动) 和 多模态AI 的详细解析,包括三者的定义、工作原理、应用场景及协同关系

以下是 RAG&#xff08;检索增强生成&#xff09;、ReAct&#xff08;推理与行动&#xff09; 和 多模态AI 的详细解析&#xff0c;包括三者的定义、工作原理、应用场景及协同关系&#xff1a; 一、RAG&#xff08;Retrieval-Augmented Generation&#xff09; 1. 核心原理 …

6.QT-常用控件-QWidget|windowTitle|windowIcon|qrc机制|windowOpacity|cursor(C++)

windowTitle API说明windowTitle()获取到控件的窗⼝标题.setWindowTitle(const QString& title)设置控件的窗⼝标题. 注意!上述设置操作针对不同的widget可能会有不同的⾏为. 如果是顶层widget(独⽴窗⼝),这个操作才会有效. 如果是⼦widget,这个操作⽆任何效果. 代码⽰例…

Excel/WPS表格中图片链接转换成对应的实际图片

Excel 超链图变助手&#xff08;点击下载可免费试用&#xff09; 是一款将链接转换成实际图片&#xff0c;批量下载表格中所有图片的转换工具&#xff0c;无需安装&#xff0c;双击打开即可使用。 表格中链接如下图所示&#xff1a; 操作方法&#xff1a; 1、双击以下图标&a…

PostgreSQL基础

一、PostgreSQL介绍 PostgreSQL是一个功能强大的 开源 的关系型数据库。底层基于C实现。 PostgreSQL的开源协议和Linux内核版本的开源协议是一样的。。BDS协议&#xff0c;这个协议基本和MIT开源协议一样&#xff0c;说人话&#xff0c;就是你可以对PostgreSQL进行一些封装&a…