社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python数据分析:携程出行产品预测未来14个月销量

数据挖掘入门与实战 • 7 年前 • 1379 次点击  



数据挖掘入门与实战  公众号: datadw



原文:https://www.kesci.com/apps/home/#!/forum/postdetail/59194c685d9f204ee315ed90


回复公众号“携程预测”获取本文数据分析python源码.


调查发现,在出行产品业务中,不同区域的产品需求量级不一样,不同时段需求量会有高低起伏,相同区域相同时段各产品的需求量因产品特性不同又有差异。
此次竞赛的目的正是为了深入了解产品需求量和产品特性、历史销量的关系,挖掘出影响需求量的关键因素,预测出行产品未来14个月每月的销量,从而指导产品的库存管理和定价策略,这将对收益管理提升有着重要作用。


团队介绍

我们团队三人分别来自湖南大学、云南大学和中国科学技术大学。我们在比赛前期主要采用不同的方式各自为战,以便形成差异化的模型用于后期融合。


接下来,我将从问题分析、特征工程、模型选择和模型融合四方面来分享我们比赛的方法和经验。



赛题分析

首先通过题意可以得出,本题是一个预测的问题,既可以当做时间序列问题来处理,也可以当做回归问题来处理。若使用时间序列模型,对于预测月销量这一目标,会发现预测周期14个月对于23个月的历史数据显得过长,因此时间序列模型无法充分提取总体的变化趋势以及周期内的规律,因此将此题看做回归问题是更为合适的做法。




特征工程

在进行特征工程之前,要进行数据预处理。预处理工作主要包括两项,第一是剔除缺失率过高的特征,因为缺失率过高的特征基本上不包含有用信息;第二对缺失值选择合适的方法进行填补。



数据预处理完成后,开始构建特征,当我们把经纬度用图形呈现出来的时候,发现地理位置出现成块的聚集现象,这些聚集区可能在真实的地理位置上是同一块区域划分。于是自然地想到采用聚类的方式来处理。


此外发现聚集的程度是由下至上越来越发散,这里面可能存在一些信息,为了将这一信息保留,在聚类时,将类别名从下往上分别标记为0-8。



对于三项日期特征(startdate、cooperatdate和upgradedate),主要使用了两项处理方式:(1)product_month减日期;(2)2017年1月减日期。


在产品信息表中,总共给出了5种产品评价指标,其中3种是评级特征,一种为评分特征,另一种为点评人数特征。由于3种评级特征的分布大体一致,直接通过求和获得总评级特征。而点评人数特征则是该比赛的强特征,能够强有力的反映销量,于是我们通过点评人数特征额外地挖掘出“单位时长点评人数”和“单位产品点评人数”特征,以此来反映该产品的受欢迎程度。




对于产品的价格信息,我们主要是计算了价格的相关统计量,包括每个产品的最高价格、最低价格、平均价格、价格方差以及平均价格在所有价格中的排名(排序特征往往能消除数值量级变化过大和异常值带来的影响)。


由于每个产品对应唯一的订单属性1,因此订单属性1能够很好体现产品所属的类型。而每个产品在其他订单属性上均出现多属性值,因而从属性值数量的比值中抽取信息。



节假日永远是人们出行高峰期,而每个月的节假日天数并不相同,直观地来看,节假日天数越多的月份销量往往越高。因此我们将各月的节假日天数作为额外的特征。


总体来说,随着人们生活水平的提高,旅游人数也在逐年提高。有两种增长的趋势:(1)年内趋势,即每年的销售逐月增长,销售量以年为周期进行变化;(2)总体趋势,即销售量逐年增长。针对第一种趋势,我们提取月份值为特征。对于第二种趋势,则将2014年1月至2017年1月转换为1-37的序数特征,但是在选择采用树模型的时候,由于训练集中没有大于23的值,因此23以上的数值等价于23。




模型选择

通过多模型的对比,我们最终采用了XGBoost和lightGBM。


为了使多模型融合得到有效提升,我们采取了多种不同的方式设计模型。第一种是针对共线性特征分别构造多个模型,或者对类别特征采用不同的编码方式。第二种是对较优的单模型特征采用两种不同的算法(XGBoost和lightGBM),第三种则是分别对XGBoost和lightGBM采用10折交叉选取90%的数据训练预测。最后在模型融合时候,我们采取的策略是根据各单模型的表现效果,对各结果进行加权平均,这种方法不仅操作简单,也能使融合效果得到明显提升。其中使用了一个技巧,就是设计一个相对较差的模型,在加权平均时,赋予其负权重。



模型融合

这是我们关于本次赛题的整体思路展示,希望能对解决类似问题大家有所帮助。


选手问答 

Q1 代和平同学你好,首先恭喜你们获得了比赛的团体第三名。作为队长能简单就你们团队的情况做个简单介绍吗?


好的,我们团队主要由三名成员组成:队长代和平,队员胡涛和乔世吉。胡涛是来自云南大学,专业是应用统计学。乔世吉来自中国科学技术大学的核科学技术学院,而我则来自湖南大学,专业是管理科学与工程。我们三个是在比赛过程中认识的,因为在比赛初期大家成绩比较接近,然后我们就决定一起组队。

在比赛过程中,我们团队在前期主要采用不同的方式各自为战,以便形成差异化的模型用于后期融合这种方式来相互合作,后期也取得了很不错的效果。


Q2 你觉得本次比赛的难点在哪里?你们后面是通过什么样的方法去解决这个问题的?

我觉得难点在于预测集时间维度相对训练集较长,难以构造与线上表现一致验证集。


考虑到AB榜的分布应当是一致的,我与胡涛则直接把A榜线上的反馈结果作为对模型的验证,这样做的优点是这样的反馈及时有效,但缺点是容易陷入对A榜的过拟合。而乔世吉则构造线下验证集,以避免我们总体过拟合。


Q3 我注意到你的专业是管理科学与工程,是一个覆盖面很广的一级学科。你觉得数据分析在里面,除了扮演十分重要的分析工具这样一个角色更重要的意义在哪里?


自从管理科学这一学科诞生以来,主要目的是探索使用科学的方法来进行管理,而科学的方法则更多的是使用量化方法,我认为随着互联网的发展,每个企业或多或少都会积累很多数据,而这些数据则是他们改进内部管理、提升服务、挖掘市场的重要素材。因此充分发挥数据分析在现代管理中作用,对于一个企业至关重要。


Q4 整个回归模型分析下来在你们所得的结果中有么有让自己觉得惊喜的地方?


这次比赛主要有两个地方让我觉比较开心。第一个是将预测的结果与前23个月画在同一副图中,会发现回归得出的结果趋势与前两年的表现很是相像,对趋势拟合的很好。除此之外,我曾经一度对时序问题思路比较狭窄,总觉得只能用ARMIR,通过这次比赛也大大拓宽了我的思维。


Q5 对于对数据分析有兴趣或者刚刚进入数据分析的同学你有没有什么觉得很受益的入门书籍推荐给他们的?


我很早看过一本书,叫《赤裸裸的统计学》,里面没有复杂的公式,都是一些浅显易懂的语言,但是对统计学的本质讲解的很好,类似的还有一本是《深入浅出数据分析》。再深入一点可以再看看《机器学习系统设计》、《Python数据分析与挖掘实战》,这两本是更多的将数据分析与挖掘知识运用到实际当中。最后再了解背后的理论,建议将《机器学习实战》与《统计学习方法》结合着看。并且学习理论的同时也应该提升对数据的理解能力,如果能够充分理解数据,很够看懂数据背后潜在的信息对数据分析应该会起到事半功倍的效果。


数据挖掘入门与实战

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘


长按图片,识别二维码,点关注



  公众号: weic2c   
据分析入门与实战

长按图片,识别二维码,点关注





今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/otk3iu9OMu
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2325
 
1379 次点击