Spaces:
Running
Gridlock β Hackathon Presentation Content
Page-by-page deck content for Gridlock: Event-Driven Congestion Forecasting & Resource Recommendation. Each page gives more content than you need β pick the lines that land hardest. Brag points and suggested visuals are called out per page. A design/theme guide is at the end.
Deck length: 6 core content pages (+ title + closing). Pages 7β8 are optional add-ons if you have time/space.
The one-sentence pitch (memorize this): "We turned a raw, unlabeled Bengaluru traffic-event log into a live decision-support tool that tells a control room β before an incident escalates β how long it will last, whether it needs a closure, how many officers to send, and which spots will keep reoffending."
TITLE PAGE (excluded from the 5β6 count)
- Gridlock
- Tagline options (pick one):
- "From raw event log to operational foresight."
- "Stop firefighting traffic. Start forecasting it."
- "Predict the impact. Pre-position the response."
- Sub-line: Event-driven congestion forecasting & resource recommendation for Bengaluru
- Team name Β· Hackathon name Β· Date
- Visual: a dark Bengaluru map with a few glowing hotspot markers (screenshot from the Map tab).
PAGE 1 β Problem & Solution (keep it punchy)
Headline: "Traffic control today is reactive. We make it predictive."
The problem (2β3 lines max β judges know traffic is bad)
- Every road event β an accident, a procession, construction, a pothole, water-logging β forces a control room to make fast calls: Do we close the road? Divert? How many officers? How long will this tie up the corridor?
- Today those calls are reactive and experience-based. By the time the response is sized correctly, the congestion has already cascaded.
- The data to do better exists β but it ships as a raw event log with no "impact" label, riddled with leakage and multilingual free text.
Our solution (this is what they care about)
- Gridlock forecasts an event's impact at the moment it's reported and converts that forecast into concrete operational actions.
- Four predictions, four decisions:
We predict We recommend Will it need a road closure / diversion? Barricading + diversion plan High vs low operational priority Manpower tier How long until it clears (with an interval) Officer count + clearance ETA Will this spot keep reoffending? Send a root-cause fix, not another patrol - Delivered as a live, deployed web app β not a notebook. Enter what's known at report time, get a calibrated forecast + a recommended response in one click.
Brag line to drop here
"Most teams were handed a labeled dataset and trained a classifier. We were handed a raw operational log and had to define the problem itself β engineer the targets, strip the leakage, and ship a product."
Suggested visual: a simple before/after β "Reactive (today): incident β escalation β scramble response" vs "Gridlock: incident β instant forecast β pre-sized response."
PAGE 2 β Application Flow & System Architecture (overview)
Headline: "One raw CSV in. Four calibrated decisions out. End-to-end."
The flow in plain language
- Ingest the raw Astram event log (46 columns, multilingual, messy).
- Clean it into a typed, sane frame (nulls, coordinates, timestamps).
- Engineer four targets that don't exist in the data.
- Build leakage-safe features computable only from report-time info.
- Train four models (three operational + one forward-looking early-warning).
- Serve predictions + recommendations through a FastAPI backend and a React UI.
The product surface (4 tabs)
- Predict β forecast a single event β manpower/closure/duration/hotspot + action plan.
- Map β Bengaluru-wide congestion, chronic hotspots, closure risk and manpower load.
- Top Areas β every police-station area ranked by risk, fully sortable.
- Models β the evidence: metrics, calibration, operating points, feature importance.
Stack at a glance (shows engineering breadth)
- ML: LightGBM Β· XGBoost Β· CatBoost Β· scikit-learn Β· Optuna Β· sentence-transformers (PyTorch)
- Backend: FastAPI + Uvicorn, single in-process model service (loads once at startup)
- Frontend: React + TypeScript + Vite + TailwindCSS + Radix UI + Leaflet + Recharts
- Delivery: one multi-stage Docker image, deployed live on Hugging Face Spaces
Brag line
"From a raw CSV to a containerized, publicly deployed decision tool β the full ML lifecycle, not just a model.fit()."
Suggested visual: a horizontal pipeline ribbon (CSV β Clean β Targets β Features β Models β API β UI) sitting above three screenshots of the app tabs. Or use the Mermaid diagram from Page 4 in a simplified form here.
PAGE 3 β The Dataset: Problems We Hit & How We Solved Them
Headline: "The hard part wasn't the model β it was making the data tell the truth."
The dataset
- Astram anonymized traffic-event log, Bengaluru.
- 8,173 raw β 8,057 clean events; 9 Nov 2023 β 8 Apr 2024 (~150 days); 46 columns.
- Mix of planned (processions, VIP movement, construction) and unplanned (accidents, breakdowns, potholes, tree-fall, water-logging) events.
The problems β our solutions (this table is the star of the page)
| # | Problem in the raw data | What we did |
|---|---|---|
| 1 | No "impact" label exists | Engineered 4 targets from scratch (closure, priority, duration, chronic hotspot) |
| 2 | Duration isn't a column | Reconstructed it by coalescing resolved β closed β end minus start time |
| 3 | Leakage everywhere β end-point coords & route_path are filled in after a closure is drawn |
Partitioned them into LEAKAGE_COLUMNS; never used as features |
| 4 | Many spellings of NULL | Normalized every null token to real NaN |
| 5 | Sentinel / out-of-range coordinates (0,0 placeholders, data-entry noise) | Clamped to a Bengaluru bounding box (lat 12.6β13.4, lon 77.2β77.9), bad β NaN |
| 6 | Fake "auto-resolved" timestamps from a nightly batch job (e.g. :35:47) | Detected and flagged them so they don't poison the duration label |
| 7 | Severe class skew β closures are only ~7% of events | Skew-aware metrics + calibration + tunable thresholds (not accuracy) |
| 8 | Multilingual free text β English + Kannada + transliterated Kannada | Multilingual sentence-transformer embeddings + an interpretable bilingual lexicon |
| 9 | Bimodal duration β minutes for incidents, weeks for construction | Log-target point model + uncapped quantile models for honest intervals |
THE signature story β tell this out loud
"The single biggest trap: the end-point coordinates 'predict' a closure with ~98% average precision. But they only exist because someone already drew the diversion β it's the answer leaking back into the question. We deliberately deleted our most powerful feature because using it would be cheating. That discipline is the difference between a demo and a deployable model."
Brag line
"We didn't just clean data β we defended it. Every feature is causal: a row only ever sees events reported before it. No future leaks backward."
Suggested visual: the problemβsolution table; or a striking "leakage caught" callout β "Feature that scored AP β 0.98 β removed on purpose."
PAGE 4 β System Architecture Diagram
Headline: "A leakage-safe pipeline, four models, one service."
Drop this diagram (renders in Markdown/Mermaid; or redraw in your deck tool)
flowchart LR
A[Raw Astram CSV<br/>46 cols Β· multilingual] --> B[Cleaning<br/>nulls Β· coords Β· timestamps<br/>auto-batch flagging]
B --> C[Target Engineering<br/>T1 closure Β· T2 priority<br/>T3 duration Β· T4 hotspot]
B --> D[Feature Engineering<br/>causal Β· leakage-safe]
D --> D1[Temporal + cyclical]
D --> D2[Spatial geo-cluster KMeans]
D --> D3[Causal history + recurrence]
D --> D4[Causal target-rate encoding]
D --> D5[Multilingual text embeddings + lexicon]
C --> E
D1 & D2 & D3 & D4 & D5 --> E[Preprocessing<br/>train-fitted assembly<br/>per-task embedding PCA]
E --> F[Chronological split<br/>train = past Β· test = future]
F --> G{Models}
G --> G1[T1/T2/T3: stacked<br/>LightGBM+XGBoost+CatBoost<br/>β logistic meta β isotonic β threshold]
G --> G2[T3 interval: p10/p50/p90<br/>+ conformal correction]
G --> G3[T4 hotspot: calibrated LightGBM]
G1 & G2 & G3 --> H[FastAPI service<br/>loads artifacts once]
H --> I[React + Leaflet UI<br/>Predict Β· Map Β· Top Areas Β· Models]
H --> J[Recommendation layer<br/>manpower Β· barricading Β· diversion]
If you redraw it by hand, keep these three "lanes"
- Data lane (left): CSV β Cleaning β Targets + Features (call out "causal / leakage-safe").
- Model lane (middle): Chronological split β 4 models (highlight the stacked ensemble box).
- Product lane (right): FastAPI β React UI + Recommendation layer β Docker/HF Spaces badge.
Architecture talking points (say these while the diagram is up)
- Multi-task by construction, not a fragile multi-head net β three separately tuned models share one feature pipeline. Robust and independently debuggable.
- Train on the past, test on the future β a chronological split, the only honest way to evaluate something that will run live.
- Everything fitted is fitted on training rows only β vocabularies, PCA, calibration, thresholds. The future never touches the fit.
- The model service loads once β all artifacts warm in memory; predictions are instant.
Brag line
"This isn't a notebook with cells run top-to-bottom. It's a modular pipeline with explicit leakage boundaries, persisted artifacts, and a deployable inference service."
Suggested visual: the Mermaid diagram (export to PNG/SVG), or a clean 3-lane redraw. Color the "leakage-safe" boundary in your accent color to make the discipline visible.
PAGE 5 β Training Process & Model Choices
Headline: "Three decorrelated boosters, stacked, calibrated, and turned into policy."
The recipe (per operational task T1βT3)
Optuna-tuned LightGBM β
Optuna-tuned XGBoost βββΊ logistic meta-learner (on out-of-fold preds)
Optuna-tuned CatBoost β βββΊ isotonic calibration βββΊ decision threshold
- Why three boosters? They make different errors. Stacking decorrelated learners beats any single model β and we tuned each with Optuna, not hand-picked params.
- Why a logistic meta-learner on out-of-fold predictions? It learns how to trust each base model without leaking β the stack never sees a row's own training fold.
- Why isotonic calibration? So a "30% closure risk" actually means 30%. Calibrated probabilities are what let a control room act on the number (Brier scores prove it).
- Why a separate threshold step? Because the cutoff is an operational policy, not a modeling constant β see the operating points below.
Duration is special (heavy-tailed β honest intervals)
- Point estimate on a log target (winsorized) so multi-week construction doesn't dominate the fit.
- Separate p10 / p50 / p90 quantile models + a conformal correction β an honest 80% prediction interval (empirically covers ~78%). We give a range, not false precision.
The 4th model β our differentiator (T4: chronic hotspot early warning)
- Engineered from scratch: at report time, will this ~110 m spot generate β₯2 more events in the next 14 days?
- Strictly causal β features use only earlier events, the label uses only later events, disjoint time windows, right-censored rows dropped.
- Operationally it flips the game: stop re-patrolling the same junction; send a permanent fix (drainage, resurfacing, a marshal).
Headline results (chronological hold-out β put these big on the slide)
| Task | Metric | Result | Why it's good |
|---|---|---|---|
| T2 Priority | PR-AUC | 0.984 (MCC 0.90) | Near-perfect manpower-tier signal |
| T1 Closure | PR-AUC | 0.326 | 4.5Γ the 7% base rate; ROC-AUC 0.835; Brier 0.057 (calibrated) |
| T3 Duration | log-RΒ² / median err | 0.251 / 74 min | Honest fit on a heavy-tailed target; 80% interval covers 78% |
| T4 Hotspot | PR-AUC / recall | 0.441 / 0.875 | 2.8Γ base; catches 189 of 216 emerging hotspots β only 27 missed |
Operating points = ML framed as policy (this impresses judges)
- The closure model isn't one number β we expose risk postures the control room chooses:
Posture Recall Precision Use when Balanced (MCC-optimal) 0.51 0.40 Normal ops Recall-leaning (deployed) 0.66 0.28 Don't miss closures Never-miss (recall β₯ 0.8) 0.83 0.15 VIP / high-stakes days
Intellectual-honesty brag (rare in hackathons β use it)
*"We report two RΒ² numbers for duration and tell you which one is honest. We admit the model can't predict brand-new locations with no history β and show it correctly assigns them low risk instead of inventing signal. We'd rather be trusted than impressive."*
Brag line
"Per-task Optuna tuning, out-of-fold stacking, isotonic calibration, conformal intervals, and threshold-as-policy β this is a production ML playbook, executed in a hackathon."
Suggested visual: the stacked-ensemble diagram + the 4-result table; optionally embed
the real PR / calibration / SHAP plots from reports/figures/ to prove it's measured.
PAGE 6 β UI Snippets (the product, live)
Headline: "The science is invisible. The decision is one click away."
Tab 1 β Predict ("Forecast an event")
- Enter only what's known at report time: location + start time required; everything else is optional and just sharpens the forecast.
- Pick a police station β the map pin and coordinates auto-fill; or drop a pin manually.
- Output is a decision panel, not a JSON dump:
- Manpower hero: HIGH / MEDIUM / LOW + suggested officer count.
- Cards: closure probability (gauge + expected badge), priority, duration (point estimate + 80% interval band), chronic-hotspot risk + flag.
- Barricading, diversion, and a plain-English rationale line.
- Every metric has an (i) info popover explaining what it means and why it's good.
Tab 2 β Map (Bengaluru, dark)
- Four switchable views: Congestion, Chronic hotspots (~110 m cells), Closure risk, Manpower load.
- Heat layer + per-station markers with stat popups; auto-fits to the city; dark/light basemaps (CARTO). It looks like a real ops dashboard.
Tab 3 β Top Areas
- Every police-station area (54 of them) ranked by a blended risk score.
- Fully sortable columns: #events, risk, avg duration, closure rate, high-priority rate, avg manpower. Find the worst corridors in two clicks.
Tab 4 β Models (the receipts)
- Sub-tabs Priority Β· Closure Β· Duration Β· Hotspot, each with headline metric, a metric grid with info popovers, PR / calibration / SHAP charts, confusion matrix, operating points, base-learner comparison, and feature importance.
- Translation: "don't take our word for it β here's the evidence."
Brag line
"A polished, dark-themed, fully responsive product with an interactive city map and a self-documenting model report β built and deployed, not mocked up."
Suggested visual: 3β4 real screenshots (Predict result panel, the dark Map with hotspots, the sortable Top Areas table, one Models sub-tab). Annotate the Predict panel with callouts ("calibrated probability", "80% interval", "recommended action").
PAGE 7 β Conclusion & Impact
Headline: "From reacting to incidents to pre-empting them."
What we built (recap in one breath)
- A leakage-safe, multi-task ML pipeline that engineers four decision-grade forecasts from a raw, unlabeled event log β wrapped in a live, deployed decision-support app.
Why it matters (impact β frame as outcomes, not features)
- Proactive resourcing: size manpower and pre-stage barricading/diversion before congestion cascades, not after.
- Trustworthy numbers: calibrated probabilities + honest intervals mean a control room can act on the output instead of second-guessing it.
- Policy-aware: operating points let commanders dial risk posture up on VIP/festival days and back down on routine days β same model, different stance.
- Break the firefighting loop: the chronic-hotspot model redirects effort from repeatedly patrolling the same pothole/junction to fixing it once β compounding savings over time.
- Equity & planning: the Top-Areas view surfaces chronically under-served corridors for capital planning (resurfacing, drainage, signal upgrades).
The differentiators, restated (your closing brag)
- We defined the problem (engineered 4 targets) β most teams only solved a given one.
- We deleted our strongest feature to kill leakage β ML maturity over a vanity score.
- We calibrated and bounded every prediction β trust, not just accuracy.
- We shipped a forward-looking 4th model no one asked for β root-cause, not firefight.
- We deployed a real product, end-to-end, in a container, on the public web.
Closing line options
- "Gridlock doesn't just predict traffic β it tells a city where to stand before the jam forms."
- "We turned a messy CSV into foresight a control room can act on."
Suggested visual: a clean "Reactive β Predictive" arrow with the five differentiators as icons; or the live deployment URL as a QR code so judges can open it themselves.
PAGE 8 (OPTIONAL) β Future Work & Real-World Deployment
Headline: "Already live. Here's how it scales into the control room."
It's already deployed
- Runs as a single Docker image, live on Hugging Face Spaces (free 16 GB tier) β judges can use it right now. (Same image runs unchanged on Render, AWS, GCP, Azure.)
Productionization roadmap
- Live ingestion: connect to the real-time Astram feed β forecasts the moment an event is logged.
- Feedback loop / online learning: capture actual outcomes β continuously recalibrate thresholds and refresh models (drift-aware).
- Context fusion: add weather, event calendars, and match/festival schedules β strong exogenous drivers of impact.
- Route-level diversion optimizer: turn the closure prediction into an actual graph-based diversion plan over the road network.
- Field app: push the manpower/barricading recommendation to officers' phones.
- Cold-start fix: external priors (road class, land use) so brand-new locations get a sensible first estimate.
- Multi-city transfer: the pipeline is city-agnostic β retrain on any event log.
IRL integration story (say this)
- API-first, so Gridlock slots into the existing control-room dashboard rather than replacing it.
- Lightweight enough for CPU-only inference β no GPU bill to run it in production.
Brag line
"This isn't a prototype hoping to become a product. It's a deployed product with a credible path into a live traffic-operations center."
Suggested visual: a roadmap timeline (Now: deployed β Next: live feed + weather β Later: diversion optimizer + field app) or an integration diagram (Astram feed β Gridlock API β control-room dashboard + officer app).
DESIGN / THEME GUIDE (optional, but it sets you apart)
Theme
- Dark, operational, "control-room" aesthetic β it matches the live app, so the deck and product feel like one thing. Judges remember cohesive branding.
- Palette (from the app):
- Background: near-black slate
#0B0F14/#111827 - Surfaces/cards:
#1A2230with subtle borders#2A3442 - Text: off-white
#E6EDF3, muted#9AA7B4 - Risk ramp (reuse everywhere for instant legibility): green
#4F9E7Dβ amber#CFA247β orange#DB8A52β red#D35F55 - Accent (links/highlights): a cool blueβgreen, echoing the app's
colorFrom: blue, colorTo: green.
- Background: near-black slate
- Fonts: a clean geometric sans for headers (Inter / Space Grotesk / Sora), a mono accent (JetBrains Mono / IBM Plex Mono) for metrics and code-y callouts.
Layout principles
- One idea per slide. A bold headline (the tagline), then β€5 bullets. Park detail in speaker notes β you have far more content here than any single slide should show.
- Lead with the number. Make
0.984,4.5Γ,189 / 216,74 minhuge; caption small. - Show, don't tell: real screenshots and the real PR/calibration/SHAP plots beat clip-art.
- Consistent iconography: reuse the app's Lucide icons (Flame = hotspot, Users = manpower, ShieldAlert = closure, Clock = duration, Gauge = probability) so visuals map 1:1 to concepts across deck and product.
- A persistent footer chip: tiny "Gridlock Β· live on Hugging Face Spaces" + URL/QR on every slide β quietly reminds judges it's real and runnable.
Visual assets you already have (use them)
reports/figures/priority_pr_calibration.png,priority_shap_summary.pngreports/figures/closure_pr_calibration.png,closure_best_pr_calibration.png,closure_shap_summary.png- Live app screenshots: Predict result panel, dark Map with hotspots, Top-Areas table, Models sub-tabs.
- The Mermaid architecture diagram on Page 4 (export to PNG/SVG).
Tooling tips
- PowerPoint/Keynote: build one master "dark + risk-ramp" theme, then duplicate slides β consistency reads as polish.
- Prefer Google Slides / pretty templates? Gamma, Pitch, or Canva all do dark decks well; paste these bullets and swap in the screenshots.
- Export the Mermaid diagram at mermaid.live if your tool can't render it natively.
Quick mapping back to your outline
| Your ask | Page here |
|---|---|
| Problem (short) + solution brief | Page 1 |
| Application flow + system architecture (overview) | Page 2 |
| Dataset: problems + solutions | Page 3 |
| System architecture diagram | Page 4 |
| Training process + model choices | Page 5 |
| UI snippets | Page 6 |
| Conclusion + impact | Page 7 |
| Future work + real-world deployment (optional) | Page 8 |
Tight on space? Merge Page 2 into Page 4 (flow + diagram together) and you land at a crisp 6 content pages: Problem/Solution Β· Dataset Β· Architecture Β· Models Β· UI Β· Conclusion.