kaggle-zillows竞赛的变量分析

最近做了kaggle网站的zillowst竞赛,也学到了不少。这次zillows给的文件有60个变量,各种各样比如泳池,壁炉,房间数等等,一眼看过去会晕死。所以如何处理变量也是比较费心思和时间的,下面小结一下自己的一点心得。

首先把train和test合并,然后将缺失值排序。

train<-merge.data.frame(train_2016,properties_2016,by="parcelid")

res<-sapply(train,function(x) sum(is.na(x)))
miss<-sort(res,decreasing=T)
  1. 按照缺失值排列,看出很多id是大量缺失的,果断的删掉一些不重要的id,比如hashottuborspa。
train_left<-train_left[,names(train_left)!=c('hashottuborspa')] 

查看数据的相关性
从图中可以看出,很多变量本身是彼此联系的,比如跟tax有关的,跟pool有关的,跟sqfeet有关的。根据不同因素查看彼此关系。
ie 看看几个tax变量之间的关系,用corrplot可视化

tax<- data.frame(cbind(train_left$landtaxvaluedollarcnt,train_left$structuretaxvaluedollarcnt,train_left$taxvaluedollarcnt,train_left$taxamount))
corrplot(cor(tax, use="complete.obs"), type="lower"

这里的代码我写的不太好,一个个搜索再添加笨了点。应该可以用字符串tax找出相关变量,自动形成数据框。以后查下怎么写。



这里可以看出,taxamount和其他tax变量关系密切,从lm也可以做出类似分析,所以删去taxamount以免重复。类似的不再赘述。

train_left<-train[,names(train)!=c('taxamount')]
  1. 线性分析补足变量的缺失值
    zillows文件集里,对于bedroom和bathroom的变量也很啰嗦,有好几个来来回回的,比如'calculatedbathnbr'这个和bathroom类似,被我嫌弃的删除。然后其他有点关系又没有重复的几个变量,可以用lm函数,看看之间的关系。比如这里fullbathcnt和bathroomcnt,p值超小,R的平方值很多,而且bathroomcnt几乎没有缺失,所以可以用线性方程的系数补足fullbathcnt的缺失值。


train_left$fullbathcnt[is.na(train_left$fullbathcnt)]<-(-0.001002)+0.970993*train_left$bathroomcnt[is.na(train_left$calculatedbathnbr)]
  1. 某些变量用平均数或中位数补值,比如这个楼层数,以1和2层的居多,两者的平均数是1.63(虽然在现实中不存在)。
    建成的年代用中位数补值。
train_left$numberofstories[is.na(train_left$numberofstories)]<-1.63
train_left$yearbuilt[is.na(train_left$yearbuilt)]<-median(train_left$fullbath,na.rm=T)

以上这些办法,也可以利用mice包等自动插值函数,或者逐步回归等自动筛选,我这样做,是感觉自己比较能有主导性,知其然也知其所以然吧。

  1. 部分非实际数值的类型比如fips,就是66这种zillows内部代码,所以进行因子化分类。
train_left$propertylandusetypeid<-factor(train$propertylandusetypeid)
train_left$fips<-factor(train_left$fips)
  1. 对于有或无的设施,根据kaggle论坛经验,设为-1比设为1更有效果。
train_left$fireplaceflag[is.na(train_left$fireplaceflag)]<-(-1)
train_left$fireplaceflag[!is.na(train_left$fireplaceflag)]<-1
  1. 日期也进行因子化。
train_left$transactiondate<-as.Date(train$transactiondate,format="%m%d%Y")
train_left$transactiondate<-as.factor(train_left$transactiondate)

......
忙活了半天,终于可以开始运算了。
自从xgb这个大杀器出来以后,大部分的参与者都是用了这个算法,当然调参各有千秋。我在这方面大概还算是个小白。

另外影响成绩的,还有房屋地点和交易时间的分类,这步我还没有找到好的调整方法。
另外zillows只公布了一年的数据,用来预测2016-2017共六个月的数据有点立场不足。他们的对策也很搞,在截止前两周,会再发布新的日期数据。估计到时候大家又是一场手忙脚乱。


All in all, features的取舍和补值是数据分析中重要的一步,但不是最重要的一步。最近看kaggle上面巴黎银行的竞赛复盘,把其中的变量大胆的删掉了20多个,只留下13个变量,但是接下来,按照获奖者的思路,把某个变量(他怎么找到的?)与其他变量相结合,做出了magic feature的矩阵,然后用xgb运算后,也可以得到前30名。能力,时间,运气,缺一不可呀。

个人思路,供参考。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [TOC] About Trs 只是阅读过程中对其中一些进行注脚而已,更确切的内容还是英文原文来的清晰,有些翻译反...
    mrlevo520阅读 4,973评论 0 0
  • 特征选择 特征选择(排序)对于数据科学家、机器学习从业者来说非常重要。好的特征选择能够提升模型的性能,更能帮助我们...
    hzyido阅读 11,675评论 1 16
  • 你们相信只是因为名字就从此再也忘不掉那个名字的主人吗。 他叫苏炳尘,一个懵懂少年,本来他的生活平淡无奇,每天学习之...
    凉城丨阅读 1,254评论 0 0
  • 前段时间电视剧《夏至未至》热播,让我们这一波人又温习了这部温暖的青春期的书,重新感受了胡夏的校园式音乐,让我们重新...
    麦大西阅读 2,767评论 0 1
  • 读萧红的文字,如品一杯清茶,宁静,恬淡,幽远。 “严冬一封锁了大地的时候,则大地满地裂着口。从南到北,从东到西,几...
    布衣荆钗阅读 3,892评论 0 1