sanchitdangi/urbancommand-traffic-risk
GitHub: sanchitdangi/urbancommand-traffic-risk
一个基于随机森林和 K-Means 聚类的交通事故风险预测系统,通过交互式 Streamlit 仪表板帮助用户按时间和位置识别高风险交通状况。
Stars: 0 | Forks: 0
# UrbanCommand – 交通风险智能系统




用于交通事故风险预测的端到端机器学习应用,配备交互式 Streamlit 仪表板,用于探索和实时监控。
## 概述
UrbanCommand 接收印度各地的交通事故数据,并利用它按时间和位置标记高风险状况。该项目结合了分类模型、用于热点检测的无监督聚类,以及一个多标签页仪表板,用于探索预测结果和趋势。
## 应用截图

## 问题描述
交通事故风险在时间和位置上的分布并不均匀。识别风险最高的时间和地点有助于优先进行监控或干预。该项目从历史事件数据中对这种风险进行建模,并以易于交互探索的方式进行可视化。
## 数据集
- 在 `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 助手** — 简单的基于规则的界面,用于查询仪表板指标
标签:Apex, Kubernetes, Python, Scikit-learn, Streamlit, 交通风险评估, 无后门, 智慧城市, 机器学习, 访问控制, 逆向工具