每年有超过1.4亿预订在互联网上进行,许多酒店预订是通过访问量最大的旅游网站如Booking.com、Expedia.com、Hotels.com等进行的。根据谷歌数据,酒店预订通常提前12周进行。接下来我们将创建一个模型,预测客户是否会取消在线酒店的预订。
我们将使用酒店预订数据集来演示如何使用 SageMaker Data Wrangler 执行探索性数据分析 (EDA)
和特征工程
。
酒店预订需求数据集 数据集包含城市酒店和度假酒店的预订信息,包括预订时间、入住时间、成人、儿童和/或婴儿数量以及可用停车位数量等信息事物。
下载数据集:
https://www.kaggle.com/datasets/jessemostipak/hotel-booking-demand
将数据集解压缩到本地计算机中,解压出来是hotel_bookings.csv
。
我们将使用此数据集根据历史模式和其他特征来预测客户是否会取消预订。
列说明:
列名 | 描述 |
---|---|
hotel |
酒店类型(H1 = 度假酒店或H2 = 城市酒店) |
is_canceled |
指示预订是否取消 (1) 或未取消 (0) 的值 |
lead_time |
预订输入物业管理系统日期与抵达日期之间经过的天数 |
arrival_date_year |
到达日期年份 |
arrival_date_month |
抵达日期月份 |
arrival_date_week_number |
到达日期是一年中的周数 |
arrival_date_day_of_month |
到达日期日期 |
stays_in_weekend_nights |
客人入住或预订入住酒店的周末晚数(周六或周日) |
stays_in_week_nights |
客人入住或预订入住酒店的周晚数(周一至周五) |
adults |
成人人数 |
children |
儿童人数 |
babies |
婴儿数量 |
meal |
预订的餐食类型。标准招待膳食套餐中列出了类别:Undefined/SC – 无膳食套餐;BB - 床和早餐; HB – 半食宿(早餐和另一餐——通常是晚餐);FB – 全食宿(早餐、午餐和晚餐) |
country |
原产地。ISO 3155–3:2013 类别以以下格式表示 |
market_segment |
细分市场指定。在类别中,该术语TA 的意思是“旅行社”和TO “旅游经营者” |
distribution_channel |
预订分销渠道。该术语TA 的意思是“旅行社”和TO “旅游经营者” |
is_repeated_guest |
指示预订姓名是否来自重复客人的值 (1) 或不是 (0) |
previous_cancellations |
在当前预订之前客户取消的先前预订数量 |
previous_bookings_not_canceled |
在当前预订之前客户未取消的先前预订数量 |
reserved_room_type |
预订房型代码。出于匿名原因,仅提供代码而不是名称。 |
assigned_room_type |
分配给预订的房间类型的代码。有时,由于酒店运营原因(例如超额预订)或客户要求,分配的房型与预订的房型不同。出于匿名原因,仅提供代码而不是名称。 |
booking_changes |
从在 PMS 上输入预订之时到办理入住或取消之时对预订进行的更改/修改的次数 |
deposit_type |
指示客户是否支付押金以保证预订。该变量可以假设三类: 无存款 – 没有存款;Non Refund – 已按住宿总费用支付押金;Refundable – 已支付押金,其金额低于住宿总费用。 |
agent |
预订的旅行社ID |
company |
进行预订或负责支付预订费用的公司/实体的 ID。出于匿名原因,显示 ID 而不是名称 |
days_in_waiting_list |
在向客户确认之前预订在等待列表中的天数 |
customer_type |
预订类型,假设为以下四种类型之一:Contract - 当预订有与之相关的分配或其他类型的合同时;Group – 当预订与团体相关时;Transient – 当预订不属于团体或合同的一部分,并且与其他临时预订无关时;Transient-party – 当预订是短暂的,但至少与其他短暂预订相关时 |
adr |
平均每日房价定义为所有住宿交易总和除以总入住晚数 |
required_car_parking_spaces |
客户所需停车位数量 |
total_of_special_requests |
客户提出的特殊要求数量(例如双床或高层) |
reservation_status |
预订的最后状态,假设以下三个类别之一:Canceled – 预订被客户取消;Check-Out – 顾客已办理登机手续但已离开;No-Show – 顾客没有办理入住,并告知酒店原因 |
reservation_status_date |
最后设置状态的日期。该变量可以与 ReservationStatus 结合使用,以了解预订何时取消或客户何时退房 |
Data Wrangler 支持从多个数据源导入数据集 ,包括 S3、AppFlow、Athena、Redshift、EMR、Snowflake 和 Databricks。
创建S3桶:
aws s3 mb s3://<bucket-name> --region us-east-1
确保 S3 存储桶位于和
SageMaker Studio
的同一区域。
在存储桶中创建一个名为bookings_dataset的文件夹,然后将解压的 CSV 文件上传到bookings_dataset文件夹中:
回到SageMaker Studio,进入左侧的Data -> Data Wrangler
页面,Data Wrangler需要在Canvas里运行,首先开启Canvas:
等待8分钟左右后,Canvas启动成功,点击Open in Canvas
:
点击Import and prepare
:
选择导入表类型数据:
选择从S3中导入数据,这里看到支持几十种数据源:
选择之前上传的文件路径并导入:
导入的时候会先preview data,确认数据格式没问题后点击Import data
:
导入数据后,Data Wrangler
会验证数据集,检测数据类型(可以覆盖),并提供每列的直方图。加载后,可以看到数据分布、无效值和缺失值。异常值和缺失值是错误数据的特征,识别它们至关重要,因为它们可能会影响结果。
直方图顶部有一个条形图,显示无效值和缺失值。我们可以查看数字、分类、二进制、文本和日期时间类型的有效值的比率,以及基于总 null 和空单元格的缺失值的比率,最后是无效值的比率。
单击页面顶部的数据流,返回主数据流页面。
流程编辑器现在显示两个块,显示数据是从源导入的并且数据类型已识别:
为了对导入的数据应用操作,我们可以选择数据类型块并单击它旁边的+号。如下图所示,可以看到用于添加转换、执行分析、添加目标接收器或将步骤导出为 Jupyter Notebook 的选项。
除了导入之外,还可以将一个导入的数据集与其他数据集连接起来:
进入data flow主页面,将 Data Wrangler
文件重命名为hotel-bookings.flow
:
命名后:
在下一节中,我们将使用数据质量和见解报告对刚刚导入 Data Wrangler 的酒店预订数据集进行分析