关键指标
未来 24 小时预测 (北京时间)
方法论概述
核心技术亮点
关于特征工程的说明:为什么使用历史 AQI 不是数据泄漏?
什么是滞后特征 (Lag Features)?
滞后特征是指使用过去时刻的目标变量值作为特征。例如:
- •
AQI_lag_1h= 1 小时前的 AQI 值 - •
AQI_lag_3h= 3 小时前的 AQI 值 - •
AQI_lag_24h= 24 小时前的 AQI 值
这就像预测明天的天气时,参考今天和昨天的天气一样自然。
为什么这不是数据泄漏?
数据统计
今日行动建议
数据源清单
| 数据源 | 类型 | 频率 | 状态 |
|---|---|---|---|
| WAQI | 实时 AQI | 每小时 | 正常 |
| quotsoft.net | 历史 AQI | 每日 | 正常 |
| Open-Meteo | 历史天气 | 每小时 | 正常 |
| 高德地图 | 实时天气 | 每小时 | 正常 |
| GitHub Calendar | 节假日 | 年度 | 正常 |
数据流程
数据清洗详细流程
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 等 |
特征重要性排名 (Top 20)
特征类别统计
特征候选池 (v4 - 可解释性优先)
特征工程详细说明
滞后特征 (Lag Features)
捕捉时间序列的自相关性
- • AQI_lag_1h, _3h, _6h, _12h, _24h, _48h
- • PM2.5_lag_1h, PM10_lag_1h
- • temperature_lag_1h, humidity_lag_1h
滚动统计 (Rolling Stats)
捕捉趋势和波动性
- • rolling_mean_6h, _12h, _24h
- • rolling_std_6h, _12h, _24h
- • rolling_max, rolling_min
时间特征 (Time Features)
捕捉周期性规律
- • hour_sin, hour_cos (日周期)
- • day_of_week_sin, _cos (周周期)
- • month_sin, month_cos (年周期)
- • is_weekend, is_holiday
变化率特征 (Change Rate)
捕捉短期变化趋势
- • AQI_change_1h = AQI - AQI_lag_1h
- • AQI_change_3h, _6h, _24h
- • pressure_change_3h
交互特征 (Interactions)
捕捉变量间的协同效应
- • temp_humidity_product
- • wind_direction_effect
- • rush_hour_flag × AQI_lag
代理变量 (Proxy Variables)
近似不可观测因素
- • 日温差 → 逆温层强度
- • 秋季标记 → 秸秆焚烧
- • 春节标记 → 烟花燃放
- • 供暖季标记 → 供暖排放
特征筛选流程
| 筛选阶段 | 筛选方法 | 阈值 | 剔除数量 |
|---|---|---|---|
| 第一轮 | 缺失率筛选 | 缺失率 > 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,排名末尾 |
模型配置
超参数设置
| n_estimators | 200 |
| max_depth | 6 |
| learning_rate | 0.1 |
| subsample | 0.8 |
| colsample_bytree | 0.8 |
| random_state | 42 |
模型性能 (v4 - 1h预测)
交叉验证结果
模型训练流程详解
为什么选择 XGBoost?
- ✓ 处理非线性:AQI 与气象因素的关系是高度非线性的
- ✓ 处理缺失值:内置缺失值处理机制
- ✓ 特征重要性:自动计算特征重要性,便于解释
- ✓ 正则化:L1/L2 正则化防止过拟合
- ✓ 训练速度:GPU 加速,适合中等规模数据
时序交叉验证 (TimeSeriesSplit)
与普通 K-Fold 不同,TimeSeriesSplit 保持时间顺序,避免未来数据泄漏:
训练集 测试集
XGBoost 原理简介
1. 梯度提升
通过迭代训练多棵决策树,每棵新树学习之前模型的残差(预测误差),逐步逼近真实值。
2. 正则化
目标函数包含 L1/L2 正则项,惩罚复杂模型,防止过拟合,提高泛化能力。
3. 并行优化
利用特征并行和数据并行加速训练,支持 GPU 加速,高效处理大规模数据。
基线模型对比
| 模型 | MAE | RMSE | R² |
|---|---|---|---|
| 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 预测结果,帮助您理解模型的决策逻辑。
模型最依赖的是当前 AQI(贡献 64.6%)和PM10 浓度(20.4%),这符合空气质量的时间惯性规律。 同时发现扬州特有规律:湿度与 AQI 负相关(高湿度伴随降雨清除污染物),日温差与 AQI 正相关(晴朗天气不利扩散)。 每个特征都有明确的物理意义,模型可解释性强。
关键特征的物理意义与影响机制
空气质量具有强时间连续性。污染物的累积和消散是一个渐进过程, 不会瞬间剧变。1 小时前的 AQI 值是预测下 1 小时最重要的依据。
- • 1h 前 AQI 高 → 下 1h 大概率维持高位
- • 与目标相关系数高达 0.97
- • 这就是时间序列预测的"惯性"
PM10 是空气质量指数(AQI)的直接组成部分。 包含直径小于10微米的颗粒物,来源包括扬尘、建筑施工、工业排放等。 与 AQI 高度正相关(相关系数 0.90)。
- • PM10 高 → AQI 高(直接成分)
- • 春季沙尘天气时 PM10 贡献更大
- • 与 PM2.5 的比值反映污染类型
教科书:高湿度促进二次颗粒物生成 → 正相关
实际数据:高湿度时 AQI 更低 → 负相关
干燥(<40%): AQI=68 | 高湿(>80%): AQI=49
- • 扬州位于长三角,高湿度常伴随降雨
- • 降雨冲刷污染物,使 AQI 下降
- • 高湿度也意味着海洋性气团影响
- • 这是数据驱动的发现,而非套用教科书!
教科书:日温差小 → 逆温层 → AQI高(负相关)
实际数据:日温差大 → AQI 更高(正相关)
相关系数: +0.46
- • 日温差大 = 晴朗天气
- • 晴朗天气 = 高压控制
- • 高压控制 = 大气稳定 = 不利于扩散
- • 与北方城市"逆温层"假设不同!
- • 与 AQI 负相关 ✓
- • 高风速促进污染物扩散
- • 低风速(<2m/s)时污染容易累积
- • 与 AQI 正相关 ✓
- • 11月至3月为供暖季
- • 北方供暖排放通过区域传输影响扬州
特征之间的协同效应
模型能够学习特征之间复杂的交互关系:
模型无法捕捉的因素
理解模型的局限性与理解其能力同样重要:
单次预测的特征贡献分析(示例)
以下展示某一时刻预测的特征贡献分解,类似 SHAP 值分析。正值表示该特征使预测值上升,负值表示下降:
总结:模型的决策逻辑
历史 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)处理长时间依赖
- • 构建集成模型,结合多种算法的优势
- • 引入因果推断方法,提高模型可解释性