酒店预订需求(Hotel booking demand)数据分析

2020-08-21  本文已影响0人  小丶镇

前言

“一个人的命运,当然要靠自我奋斗,但也要考虑到历史的进程”。在信息与技术如此发达的时代,迷茫的我毅然选择投入大数据的浪潮,不管未来的成功与否,只希望能够不忘初心,不后退、不后悔。作为一个数据分析领域的小白,深知前行之路的不易,在自主地系统学习python、sql以及统计学的相关基础知识之后,开始了第一个来自Kaggle的数据分析项目——Hotel booking demand,以学习为目的,主要参考Marcus Wingen的想法。路漫漫其修远兮,且行且珍惜。

一般的数据分析流程为明确问题、数据获取、数据清洗、数据统计和可视化、数据挖掘。通常来说,如果问题的描述越具体,解决方案和答案则越清晰和精确。但是当问题不太明确时,就需要我们自己对问题进行定义、层次划分和内容填补,然后再分析和解决问题。数据的来源主要是公司的数据库、网络爬虫。理解和读懂每个特征(字段)的含义是数据分析的核心,这样才能对数据进行清洗、统计和可视化,反映数据的基本情况、提出意见和建议。进一步利用各特征之间的相关关系,可以深入挖掘数据中隐藏的知识,最终为决策提供一定的理论支持。


一、明确问题

对于Hotel booking demand的数据集,预测酒店的取消情况是一个比较模糊的问题,因此将问题具体化、层次化是非常重要的步骤。简单浏览一下数据,是位于葡萄牙的城市酒店(City Hotel)和度假酒店(Resort Hotel)在2015年7月1日至2017年8月31日的预订信息,包括预订时间、到达时间、停留时长、客户信息等等。因此根据数据集可以定义几个基础的问题:客户来自哪里?每客户每晚房费的房型分布?每客户每晚房费的季节分布?酒店最繁忙的月份?客户在酒店的停留时间?预订的市场细分?预订取消的详情?进一步探索哪些特征对于酒店预订的取消有重要的影响,从而建立模型去判断客人是否真的会来酒店,即预测酒店预订的取消情况,可以帮助酒店规划人员安排和食物需求。


二、数据获取、清洗、统计和可视化

数据获取阶段:引入pandas库,打开从Kaggle网站下载到本地的Hotel booking demand.csv(119390 rows × 32 columns)。

数据清洗阶段:缺失值填充({'children':0, 'country':'unkown', 'agent':0,' company':0}),异常值处理(某些行包括0 adults, 0 children和0 babies为无效订单),筛选出城市酒店和度假酒店的未取消客户方便之后的数据整合(命名为ch和rh)。针对每个问题的数据统计和可视化阶段,都要对数据进行预处理。

数据统计和可视化阶段:总共7个基本的统计问题。

1.客户来自哪里

利用pandas和plotly.express,对预订未取消的客户按城市进行统计汇总并可视化输出,发现入住这两家酒店的客户主要来自于葡萄牙等欧洲地区(葡萄牙的酒店)。

plotly.express可视化客户来自的城市

2.每客户每晚房费的房型分布

两家酒店都有不同的房间类型和用餐安排,同时考虑季节因素,因此房费价格差异很大,首先对房间类型进行分析。由于babies不算付费客户,因此每个订单的房费只需要对adults和children进行平均,来表示每客户每晚的房费。原数据集对房间类型仅用代号表示,没有进行过多的描述。从房间价格、房间类型和酒店类型三个维度,我们来分析此箱线图。首先房间价格与房间类型,城市酒店的E房型价格相对较高但波动较大(可能受季节或其他因素影响大)、B房型价格相对较低但波动较小(可能是经济房),度假酒店的L房型价格相对较高而波动较小(可能是度假贵宾房)。然后房间价格与酒店类型,由于房间类型的代码在两家酒店并不互通所以无法直接比较,但是总体上度假酒店的房价要稍高。最后房间类型与酒店类型,度假酒店有着更多的房间类型。

matplotlib.pyplot绘制的箱线图

3.每客户每晚房费的季节分布

接下来考虑房费价格与季节的关系。下面的折线图显示城市酒店的价格变化较小,在春季和秋季是最高的;度假酒店在夏季的价格非常高。

seaborn绘制的折线图

4. 酒店最繁忙的月份

城市酒店在春季和秋季的客户较多,此时的房费价格也相对较高,而7月和8月的低客流量对应着低的房价,客户数与房费价格整体趋势一致。度假酒店从6月到9月,客户数量略有下降,而这段时间是房价最高的时候,可能要结合其他相似度假酒店的客流量,去判断房价与客户数是否存在因果关系。两家酒店在冬天的客户人数都很少,房价也都很低。

seaborn绘制的折线图

5.客户在酒店的停留时间

客户在城市酒店平均居住2.92晚、最多48晚,在度假酒店平均居住4.14晚、最多69晚。客户偏好在城市酒店居住1-4晚;对于度假酒店,1-4晚也经常被预订,同时7晚也很受欢迎(一周度假计划)。

seaborn绘制的柱形图

6.预订的市场细分

预订的市场渠道主要有8种,平均而言,团体(group)的房费价格最低,而航空公司(Aviation)的房费价格最高,大约是团体的两倍。

px和sns的市场细分可视化

进一步对航空公司预约和非航空公司预约的详情统计分析。发现航空公司预订提前的时间非常短,平均为4天,而其他预订提前的时间平均为80天,可能是航空公司临时会需要一个供机组人员休整的地方。而且航空公司通常每一人都有一个房间,因此需要比非航空公司预约更多的房间,平均房费也要更贵。

航空公司和非航空公司的统计描述

7.预订取消的详情

通过计算,得出酒店预订的总取消率为37.08%,其中城市酒店为41.79%,度假酒店为27.77%。可能是由于度假计划相较于城市内的其他安排,取消的概率会更小一点。

预订取消的详情

接着来看哪个月份的取消率最高。城市酒店全年的预约取消率基本在40%左右,相对稳定。而对于度假酒店来说,预约取消率在夏季最高、冬季最低,可能与公共假期的分布有关。

每月的预订取消率

三、数据挖掘

解决了基本的统计问题之后,我们需要考虑哪些特征对于酒店预订的取消有重要影响,从而建立模型为酒店的进一步安排提供理论支撑。

首先32个特征分为两大类:数值型(20个)和类别型(12个)。为了探究is_canceled(0为未取消,1为取消)与其余31个特征的关系,了解每个特征的含义是非常重要的步骤,同时为了实现模型的普适性和防止因果错乱等,要先人为地对特征进行取舍。首先排除arrival_date_year,这是由于抵达的年份没有探究的价值;然后排除assigned_room_type(抵达后分配的房间类型)、reservation_status(预约状态)等为订单完成或取消后的事务。days_in_waiting_list和booking_changes都是与 is_canceled高度相关的变量(预定取消后一定会发生的事务,会带来数据泄露),不利于模型的构建。虽然country能让模型更加准确,但为了实现模型的普适性,也排除。最终剩下24个特征(16个数值型和8个类别型),用来判断与is_canceled的关系。

分别使用决策树、随机森林、逻辑回归三种算法为is_canceled和其他24个特征建立模型,发现随机森林算法的交叉检验得分最高,因此之后的特征的评估过程使用随机森林算法。

三种算法的得分情况

优化随机森林模型,对参数微调,结果显示lead_time(预订提前的时间)、deposit_type(押金类型)、adr(日均房价)是影响is_canceled(预订是否取消)的三个最主要特征。

随机森林模型下影响预订取消的特征

首先是预订提前的时间对取消率的影响,在影响特征中占比最高。线性回归的结果显示预订提前的时间越晚,取消率越高;预订提前的时间越早,取消率越低。意味着预约时间与抵达时间相差较久的客户取消订单的可能性更大。

预订提前的时间对取消率的影响

然后是押金类型对取消率的影响,主要突出在Non Refund(不退换押金)与取消率的高强度相关性,这点十分可疑(是否为‘数据泄露’)。查阅了数据集来源的原论文,作出了解释:分析一些亚洲国家和某些分销渠道的Non Refund预订情况,发现这些预订是通过在线旅游代理使用错误或无效的信用卡信息进行的,为了支持申请进入该国的签证(申请葡萄牙入境签证必须预订酒店)。在没有收取客户的信用卡费用后,酒店将这些预订视为“假订单”,并联系客户。然而在需要核实的这段时间内,这些数据对我们的需求预测和决策形成了干扰。在排除押金类型这个特征之后,随机森林模型的影响特征分别为lead_time(0.17)、adr(0.11)、total_of_special_requests(0.07)、arrival_date_day_of_month(0.07),这里不再展开。

押金类型对取消率的影响

最后是日均房价对取消率的影响。从图中可以看出,低房价的客户会有更多的选择性,一般来说取消率较低。而房价越贵,取消的可能性越大。

日均房价对取消率的影响

总结,影响预订取消率最大的因素为预订提前的时间,需要重点关注,并设置相应的规划安排和处理措施。另外,日均房价、客户提出的特殊要求(如高楼层)、抵达时间的日信息和周信息等也对预订取消率有一定的影响。最后,如果对城市酒店和度假酒店的数据分别进行数据挖掘,可能会有一些新的发现,但是由于对地理位置和当地环境的不了解,这里不进一步讨论。

上一篇下一篇

猜你喜欢

热点阅读