sanchitdangi/urbancommand-traffic-risk

GitHub: sanchitdangi/urbancommand-traffic-risk

一个基于随机森林和 K-Means 聚类的交通事故风险预测系统,通过交互式 Streamlit 仪表板帮助用户按时间和位置识别高风险交通状况。

Stars: 0 | Forks: 0

# UrbanCommand – 交通风险智能系统 ![Python](https://img.shields.io/badge/Python-3.8%2B-blue) ![Streamlit](https://img.shields.io/badge/Streamlit-1.28%2B-red) ![Scikit-learn](https://img.shields.io/badge/Scikit--learn-ML-orange) ![License: MIT](https://img.shields.io/badge/License-MIT-green) 用于交通事故风险预测的端到端机器学习应用,配备交互式 Streamlit 仪表板,用于探索和实时监控。 ## 概述 UrbanCommand 接收印度各地的交通事故数据,并利用它按时间和位置标记高风险状况。该项目结合了分类模型、用于热点检测的无监督聚类,以及一个多标签页仪表板,用于探索预测结果和趋势。 ## 应用截图 ![核心分析概览](https://static.pigsec.cn/wp-content/uploads/repos/cas/03/03472c7ae1acf03430d54119988b27aacc338e83567cea820c976f7b68f42b72.png) ## 问题描述 交通事故风险在时间和位置上的分布并不均匀。识别风险最高的时间和地点有助于优先进行监控或干预。该项目从历史事件数据中对这种风险进行建模,并以易于交互探索的方式进行可视化。 ## 数据集 - 在 `generate_data.py` 中生成的合成数据集,以 Tier 1-3 的 15 个印度城市为模型 - 2,000 条记录,10 列:`Accident_ID`、`Location`、`Latitude`、`Longitude`、`Date`、`Time`、`Severity`、`Cause`、`Road_Type`、`Weather` - 日期范围:2023 年 1 月 – 2023 年 12 月 ## 机器学习 Pipeline **特征工程:** - 从日期/时间字段中提取 `Hour`、`Month`、`Weekday` - 基于小时数的 `Day/Night` 标记 - `Severity_Weight`(Fatal = 3,Serious = 2,Minor = 1)和 `Time_Weight`(夜间/傍晚时段权重更高) - `Accident_Risk_Score` = `Severity_Weight × Time_Weight`,通过阈值划分为二元的 `Is_High_Risk` 标签 **模型:** - 随机森林分类器(`n_estimators=100`,`class_weight='balanced'`)用于预测 `Is_High_Risk` - K-Means 聚类(`n_clusters=5`)用于地理空间热点分组 - 80/20 训练/测试集划分,分层抽样 ## 模型性能 | 指标 | 数值 | |---|---| | 准确率 (Accuracy) | 94.3% | | 精确率 (Precision) | 93.1% | | 召回率 (Recall) | 95.0% | | F1 分数 (F1 Score) | 94.1% | | 训练时间 | 0.43s | 按重要性排列的主要特征:Hour (0.45)、Location (0.28)、Weather (0.14)、Road Type (0.12)。 由于 `Is_High_Risk` 衍生自 `Severity_Weight × Time_Weight`,且 `Hour` 直接决定了 `Time_Weight`,因此该模型在很大程度上学习的是用于生成标签的规则,而不是独立的现实世界模式。这对于合成数据集来说是正常的,在解读准确率数值时值得注意这一点。 ## 应用功能 包含五个标签页的 Streamlit 仪表板: - **核心分析** — 事故原因与严重程度细分,严重程度分布 - **K-Means 地理智能** — 风险集群的地图视图 - **ML 预测器与 XAI** — 72 小时移动平均预测,交互式假设风险预测器 - **实时 Kafka 订阅流** — 使用 `st.fragment` 模拟实时事件流 - **AI 助手** — 简单的基于规则的界面,用于查询仪表板指标

## 技术栈 Python、Scikit-learn、Streamlit、Plotly、Pandas、NumPy ## 核心特性 - 使用随机森林分类进行交通事故风险预测 - 使用 K-Means 聚类进行地理空间热点检测 - 交互式 5 标签页 Streamlit 仪表板 - 具备特征重要性和假设分析的可解释 ML - 带有置信区间的 72 小时移动平均预测 - 通过异步轮询模拟实时事件监控 - 基于规则的 AI 助手,用于查询运营指标 ## 项目结构 ``` urbancommand-traffic-risk/ ├── app.py ├── ml_engine.py ├── utils.py ├── generate_data.py ├── requirements.txt ├── METRICS.md ├── images/ │ ├── dashboard-overview.png │ ├── geo-clustering.png │ └── forecaster-xai.png ├── README.md └── LICENSE ``` ## 运行方式 ``` pip install -r requirements.txt streamlit run app.py ``` 如果未找到已保存的模型文件,应用将在首次运行时训练模型。 ## 作者 Sanchit Dangi GitHub: [github.com/sanchitdangi](https://github.com/sanchitdangi) 邮箱: sanchitdangipcm@gmail.com
标签:Apex, Kubernetes, Python, Scikit-learn, Streamlit, 交通风险评估, 无后门, 智慧城市, 机器学习, 访问控制, 逆向工具