Manognaaaaaa/Traffic_Pattern_Clustering
GitHub: Manognaaaaaa/Traffic_Pattern_Clustering
一个结合图拓扑特征与 K-Means 聚类的城市交通风险评估流水线,用于在不同天气和时段场景下自动识别马德里路网的交通风险模式与路段稳定性分类。
Stars: 0 | Forks: 0
# 🚦 图感知交通风险特征聚类
一个机器学习项目,旨在利用图感知聚类算法识别马德里道路交通网络中的交通风险模式。该系统通过分析交通强度、天气状况和道路连通性,将各路段在不同场景下划分为不同的风险特征类别。
## 📋 目录
- [概述](#overview)
- [功能](#features)
- [安装](#installation)
- [使用说明](#usage)
- [项目结构](#project-structure)
- [技术实现](#technical-implementation)
- [预期输出](#expected-outputs)
- [依赖项](#dependencies)
## 🎯 概述
本项目通过结合以下内容,实现了一种新颖的交通风险评估方法:
- **基于图的特征**:使用 NetworkX 利用道路交通网络的拓扑结构
- **无监督聚类**:带有超参数优化的 K-Means 算法
- **场景分析**:多种交通状况(工作日/周末、时间段、天气)
- **稳定性追踪**:跨场景的路段行为分析
## ✨ 功能
- **图感知特征工程**:使用邻接矩阵计算相邻交通模式
- **自动化超参数调优**:对 108+ 种参数组合进行网格搜索
- **多指标评估**:F1-score、轮廓系数、Davies-Bouldin 指数等
- **交互式仪表板**:使用 Streamlit 和 Plotly 进行实时可视化
- **场景对比**:工作日早晚高峰、周末及雨天状况
- **稳定性分类**:识别稳定的高风险、低风险以及对条件敏感的路段
## 🔧 安装说明
### 前置条件
- Python 3.8+
- Jupyter Notebook 或安装了 Jupyter 扩展的 VS Code
### 设置
1. **克隆或下载项目**
```
cd ml-project
```
2. **安装依赖项**
```
pip install pandas numpy networkx scikit-learn plotly streamlit
```
3. **下载马德里交通数据集**
a. 访问 Mendeley Data 存储库:https://data.mendeley.com/datasets/697ht4f65b/2
b. 下载 **Complete Dataset**(包含来自 554 个传感器长达 30 个月的数据)
c. 解压下载的文件(ZIP 格式)
d. 将解压后的文件夹移动到您的项目目录中
4. **验证数据集结构**
```
traffic-risk-clustering/
├── project_main.ipynb
├── streamlit_dashboard.py
└── Enriched Traffic Datasets for Madrid/
└── Complete dataset/
└── 0095ccde8f905222e8791d32c6f3b9dc/
├── MTD_complete_data.csv
├── MTD_id_longitude_latitude.csv
└── MTD_adj_matrix.npy
```
## 🚀 使用说明
### 运行主流水线
1. **执行 notebook**
```
jupyter notebook project_main.ipynb
```
或者在 VS Code 中打开并运行所有单元格。
2. **流水线阶段**(自动化):
- 数据加载与预处理
- 根据邻接矩阵构建图
- 场景过滤(4 种场景)
- 包含邻居聚合的特征工程
- 通过网格搜索进行超参数调优
- 模型训练与评估
- 稳定性分析
- 将结果导出为 CSV 文件
### 启动仪表板
运行主流水线 notebook 之后:
```
streamlit run streamlit_dashboard.py
```
通过 `http://localhost:8501` 访问仪表板
**仪表板功能:**
- 带有风险叠加层的交互式地图可视化
- 场景性能指标
- 稳定性类别分布
- 超参数对比图表
## 📁 项目架构
```
├── project_main.ipynb # Main ML pipeline
├── streamlit_dashboard.py # Interactive visualization dashboard
├── detailed_metrics.csv # Model performance metrics (generated)
├── segment_stability.csv # Stability classifications (generated)
├── hyperparameter_results.csv # Tuning results (generated)
└── Enriched Traffic Datasets for Madrid/ # Data directory
```
## 🔬 技术实现
### 1. 数据集预处理
**缺失值**:缺失数据超过 20% 的特征将被丢弃;剩余的 NaN 值使用中位数进行填补。
**归一化**:在聚类之前对所有特征应用 StandardScaler,以确保权重相等。
**特征工程**:
- 基于时间的特征:hour、day_of_week、month、is_weekend
- 图感知特征:根据邻接关系计算的 neighbor_traffic_mean
- 聚合特征:每个路段的平均交通强度、温度、降水量、风速、车道数
### 2. 模型设计
**算法**:采用 k-means++ 初始化的 K-Means 聚类算法。
**设计依据**:
- K-Means 适用于连续特征空间,并且在 553 个路段上执行效率高
- k-means++ 初始化降低了对随机起始点的敏感度
- 图感知特征捕捉了对于交通模式至关重要的空间依赖性
**超参数网格**:
- 聚类数量:[2, 3, 4]
- 初始化方法:['k-means++', 'random']
- 最大迭代次数:[300, 500]
- 风险阈值百分位数:[60, 70, 80]
- 三种特征集组合
### 3. 训练与评估
**数据划分**:按路段聚合数据,并进行基于场景的验证(无时间泄漏)。
**聚类指标**:
- **轮廓系数**:衡量聚类的分离度(越高越好)
- **Davies-Bouldin 指数**:评估聚类的紧凑度(越低越好)
- **Calinski-Harabasz 分数**:类间 dispersion 与类内 dispersion 的比率
**分类指标**(在聚类到风险类别映射之后):
- 准确率、精确率、召回率、F1-Score
- 每个场景的混淆矩阵
**模型选择**:通过最大化 F1-score 来选择最佳模型,平衡精确率和召回率。
**偏差与方差权衡**:
- 低聚类数 (k=2) 可能会欠拟合,从而错过细微的模式
- 高聚类数 (k=4) 有对噪声过拟合的风险
- 网格搜索通过跨场景验证确定最佳平衡点
**正则化**:特征标准化和中位数填补可防止极端值占据主导地位。
### 4. 文档说明
所有函数都包含解释输入、输出和处理逻辑的 docstring。代码注释详述了:
- 预处理步骤(datetime 转换、数值类型强制转换)
- 训练循环(参数网格迭代、指标计算)
- 评估逻辑(用于聚类到风险映射的多数投票法)
## 📊 预期输出
### 控制台输出(执行期间)
```
Libraries imported successfully!
Configuration loaded!
Loading data...
Original data shape: (45941664, 17)
Preprocessed data shape: (45941664, 21)
Building graph...
Graph created with 553 nodes and 50186 edges
Processing Scenario: weekday_morning_dry
...
Best F1 Score: 0.XXXX
```
### 生成的 CSV 文件
1. **detailed_metrics.csv**:各场景的模型性能
- 列:scenario、best_f1_score、best_accuracy、silhouette_score 等。
2. **segment_stability.csv**:路段级别的稳定性分类
- 列:segment_id、stability_class、high_risk_percentage、n_scenarios
3. **hyperparameter_results.csv**:所有已测试参数组合及其得分
### 仪表板可视化
- 🗺️ **交互式地图**:显示所有场景,并按稳定性类别对路段进行着色
- 📊 **性能指标**:各场景之间的 F1 Score 和 Accuracy 对比
- 📈 **稳定性分布**:显示风险百分比分布的热力图
- 🔍 **特征重要性**:显示哪些特征最重要的柱状图
## 📦 依赖项
```
pandas>=1.3.0 # Data manipulation
numpy>=1.21.0 # Numerical operations
networkx>=2.6.0 # Graph construction and analysis
scikit-learn>=1.0.0 # Clustering algorithms and metrics
plotly>=5.3.0 # Interactive visualizations
streamlit>=1.12.0 # Dashboard framework
```
一次性安装所有依赖项:
```
pip install pandas numpy networkx scikit-learn plotly streamlit
```
## 🎓 学术背景
本项目展示了:
- 用于在无标签交通数据中发现模式的**无监督学习**
- 利用网络拓扑结构的**基于图的特征工程**
- 结合多指标评估的**系统性超参数优化**
- 通过基于场景的测试和稳定性分析进行的**模型验证**
标签:Apex, K-Means聚类, Kubernetes, NoSQL, Python, 交通数据分析, 图神经网络, 无后门, 机器学习, 特权检测, 逆向工具