日前,一位署名为“傲海”的阿里云工程师在云栖社区发布了一篇分析北京雾霾成因的文章。作者通过机器学习算法分析发现,北京重度雾霾天的出现同大气中二氧化氮的含量存在强相关性。
人们很早就知道硫酸盐是雾霾形成的重要原因。住宅及发电厂的燃煤释放大量二氧化硫,随后转化为硫酸颗粒造成污染。但困扰科学家的是,二氧化硫究竟是如何转化成硫酸的?
阿里云工程师的发现回答了这个问题,同是也从另一个角度佐证了最近中德两国研究人员一份研究成果:大气细颗粒物吸附的水分中二氧化氮与二氧化硫的化学反应是当前雾霾中硫酸盐的主要生成路径。该成果通过分析清华大学楼顶气溶胶成分得出。
文章中,工程师采集了公开的2016年全年北京天气数据,包含天、小时、PM2.5、PM10、二氧化硫、一氧化碳、二氧化氮(NO2)等数字。利用阿里云机器学习平台,通过随机森林、逻辑回归等算法寻找雾霾同某一项指标的相关性。
傲海介绍,他本人就在北京工作,同样深受雾霾困扰。因为自己是从事机器学习相关的工作,所以就想能否通过政府的公开数据做一些分析。“对抗雾霾,我们每个人都可以做出贡献”。
据了解,二氧化氮主要来自发电厂及汽车尾气。由此来看,限行政策将可缓解空气雾霾。
附工程师分析全文:
本次实验在阿里云机器学习平台上完成(https://data.aliyun.com/product/learn)
数据源:采集了2016全年的北京天气指标,采集的是从2016年1月1号以来每个小时的空气指标。
具体字段如下表:
阿里云机器学习平台采用拖拉算法组件拼接实验的操作方式,先来看下整个实验流程:
我们把整个实验拆解成四个部分,分别是数据导入及预处理、统计分析、随机森林预测及分析、逻辑回归预测及分析。下面我们分别介绍一下这四个模块的逻辑。
1.数据导入及预处理
(1)数据导入:在“数据源”中选择“新建表”,可以把本地txt文件上传。数据导入后查看:
(2)数据预处理:通过类型转换把string型的数据转double。把pm2这一列作为目标列,数值超过200的情况作为重度雾霾天气打标为1,低于200标为0,实现的SQL语句如下:
select time,hour,(case when pm2>200 then 1 else 0 end),pm10,so2,co,no2 from ${t1};
(3)归一化
归一化主要是去除量纲的作用,把不同指标的污染物单位统一。
我们在统计分析的模块用了两个组件:
(1)直方图:通过直方图可以可视化的查看不同数据在不同区间下的分布。通过这组数据的可视化展现,我们可以了解到每一个字段数据的分布情况,以PM2.5为例,数值区间出现最多的是11.74~15.61,一共出现了430次。
(2)数据视图:通过数据视图可以查看不同指标的不同区间对于结果的影响。
以二氧化氮为例,在112.33~113.9这个区间产生了7个目标列为0的目标,产生了9个目标列为1的目标。也就是说当二氧化氮为112.33~113.9区间的情况下,出现重度雾霾的天气的概率是非常大的。熵和基尼系数是表示这个特征区间对于目标值的影响,数值越大影响越大,这个是从信息量层面的影响。
3.随机森林预测及分析
本案其实是采用了两种不同的算法对于结果进行预测,我们先来看看随机森林这一分支。我们通过将数据集拆分,百分之八十的数据训练模型,百分之二十的数据预测。最终模型的呈现可以可视化的显示出来,在左边模型菜单下查看,随机森林是树状模型。
我们看到AUC是0.99,也就是说如果我们有了本文用到的天气指标数据,就可以预测天气是否雾霾,而且准确率可以达到百分之九十以上。
4.逻辑回归预测及分析
再来看下逻辑回归这一分支的预测模型,逻辑回归是线性模型:
模型预测准确率:
逻辑回归的AUC为0.98,比用随机森林计算得到的结果略低一点。如果排除调参对于结果的影响因素,可以说明针对这个数据集,随机森林的训练效果会更好一点。
结果评估
上面介绍了如何通过搭建实验来搭建针对PM2.5的预测流程,准确率达到百分之九十以上。下面我们来分析一下哪种空气指标对于PM2.5影响最大,首先来看下逻辑回归的生成模型:
因为经过归一化计算的逻辑回归算法有这样的特点,模型系数越大表示对于结果的影响越大,系数符号为正号表示正相关,负号表示负相关。我们看一下正号系数里pm10和二氧化氮最大。pm10和pm2只是颗粒尺寸大小不同,是一个包含关系,这里不考虑。剩下的二氧化氮对于pm2.5的影响最大。我们只要查阅一下相关文档,了解下哪些因素会造成二氧化氮的大量排放即可找出影响pm2.5的主要因素。
以下是网上是找到的关于二氧化氮排放的论述,文中说明了二氧化氮主要来自电厂和汽车尾气:《减少二氧化氮与氨或是抑制中国雾霾形成的关键》