首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

教你用Python+随机森林模型预测机票价格

大家好,欢迎来到 Crossin的编程教室 !

今天我们来分享一个机器学习方面的案例,通过已有数据进行预测。

印度的机票价格基于供需关系浮动,很少受到监管机构的限制。因此它通常被认为是不可预测的,而动态定价机制更增添了人们的困惑。

我们的目的是建立一个机器学习模型,根据历史数据预测未来航班的价格,这些航班价格可以给客户或航空公司服务提供商作为参考价格。

1.准备

开始之前,你要确保Python和pip已经成功安装在电脑上,并掌握基本的Python使用。如果没有,可以通过我们的教程先进行学习:python666.cn

(可选1)如果你用Python的目的是数据分析,可以直接安装Anaconda,它内置了Python和pip,以及数据分析所需的常用模块。参考前文:我也曾经因安装库而抓狂,直到我遇到了anaconda

请选择以下任一种方式输入命令安装依赖(anaconda可跳过):

1. Windows 环境 打开 Cmd (开始-运行-CMD)。

2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。

3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal,或通过设置工具进行安装。

2.导入相关数据集

本文的数据集是 Data_Train.xlsx,首先看看训练集的格式:

可见训练集中的字段有航空公司(Airline)、日期(Date_of_Journey)、始发站(Source)、终点站(Destination)、路线(Route)、起飞时间(Dep_Time)、抵达时间(Arrival_Time)、历经时长(Duration)、总计停留站点个数(Total_Stops)、额外信息(Additional_Info),最后是机票价格(Price)。

与其相对的测试集,除了缺少价格字段之外,与训练集的其他所有字段均一致。

完整数据集和代码见文末。

3.探索性数据分析

3.1 清理缺失数据

看看所有字段的基本信息:

其他的非零值数量均为10683,只有路线和停靠站点数是10682,说明这两个字段缺少了一个值。

谨慎起见,我们删掉缺少数据的行:

现在非零值达到一致数量,数据清理完毕。

3.2 航班公司分布特征

接下来看看航空公司的分布特征:

前三名的航空公司分别是 IndiGo, Air India, JetAirways.

其中可能存在廉价航空公司。

3.3 再来看看始发地的分布

某些地区可能是冷门地区,存在冷门机票的可能性比较大。

3.4 停靠站点的数量分布

看来大部分航班在飞行途中只停靠一次或无停靠。

会不会某些停靠多的航班比较便宜?

3.5 有多少数据含有额外信息

大部分航班信息中都没有包含额外信息,除了部分航班信息有:不包含飞机餐、不包含免费托运。

这个信息挺重要的,是否不包含这两项服务的飞机机票比较便宜?

3.6 时间维度分析

首先转换时间格式:

接下来,研究一下出发时间和价格的关系:

大体上价格没有差别,说明这个特征是无效的。

那么月份和机票价格的关系呢?

没想到4月的机票价格均价只是其他月份的一半,看来4月份是印度的出行淡季吧。

起飞时间和价格的关系

可以看到,红眼航班(半夜及早上)的机票比较便宜,这是符合我们的认知的。

3.7 清除无效特征

把那些和价格没有关联关系的字段直接去除掉:

4.模型训练

接下来,我们可以准备使用模型来预测机票价格了,不过,还需要对数据进行预处理和特征缩放。

4.1 数据预处理

将字符串变量使用数字替代:

对每列数据进行特征缩放,提取自变量(x)和因变量(y):

划分测试集和训练集:

4.2 模型训练及测试

使用随机森林进行模型训练:

在随机森林中,我们有一种根据数据的相关性来确定特征重要性的方法:

可以看到,Duration(飞行时长)是影响最大的因子。

对划分的测试集进行预测,得到结果:

这样看不是很直观,接下来我们要数字化地评价这个模型。

4.3 模型评价

sklearn 提供了非常方便的函数来评价模型,那就是 metrics :

结果:

这4个值中你可以只关注R2_score,r2越接近1说明模型效果越好,这个模型的分数是0.75,算是很不错的模型了。

看看其残差直方图是否符合正态分布:

不错,多数预测结果和真实值都在-1000到1000的范围内,算是可以接受的结果。其残差直方图也基本符合正态分布,说明模型是有效果的。

以上就是本次利用随机森林模型预测机票价格的全部过程。

本文译自kaggle社区,有较多的增删:

https://www.kaggle.com/harikrishna9/how-to-predict-flight-ticket-price/notebook

获取完整数据集和代码,请在公众号回复关键字:机票

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220107A052IG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券