GithubHelp home page GithubHelp logo

kesci-ctrip-room-rrediction's Introduction

Kesci Ctrip Room Rrediction

5st Place Solution for kesci-ctrip room prediction

携程的题目说明及数据地址: https://www.kesci.com/apps/home/#!/lab/dataset/58d4e28c84a25f34b1d94906/document

开发环境: | Mac OS CPU | Python 3.5 | LightGBM 0.2 | Xgboost 0.6 |

1. 队伍介绍

  队名:还没有到极限吧? 由2个小伙伴组成,这是我们第一次合作参加的大数据比赛,配合还是比较默契。希望以后参加比赛的时候,一开始少交流,各人独自提取特征,再来进行特征融合。这样得到的特征将会更多样。

2. 问题重述

  携程每天向超过2.5亿会员提供全方位的旅行服务,海量的网站访问产生了海量的数据,从中挖掘潜在的数据是具有重大的意义。合理利用这些数据使其能真正为用户带来更好的旅行体验。调研表明,大部分用户除了对于酒店有偏好外,也有对于酒店房型的偏好。不同的酒店房型会提供酒店不同服务和礼惠政策等,这使得提供更多服务的同时,带来了用户一定程度的挑选时间。如何根据在用户的历史信息,挖掘出用户对于某些房型偏好,也为了节省用户的挑选时间和提供更好的服务。针对需要解决的问题,我们主要从以下几个方面来进行处理:特征工程,造特征,模型融合(stacking)。

3. 特征工程

  特征工程主要包含了5个部分的特征提取:

  第一个是时间信息,经过统计,所给出的训练集的时间在2013-04-14到2013-04-20之间,而测试集的时间在2013-04-21到2013-04-27之间,所以对于需要预测的信息,前6天的信息就是一个穿越特征,在use_leak函数中,就是运用这一点来提取特征。

  第二是剔除异常数据和缺失严重的数据,通过观察,我们发现所给出的数据里面也存在一些异常数据,比如有些数据,用户历史订购房间的平均面积(user_avgroomarea)只有1,这可能是携程帮我们填补的缺失值;预定的时间(orderdate_lastord)比本次预定时间(orderdate)还大,所以在训练数据中把这部分数据剔除,因为这些异常数据一定会影响模型的效果。此外数据中roomtag_6全部都为0,roomtag_6_lastord(也几乎全为0,极少部分为空),orderbehavior_4_ratio_1month, orderbehavior_5_ratio_1month和orderbehavior_3_ratio_1month这几列特征也全为空,我们也把这部分特征全部剔除掉。当然,这些特征的选取可以通过pandas的corr函数来进行选择,我们没有开源这部分特征选择的代码,因为携程官方最终想看到一个直接能运行出结果的代码,所以我们就总结出train和eval的代码。

  第三是标明某特征是否是该orderid中最大(小)值,这个特征也是有必要的,因为最小和最大特征是会影响用户的购买。在make_focus中,通过pandas的groupby和transform实现了这个特征的提取。

  第四是标明该房型特定服务是否满足该用户的需求,我们把用户的历史订购频率定义为用户的需求,如user_roomservice_2_1ratio代表roomservice_2取1的频率,如果user_roomservice_2_1ratio > 0.5且这个房间提供roomservice_2为1。则说明roomservice_2满足了用户的需求。在make_focus实现了这一特征的提取。

  第五是历史购买记录和本次差别,就是用此房间和用户历史房间做差来比较,这能体现变异程度,也是很有必要的,在make_focus实现了这一特征的提取。

4. XGB造特征

  通过以上人工造特征的过程,我们再采用xgboost来造特征,具体做法就是在xgb的train之后predict时,将pred_leaf设置为true,就能得到每棵树的预测输出,以此当作特征。

   最终采用lgb五折预测和线性融合得到了最终的结果。

5. 一点感想

   数据和特征决定了机器学习的上限,模型和算法只是逼近这个上限而已。我们最终成绩是可以再有提升的,但是我们把最终优化的时间都花在了模型的调参和模型的选择上面。而没有把重心放在特征的提取上,这点切记,下次比赛一定多花时间进行数据分析和特征提取。

kesci-ctrip-room-rrediction's People

Contributors

silencezjl avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.