What drives Delhi's air pollution?

Government monitoring data from 37 stations, 2015–2026, joined to weather and satellite fire data, and analysed in SQL.

37 stations 2015–2026 27 SQL queries Read the findings → Code
Worst Station
Jahangirpuri, Delhi - DPCC
PM2.5 128 µg/m³ (2018–26)
Best Station
Lodhi Road, Delhi - IMD
PM2.5 78 µg/m³ (2018–26)
Peak Severity Period
Early Winter (Dec)
86% of days Very Poor or worse
Sharpest YoY Drop
Oct 2021
-83 µg/m³ PM2.5 vs a year earlier

Three things to know

  1. Winter smog is mostly the weather. Shallow winter air traps pollution. December is only 9–17% above what its weather predicts.
  2. Crop burning adds a spike the weather can't explain. Late October to mid-November runs up to 2.2× the weather-predicted level.
  3. PM2.5 is regional; traffic pollution is local. The 2020 lockdown cut NO2 by 41–57% but PM2.5 by only 20–47%.

Worst stations, then and now

Mean PM2.5 in Oct 2018 – Sep 2019 (grey) and Oct 2025 – Sep 2026 (blue), worst now at the top. Raw change, not weather-adjusted: see Then vs Now.

PM2.5 peaks every winter, 2015–2026

Monthly city-wide average. Grey points: fewer than 10 stations reporting.

Bad-air days by season

86% of December days are Very Poor or worse, against 4% in March–September.

How this is measured One city-wide PM2.5 per day (mean of reporting stations, days with ≥5 stations), 2015–2026. CPCB's PM2.5 categories: Very Poor 121–250 µg/m³, Severe 251+. 2020 lockdown (25 March – 31 May) excluded. 95% intervals: December 79–92%, March–September 2.7–5.1%.

Shallow air, dirtier air

The lower the mixing height, the higher the PM2.5. October and November sit above the pattern.

How this is measured Mixing height is the depth of air that pollution can spread into (ERA5 reanalysis, central Delhi), 2015–2026; the weather source has none for January–June 2024. April–June are dustier than their mixing height suggests because of pre-monsoon dust storms.

Pollution beyond the weather

Late October to mid-November reaches 2.2× what the weather predicts: the crop-burning window.

How this is measured Dry days only. Each day is compared with typical days that had the same mixing height and wind, using every month except October–November as the baseline. 1× means the weather fully explains the pollution. Diwali falls in the same window. 2015–2026, without the 2020 lockdown or days missing mixing height. 95% intervals: late October 1.3–1.8×, early November 1.9–2.6×.

Crop-fire smoke rides the wind

After a season's heaviest burning days, Delhi's PM2.5 reaches 2.3× the weather prediction when the wind blows from Punjab. In other winds the effect is much smaller.

How this is measured Daily satellite fire counts in Punjab and northern Haryana (NASA FIRMS, VIIRS), the day before, 2015–2025. Days are split into thirds within each season, because detections fell about 90% after 2021. Each bar compares PM2.5 with same-weather days, as in "Pollution beyond the weather". 15 October – 30 November, dry days only, and the weeks around Diwali removed: crackers are local smoke that needs no north-westerly. With the wind from Punjab, the rise from fewest to most fires is +1.02× (95% interval +0.61 to +1.45). The difference from other winds, +0.70 (+0.20 to +1.24), holds in 99.7% of resamples: the wind is what carries the smoke in.

The 2020 lockdown test

Traffic (NO2) and dust (PM10) fell most. About half of the PM2.5 stayed.

How this is measured 25 March – 3 May 2020 against the same dates in 2019, same stations. Grey: how much lower 2020 already was on 1–21 March. Blue: the extra drop during the lockdown, a conservative lower bound. White diamonds: a second estimate comparing dry days with same-weather days. Resampling stations, NO2 fell further than PM2.5 in all 500 resamples.

Local or regional?

PM2.5 is similar everywhere (1.6× spread). NO2 varies 4.3× between stations.

How this is measured Each dot is one station's mean over network days (2018–2026, days when at least 80% of stations reported) divided by the median of all stations. A narrow spread means a regional pollutant; a wide spread means local hotspots. SO2 is low everywhere.

The Diwali spike

The week after Diwali averages 1.9× the PM2.5 of the three weeks before, across ten festivals.

How this is measured Anchored on each year's actual Diwali date: 3 weeks before = days −21 to −8, week before = −7 to −1, Diwali week = day 0 to +7. 2015–2025; 2016 has no data, and 2017's baseline rests on 2 days. 2020 is the exception (0.8×): that Diwali came after the stubble peak, with a cracker ban. Diwali overlaps stubble season, so not all of the jump is firecrackers.

Is Delhi's winter air better than before 2020?

Not measurably, across eight winters with no gaps. Severe days are rarer in most recent winters, but for the same weather, winter pollution has hovered around its 2018–20 level. Grey bars: 2018–20. Blue: after. Dotted line: the 2018–20 average.

How this is measured The same 12 stations in every winter (November–February), so a changing station mix can't fake a trend. Sources: the official Kaggle data to June 2020, OpenAQ to 2021 (checked against Kaggle: PM2.5 r = 0.97), and CPCB's own daily data from 2022 (checked against OpenAQ: r = 0.96, median difference 1.1%). The verdict rule was written down before the numbers were run: the trend in the weather-adjusted ratio is −0.014 per winter (95% interval −0.048 to +0.023), so “no clear trend”. 2023–24 (faded) covers November–December only, because the weather data has no mixing height for January–June 2024; on all its days it had 11.6% severe days. Leaving it out, or using November–December for every winter, gives the same verdict. The pre-registered plan.

Fires fell 90%. The smoke window didn't.

Satellite-detected crop fires collapsed after 2021, but Delhi's pollution in the smoke window, relative to its weather, stayed inside its 2018–21 range in 2023, 2024 and 2025.

Did the burning move into the night?

The satellite passes at about 13:30 and 01:30. In 2024 and 2025, night detections were 3–4% of the total, against under 0.5% before: daytime fires fell about 90%, night fires didn't fall. A test written down in advance calls that support for a shift, but a few hundred night fires can't account for the missing tens of thousands. Fires lit in the evening and out by 01:30 are invisible to both passes.

How this is measured Top: fires detected by NASA's VIIRS satellite in Punjab and northern Haryana, 15 October – 30 November. Bottom: Delhi PM2.5 from 16 October to 15 November, divided by what the day's weather predicts, on the same 12-station panel. 2025 minus 2018–21: −0.10 (95% interval −0.50 to +0.26). No PM2.5 points for 2015–16 (too few panel stations yet). From 2022 the PM2.5 is CPCB's own data. Night share: VIIRS night-pass detections as a share of all, 15 October – 30 November, against a rule set before downloading: each of 2023–25 above the highest share of 2015–21. Day plus night detections match the published counts exactly.

Which rule should send a "bad air tomorrow" alert?

The obvious rule (B: today was bad) never warns before the first bad day. Rule E warned before 69% of them, within the false-alarm budget.

A every day, November–January

B today was Very Poor (AQI > 300)

C today was Poor or worse (AQI > 200)

D forecast: low mixing height, no rain

E C and D together chosen

F B or D

G B, or C and D together

How this is measured Each rule decides in the evening whether to alert for tomorrow; a hit is a city-wide AQI above 300. "First bad days" are the start of each bad spell (today fine, tomorrow bad): the warning that changes what people do. Rules and the choice criterion were fixed in advance: on 2015–17, pick the best first-bad-day rate with at most 4 false alerts a month. Scores shown are 2018–20, which played no part in the choice. The forecast is the actual next-day weather, so real-world scores would be somewhat lower. Rule E: 34 of 49 first bad days (95% interval 55–80%); rule B: 0 of 49 (at most 7%).

The future test: two periods of three passed

Rule E, translated to PM2.5, on years it never saw, against criteria written down before scoring. The original test needed both of its periods, so it formally fails. The gap years, scored later, passed comfortably.

PeriodRule E: first bad days warnedCalendar ruleFalse alerts / monthVerdict
Jul 2020 – Oct 202264% (16 of 25)40%2.4Pass
Nov 2022 – Jan 2025 CPCB, added later81% (22 of 27)56%2.1Pass
Feb 2025 – Oct 202640% (4 of 10)50%0.8Fail
How this is measured Bad day: city-wide PM2.5 above 120 µg/m³ (the CPCB Very Poor boundary), since the new data has no official AQI. The translation alone lowers rule E from 69% to 57% on 2018–20. 2025–26 had only 10 first bad days in the OpenAQ data: 95% intervals 17–69% for rule E and 24–76% for the calendar rule. On CPCB's more complete data for the same months it passes (8 of 15, 53%), so that failure rests on a handful of days. The gap period skips January–June 2024, where the weather data has no mixing height. Plans: future test, gap period.

Scorecard, 2018–2020

Rules scored on years they were not tuned on.

RuleFirst bad days warnedAll bad days warned Alerts rightAlerts / monthFalse / month
A calendar Nov-Jan37%64%73%7.92.2
B today > 3000%80%79%9.01.8
C today > 20098%100%51%17.68.7
D weather (low lid, dry)71%84%49%15.37.8
E today > 200 AND weather69%83%66%11.33.9
F today > 300 OR weather71%94%49%17.08.6
G today > 300 OR (today > 200 AND weather)69%94%64%13.14.7

Station map

Pick a view. Colour and size both show the value. Hover a station, or click it for its full profile.

Loading…

Most persistent hotspots

Jahangirpuri, Anand Vihar and Wazirpur are among the month's 5 worst in more than half of all months.

How this is measured Only months with ≥20 reporting stations (2018–2026, apart from thin months in 2020–21). PM2.5, 2015–2026.

Rolling average by station

7- and 30-day PM2.5, 2015–2026, over true calendar windows. Pick a station from the dropdown in the chart.

Days in each PM2.5 category

CPCB's PM2.5 bands, 2015–2026. Switch between the 15 worst and 15 best stations.

Compare two stations

30-day rolling PM2.5, 2015–2026.

About this analysis

  • Data: CPCB station readings, 2015–2026 (Kaggle to June 2020, then CPCB's portal, with OpenAQ filling gaps), daily weather (ERA5 via Open-Meteo) and crop-fire counts (NASA FIRMS).
  • Measure: PM2.5 throughout, on CPCB's PM2.5 bands, because the official AQI stops in 2020. The early-warning rules keep their original AQI design.
  • Fair comparisons: city-wide figures need ≥5 reporting stations; trends compare the same stations; station rankings use network days (2018–2026, ≥80% of stations reporting).
  • Cleaning: two sensor faults removed (Punjabi Bagh PM10, early-2015 CO).
  • Read more: findings memo · SQL queries · code

All stations

Click a column to sort, or search by name. Rank is by PM2.5 on network days, 2018–2026; the change is raw PM2.5, not weather-adjusted.

Rank Station PM2.5 2018–26 PM2.5 2018–19 PM2.5 2025–26 Change Worst month
1 Jahangirpuri, Delhi - DPCC 128 139 126 -10% 2021-11
2 Anand Vihar, Delhi - DPCC 127 136 129 -5% 2016-11
3 Wazirpur, Delhi - DPCC 123 144 126 -13% 2018-12
4 Bawana, Delhi - DPCC 120 123 123 0% 2023-11
5 Mundka, Delhi - DPCC 119 134 115 -15% 2023-11
6 Rohini, Delhi - DPCC 117 136 122 -10% 2018-12
7 Nehru Nagar, Delhi - DPCC 116 128 113 -12% 2018-12
8 Punjabi Bagh, Delhi - DPCC 112 112 109 -2% 2017-11
9 Vivek Vihar, Delhi - DPCC 110 110 113 +3% 2024-11
10 Narela, Delhi - DPCC 108 117 107 -9% 2021-11
11 Ashok Vihar, Delhi - DPCC 108 122 111 -9% 2024-11
12 R K Puram, Delhi - DPCC 107 114 109 -4% 2023-11
13 Burari Crossing, Delhi - IMD 105 129 99 -23% 2018-12
14 Sonia Vihar, Delhi - DPCC 105 120 107 -11% 2024-11
15 ITO, Delhi - CPCB 104 113 100 -11% 2020-11
16 Dwarka-Sector 8, Delhi - DPCC 103 106 95 -10% 2023-11
17 Shadipur, Delhi - CPCB 103 128 86 -33% 2024-11
18 Patparganj, Delhi - DPCC 102 105 102 -2% 2024-11
19 Alipur, Delhi - DPCC 101 103 99 -4% 2024-11
20 NSIT Dwarka, Delhi - CPCB 101 111 70 -37% 2017-11
21 Okhla Phase-2, Delhi - DPCC 98 108 94 -12% 2023-11
22 Sirifort, Delhi - CPCB 98 102 104 +2% 2016-11
23 North Campus, DU, Delhi - IMD 96 113 95 -16% 2020-11
24 DTU, Delhi - CPCB 96 121 96 -21% 2017-11
25 CRRI Mathura Road, Delhi - IMD 95 116 87 -25% 2017-11
26 Major Dhyan Chand National Stadium, Delhi - DPCC 95 96 80 -17% 2024-11
27 Jawaharlal Nehru Stadium, Delhi - DPCC 92 104 95 -9% 2018-12
28 Mandir Marg, Delhi - DPCC 92 105 86 -19% 2017-11
29 Pusa, Delhi - DPCC 91 100 96 -4% 2023-11
30 Dr. Karni Singh Shooting Range, Delhi - DPCC 91 91 94 +3% 2023-11
31 IHBAS, Dilshad Garden, Delhi - CPCB 87 114 85 -25% 2019-01
32 Sri Aurobindo Marg, Delhi - DPCC 83 89 76 -14% 2024-01
33 Najafgarh, Delhi - DPCC 83 93 76 -18% 2024-11
34 IGI Airport (T3), Delhi - IMD 82 92 73 -21% 2023-11
35 Pusa, Delhi - IMD 81 83 82 -2% 2024-11
36 Aya Nagar, Delhi - IMD 79 77 75 -2% 2024-11
37 Lodhi Road, Delhi - IMD 78 87 77 -12% 2017-11

Data coverage

Share of days with a PM2.5 reading, 2015–2026. Most stations joined in 2017–18; mid-2020 to 2021 is patchy (OpenAQ only).

The latest readings from the same 37 stations, via OpenAQ. CPCB's own live feed (data.gov.in) has been unreachable since October 2026, and OpenAQ usually lags a few days, so the board shows when its readings were taken.

Loading the latest readings…