Spaces:
Sleeping
Methodology — Congestion Impact Index (CII)
Problem framing
The brief asks us to detect illegal-parking hotspots and quantify their impact on traffic flow. The dataset contains 298k+ parking-enforcement records with location, time, and violation type, but no direct traffic-speed/volume measurement. Rather than claim a flow metric we do not have, we build a transparent proxy for flow impact, derived only from enforcement data, with every weight exposed and defensible.
Pipeline
- Clean — keep records inside the Bengaluru bounding box with valid
timestamps; parse the multi-label
violation_type; keep only parking- relevant violations. - Spatial unit — index every record to an H3 resolution-9 hexagon (~174 m edge ≈ a block / deployable patrol zone). Deterministic and map-friendly.
- Per-cell statistics — severity-weighted volume, active-day persistence, peak-hour concentration, junction proximity.
- CII — combine the components (below).
- Forecast — a LightGBM model predicts next-day intensity per cell.
Severity weighting
Each violation type is weighted by how much it physically blocks moving traffic (not legal severity):
| Violation | Weight | Why |
|---|---|---|
| Parking in a main road | 1.00 | blocks the carriageway |
| Near road crossing / traffic light | 0.90 | blocks turning / sightlines |
| Double parking | 0.85 | removes a live lane |
| Near bus-stop / school / hospital | 0.70 | high-churn frontage |
| On footpath | 0.50 | pushes pedestrians into the road |
| Wrong parking | 0.50 | partial obstruction |
| No parking | 0.40 | designated-clear zone |
A record's severity is the max weight across its violations.
The index
For each cell, with rank-normalised components in [0, 1]:
base = 0.45·volume + 0.30·persistence + 0.25·peak_concentration
CII = base × (1 + 0.50·junction_share) # then scaled to 0–100
- Volume — total severity-weighted violations (how bad, weighted).
- Persistence — active days ÷ total days. Separates a chronic daily bottleneck from a one-off spike. (In this data the worst cells are active ~149/151 days.)
- Peak concentration — share of violations in commute windows (08–11, 17–20). A blockage that happens exactly at rush hour hurts flow more.
- Junction proximity — amplifies cells near junctions, where a blockage cascades upstream.
All weights live in src/config.py and can be re-tuned in seconds.
Forecast model
LightGBM regression on a (cell × day) panel. Features: cell location + junction share, calendar (day-of-week, month, weekend), and lag/rolling features (1/7/14/28-day lags, 7/28-day rolling mean & max). Target: next-day severity-weighted intensity. Validated on the final 21 days, compared against a naive "same weekday last week" baseline.