教你用Python预测机票价格!

机器学习之决策树模型学习笔记 求熵 H(x)=−∑p(i)∗log(p(i))H(x) = -\sum p(i) *log(p(i))H(x)=−∑p(i)∗log(p(i)) 当p=0或p=1时,H=0 熵值最小;当p=0.5时,H=1 熵值最大。 信息增益 表示特征X使得类Y的不确定性减少的程度。假如原来熵值等于10,经过一次决策过后,熵值降低为8,那么信息增益值就等于2,那么我们可以遍历所有特征的熵值,看下哪个特征使我们的信息增益值最大,那么这个特征就是根节点。依次类推,再在剩下的特征中继续寻找信息增益值最大的特征,那么这个特征就 阅读详情

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

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

0b5df468783ceeef5ffd48d4ba63067f.jpeg

1.准备

请选择以下任一种方式输入命令安装依赖:

1. Windows 环境 打开 Cmd (开始-运行-CMD)。
2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。
3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install pandas
pip install numpy
pip install matplotlib
pip install seaborn
pip install scikit-learn

2.导入相关数据集

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

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style('whitegrid')


flights = pd.read_excel('./Data_Train.xlsx')
flights.head()

9c73b8426e0e6f7b3666c9d0926c4ec4.png


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

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

下载完整数据源和代码请访问:在公众号后台回复:预测机票。

3.探索性数据分析

3.1 清理缺失数据

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

flights.info()

8fae9d7ee2efe8b9d5bc133bec2e70a5.png

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

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

# clearing the missing data
flights.dropna(inplace=True)
flights.info()

570140feb31eb789acdd6d8c3ddfe9f5.png

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

3.2 航班公司分布特征

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

sns.countplot('Airline', data=flights)
plt.xticks(rotation=90)
plt.show()

ec792bf250bd9b3abf12996742231cb8.png

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

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

3.3 再来看看始发地的分布

sns.countplot('Source',data=flights)
plt.xticks(rotation=90)
plt.show()

518180fda4d2607de27ab09f28754107.png

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

3.4 停靠站点的数量分布

sns.countplot('Total_Stops',data=flights)
plt.xticks(rotation=90)
plt.show()

2e47d2b88283cfcd51e4d3b4547dc358.png

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

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

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

plot=plt.figure()
sns.countplot('Additional_Info',data=flights)
plt.xticks(rotation=90)

f628daaf58598626d5c4f370624ab170.png

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

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

3.6 时间维度分析

首先转换时间格式:

flights['Date_of_Journey'] = pd.to_datetime(flights['Date_of_Journey'])
flights['Dep_Time'] = pd.to_datetime(flights['Dep_Time'],format='%H:%M:%S').dt.time

44a4f0091072038112f8d59a0a355cb4.png

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

flights['weekday'] = flights[['Date_of_Journey']].apply(lambda x:x.dt.day_name())
sns.barplot('weekday','Price',data=flights)
plt.show()

626395b918d7ef63008c48b959f74f70.png

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

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

flights["month"] = flights['Date_of_Journey'].map(lambda x: x.month_name())
sns.barplot('month','Price',data=flights)
plt.show()

36434e31b53d924aea2d1d9472cf8756.png

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

起飞时间和价格的关系:

flights['Dep_Time'] = flights['Dep_Time'].apply(lambda x:x.hour)
flights['Dep_Time'] = pd.to_numeric(flights['Dep_Time'])
sns.barplot('Dep_Time','Price',data=flights)
plot.show()

7b5545a13d85771559096ae2c7ed18e1.png

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

3.7 清除无效特征

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

flights.drop(['Route','Arrival_Time','Date_of_Journey'],axis=1,inplace=True)
flights.head()

d7fc1f2f77c08d79919ebde13f52963a.png

4.模型训练

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

4.1 数据预处理

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

from sklearn.preprocessing import LabelEncoder
var_mod = ['Airline','Source','Destination','Additional_Info','Total_Stops','weekday','month','Dep_Time']
le = LabelEncoder()
for i in var_mod:
    flights[i] = le.fit_transform(flights[i])
flights.head()

e86232e734bb333c63c1ad3215991647.png

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

flights.corr()
def outlier(df):
    for i in df.describe().columns:
        Q1=df.describe().at['25%',i]
        Q3=df.describe().at['75%',i]
        IQR= Q3-Q1
        LE=Q1-1.5*IQR
        UE=Q3+1.5*IQR
        df[i]=df[i].mask(df[i]<LE,LE)
        df[i]=df[i].mask(df[i]>UE,UE)
    return df
flights = outlier(flights)
x = flights.drop('Price',axis=1)
y = flights['Price']

划分测试集和训练集:

from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=101)


4.2 模型训练及测试

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

from sklearn.ensemble import RandomForestRegressor
rfr=RandomForestRegressor(n_estimators=100)
rfr.fit(x_train,y_train)

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

features=x.columns
importances = rfr.feature_importances_
indices = np.argsort(importances)
plt.figure(1)
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b', align='center')
plt.yticks(range(len(indices)), features[indices])
plt.xlabel('Relative Importance')

0e8914618799b43644ed5afb6e20ab9f.png

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

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

predictions=rfr.predict(x_test)
plt.scatter(y_test,predictions)
plt.show()

e7bd3fc83a4bfd33a6a1f24780b8de03.png

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

4.3 模型评价

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

from sklearn import metrics
print('MAE:', metrics.mean_absolute_error(y_test, predictions))
print('MSE:', metrics.mean_squared_error(y_test, predictions))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))
print('r2_score:', (metrics.r2_score(y_test, predictions)))

结果:

MAE: 1453.9350628905618
MSE: 4506308.3645551
RMSE: 2122.806718605135
r2_score: 0.7532074710409375

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

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

sns.distplot((y_test-predictions),bins=50)
plt.show()

80649df35f7d9b78480687d2f84b0158.png

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

译自kaggle社区,有较多的增删:
https://www.kaggle.com/harikrishna9/how-to-predict-flight-ticket-price/notebook

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注我们!

机票价格大部分时候是可预测的,你觉得呢,欢迎在留言区吱一声!

需要源码,公众号后台输入:预测机票


 
推荐阅读:
入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

点阅读原文,看B站50个Python实战视频!

基于TPA-Transformer的机票价格预测 本文提出基于机器学习的机票价格预测模型TPA-Transformer(Ticket Price Aware Transformer,机票价格感知Transformer)和一种基于时间序列的数据处理方法,通过增加注意力模块引入其他航班价格参考信息,并在Encoder后增加多层卷积结构进行多航班不同属性信息融合与局部特征提取,从而提高模型在多步价格预测上的表现性能。),在选择最大预测步长时,受限于获取数据的序列长度限制,若预测步长过长,会导致输入序列过短,进而出现模型预测性能下降;随着预测步长的增加, 阅读详情

相关推荐

【项目实战】教你用Python预测机票价格

印度的机票价格基于供需关系浮动,很少受到监管机构的限制。因此它通常被认为是不可预测的,而动态定价机制更增添了人们的困惑。我们的目的是建立一个机器学习模型,根据历史数据预测未来航班的价格,这些航班价格可以给客户或航空公司服务提供商作为参考价格。

weixin_56659172的博客 1078

使用机器学习算法预测航班价格

本项目旨在利用机器学习算法来预测机票价格。机器学习是一种强大的技术,可以自动从历史数据中学习规律和模式,并根据这些模式做出准确的预测。通过分析航班的相关数据,如起飞时间、航空公司、航线、季节性和市场需求等因素,我们可以构建一个机票价格预测模型。本实验在jupyter notebook中执行,本文将给出代码的详细介绍,供初学者更好的学习数据预处理、特征工程、数据划分、模型选择和训练、模型评估等过程。

m0_51118916的博客 8295

python预测机票价格_一种国内机票价格预测方法与流程

本发明属于机票查询预测技术领域,具体涉及一种国内机票价格预测方法。背景技术:随着生活水平的提高,选择飞机作为旅游出行的交通工具的人数逐年增加。但是,旅客对于机票价格依然十分敏感,且以最优价格购买心仪航线机票的愿望十分强烈,机票市场未来几年需求巨大。由于国内航空公司使用收益管理并根据旅客购买行为改变定价策略,国外机票价格的预测方法大多不适合国内的机票价格变化。面对新形势下国内机票价格的变动趋势,几经...

weixin_39808953的博客 1732

机器学习案例练习——机票价格预测(随机森林回归、XGBoost回归)

本次使用了方差分析来进行特征选择,但对于结果(选择所有特征代入模型)不太确定。对比了随机森林、决策树、XGBoost三种回归的效果。在实际的代码中,还对比了岭回归和Lasso回归,效果远远低于这三种,就没有写进来。感觉特征选择做的不好,导致训练模型过拟合了。

m0_53294028的博客 2767

Python 爬虫实战:在去哪儿网抓取机票价格波动数据,制定出行计划

摘要: 本文介绍如何利用Python爬虫抓取去哪儿网机票价格波动数据,分析价格趋势以制定最优出行计划。通过requests和BeautifulSoup库获取网页信息,使用pandas进行数据清洗,并借助matplotlib/seaborn可视化价格波动。同时探讨防止反爬虫的策略,如设置请求间隔和使用代理IP。最终目标是通过数据分析预测最佳购票时机,帮助用户节省旅行费用,并展望未来可扩展至多平台数据整合以提升预测精度。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 986

航空机票价格预测

以某航线(如北京→上海)的历史票价数据为例,包含`date`(日期)、`price`(票价)、`days_to_departure`(提前购票天数)等字段。'ds': pd.to_datetime(['2023-01-01', '2023-04-05', '2023-05-01']), # 示例节假日。- **数据特点**:机票价格随时间动态变化,包含**趋势性**(如旺季涨价)、**周期性**(如每周/每月规律波动)、**突发性**(如促销活动)。

寒寒豆豆软件公司的博客 263

如何使用Python预测机票价格

印度的机票价格基于供需关系浮动,很少受到监管机构的限制。因此它通常被认为是不可预测的,而动态定价机制更增添了人们的困惑。我们的目的是建立一个机器学习模型,根据历史数据预测未来航班的价格,...

Python实用宝典网 3954

Python爬虫与数据分析:航空公司机票价格预测系统的开发与实现

爬取航空公司机票的实时价格数据。使用历史数据预测未来机票价格波动。提供价格变化提醒,帮助用户选择最合适的购票时机。技术选型:requests:发送HTTP请求获取网页内容。:用于解析HTML页面,提取机票价格数据。Selenium:用于抓取动态加载的内容,模拟浏览器获取实时数据。pandas:数据处理与清洗。:用于构建价格预测模型。:Web应用框架,用于前端展示与交互。:用于定时任务和后台数据更新。:用于发送价格提醒通知(如短信或邮件)。

2201_76125261的博客 876

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

印度的机票价格基于供需关系浮动,很少受到监管机构的限制。因此它通常被认为是不可预测的,而动态定价机制更增添了人们的困惑。我们的目的是建立一个机器学习模型,根据历史数据预测未来航班的价格,这...

Python实用宝典网 850

Python与随机森林模型在机票价格预测中的应用

htmltable {th, td {th {pre {简介:本项目通过使用Python语言和随机森林模型预测机票价格,涉及数据预处理、特征工程、数据探索性分析、模型训练、评估、调优以及实际应用等方面。重点介绍了Python的库如Pandas、NumPy、Matplotlib和Scikit-learn在机器学习任务中的应用,以及如何通过随机森林算法进行高效预测。该项目旨在帮助用户和航空公司提前了解票价,优化决策。

weixin_31641077的博客 859

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 418

机器学习预测价格低点_使用机器学习技术预测机票价格

机器学习预测价格低点Travelling is one of the most entertaining things that everybody wants to avoid city crowds. Going to another island with a unique nature brings a new perspective about new things. The India...

weixin_26729763的博客 825

工程师必看:如何用定时截尾试验快速验证产品MTBF(附真实案例解析)

本文为硬件工程师详细解析了如何运用定时截尾试验快速验证产品MTBF(平均无故障工作时间)。通过七步实战法,结合工业物联网网关的真实案例,阐述了从参数设定、试验执行到结果判读的完整流程,并提供了MATLAB脚本实现自动化计算与可视化,帮助工程师在有限时间内科学评估产品可靠性。

weixin_29243063的博客 498

计算机毕业设计Hadoop+Hive+Spark机票价格预测 机票可视化大屏 大数据毕业设计(源码+文档+PPT+ 讲解)

计算机毕业设计Hadoop+Hive+Spark机票价格预测 机票可视化大屏 大数据毕业设计(源码+文档+PPT+ 讲解)

全网计算机/大数据辅导(自媒体)道祖第一人、全网粉丝100W+,专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。同时招收学生代理、校园代理。 960

Couldn‘t find device with uuid 恢复LVM元数据 linux

Couldn't find device with uuid 恢复LVM元数据 linux欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使

m0_57559579的博客 7170

Wireshark实战解析IEC 61850 GOOSE报文:智能变电站通信调试指南

网络协议分析是理解现代工业通信系统的基础,其核心原理在于对数据包的捕获、解码与解析。在电力自动化领域,IEC 61850标准定义了智能变电站内设备间高效、可靠的通信框架,其中GOOSE(通用面向对象变电站事件)协议因其基于以太网多播和快速重传机制,成为保护跳闸、联锁等关键信号传输的基石,其技术价值在于实现了微秒级延迟的高可靠性通信。掌握GOOSE报文的分析能力,对于现场调试、故障定位及系统验证至关重要。本文聚焦于使用Wireshark这一网络分析工具,深入解析GOOSE报文结构,涵盖从以太网帧头、协议标识到

weixin_34401479的博客 376

计算机毕业设计hadoop+spark+hive机票价格预测 机票推荐系统 航班延误预测 机票可视化大屏 Python爬虫 大数据毕业设计(源码+文档+PPT+讲解)

计算机毕业设计hadoop+spark+hive机票价格预测 机票推荐系统 航班延误预测 机票可视化大屏 Python爬虫 大数据毕业设计(源码+文档+PPT+讲解)

全网计算机/大数据辅导(自媒体)道祖第一人、全网粉丝100W+,专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。同时招收学生代理、校园代理。 1123

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

计算机毕业设计Hadoop+Hive+Spark机票价格预测 机票推荐系统 航班延误预测 机票可视化大屏 Python爬虫 大数据毕业设计

本文设计了一个基于Hadoop、Hive和Spark的机票价格预测与推荐系统。系统通过Hadoop存储海量机票数据,利用Hive构建数据仓库,运用Spark的机器学习算法进行价格预测,并基于预测结果和用户行为数据提供个性化推荐。系统采用分层架构,包含数据采集、存储、处理、模型训练和推荐服务等模块。实验结果表明,该系统在价格预测准确性和推荐效果方面表现良好。未来可进一步优化预测模型,加强用户反馈机制,并拓展系统在其他交通领域的应用。

全网计算机/大数据辅导(自媒体)道祖第一人、全网粉丝100W+,专注于大学生项目实战开发,讲解,毕业答疑辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。同时招收学生代理、校园代理。 1125

set_output_delay的本质

set_output_delay的本质

qq_33300585的博客 3392

剑灵解包器修改xml.dat文件修改乳量方法

本篇内容是基于单机版网游改单机版游戏剑灵的内容,主要针对关于单机版进行数据修改,当然了对于网端有关于剑灵已有很多,像小助手等多种可以更改,但是存在有封号危险,好,下面我们是在单机版中来进行乳量的修改教程。

灵魂学者的博客 3319
上一篇: 良心总结!Git 各指令的本质,真是通俗易懂啊
下一篇: 6种更优雅书写Python代码!文末包邮送书6本!
菜鸟学Python
博客等级 码龄9年 8084粉丝 571原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值