gitadi2/pulsegrid
GitHub: gitadi2/pulsegrid
PulseGrid 将班加罗尔交通事故流转化为实时指挥决策,通过机器学习预测事件影响并优化警力调度,实现比被动控制快约50%的应急响应。
Stars: 0 | Forks: 0
# PulseGrid — 班加罗尔事件影响指挥控制台
**Gridlock 黑客松 2.0 · 第二轮 · 主题:事件驱动的拥堵(计划内与计划外)**
PulseGrid 将班加罗尔交警部门的原始事故流转化为**决策**。当事件被记录的那一刻,它就会预测其造成的破坏并推荐部署方案——需要多长时间才能清理完毕、是否需要设置路障或改道、以及派遣多少警力——随后根据量级预测规划全市范围的警力配置,让控制员可以**进行实时全局指挥**。
基于 **8,173 条真实的匿名 ASTraM 事件**构建(2023年11月 – 2024年4月)。
在线演示:部署于 Streamlit Community Cloud · 所有 ML 均使用 scikit-learn,无繁重依赖。
## 核心亮点
- 🛰 **这是一个实时的指挥中心,而非静态的仪表盘。** 离散事件模拟器以加速时间重放班加罗尔的场景——事件按照该城市*真实的*每小时发生率到达,由模型即时评分,并消耗**有限的警力池**。观察城市压力指数的变化、警力的饱和,以及事件排入*等待警力* (awaiting units) 队列的过程。
- 💬 **直接向它提问即可。** 自然语言智能助手使用相同的模型回答诸如*“周六晚上在 Hosur Road 举办节日活动需要多少警力?”*之类的问题——**完全离线,无需 API key**。
- 🧠 **证明其自身价值。** 反事实引擎显示,在警力配置完全相同的情况下,PulseGrid 的调度逻辑能让警力抵达重大紧急事件的速度比被动型控制室**快约 50%**。
## 核心价值(映射至简报要求)
| 痛点(源自主题) | PulseGrid 的应对方案 |
| --------------------------------------------- | --------------------------------------------------------------------------- |
| 事件影响**未能提前量化** | 清理时间 + 优先级 + 封路模型在事件录入时即可预测其影响 |
| 资源部署**依赖经验** | 封路模型 + 负载均衡优化器可生成数据驱动的执行方案 |
| 未对**计划内**事件进行预案筹备 | 计划事件视图可根据人群规模动态调整警力/路障/预警发布时间窗口 |
| 高峰期分流采用**先到先得** | 具备严重度感知的调度 + 具备预测感知的预备队(在 Policy Lab 中得到验证) |
| **缺乏事件后复盘学习**闭环 | 每个模型均基于已解决的事件进行训练——处理日志*本身就是*训练标签 |
## 模型概览(基于真实数据的 5 折交叉验证)
| 模型 | 任务 | 结果 |
|---|---|---|
| **道路封闭** | 本次事件是否需要设置路障/改道? | **AUC 0.787**, PR-AUC 0.42, **Brier 0.08** (校准良好) |
| **优先级** | 高级与低级分流 | **AUC 0.9997** — 瞬间还原 ASTraM 的既有规则 |
| **清理时间** | 需要多久才能清理完毕? | **P50 中值误差 ≈35 分钟 + 共形校准的 90% 置信区间** (覆盖率已经过验证) |
| **每日量级** | 全市范围的事件负载 | **MAE 18/天**,优于朴素基线 (21) |
**主动优势:** 在其预警阈值下,封路模型能发现**约 57% 的道路封闭事件,同时仅标记约 16% 的事件**——相较于随机审查案例,实现了 **3.6 倍的提升**。
每一项结论均经过验证:清理时间置信区间通过共形校准达到了真实的 90% 覆盖率,封闭概率经过良好校准 (Brier 0.08) 并提供了公开的工作点表格,量级预测击败了季节性朴素基线约 15%,且 Live-Ops 模拟器在小时维度上重现了真实发生率,r≈0.98。所有 ML 模型均使用 scikit-learn `HistGradientBoosting` —— 无繁重依赖。
## 控制台(8 个视图)
1. 🛰 **Live Ops** — 实时引擎:事件按真实的到达模式持续流入,进行实时评分,并提取自有限的警力池。包含城市压力仪表盘、实时地图、警力利用率、**拥堵连锁反应**面板、调度日志,以及用于实时模拟突发状况的 💥 **Inject** 按钮。
2. 💬 **Ask the Console** — 覆盖整个系统的纯英文智能助手(事件人员配置、走廊风险、热点、预测)。使用离线意图解析器,无需外部 API。
3. ⚡ **Live Triage** — 记录事件 → 生成分颜色标记的调度工单(清理时间置信区间、优先级、封闭概率、警力数量、路障 + 改道)**并附带“为何如此决策”的推理说明**。
4. 📋 **Plan Event** — 针对计划内事件(节日、集会、VIP 行程、游行、道路施工)的预部署方案,可根据预期人群规模进行缩放,并结合该场地历史高峰时段的特征。
5. 🗺 **Hotspot Map** — 在深色风格的班加罗尔地图上显示每一起事件,按严重程度着色并可过滤;揭示出真实的拥堵节点(Silk Board, Mekhri Circle, Yeshwanthpura…)。
6. 📈 **Forecast & Staffing** — 7 天量级预测,包含**高峰预警** + 可根据任意人数规模设定的各走廊警力分配方案。
7. 🧠 **Policy Lab** — 在同一条事件高峰流中,对比被动型控制室与 PulseGrid 严重度感知调度策略的重放演示:**抵达重大紧急事件的速度快约 50%**(在 16 名警力的配置下,从 ≈51 缩短至 24 分钟),配备可调节警力规模与高峰强度的滑块。
8. 🧪 **Model Card** — 经过验证的指标、方法论说明,以及坦诚的局限性声明。
## 运行项目
```
pip install -r requirements.txt
streamlit run app.py
```
数据集存放于 `data/astram_events.csv`(加载器也会在仓库根目录或任何符合 ASTraM 命名规则的文件名下找到它)。模型在首次加载时训练一次,并会被缓存。
## 部署(提供面向评委的免费公开链接)
1. 将此文件夹推送到**公开的** GitHub 仓库中(需包含数据 CSV 文件)。
2. 访问 https://share.streamlit.io → **Create app** → 选中该仓库 → 主文件设为 `app.py`。
3. 大功告成 —— 您将获得一个可用于在线演示的 URL。
## 目录结构
```
pulsegrid/
├── app.py # Streamlit command console — 8 tabs (UI)
├── core.py # data prep, 4 models, recommender, planner, forecast, optimiser
├── sim.py # real-time simulation engine + Policy Lab counterfactual
├── assistant.py # offline natural-language co-pilot
├── data/astram_events.csv
├── requirements.txt
├── .streamlit/config.toml
├── APPROACH.md # methodology & design write-up
└── CHANGELOG.md # what shipped, and what's new
```
## 诚实声明
清理时间具有较长的长尾效应(少数事件会持续数天),因此我们报告的是**中值** (median) 误差,并提供一个清理时间*置信区间*,而不是夸大某个具体的点估计值。在本数据集中,优先级基本上由事件起因决定——模型以接近 100% 的准确率还原了这一逻辑,这是一个特性(确保一致且即时的分流),而非数据泄露。Policy Lab 在完全相同的模拟事件流上对比了两种调度策略;这是一个受控的假设分析(what-if),我们已对此作出了明确标注,而非对历史结果提出主张。
标签:Kubernetes, scikit-learn, Streamlit, 应急响应调度, 指挥控制台, 智慧交通, 机器学习预测, 离散事件仿真, 访问控制, 逆向工具