Spaces:
Sleeping
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 | |
| 1. **Clean** — keep records inside the Bengaluru bounding box with valid | |
| timestamps; parse the multi-label `violation_type`; keep only parking- | |
| relevant violations. | |
| 2. **Spatial unit** — index every record to an **H3 resolution-9 hexagon** | |
| (~174 m edge ≈ a block / deployable patrol zone). Deterministic and | |
| map-friendly. | |
| 3. **Per-cell statistics** — severity-weighted volume, active-day persistence, | |
| peak-hour concentration, junction proximity. | |
| 4. **CII** — combine the components (below). | |
| 5. **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. | |