一个糟糕的属性分析PJ

  1. 1、数据简介及预处理
    澳大利亚作为唯一一个覆盖整个大陆的国家,气候情况多变,降水分布随季节变化比较大。因此,本报告旨在探究哪些天气变量对是否下雨具有更好的预测效果。数据来源于kaggle.com的一个公开数据,详情见:https://www.kaggle.com/jsphyg/weather-dataset-rattle-package
    1.1. 1.1 原始数据
    小组使用的数据集来源于Kaggle,为澳大利亚49个城市数十年间的天气数据,为日频数据。具体变量情况如下:
    变量名称 变量类型 变量含义
    Date 时间序列 该观测对应日期,如2017-06-25
    Location 名义变量 天气观测站所在城市名,如Albany
    MinTemp 连续变量 当天最低气温,以摄氏度为单位
    MaxTemp 连续变量 当天最高气温,以摄氏度为单位
    Rainfall 连续变量 当天降雨量,以mm为单位
    Evaporation 连续变量 A类蒸发皿24小时内的蒸发量,以mm为单位
    Sunshine 连续变量 日照时长
    WindGustDir 名义变量 24小时内最大风力方向,如E(east)
    WindGustSpeed 连续变量 24小时内最大风力速度,以为km/h为单位
    WindDir9am 名义变量 9am时的风向
    WindDir3pm 名义变量 3pm时的风向
    WindSpeed9am 连续变量 9am时的风速,以km/h为单位
    WindSpeed3pm 连续变量 3pm时的风速,以km/h为单位
    Humidity9am 连续变量 9am时的湿度
    Humidity3pm 连续变量 3pm时的湿度
    Pressure9am 连续变量 9am时的气压,hpa
    Pressure3pm 连续变量 3pm时的气压,hpa
    Cloud9am 连续变量 9am时天空被云遮住的占比
    Cloud3pm 连续变量 3pm时天空被云遮住的占比
    Temp9am 连续变量 9am时的气温
    Temp3pm 连续变量 3pm时的气温
    RainToday 0-1变量 当天下雨记为1,未下雨记为0
    RISK_MM 连续变量 预测明天降雨量的值,以mm为单位
    RainTomorrow 0-1变量 明天下雨记为1,未下雨记为0
    我们后续建模中重点关注三大变量,今天是否下雨(RainToday),明天是否下雨(RainTomorrow)以及降雨量(Rainfall)。
    1.2. 1.2 数据预处理
    下图显示了各变量的缺失比例,可以看见Evaporation、Sunshine、Cloud9am、Cloud3pm的缺失比例较高,其他变量也有部分缺失,针对其我们做了如下预处理:

(1)Evaporation, Sunshine, Cloud9am, Cloud3pm: 缺失值较多,大多为同一城市全部缺失。若仅为同一城市内部分值缺失则用前值填充;若为同一城市内所有值缺失则用0填充,同时新添四个0-1变量(Evaporation_na, Sunshine_na, Cloud9am_na, Cloud3pm_na)对应缺失值
(2)WindGustDir, WindGustSpeed, Pressure9am, Pressure3pm:缺失值较少,删除观测
(3)Location :按降水天数比例划分为6档,对应澳大利亚的六种气候
(4)Date:按季节划分,编码为四季。12-2月为夏季,3-5月为秋季,6-8月为冬季,9-11月为春季
2. 2、描述性统计
2.1. 2.1 各变量分布情况

通过小提琴图可以看见下雨和未下雨的天数里,各变量的分布是有一些区别的。比如Humidity3pm在RainTomorrow = 1时的分布相对RainTomorrow = 0时明显上移,说明我们进一步探索下雨与各天气变量之间的关系是有意义的。
同时,可以看到个别变量,如Evaporation是有极端值的,在后续分析建模中也需多加注意。
2.2. 2.2 相关性
2.2.1. 2.2.1 连续型自变量间相关性

图中探索了各连续变量之间的相关性,可以看到一些变量之间相关性很高,比如MinTemp和Temp9am,进一步探索两者的相关性分布图:

可以看见是高度相关的,相关系数达到了0.9,这也与实际情况相符,但在后续建模处理中要多加注意。
2.2.2. 2.2.2 今天下雨和明天下雨间相关性

从今天和明天下雨的列联表中可以计算得出:
Odds ratio=4.829
皮尔逊卡方=14113.3
明显在今天下雨和明天下雨之间是不独立的,因此可以考虑将raintoday变量(0-1)作为预测第二天是否下雨的依据。

  1. 3、今天是否下雨的的关键影响因素——普通logistic回归
    使用logistic过程对raintoday进行回归,结果如下:

几乎所有模型都被纳入到了模型中,而且包含相关性比较高的变量组。

样本内的预测结果准确性达到了86.6%。

因此以上结果表明,首先我们所提取的指标作为降水的显著影响指标,是非常有效且相对充分的。这一点也比较符合地理知识中关于降水因素的表达。同时我们根据地理知识和澳大利亚的气候变化考虑了季节与风向交叉因素的影响。其次,在这一基础上,我们分离出了一些指标,如光照时长、蒸发量等,在未知情况下对降水量的固定影响,也就是说,一些已知指标无法观测或者观测不到的时候,其对降水量有显著的固定效应(两个指标都发生了这种情况)。
尽管如此,相对于一个降水情况的预测表现来说,这一准确率依旧不是很高,我们怀疑可能因为没有考虑到部分变量而导致这种情况,因此之后在预测的过程中我们将考虑使用GLMM进行分析。
4. 4、关于明天下雨的预测
4.1. 4.1 基本思路与样本获取

  1. 抽取40%的观测数量作为训练集,其余作为测试集
    a. 首先通过分层抽样的方法抽取训练集,剩下的60%的数据为测试集;
    b. 其次通过过采样的方法实现训练集内样本的数据平衡,得到样本。
  2. 建立模型(logistic model / GLMM)
  3. 使用模型进行预测和验证
    4.2. 4.2 普通logistic方法
    最直观地,作为二分变量,我们首先使用一般logistic回归模型进行回归和预测。
    4.2.1. 4.2.1 模型结果:

模型整体表现良好。

同时我们可以看到,关于由上午和下午构成的两个指标,都基本只入选了一个。同时三个风向变量和季节变量的交叉项都入选了。

通过输出结果,我们可以得到了一个与影响因素效果相似的模型,甚至样本内的预测一致概率更高,表明前一天的气象数据对于预测第二天是否下雨相对更加有效一些。
另外,我们输出了样本中各观测的influence诊断结果,其中并未包含强影响点。如图:

4.2.2. 4.2.2 样本预测结果
使用测试集拟合模型,得到测试集中每一条观测的预测概率。我们可以看到测试集的AUC达到了0.871,说明模型拟合程度不错。另外,从混淆矩阵中可以看出,正确预测率达到了79.18%。

尽管如此,并且我们引入了非常多的气象变量,但是我们依旧担心我们遗漏了一些变量,比如洋流等因素,或者可能存在一些针对季节或地点的随即效应,甚至是观测测量误差,因此我们选取了GLMM模型进行进一步的探索和尝试。

4.3. 4.3 GLMM模型的探索
4.3.1. 4.3.1 模型结果
使用同样的思路对样本数据进行GLMM建模
通过模型的检验和相关性的分析,我们剔除了部分相关性很高的变量,得到结果如下:

从最终变量来看,大多数的高相关性的变量被剔除出模型,保留下来的变量保持着非常高的显著程度。
4.3.2. 4.3.2 预测结果
首先,我们分析了样本内的预测情况:样本内的预测准确度达到了79.4%.

这一结果比logistic回归的样本内预测值是要低很多的,当然样本内的预测结果其实不是最重要的,样本外的预测应该更加准确,因此下一步我们检测了样本外的预测情况。

样本外的预测准确度达到了79.18%,基本是比较好的结果。
然而我们惊讶地发现,logistic和GLMM预测出的结果是一致的,我们对比了二者线性预测值,二者仅有比较微小的差别。这一点说明,在现有的数据条件和模型下,随机效应不是非常明显。

4.4. 4.4 logistic model与GLM model的对比
在之前我们已经对比过了logistic模型和GLMM对该数据预测准确性的差别,发现:在样本内,logistic模型预测准确性更高,但在样本外二者准确率基本一致。
进一步我们对比模型的参数之间的差别,显然两种模型保留了基本相同的参数,但相对于logistic模型,GLMM保留的参数意义相对更加明显。

同时我们对比了对应的变量的参数估计(未有表格显示在报告中),二者差别也比较小,说明这些变量与降雨的相关性是相对稳定的。
5. 5、降雨量等级预测
5.1. 5.1 数据定义及处理
5.1.1. 5.1.1 变量定义
进一步探索,除了是否下雨外,我们还十分好奇降雨量与哪些因素有关,应该用怎样的方式预测,于是我们引入了降雨量等级这一新变量。
降雨量等级(Rainfall_level):根据气象局规定,24小时内,降雨量在0.1~9.9毫米之间为小雨;降雨量在10~24.9毫米之间为中雨;降雨量在25.0~49.9毫米之间为大雨;降雨量在50.0~99.9毫米之间为暴雨;降雨量在100.0~249.9毫米之间为大暴雨;降雨量≥250.0毫米之间为特大暴雨。根据Rainfall的取值,剔除了未降雨的观测后,我们将降雨量分为了三个等级:
Rainfall_level = 1:小雨,降雨量0.1~9.9毫米
Rainfall_level = 2:中雨,降雨量10~24.9毫米
Rainfall_level = 3:大雨及暴雨,降雨量>25毫米
5.1.2. 5.1.2 平衡处理
进行预测需要进行的首要处理便是数据平衡处理,探索Rainfall_level的数量后我们发现数据极度不平衡,约为14:2:1:

使用one-to-one平衡等级2、3并进一步使用one-to-rest平衡等级1与2、3后我们得到了平衡的数据集:
5.1.3. 5.1.3 剔除变量
由于后续模型在变量较多时分类效果大幅降低,我们考虑先利用相关性剔除部分变量。若两自变量间相关性绝对值大于0.8,则仅保留与目标变量相关性更大的自变量。剔除后剩余9个变量,分别为MinTemp,Evaporation ,Sunshine,WindGustDir,WindGustSpeed,Humidity9am,Pressure9am,Evaporation_na与Cloud9am_na。

5.2. 5.2 定序Logistic方法
5.2.1. 5.2.1 基本模型
注意到目标变量Rainfall_level为有序变量,且为三个等级,我们选用Ordinal Logistic Regression方法尝试预测。各参数的拟合结果如下:

可以看见所有变量都是显著的,为了更好的解释参数含义,我们计算出了各变量改变对应的odds ratio的变化情况:

在其他变量不变的情况下,连续变量中,温度上升1度对应Rainfall_level从1变到2、3或从1、2变到3的发生比增大1.1倍,分类变量中,风相对于Rainfall_level有显著影响。以风向为东作为基准,若风向为东北偏东,则Rainfall_level从1变到2、3或从1、2变到3的发生比比风向为东增大1.58倍, 若风向为西,则Rainfall_level从1变到2、3或从1、2变到3的发生比比风向为东降低0.5倍。

模型拟合准确度为0.5362,经过平衡后单个类别预测出来的比例都超过了0.5,模型还是具有一定预测效果的。
5.2.2. 5.2.2 验证假设
尽管模型具备一定预测能力,但并不高,我们进一步探索模型是否满足成立条件。即parallel slope assumption。由于现有的理论验证方法具有倾向于拒绝原假设的问题,我们主要采用直观的图像法来验证。下表Y>2这一栏显示了分别拟合时,变量不同等级对应的参数之差。即若这些值相等或相近,则可认为parallel slope assumption成立。

更直观的我们通过图像来判断。若对于同一变量,左侧的小标记近似在一条直线上,则可认为平行坡假设成立。可以看见对于WindGustDir这一变量,就有明显的异常值,如WindGustDir = NW。这也间接解释了模型预测效度一般的原因。

5.3. 5.3 基于树的模型
从上述探索中我们发现,OLR的预测效果有但一般,其原因之一就是数据并不完全满足parallel slope assumption。于是我们思考是否能利用别的模型提升预测效度。由于变量维度较多(分类变量种类较多),独热编码后自变量矩阵非常稀疏,再加之我们的目标变量为三分类变量,数据集非常适合使用树模型建模,因而我们尝试了基于boosting的LightGBM和基于bagging的Random Forest模型。
5.3.1. 5.3.1 LightGBM
作为改进模型我们决定尝试LightGBM进行探索。利用与OLR相同的平衡数据集,考虑到LightGBM运行速度较快,我们纳入所有变量进行建模,并对数据进行train、test的7-3拆分,结果如下:

效果的确比OLR好,进一步输出变量重要性查看哪些变量对于预测降雨量等级有着重要作用。

上图中显示了对于LightGBM模型重要性最高的20个变量,其中WindGustSpeed,Humidity9am,Evaporation_na,MinTemp,Sunshine,Pressure9am,Evaporation,Cloud9am_na这几个变量同样是OLR模型中的显著变量,说明这些变量对于降水量等级的确具有一定的预测效度。
5.3.2. 5.3.2 Random Forest
我们探索的第二个树模型为Random Forest。模型预测表现如下:

模型表现很好,特别是训练集上的准确度非常之高。进一步探索变量重要性:

上图中显示了对于Random Forest模型重要性最高的20个变量,其中WindGustSpeed,Humidity9am,Evaporation_na,MinTemp,Sunshine,Pressure9am,Evaporation,Cloud9am_na这几个变量同样是OLR模型中的显著变量,说明这些变量对于降水量等级的确具有一定的预测效度。
5.4. 5.4 模型整合
OLR LightGBM RF
MinTemp(+) √ √
Evaporation(-) √ √
Sunshine(-) √ √
WindGustDir
WindGustSpeed(+) √ √
Humidity9am(+) √ √
Pressure9am(-) √ √
Evaporation_na(+) √ √
Cloud9am_na(-) √ √
可见所有纳入OLR中的变量都是具有分类效度的,WindGustDir由于是分类变量,因而在树模型重要性计算中被低估了,并不代表这一因素不重要。相反的从OLR模型中可以看出WindGustDir是非常重要的自变量。
树模型给出了重要性,而OLR模型给出了变量具体的影响方向。可以看见,当影响为正时,意味着该值越大,降雨量从小变为大的可能性越大,反之亦然。
6. 6、反思与深入

  1. 是不是可以考虑更长的时间跨度,比如提前三天或更早预测降雨;
  2. GLMM我们仅探索了比较简单的模型形式(仅考虑截距项的随机效应),也许使用更加复杂的模型会使得预测的准确性更高;
  3. 降雨量等级预测方面,机器学习模型是很好的分类器,也确实提升了预测准确度,但同时损失了目标变量定序这一信息,也许可以通过实现定序来进一步提升预测能力;
  4. random forest模型尽管看起来分类效果很好,但从train set到test set中准确率大幅下降,说明模型的稳定性还有待提高。这一点这一点同样适用于logistic model和GLMM。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值