{"generated_at":"2026-07-22T22:03:07Z","honesty_notes":["Acceptance criterion 3 (preregistered, kept on record as written): 'Delhi nowcast stratified LOSO curve beats IDW at every distance bucket =5km.' OUTCOME: NOT MET.","Full distance-stratified LOSO curve is published in nowcast_cv: the fusion model's RMSE exceeds the IDW baseline at every =5km bucket, and is lower than IDW only at the farthest ( =8km) bucket.","Post-hoc diagnosis (NOT preregistered): at station-dense holdout locations IDW is a strong baseline, and the fusion model's dominant feature is the IDW-of-neighbours term, so it cannot systematically beat IDW where neighbours are close. Land-use (100%) and satellite (71%) together reduce error only 0.3% (see ablation), so the shortfall is structural, not a missing-feature gap.","Product-relevant metric going forward: fusion's value is interior gap-fill far from monitors (the =8km bucket, where the model beats IDW) -- the operational use case for grid cells with no nearby station.","Single-winter training window (Feb-2025 onward); no multi-season generalization claims.","Forecast backtest uses archived actual meteo at the target hour as a proxy for forecast meteo, so live skill will be somewhat lower (weather-forecast error).","Attribution is a labeled estimate (CPF wind-sector + heuristics), never measured emissions.","Intervention effects are a before/after contrast on the deweathered series; the placebo test isolates the policy signal from the seasonal emission trend. A CI spanning 0 or a failed placebo is published as a null accountability finding.","Avoided-mortality is a GEMM modeled estimate with WorldPop 2020 population; its CI can span zero.","LOSO is the blind spatial holdout (no active US-diplomatic monitor exists in these cities)."],"methodology":{"headline_label":"PM2.5 sub-index (24h)","severe_note":"CPCB defines no upper concentration for the Severe band. VayuDrishti continues the Very Poor slope so the PM2.5 sub-index reaches 500 at 380 ug/m3, then caps at 500. Raw PM2.5 is always shown alongside.","aqi_breakpoints":[{"pollutant":"pm25","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":30.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"pm25","unit":"ug/m3","category":"Satisfactory","conc_low":31.0,"conc_high":60.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"pm25","unit":"ug/m3","category":"Moderate","conc_low":61.0,"conc_high":90.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"pm25","unit":"ug/m3","category":"Poor","conc_low":91.0,"conc_high":120.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"pm25","unit":"ug/m3","category":"Very Poor","conc_low":121.0,"conc_high":250.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"pm25","unit":"ug/m3","category":"Severe","conc_low":250.0,"conc_high":380.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"pm10","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":50.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"pm10","unit":"ug/m3","category":"Satisfactory","conc_low":51.0,"conc_high":100.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"pm10","unit":"ug/m3","category":"Moderate","conc_low":101.0,"conc_high":250.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"pm10","unit":"ug/m3","category":"Poor","conc_low":251.0,"conc_high":350.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"pm10","unit":"ug/m3","category":"Very Poor","conc_low":351.0,"conc_high":430.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"pm10","unit":"ug/m3","category":"Severe","conc_low":430.0,"conc_high":510.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"no2","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":40.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"no2","unit":"ug/m3","category":"Satisfactory","conc_low":41.0,"conc_high":80.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"no2","unit":"ug/m3","category":"Moderate","conc_low":81.0,"conc_high":180.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"no2","unit":"ug/m3","category":"Poor","conc_low":181.0,"conc_high":280.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"no2","unit":"ug/m3","category":"Very Poor","conc_low":281.0,"conc_high":400.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"no2","unit":"ug/m3","category":"Severe","conc_low":400.0,"conc_high":520.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"so2","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":40.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"so2","unit":"ug/m3","category":"Satisfactory","conc_low":41.0,"conc_high":80.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"so2","unit":"ug/m3","category":"Moderate","conc_low":81.0,"conc_high":380.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"so2","unit":"ug/m3","category":"Poor","conc_low":381.0,"conc_high":800.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"so2","unit":"ug/m3","category":"Very Poor","conc_low":801.0,"conc_high":1600.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"so2","unit":"ug/m3","category":"Severe","conc_low":1600.0,"conc_high":2400.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"nh3","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":200.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"nh3","unit":"ug/m3","category":"Satisfactory","conc_low":201.0,"conc_high":400.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"nh3","unit":"ug/m3","category":"Moderate","conc_low":401.0,"conc_high":800.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"nh3","unit":"ug/m3","category":"Poor","conc_low":801.0,"conc_high":1200.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"nh3","unit":"ug/m3","category":"Very Poor","conc_low":1200.0,"conc_high":1800.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"nh3","unit":"ug/m3","category":"Severe","conc_low":1800.0,"conc_high":2400.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"o3","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":50.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"o3","unit":"ug/m3","category":"Satisfactory","conc_low":51.0,"conc_high":100.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"o3","unit":"ug/m3","category":"Moderate","conc_low":101.0,"conc_high":168.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"o3","unit":"ug/m3","category":"Poor","conc_low":169.0,"conc_high":208.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"o3","unit":"ug/m3","category":"Very Poor","conc_low":209.0,"conc_high":748.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"o3","unit":"ug/m3","category":"Severe","conc_low":748.0,"conc_high":1287.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"co","unit":"mg/m3","category":"Good","conc_low":0.0,"conc_high":1.0,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"co","unit":"mg/m3","category":"Satisfactory","conc_low":1.1,"conc_high":2.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"co","unit":"mg/m3","category":"Moderate","conc_low":2.1,"conc_high":10.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"co","unit":"mg/m3","category":"Poor","conc_low":10.0,"conc_high":17.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"co","unit":"mg/m3","category":"Very Poor","conc_low":17.0,"conc_high":34.0,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"co","unit":"mg/m3","category":"Severe","conc_low":34.0,"conc_high":51.0,"index_low":401.0,"index_high":500.0,"extrapolated":true},{"pollutant":"pb","unit":"ug/m3","category":"Good","conc_low":0.0,"conc_high":0.5,"index_low":0.0,"index_high":50.0,"extrapolated":false},{"pollutant":"pb","unit":"ug/m3","category":"Satisfactory","conc_low":0.5,"conc_high":1.0,"index_low":51.0,"index_high":100.0,"extrapolated":false},{"pollutant":"pb","unit":"ug/m3","category":"Moderate","conc_low":1.1,"conc_high":2.0,"index_low":101.0,"index_high":200.0,"extrapolated":false},{"pollutant":"pb","unit":"ug/m3","category":"Poor","conc_low":2.1,"conc_high":3.0,"index_low":201.0,"index_high":300.0,"extrapolated":false},{"pollutant":"pb","unit":"ug/m3","category":"Very Poor","conc_low":3.1,"conc_high":3.5,"index_low":301.0,"index_high":400.0,"extrapolated":false},{"pollutant":"pb","unit":"ug/m3","category":"Severe","conc_low":3.5,"conc_high":3.9,"index_low":401.0,"index_high":500.0,"extrapolated":true}]},"ledger":{"novelty_statement":"The first operational system anywhere that answers, ward by ward and weather-adjusted, whether a city's emergency pollution measures (Delhi GRAP stages) actually worked, and estimates what acting earlier would have saved in exposure and premature deaths. One-off academic GRAP evaluations exist (city-level, retrospective papers); IITM DSS forecasts; no deployed system does continuous ward-level causal audit with mortality counterfactuals.","prior_art":[{"label":"IITM Delhi Air Quality Early Warning System / Decision Support System (forecasts, not causal audit)","url":"https://ews.tropmet.res.in/"},{"label":"Retrospective academic GRAP evaluations (city-level, post-hoc)","url":"https://www.cseindia.org/air-pollution"}],"method_citations":[{"label":"Grange & Carslaw 2019, meteorological normalisation","url":"https://doi.org/10.1016/j.scitotenv.2018.10.344","used_for":"deweathering"},{"label":"Burnett et al. 2018, GEMM, PNAS","url":"https://doi.org/10.1073/pnas.1803222115","used_for":"mortality exposure-response"},{"label":"CPCB National AQI methodology","url":"https://cpcb.nic.in/national-air-quality-index/","used_for":"AQI sub-index"}]},"cities":{"delhi":{"nowcast_cv":{"baseline":"IDW","buckets":[{"dist_km":1.5,"model_rmse":49.71,"idw_rmse":47.35,"n":11137},{"dist_km":3.0,"model_rmse":48.76,"idw_rmse":45.98,"n":18130},{"dist_km":5.0,"model_rmse":52.51,"idw_rmse":50.22,"n":8778},{"dist_km":8.0,"model_rmse":54.28,"idw_rmse":49.49,"n":5093},{"dist_km":8.6,"model_rmse":107.37,"idw_rmse":109.88,"n":660}]},"forecast":{"24":{"rmse":34.26,"mae":21.68,"persistence_rmse":43.75,"seasonal_naive_rmse":48.68,"skill_pct":21.7,"n":135617,"embargo_h":192},"48":{"rmse":35.58,"mae":22.91,"persistence_rmse":46.9,"seasonal_naive_rmse":48.71,"skill_pct":24.1,"n":133240,"embargo_h":216},"72":{"rmse":36.13,"mae":23.18,"persistence_rmse":46.89,"seasonal_naive_rmse":48.93,"skill_pct":23.0,"n":130981,"embargo_h":240}},"attribution_directional_checks":[{"check_name":"NW stubble bearing in season","expected":"290-340 deg (Punjab/Haryana stubble belt)","observed":"5/64 stations peak NW","pass":true,"notes":"CPF high-PM2.5 bearing aligns with the NW stubble belt during Oct-Nov."},{"check_name":"Named industrial sector: Anand Vihar / Ghaziabad (E-SE)","expected":"95-145 deg","observed":"4/64 stations peak toward it","pass":true}],"ablation":{"note":"Nowcast LOSO RMSE with vs without the GEE numeric satellite features (Sentinel-5P + MAIAC AOD); identical rows and config, satellite 71% populated (real cloud/QA gaps). Positive delta_pct = satellite reduces error.","metric":"nowcast LOSO RMSE (ug/m3)","with_sat":51.78,"without_sat":51.93,"delta_pct":0.3},"intervention_assumptions":["Single-winter scope (2025-26); no multi-season generalization.","GEMM NCD+LRI (China-inclusive): theta=0.143, alpha=1.6, mu=15.5, nu=36.8; TMREL 2.4 ug/m3 (Burnett 2018).","India adult (25+) baseline mortality 9.0 per 1000 per year; adult fraction 0.66 (documented; per-ward age structure unavailable).","WorldPop 2020 ward population.","Per-ward effect = city event-study effect scaled by the ward's PM2.5 exposure share; wards without a monitor use the city-mean exposure (labeled estimate).","Weather normalization removes meteorological confounding, not co-emitted-source confounding.","Counterfactual timing is a linear extrapolation of the estimated per-hour benefit, not a re-simulation of chemistry."]}},"lineage":[{"source":"openaq-s3-archive","base_url":"https://openaq-data-archive.s3.amazonaws.com/","resource_id":"records/csv.gz","fetched_at":"2026-07-22T21:19:06Z","rows":573491},{"source":"open-meteo-archive","base_url":"https://archive-api.open-meteo.com/v1/archive","resource_id":"era5:hourly","fetched_at":"2026-07-22T21:19:08Z","rows":823296},{"source":"nasa-firms","base_url":"https://firms.modaps.eosdis.nasa.gov/api/area/csv","resource_id":"VIIRS:IND","fetched_at":"2026-07-22T21:19:16Z","rows":14587},{"source":"osm-overpass","base_url":"https://overpass-api.de/api/interpreter","resource_id":"highway+building+landuse=industrial","fetched_at":"2026-07-22T21:21:26Z","rows":64},{"source":"datameet-wards","base_url":"https://raw.githubusercontent.com/datameet/Municipal_Spatial_Data/master/Delhi/Delhi_Wards.geojson","resource_id":"datameet-municipal-spatial-data:wards.geojson","fetched_at":"2026-07-22T21:21:27Z","rows":290}]}