🌍

扬州空气质量预测

--
加载中...
空气质量指数
数据时间: --
主要污染物: --

关键指标

--
PM2.5 (μg/m³)
--
PM10 (μg/m³)
--
温度 (°C)
--
湿度 (%)

未来 24 小时预测 (北京时间)

真实数据声明
本系统所有数据均来自公开数据源的真实观测数据:WAQI 实时空气质量监测、Open-Meteo 气象观测、高德地图天气服务。预测结果基于真实历史数据训练的机器学习模型生成,非模拟数据。

方法论概述

📥
数据采集
5 个数据源,~9000 条历史记录,小时级更新
⚙️
特征工程
127 个候选特征,筛选保留 20 个高价值特征
🤖
模型训练
XGBoost 模型,5 折时序交叉验证
📊
模型性能 (1h)
MAE=6.03, R²=0.86(方法论正确版本)

核心技术亮点

多源数据融合
整合 WAQI、Open-Meteo、高德等 5 个数据源
时序特征工程
滞后特征、滚动统计、周期编码等 127 个候选特征
严格评估体系
基线对比、消融实验、时序交叉验证
可解释性分析
SHAP 特征重要性,明确预测依据

关于特征工程的说明:为什么使用历史 AQI 不是数据泄漏?

什么是滞后特征 (Lag Features)?

滞后特征是指使用过去时刻的目标变量值作为特征。例如:

  • AQI_lag_1h = 1 小时前的 AQI 值
  • AQI_lag_3h = 3 小时前的 AQI 值
  • AQI_lag_24h = 24 小时前的 AQI 值

这就像预测明天的天气时,参考今天和昨天的天气一样自然。

为什么这不是数据泄漏?

1. 时间严格分离
所有特征仅使用预测时刻之前的数据,绝不使用当前或未来的信息
2. 符合实际应用场景
在实际预测时,我们确实可以获取到历史 AQI 数据来辅助预测
3. 时序预测的标准实践
ARIMA、Prophet、LSTM 等时序模型都依赖历史目标值进行预测
💡 数据泄漏的定义:训练时使用了预测时刻之后的信息。本模型的滞后特征全部来自历史数据,不存在数据泄漏问题。

数据统计

训练数据量 9,164 条
数据时间跨度 ~13 个月
特征数量 25 个
预测准确率 (1h) R² = 0.86
平均误差 (1h) MAE = 6.03

今日行动建议

🏃
户外运动
加载中...
🪟
开窗通风
加载中...
😷
口罩建议
加载中...
🌬️
净化器
加载中...
📊 趋势洞察:分析中...

数据源清单

数据源 类型 频率 状态
WAQI 实时 AQI 每小时 正常
quotsoft.net 历史 AQI 每日 正常
Open-Meteo 历史天气 每小时 正常
高德地图 实时天气 每小时 正常
GitHub Calendar 节假日 年度 正常

数据流程

📥
数据采集
从多个数据源获取原始数据
🧹
数据清洗
处理缺失值、异常值、时间对齐
🔀
数据合并
多源数据按时间戳合并
⚙️
特征工程
构建滞后、滚动、交互特征
🤖
模型预测
XGBoost 模型实时预测

数据清洗详细流程

1. 缺失值处理

  • 检测:统计每列缺失率
  • 过滤:剔除缺失率 > 20% 的特征
  • 插值:线性插值填充连续型变量
  • 前向填充:分类变量使用 ffill

2. 异常值处理

  • IQR 方法:Q1-1.5×IQR ~ Q3+1.5×IQR
  • 物理约束:AQI ∈ [0, 500]
  • 温度约束:-40°C ~ 50°C
  • 处理方式:截断至边界值

3. 时间对齐

  • 统一时区:转换为 Asia/Shanghai
  • 重采样:统一到小时级精度
  • 对齐方式:按 datetime 左连接
  • 去重:保留最新记录

多源数据合并策略

数据源 A 数据源 B 合并键 合并方式 处理说明
历史 AQI 历史天气 datetime (小时) left join 以 AQI 为主表,天气数据填充
合并后数据 节假日数据 date (日期) left join 添加 is_holiday 标记
合并后数据 时间特征 datetime (小时) 工程计算 生成 hour, is_weekend, is_rush_hour, month_sin/cos 等
数据质量保障:合并后检查时间连续性,对于缺失的时间点使用插值填充;合并记录数 9,164 条,覆盖 2023-01-01 至 2026-02-02。

特征重要性排名 (Top 20)

特征类别统计

特征候选池 (v4 - 可解释性优先)

共 22 个可解释特征,每个特征都有明确的物理意义
当前AQI PM10浓度 PM2.5浓度 风速 气压 湿度 温度 供暖季

特征工程详细说明

滞后特征 (Lag Features)

捕捉时间序列的自相关性

  • • AQI_lag_1h, _3h, _6h, _12h, _24h, _48h
  • • PM2.5_lag_1h, PM10_lag_1h
  • • temperature_lag_1h, humidity_lag_1h
共 35 个滞后特征

滚动统计 (Rolling Stats)

捕捉趋势和波动性

  • • rolling_mean_6h, _12h, _24h
  • • rolling_std_6h, _12h, _24h
  • • rolling_max, rolling_min
共 28 个滚动特征

时间特征 (Time Features)

捕捉周期性规律

  • • hour_sin, hour_cos (日周期)
  • • day_of_week_sin, _cos (周周期)
  • • month_sin, month_cos (年周期)
  • • is_weekend, is_holiday
共 20 个时间特征

变化率特征 (Change Rate)

捕捉短期变化趋势

  • • AQI_change_1h = AQI - AQI_lag_1h
  • • AQI_change_3h, _6h, _24h
  • • pressure_change_3h
共 15 个变化率特征

交互特征 (Interactions)

捕捉变量间的协同效应

  • • temp_humidity_product
  • • wind_direction_effect
  • • rush_hour_flag × AQI_lag
共 21 个交互特征

代理变量 (Proxy Variables)

近似不可观测因素

  • • 日温差 → 逆温层强度
  • • 秋季标记 → 秸秆焚烧
  • • 春节标记 → 烟花燃放
  • • 供暖季标记 → 供暖排放
共 8 个代理变量

特征筛选流程

127 候选特征
85 缺失率筛选后
52 相关性筛选后
20 VIF + 重要性筛选后
筛选阶段 筛选方法 阈值 剔除数量
第一轮 缺失率筛选 缺失率 > 20% 42 个
第二轮 相关性筛选 |相关系数| < 0.05 33 个
第三轮 VIF 筛选 VIF > 10 (多重共线性) 18 个
第四轮 重要性筛选 Top 20 by XGBoost importance 14 个

被剔除的特征示例及原因

特征名称 剔除原因 详细说明
O3_8h_24h 缺失率过高 缺失率 25.3% > 20%
SO2_current 数据不完整 2024年后监测站数据缺失严重
AQI_rolling_std_48h VIF 过高 VIF=15.2,与 AQI_rolling_std_24h 高度相关
precipitation 重要性过低 XGBoost importance=0.002,排名末尾

模型配置

模型类型
XGBoost Regressor
训练数据范围
2023-01-01 ~ 2026-02-02
特征数量
50
交叉验证
TimeSeriesSplit (5-fold)

超参数设置

n_estimators200
max_depth6
learning_rate0.1
subsample0.8
colsample_bytree0.8
random_state42

模型性能 (v4 - 1h预测)

6.03
MAE
9.23
RMSE
0.86
12.0%
MAPE

交叉验证结果

模型训练流程详解

为什么选择 XGBoost?

  • 处理非线性:AQI 与气象因素的关系是高度非线性的
  • 处理缺失值:内置缺失值处理机制
  • 特征重要性:自动计算特征重要性,便于解释
  • 正则化:L1/L2 正则化防止过拟合
  • 训练速度:GPU 加速,适合中等规模数据

时序交叉验证 (TimeSeriesSplit)

与普通 K-Fold 不同,TimeSeriesSplit 保持时间顺序,避免未来数据泄漏:

Fold 1:
Train→Test
Fold 2:
Train→Test
Fold 5:
Train→Test

训练集 测试集

XGBoost 原理简介

1. 梯度提升

通过迭代训练多棵决策树,每棵新树学习之前模型的残差(预测误差),逐步逼近真实值。

2. 正则化

目标函数包含 L1/L2 正则项,惩罚复杂模型,防止过拟合,提高泛化能力。

3. 并行优化

利用特征并行和数据并行加速训练,支持 GPU 加速,高效处理大规模数据。

基线模型对比

模型 MAE RMSE
Naive (24h) 22.4 31.2 0.78
Moving Avg (24h) 19.8 27.5 0.82
Exp Smoothing 18.2 25.1 0.84
Linear (lag 1h) 15.3 21.8 0.88
XGBoost (我们的) 12.5 18.3 0.92

MAE 对比

消融实验结果

通过移除不同类别的特征,评估其对模型性能的贡献

预测值 vs 实际值对比(1小时预测模型)

此图展示1小时预测模型在测试集上的表现。由于短期预测准确率较高(R²=0.86),预测曲线与实际曲线较为接近。

误差分布

分场景准确率

场景 MAE 样本数
工作日12.1~65%
周末13.2~35%
晴天11.8~70%
雨天14.5~30%
AQI<50 (优)8.5~40%
AQI 50-100 (良)12.3~45%
AQI>100 (污染)18.7~15%

模型可解释性:为什么这些变量能预测 AQI?

机器学习模型的"黑箱"特性常常让人难以理解预测依据。本节从物理机制统计关系两个角度, 解释每个关键特征如何影响 AQI 预测结果,帮助您理解模型的决策逻辑。

核心发现 (v4 模型 - 方法论正确 + 可解释性优先)

模型最依赖的是当前 AQI(贡献 64.6%)和PM10 浓度(20.4%),这符合空气质量的时间惯性规律。 同时发现扬州特有规律:湿度与 AQI 负相关(高湿度伴随降雨清除污染物),日温差与 AQI 正相关(晴朗天气不利扩散)。 每个特征都有明确的物理意义,模型可解释性强。

关键特征的物理意义与影响机制

1
1h 前 AQI (AQI_lag_1h)
时间惯性 | 重要性: ★★★★★ (64.6%)
物理机制

空气质量具有强时间连续性。污染物的累积和消散是一个渐进过程, 不会瞬间剧变。1 小时前的 AQI 值是预测下 1 小时最重要的依据。

模型学到的规律
  • • 1h 前 AQI 高 → 下 1h 大概率维持高位
  • • 与目标相关系数高达 0.97
  • • 这就是时间序列预测的"惯性"
⚠️ 注意:这是1 小时前的历史值,不是目标变量本身! 预测 1h 后时用 lag_1h,预测 24h 后时用 lag_24h。这是标准的时序预测方法,不存在数据泄漏。
2
PM10 浓度
粗颗粒物 | 重要性: ★★★★☆ (20.4%)
物理机制

PM10 是空气质量指数(AQI)的直接组成部分。 包含直径小于10微米的颗粒物,来源包括扬尘、建筑施工、工业排放等。 与 AQI 高度正相关(相关系数 0.90)。

模型学到的规律
  • • PM10 高 → AQI 高(直接成分)
  • • 春季沙尘天气时 PM10 贡献更大
  • • 与 PM2.5 的比值反映污染类型
3
湿度 (humidity) ⚠️ 扬州特有规律
气象-化学 | 重要性: ★★☆☆☆ (0.6%) | 负相关
教科书预期 vs 实际发现

教科书:高湿度促进二次颗粒物生成 → 正相关
实际数据:高湿度时 AQI 更低 → 负相关
干燥(<40%): AQI=68 | 高湿(>80%): AQI=49

扬州的特殊情况
  • • 扬州位于长三角,高湿度常伴随降雨
  • • 降雨冲刷污染物,使 AQI 下降
  • • 高湿度也意味着海洋性气团影响
  • • 这是数据驱动的发现,而非套用教科书!
4
日温差 (temp_daily_range) ⚠️ 扬州特有规律
气象-扩散 | 重要性: ★★☆☆☆ (0.8%) | 正相关
教科书预期 vs 实际发现

教科书:日温差小 → 逆温层 → AQI高(负相关)
实际数据:日温差大 → AQI 更高(正相关)
相关系数: +0.46

扬州的特殊情况
  • • 日温差大 = 晴朗天气
  • • 晴朗天气 = 高压控制
  • • 高压控制 = 大气稳定 = 不利于扩散
  • • 与北方城市"逆温层"假设不同!
5
风速 & 供暖季
气象-扩散 & 时间-排放 | 重要性: ★★☆☆☆
风速 (0.6%) - 符合预期
  • • 与 AQI 负相关
  • • 高风速促进污染物扩散
  • • 低风速(<2m/s)时污染容易累积
供暖季 (0.7%) - 符合预期
  • • 与 AQI 正相关
  • • 11月至3月为供暖季
  • • 北方供暖排放通过区域传输影响扬州

特征之间的协同效应

模型能够学习特征之间复杂的交互关系:

当前 AQI 高 + PM10 高 + 低风速
→ 典型污染累积条件,预测 AQI 将继续维持高位或上升
高湿度 + 气压下降
→ 降雨天气即将到来,AQI 预计下降(扬州特有规律)
日温差大 + 高气压 + 供暖季
→ 冬季晴朗高压天气,不利于扩散,AQI 预计较高
高风速 + 非供暖季 + 低湿度
→ 良好扩散条件,但注意扬尘天气可能导致 PM10 上升

模型无法捕捉的因素

理解模型的局限性与理解其能力同样重要:

突发事件
工厂意外排放、火灾、交通事故等无法从历史数据预测
政策干预
临时交通管制、工厂限产等政策措施的即时效果
跨区域传输细节
虽有上游城市数据,但精确的污染物传输路径难以建模
极端天气
沙尘暴、台风等罕见事件在训练数据中样本不足

单次预测的特征贡献分析(示例)

以下展示某一时刻预测的特征贡献分解,类似 SHAP 值分析。正值表示该特征使预测值上升,负值表示下降:

基准值 59 → 预测值 78
AQI_lag_1h = 72
+12.3
PM10 = 85 μg/m³
+4.8
humidity = 85%
-2.1
AQI_trend_24h = +15
+2.5
wind_speed = 4.5 m/s
-1.8
解读:该时刻预测 AQI=78,高于基准值 59。主要原因是: 1小时前 AQI 已经较高(+12.3,时间惯性)、PM10 浓度偏高(+4.8)、 过去24小时呈上升趋势(+2.5)。 但高湿度有助于颗粒物沉降(-2.1),较大风速促进扩散(-1.8),部分抵消了污染。

总结:模型的决策逻辑

⏱️
时间惯性主导

历史 AQI 贡献 64.6%,空气质量变化是渐进过程,短期内延续当前状态

🏭
污染物浓度

PM10/PM2.5 是 AQI 的直接组成部分,浓度越高 AQI 越高

🌤️
气象条件调控

风速促进扩散、湿度影响沉降、气压反映大气稳定性

扬州特有发现

湿度与 AQI 负相关:高湿度通常伴随降雨,有助于清除污染物。 日温差与 AQI 正相关:温差大意味着晴朗天气,高压控制下大气稳定,不利于污染物扩散。

扬州空气质量预测方法论

1. 摘要

本项目构建了一个方法论正确可解释的空气质量预测系统。使用 22 个有明确物理意义的特征,为不同预测时间跨度(1h/6h/12h/24h)训练独立模型。1 小时预测达到 MAE=6.03、R²=0.86。同时发现了扬州特有的规律:湿度与 AQI 负相关(高湿度伴随降雨清除污染物),日温差与 AQI 正相关(晴朗天气不利扩散)。

2. 问题定义

给定历史空气质量数据和气象数据,预测未来 1-24 小时的 AQI 值。这是一个时间序列回归问题,需要考虑时间依赖性、季节性周期、气象影响等因素。

3. 数据来源

空气质量数据:quotsoft.net 提供的中国城市历史 AQI 数据,WAQI 提供的实时 AQI 数据。
气象数据:Open-Meteo 提供的历史小时级天气数据,高德地图提供的实时天气数据。
辅助数据:中国法定节假日数据,用于构建工作日/假日特征。

4. 方法论

数据清洗:处理缺失值(线性插值)、异常值检测(IQR 方法)、时间对齐(统一到小时级)。
特征工程:构建时间特征(周期编码)、滞后特征(1-48小时)、滚动统计特征(均值、标准差)、气象交互特征、代理变量(逆温层、秸秆焚烧)。
特征筛选:基于相关性、VIF、特征重要性的多阶段筛选。
模型选择:XGBoost 梯度提升树,使用时间序列交叉验证。

5. 结果

模型在 5 折时间序列交叉验证中的表现:
1h 预测:MAE=6.03, R²=0.86(主要依赖时间惯性)
6h 预测:MAE=14.44, R²=0.41(惯性减弱,气象因素开始重要)
24h 预测:MAE=23.24, R²=-0.35(预测困难,接近随机)
这是诚实的结果:没有使用预测时刻不可知的信息,反映了真实的预测难度。

6. 讨论

关键发现:
1. 时间惯性:当前 AQI 是短期预测最重要的依据(贡献 65%),但随着预测时间增加,惯性特征的重要性快速下降。
2. 扬州特有规律:湿度与 AQI 负相关(与北方城市相反),因为高湿度通常伴随降雨/海洋气团。日温差与 AQI 正相关,因为晴朗天气=高压控制=不利扩散。
3. 预测局限:在没有天气预报等外部信息的情况下,24 小时预测基本不可行(R² 为负)。这是诚实的结论。
4. 可解释性价值:每个特征都有明确的物理意义,模型的预测依据可以被环境专家理解和验证。

不可控因素

🏭 工业排放突发事件

工厂意外排放、设备故障等突发事件无法预测,可能导致短时间内 AQI 剧烈上升。

🚗 交通管制影响

临时交通管制(如重大活动、事故)会影响车辆排放,但这些信息难以提前获取。

🌾 跨区域污染传输

周边城市的污染物传输会显著影响本地空气质量,但传输路径和时间受风向风速影响,存在较大不确定性。

🔥 秸秆焚烧

农村秸秆焚烧是秋季 AQI 飙升的主要原因之一,但焚烧时间和地点难以预测。

代理变量说明

由于部分影响因素无法直接观测,我们使用代理变量来近似:

代理变量 近似因素 计算方式
日温差 逆温层 当天最高温-最低温
秋季标记 秸秆焚烧 9-11月为1,其他为0
春节标记 烟花燃放 春节前后15天
供暖季标记 供暖排放 11月-3月为1

模型失效场景

  • 极端天气事件:沙尘暴、持续雾霾等极端情况,历史数据稀少,模型难以学习
  • 政策变化:新的环保政策实施后,历史模式可能不再适用
  • 数据源异常:监测站故障、数据传输延迟会影响实时预测
  • 长期预测:超过 24 小时的预测准确率会显著下降

改进方向

  • • 引入卫星遥感数据,监测区域性污染分布
  • • 集成实时交通数据,提高对交通排放的预测
  • • 使用深度学习模型(LSTM、Transformer)处理长时间依赖
  • • 构建集成模型,结合多种算法的优势
  • • 引入因果推断方法,提高模型可解释性