Spaces:
Sleeping
Sleeping
| """Central configuration for the parking congestion-impact pipeline. | |
| Every tunable knob lives here so the rest of the code stays declarative and | |
| the choices are transparent (useful when you defend the design to judges). | |
| """ | |
| from pathlib import Path | |
| # ---- Paths ----------------------------------------------------------------- | |
| ROOT = Path(__file__).resolve().parents[1] | |
| DATA_RAW = ROOT / "data" / "raw" / "violations.csv" | |
| DATA_PROCESSED = ROOT / "data" / "processed" | |
| MODELS_DIR = ROOT / "models" | |
| HOTSPOTS_PARQUET = DATA_PROCESSED / "hotspots.parquet" | |
| FORECAST_PARQUET = DATA_PROCESSED / "forecast.parquet" | |
| OFFENDERS_PARQUET = DATA_PROCESSED / "offenders.parquet" | |
| TRENDS_PARQUET = DATA_PROCESSED / "trends.parquet" | |
| TRENDS_BYDAY_PARQUET = DATA_PROCESSED / "trends_byday.parquet" | |
| META_JSON = DATA_PROCESSED / "meta.json" | |
| MODEL_PATH = MODELS_DIR / "lgbm_intensity.txt" | |
| # ---- Geography (Bengaluru bounding box, for sanity filtering) -------------- | |
| LAT_MIN, LAT_MAX = 12.70, 13.40 | |
| LON_MIN, LON_MAX = 77.30, 77.90 | |
| H3_RES = 9 # ~174 m edge hexagons ~ a block / deployable patrol zone | |
| # ---- Time ------------------------------------------------------------------ | |
| TZ = "Asia/Kolkata" | |
| PEAK_WINDOWS = [(8, 11), (17, 20)] # morning & evening commute hours (IST) | |
| # ---- Severity weights: how much each violation blocks MOVING traffic ------- | |
| # Tied to physical flow disruption, not legal severity. Tune and justify. | |
| PARKING_SEVERITY = { | |
| "PARKING IN A MAIN ROAD": 1.00, # blocks carriageway | |
| "PARKING NEAR ROAD CROSSING": 0.90, | |
| "PARKING NEAR TRAFFIC LIGHT OR ZEBRA CROSS": 0.90, | |
| "DOUBLE PARKING": 0.85, # blocks a lane | |
| "PARKING NEAR BUSTOP/SCHOOL/HOSPITAL ETC": 0.70, | |
| "PARKING OPPOSITE TO ANOTHER PARKED VEHICLE": 0.60, | |
| "PARKING ON FOOTPATH": 0.50, # pushes pedestrians to road | |
| "WRONG PARKING": 0.50, | |
| "PARKING OTHER THAN BUS STOP": 0.45, | |
| "NO PARKING": 0.40, | |
| } | |
| # Any violation not in this map contributes 0 (non-parking, e.g. number plate). | |
| # ---- Congestion Impact Index (CII) ----------------------------------------- | |
| CII_WEIGHTS = {"volume": 0.45, "persistence": 0.30, "peak": 0.25} # sum = 1 | |
| CII_JUNCTION_ALPHA = 0.50 # junction-proximity amplification strength | |
| # ---- Modelling ------------------------------------------------------------- | |
| MIN_CELL_VIOLATIONS = 20 # only model cells with >= this many records | |
| LAGS = [1, 7, 14, 28] # day lags for the intensity forecast | |
| ROLL_WINDOWS = [7, 28] # rolling-window features | |
| VALID_DAYS = 21 # last N days held out for validation | |
| RANDOM_STATE = 42 | |