本发明属于机票查询预测技术领域,具体涉及一种国内机票价格预测方法。
背景技术:
随着生活水平的提高,选择飞机作为旅游出行的交通工具的人数逐年增加。但是,旅客对于机票价格依然十分敏感,且以最优价格购买心仪航线机票的愿望十分强烈,机票市场未来几年需求巨大。由于国内航空公司使用收益管理并根据旅客购买行为改变定价策略,国外机票价格的预测方法大多不适合国内的机票价格变化。面对新形势下国内机票价格的变动趋势,几经摸索,国内机票价格预测技术已经有了一定发展,比较常见的有:
第一种是基于相同起飞日期、不同观测时间采集到的历史价格数据建模,用于预测未来观测日期同一起飞日期的机票价格。其优点是:可以为旅客提供有效的机票价格购买决策建议;其缺点是:对建模能力要求较高,需要大量数据集,并需要反复验证,数据集较少时难以保证准确度。
第二种是采用时间序列算法对短期价格进行预测,对数据进行等价类划分,依据机票价格分为短期和长期等多种,并训练模型。其优点是:建模思路清晰,预测效果好;其缺点是:未来需要人工干预,应对定价趋势的改变,对以往取得的正确结果并没有反馈。
第三种是q-learning模型法。利用增强学习的数据挖掘方法找到其中的规律,对模型在不同状态下采取的不同决策给予相应的奖惩,最终得到该模型在每个状态下的最优决策并返回预测价格。其优点是:预测效果较好,正确结果能够得到有效反馈;其缺点是:需要收集更多的航线特征,策略引入当前价格和平均价格的比较,对于定价规则的变化不敏感。
以上三种预测方法存在一个共同的缺点,对特殊日期如节假日出发的机票价格预测的准确度不高。
技术实现要素:
为了解决现有技术中存在的上述问题,本发明提出一种国内机票价格预测方法。
为实现上述目的,本发明采用如下技术方案:
一种国内机票价格预测方法,包括以下步骤:
步骤1,从历史票价数据库中获取按照收集日期和航线进行分类的数据,并对节假日的数据进行标注,航线包括出发地和到达地;
步骤2,将历史价格数据中节假日的最低票价替换为相近普通日期的最低票价,构建某航线的最低票价序列st={x1,x2,…,xn},xn为收集日期t后n天出发的航班的最低票价;
步骤3,构建包含m个最低票价序列的数据集i={st-(m-1),st-(m-2),…,st-1,st},利用长短期记忆人工神经网络对i进行训练,得到所述航线在日期t+1后1~n天出发的航班的预测票价p={p1,p2,…,pn};
步骤4,计算出发日期为节假日的预测票价k×pj,pj∈p其中,k为节假日系数,根据经验确定或利用构建的数学模型进行定量计算得到。
与现有技术相比,本发明具有以下有益效果:
本发明通过从历史票价数据库中获取历史价格数据,将节假日的历史价格数据替换为普通日期的数据,构建训练数据集,利用长短期记忆人工神经网络对训练数据集进行训练,得到将出发日期全部看作普通日期的预测票价,用所述预测票价乘于节假日系数,得到出发日期为节假日的预测票价。本发明通过引入节假日系数提高了节假日机票的预测精度,解决了现有预测方法中存在的特殊日期机票价格预测准确度不高的问题。
附图说明
图1为本发明实施例一种国内机票价格预测方法的流程图。
具体实施方式
下面结合附图对本发明作进一步详细说明。
本发明实施例一种国内机票价格预测方法的流程图如图1所示,所述方法包括以下步骤:
s101、从历史票价数据库中获取按照收集日期和航线进行分类的数据,并对节假日的数据进行标注,航线包括出发地和到达地;
s102、将历史价格数据中节假日的最低票价替换为相近普通日期的最低票价,构建某航线的最低票价序列st={x1,x2,…,xn},xn为收集日期t后n天出发的航班的最低票价;
s103、构建包含m个最低票价序列的数据集i={st-(m-1),st-(m-2),…,st-1,st},利用长短期记忆人工神经网络对i进行训练,得到所述航线在日期t+1后1~n天出发的航班的预测票价p={p1,p2,…,pn};
s104、计算出发日期为节假日的预测票价k×pj,pj∈p其中,k为节假日系数,根据经验确定或利用构建的数学模型进行定量计算得到。
在本实施例中,步骤s101用于从历史票价数据库获取历数据。历史票价数据库保存了从航司网站收集的历史票价数据,用于构建进行预测需要的训练数据集。历史票价数据按收集日期和航线进行分类。收集日期以天为单位,即一天收集的同一航线的数据放在一起。航线由出发地和到达地确定,比如北京到上海,上海到天津。另外,还要对节假日的数据进行标注,以便后面对节假日数据进行特殊处理。
在本实施例中,步骤s102用于将历史票价数据中的节假日数据进行平滑处理,将节假日数据替换为普通日期的数据。这样处理的原因是,节假日数据明显有别于普通日期的数据,尤其是五一、国庆等传统节日,如果将这些特殊数据与普通日期的数据混在一起进行训练,势必会影响预测结果。可以用节假日前后一段时间票价的平均值代替节假日的数据。进行平滑处理后,构建航线的最低票价序列,包含收集日期t后1~n天出发的航班的最低票价。
在本实施例中,步骤s103主要用于根据历史数据进行预测,得到航线在日期t+1后1~n天出发的航班的预测票价。本步骤得到的预测票价是将节假日看作是普通日期的预测票价。首先,构建由m个对应不同收集日期t-(m-1)~t的最低票价序列组成的数据集i;然后,以i为训练数据集,采用长短期记忆人工神经网络对i进行训练,主要包括以下步骤:
(1)引入长短期记忆神经网络,利用输入门it、遗忘门ft和输出门ot控制增加、删除信息及输出信息。
在t时刻,前向传播和后项传播的参数更新关系如下所示:
ht=ottanh(ct)
其中,ct、ht为当前t时刻的单元状态、隐藏状态,ct-1、ht-1为上一时刻t-1的单元状态、隐藏状态;xt为前t时刻的输入向量;wi、wf、wo、wc为输入门、遗忘门、输出门、单元状态的权重矩阵;bi、bf、bo、bc为输入门、遗忘门、输出门、单元状态的偏置项;σ、tanh为σ函数和relu函数,表达式为:
其中,x为单个节点的输入值。
(2)设置长短期记忆网络模型,配置模型神经元参数。
取n=100,m=30,设置维度为100×30×2的长短期记忆网络层作为输入层。每个节点为序列i中的元素,隐藏层为5层,具体为3层长短期记忆神经网和2层dropout层,顺序第一层为长短期记忆神经网络,其后每一层长短期记忆神经网络之间引入dropout层(防止模型过拟合),最后输出层有100个节点。
引入激活函数:采用σ函数作为输入层内激活函数和输入层与隐藏层之间的激活函数,relu为隐藏层内的激活函数,线性函数作为输出层的激活函数。
采用python语言中深度学习框架keras,搭建lstm训练模型,输入训练数据,使用modelcheckpoint函数保留训练过程中模型内参数,设置参数lr为0.001,beta_1为0.91,beta_2为0.988,epsilon为1×10-8、decay为0.0。
(3)进行模型训练和验证。
以70%、20%、10%的比例将i分割为训练数据集、测试数据集和验证数据集。训练数据集用于模型训练,测试数据用于每个周期训练后展现训练效果,验证训练集用于评估训练后的模型。将上述训练数据集输入到长短期记忆网络模型中,设置时间步长为100,迭代次数为1000~2000次,批量为100,进行训练,得到训练好的网络模型。根据训练好的网络模型,输入历史票价数据即可得到预测票价。
在本实施例中,步骤s104用于基于步骤s103的预测结果利用节假日系数计算出发日期为节假日的预测票价。节假日系数可以根据经验确定,如k=1.1。当然,为了提高预测精度,也可以利用通过构建数学模型进行定量计算得到。
作为一种可选实施例,在s102之后还包括按照公式(1)对st={x1,x2,…,xn}进行归一化处理,公式(1)为:
其中,xi′为xi归一化后的值,
在本实施例中,为了消除数据集中的一些奇异样本数据对训练造成不良影响,在进行训练前进行归一化处理,将所有数据变换成[0,1]的数据。按照公式(1)进行归一化处理,最小值
作为一种可选实施例,所述s104计算节假日系数k的数学模型为:
其中,dd是出发日期为d的订单量,
本实施例给出了计算节假日系数k的一种技术方案。航司参与指定折扣票价时要考虑订单量(航班有退票的概率,故存在超售以摊平运营成本)和自身运营成本等(每年的通胀概率、设备维修等),比如出票订单量上升会影响其制订的票价;新价格的出现又会影响未来的出票量。所以,本实施例的节假日系数考虑了出发日期订单量、出发日期价格和全年价格三个影响因素。公式(2)中,dd是出发日期为d的订单量(无视订单日期,系统内可收集到的所有订单);