相关链接
【数学建模国赛】2021 B题:空气质量预报二次建模 1 赛后总结与分析
【2021 数学建模“华为杯”】B题:空气质量预报二次建模 2 方案设计附实现代码
【2021数学建模“华为杯”】B 题此篇一等奖60页论文 :私信我
【2021数学建模“华为杯”】B 题两篇一等奖论文:私信我
1 赛题题目
目前常用WRF-CMAQ模拟体系(以下简称WRF-CMAQ模型)对空气质量进行预报。WRF-CMAQ模型主要包括WRF和CMAQ两部分:WRF是一种中尺度数值天气预报系统,用于为CMAQ提供所需的气象场数据;CMAQ是一种三维欧拉大气化学与传输模拟系统,其根据来自WRF的气象信息及场域内的污染排放清单,基于物理和化学反应原理模拟污染物等的变化过程,继而得到具体时间点或时间段的预报结果。
但受制于模拟的气象场以及排放清单的不确定性,以及对包括臭氧在内的污染物生成机理的不完全明晰,WRF-CMAQ预报模型的结果并不理想。故题目提出二次建模概念:即指在WRF-CMAQ等一次预报模型模拟结果的基础上,结合更多的数据源进行再建模,以提高预报的准确性。
为进行二次建模以预测给定监测点未来三天的空气质量情况,题目提供了监测点长期空气质量预报基础数据,包括污染物浓度一次预报数据、气象一次预报数据、气象实测数据和污染物浓度实测数据,其中,所有一次预报数据的时间跨度为2020-7-23 ~ 2021-7-13,所有实测数据的时间跨度为2019-4-16 ~ 2021-7-13,数据总量在十万量级(详见附件1~3)。需要注意的是:
(1)每日预报的时间固定为早晨7点,此时可以获得当日7时及之前时刻的实测数据,以及运行日期在当日及之前日期的一次预报数据(预报时间范围截至第三日23时)。监测时间在当日7时以后的逐小时实测数据和运行日期在次日及以后的一次预报数据都是无法获得的,例如:在2021年7月13日晨间对7月13日至7月15日的空气质量进行预报过程中,可供参考的实测数据时间范围为(2019-04-16 00:00, 2021-07-13 07:00),模型运行日期范围为(2020-07-23, 2021-07-13)。
(2)受监测数据权限及相应监测设备功能等的限制,部分气象指标的实测数据无法获得。
(3)由于一次预报对邻近日期的准确度较高,故理论上二次预报对邻近日期的准确度也较高。
问题1: 使用附件1中的数据,按照附录中的方法计算监测点A从2020年8月25日到8月28日每天实测的AQI和首要污染物。AQI计算公式如下
问题:2 在污染物排放情况不变的条件下,某一地区的气象条件有利于污染物扩散或沉降时,该地区的AQI会下降,反之会上升。使用附件1中的数据,根据对污染物浓度的影响程度,对气象条件进行合理分类,并阐述各类气象条件的特征。
问题:3 使用附件1、2中的数据,建立一个同时适用于A、B、C三个监测点(监测点两两间直线距离>100km,忽略相互影响)的二次预报数学模型,用来预测未来三天6种常规污染物单日浓度值,要求二次预报模型预测结果中AQI预报值的最大相对误差应尽量小,且首要污染物预测准确度尽量高。并使用该模型预测监测点A、B、C在2021年7月13日至7月15日6种常规污染物的单日浓度值,计算相应的AQI和首要污染物,将结果依照附录“污染物浓度及AQI预测结果表”的格式放在论文中。
问题:4 相邻区域的污染物浓度往往具有一定的相关性,区域协同预报可能会提升空气质量预报的准确度。如图 4,监测点A的临近区域内存在监测点A1、A2、A3,使用附件1、3中的数据,建立包含A、A1、A2、A3四个监测点的协同预报模型,要求二次模型预测结果中AQI预报值的最大相对误差应尽量小,且首要污染物预测准确度尽量高。使用该模型预测监测点A、A1、A2、A3在2021年7月13日至7月15日6种常规污染物的单日浓度值,计算相应的AQI和首要污染物,将结果依照附录“污染物浓度及AQI预测结果表”的格式放在论文中。并讨论:与问题3的模型相比,协同预报模型能否提升针对监测点A的污染物浓度预报准确度?说明原因。
A (0, 0) A1 (-14.4846, -1.9699) A2 (-6.6716, 7.5953) A3 (-3.3543, -5.0138)
图 4 各监测站点相对位置示意图,正东方向为x轴,正北方向为y轴,单位:km
2 总结与分析
此题是一个数据挖掘类的题目,此次过后,对国赛的数据挖掘比赛心生敬畏,连续肝了4天半,最后一天我一个人通宵肝了36个小时,产出论文部分35页,加上附录总共60页,代码较多,提交截止时间的最后半小时还在修改论文,卡在第三问的上,花了两天的时间,最后一问,我没有来得及做,让队友做的,最终也没能做出来,只是写了一个简单的思路。拿到问题首先对问题进行了解分析:此题出题的目的是因为一次预报的数据不准确,现在为了二次预报建模,也提供了实测数据。预报数据是小时为单位记录一次,实测数据分为两种,一种是以小时为单位记录一次,一种是以天记录一次。注意,提供的实测数据和预报数据是由有气象条件的,气象条件是对模型预测是不可或缺的影响因素,不要忽略了,我在做的时候没有想起来把气象条件加以利用,赛后才想起来,接下来的分析将会说到。总共有18个Excel,数据残缺不堪,每个表属性还不一致,处理起来非常麻烦和恶心人。
2.1 问题一
根据公式计算AQI,直接用代码实现逻辑即可,并不复杂。
2.2 问题二
具体方案设计和实现见【数学建模国赛】2021 B题:空气质量预报二次建模 2 方案设计附实现代码
(1)第一个任务:数据挖掘的第一步,数据分析和数据预处理。数据分析后发现,第一,实测数据中按天为单位记录的数据只有800多条,按小时计算的有25万条,如果想把小时的数据合并成天的数据去使用,数据量是远远不够的。这也反向说明了出题人也考虑到了这个问题。所以按小时为单位计算出来的能提供更多的数据。第二,每个数据文件中存在大量的缺失值和空值,甚至存在连续的缺失值。在时间序列的数据中,存在缺失值和异常值,不能直接删除,需要相应的插值法去填充回去,否则会影响数据分布。
(2)第二个任务,题目中第一小问,问根据对污染物浓度的影响程度,对气象条件进行分类。题目的意思是气象条件对污染物浓度有极大的影响,那根据这个影响来对气象条件分成几种类别。换句话说,需要根据”影响程度“这个因素来对气象条件聚类。但是这个”影响程度“是什么?那到底什么是用来评价对污染度浓度的影响呢?题目没说清楚,题目中少了主语,导致我刚开始对这题一直不理解。
我认为的是IAQI。因为IAQI的含义是:污染物P的空气质量分指数。这个指数就是来评价每种污染物的浓度指标,不就是影响的程度都都体现在了IAQI上了嘛。虽然也思考过可能是AQI,但是AQI指的是6种污染的空气质量指数,是一个综合指标,并不能代表单独的每种污染度浓度。
当然IAQI对应着6中污染物浓度,那聚类的特征也就有6个IAQI。只要聚类的特征选定了,聚类方法众多,选择多个方案一对比,就能得到不错的聚类效果。
(2)第三个任务,第二小问是需要对分类的的气象条件,进行相应的特征分析,其实就是对每一种类别分析温度、湿度、气压、风速、风向、SO2、NO2、PM10、PM2.5、O3、CO这些特征分析表现。假设举例理解一下,第一类:它的特征可能是相对于其他类风速大、湿度高、气压低、O3污染物的浓度也低。那这一类气象条件有利于O3污染物的扩散。还有更多的详细的分析可以参考专业描述气象特征文献的描述方法。
2.3 问题三
具体方案设计和实现见【数学建模国赛】2021 B题:空气质量预报二次建模 2 方案设计附实现代码
(1)第一个任务:建立一个统一的数学模型,根据A、B、C三点独立采集的数据来预测三点未来三天6种污染物浓度的数据。每个监测点有三类数据:每小时预报、每小时实测、每天实测。评价指标是预报的数据与实测的数据的AQI最小相对误差。
这是一个多变量的时间序列预测问题。注意是建立一个统一的数学模型,而不是只建立一个模型用6类数据去拟合。前期我就犯了这个错误,一直思考不出这个问题的解决方案,也尝试过用6个数据去训练一个模型,但是效果不佳,分析原因是三个类因为采集的时间单位不一致,导致数据的分布根部不一致,如果把小时为单位的数据合并成天为单位的数据,只有800多条数据,根本不够训练和拟合模型。
我的解决方案是:A、B、C三个监测点数据类型一致,就可以考虑建立一个神经网络模型去预测每个监测点的数据,建立出来的数学模型就统一了。这个数学模型就可以通用在三个监测点,针对每个检测点的预测,需要单独用A、B、C各点的数据去训练对应的一个网络模型。换句话说,网络结构不变,改变训练数据,更换模型权重。
如上图中,如何用三类的数据去拟合模型,得到一个预报未来三天数据。做法是用相同的网络模型和训练参数,又单独为每类数据训练三个网络模型,取三个模型的输出平均值为最终未来三天的数据值。其中有几个注意点,以小时为单位的数据,要预报未来三天的数据,那模型中就需要预测为72小时的数据,最终对这72小时的数据合并成三天的数据,合并的过程,并不是简单的平均值,而是使用题目所提供的臭氧O3 的8小时滑动平均算法。臭氧的24小时数据,用8小时滑动平均去取均值,其他污染物直接取24小时的均值即可。
还要注意,每一类是数据,属性列各不相同,共同有的是6种污染物,在每小时为单位的预报数据中独特有的21列属性,没小时实测数据中有11列属性,每天为单位的数据中只有6列污染物浓度属性。我论文中的方案是,考虑了神经网络模型的通用性,三类数据都只用了6类污染物浓度为6种特征,即神经网络的输入输出是6个。但是赛后想到,题目要求的是要利用预报数据的气象条件和其他特征去二次建模,如果不利用这些条件,就违背了题意。所以应该在训练每类数据的时候,模型的输入输出大小设定分别是21、11、6。最后只取输出的6列污染物浓度即可。
(3)第二个任务:根据预报的污染物浓度,计算AQI和首要污染物,和问题一一样,就没有任何难度。
2.4 问题四
(1)分析(这一点参考别人的思路)
此处四个监测点A、A1、A2、A3不再独立。而是相互关联。需要建立A、A1、A2、A3四个监测点的协同预报模型。每个监测点的相同采集方式的表中属性一样,那是可以用上问题三的模型的。
区域协同预报的目的主要是为了防止某个点的预测数据存在误差的情况下。如果存在误差,需要根据协同预报去修正预报数据。怎么去修正数据,这是这题研究的重点。
注意,并不是说用A1、A2、A3、A4的三个模型去预测A点的数据,而是监测点A可能自己根据该检测点采集的数据得到的二次预报结果还是存在误差,需要根据邻近的监测点A1、A2、A3预报结果去修正A。同理,其他三个点,也需要另外三个点的预报数据去修正。
因此可首先基于真实数据建立 A、A1、A2、A3 四个站点间与位置、污染物浓度数据有关的拟合模型,然后在将该拟合模型之间的关系带入到一次预报数据中,若一次预报数据与拟合得到的结果差距较大则将其替代(可设置一定的误差界限)若一致则保留,此时在利用问题三构建的模型进行计算,看与真实值的误差是否减小,若减小则表示区域协同预报可以提高准确度,若并未减小则表示效果不好。