基于TPA-Transformer的机票价格预测

本文提出TPA-Transformer模型,结合注意力机制和多层卷积,提升机票价格预测准确性。该模型在多步预测上优于随机森林、XGBoost、LSTM、GRU和Transformer等,通过引入其他航班价格信息,增强了对价格变化的感知,提高了预测性能。
摘要由CSDN通过智能技术生成

目录

引言

1 TPA-Transformer模型

1.1 模型的提出

1.2 模型框架

图1

2 实验数据

2.1 数据来源

2.2 数据预处理

2.3 特征选择与处理

图2

图3

图4

图5

3 评价指标与实验设置

3.1 评价指标

3.2 实验设置

4 实验结果与分析

4.1 单步预测结果分析

4.2 多步预测结果分析

图6

图7

图8

5 结论与展望


摘要

【目的】 航空业被认为是使用最复杂定价策略的行业之一,机票价格动态波动显著。乘客根据经验购票(如尽早购票)往往得不到最优价格,而基于时序模型的传统价格预测方法也不能很好地捕捉复杂内外部因素与机票价格之间的依赖关系。【方法】 本文提出基于机器学习的机票价格预测模型TPA-Transformer(Ticket Price Aware Transformer,机票价格感知Transformer)和一种基于时间序列的数据处理方法,通过增加注意力模块引入其他航班价格参考信息,并在Encoder后增加多层卷积结构进行多航班不同属性信息融合与局部特征提取,从而提高模型在多步价格预测上的表现性能。【结果】 随后在5个回归评价指标(MSE、RMSE、MAE、ACC以及AMS)上对模型结果进行验证。【结论】 结果证明,模型能够有效提高预测准确率,明显优于其他5个对比模型(随机森林、XGBoost、LSTM、GRU、Transformer)。

关键词: 机票价格预测; 机器学习; 时间序列; 注意力机制

引言

航空公司越来越倾向于使用复杂的机票价格制定策略来使收益最大化[1],对于相同出发地和目的地,在不同时间通过不同渠道购买的价格差异巨大[2],可能会出现一天内价格多次变动的情况[3],甚至针对时间敏感型、价格敏感型等不同类型乘客[4]、不同座位[5]分别定价。因此,以最低成本购买机票是一项具有挑战性的任务,乘客根据自身经验尽早购票不一定比临期购票更便宜[6],同时,提前购票意味着出行时间上的选择固定以及需要为出行变更承担改签或退票的风险。一般而言,随着起飞日期的临近,机票价格会先降低再升高,呈U形变化[7]

传统时序预测模型,如ARIMAAutoregressive Integrated Moving Average model),由于结构简单无法捕获复杂的时间依赖关系,机票价格预测效果往往不尽人意。此外,如变化趋势、周期性等部分模型参数设定需要具有一定的专业知识,无形中提高了其应用难度。

随着机器学习的快速发展和广泛应用,使用多种机器学习对机票价格进行预测得到广泛应用。Li8]设计并实现了一个结合ARIMA和随机森林的票价预测系统;Liu等人[9]使用KNN(最近邻算法)、随机森林和贝叶斯,在限定路线上预测出发前可能的最低价格,证明节假日对机票价格有重要影响。与此同时,Tziridis等人[10]使用并比较了包括多层感知机、线性回归以及随机森林在内的8个机器学习回归模型进行预测。类似的,Subramanian等人[11]也选择一组典型特征通过多种机器学习方法进行价格预测。

随着时间序列预测方法的发展,更进一步,Lu等人[12]将机票价格预测作为时序预测任务进行处理,实验表明模型比随机购买策略性能提高61.35%。此外,在将机票价格处理为时序数据的基础上,Du等人[13]提出了一种多层卷积长短时记忆网络模型(Multi-Layer Convolution Long Short-Term Memory, MLC-LSTM)及其一个新的基于时间序列的机票价格预测数据处理方法,将价格作为序列输入特征且不丧失原数据时序性质,模型的性能优于LSTM(长短期记忆网络)等现有模型,证明了该数据处理方法的有效性。

随着注意力机制的广泛应用,机票价格预测领域出现引入注意力机制的研究。张前前[14]使用空间注意力机制对竞争航班之间价格影响进行建模作为空间关系。更进一步,为解决传统模型无法处理在不同时间步长相同特征影响不同的问题,Zhao等人[15]使用Seq2SeqSequence to Sequence)模型向Encoder(编码器)、Decoder(解码器)中添加注意力机制,并通过解码器中的时间注意力机制进行优化,以捕获价格序列中复杂时间依赖性。

近几年,Transformer在时间序列预测上表现优异[15],但Transformer本身仍然存在时间复杂度二次增长、Encoder-Decoder架构固有限制等问题使其直接应用于多步时间序列预测时效果不佳。与此同时,部分时间序列预测研究发现,通过引入外部信息可以有效提高模型性能[16]

基于以上问题,本文提出TPA-Transformer,从乘客角度出发,进行机票价格预测,模型使用注意力机制引入其他航班价格变化参考信息,并通过多层卷积结构融合多航班不同属性并提取局部特征,提高模型的多步预测性能。

1 TPA-Transformer模型

1.1 模型的提出

当前航班价格通常会受其他航班影响:如同日出发航班存在价格竞争,或多航班受同一因素影响出现相似价格变化波动。例如价格优惠活动可能会引发局部价格战,导致同期航线大量航班价格降低;或目的地举行大型体育赛事,导致同目的地航线普遍价格增长。不同航班价格受相同因素影响时,其他航班在当前序列上的价格变化规律对当前航班的价格变化具有一定的参考意义。因此,本文在Transformer基础上,使用注意力机制引入其他航班价格参考信息,提高模型对价格变化的感知能力;同时,加入多层卷积结构,提取局部特征与多航班不同属性信息融合,最后通过全连接层解码输出。

1.2 模型框架

模型框架如图1所示,TPA-Transformer主要包含以下4个部分:(1)引入其他航班价格参考信息的自注意力模块(Self-Attention Module);(2)提取预测航班信息的堆叠Encoder模块;(3)航班间信息融合、局部特征提取的多层卷积(Multi-layer Convolutions)模块;(4)解码输出最终预测价格的全连接层(Fully Connected Layer)。

1


1   TPA-Transformer结构

Fig.1   The architecture of the TPA-Transformer

1)引入其他航班价格参考信息的自注意力模块(Self-Attention Module

同期航班的价格变化规律对当前航班的价格波动具有参考意义。为有效衡量竞争与同步变化,引入自注意力机制,增加价格感知模块,引入同期其他航班价格变化参考信息。

为了考虑以上特征对价格的影响,注意力模块的输入为当前预测航班及同日出发,当前预测航班以外的其他11个航班连续10天的价格序列向量,p={ p0,p1,…,p11}piϵR10p=p0,p1,…,p11piϵR10,其中p0p0为当前航班的价格序列,{ p1,…,p11}p1,…,p11为其他航班的价格序列。由于需要获得航班机票价格的变化趋势,因此使用价格序列的前向差分形式p'={ p'0,p'1,…,p'11}p'=p'0,p'1,…,p'11。输入自注意力模块的价格参考信息维度dattention=12dattention=12

2)提取预测航班信息的堆叠Encoder模块

Encoder模块由6个堆叠的Encoder层组成。Encoder部分主要学习历史序列信息,并对其进行编码,为后续的解码预测做准备。将36维的当前航班输入向量与上一步经过自注意力价格感知模块处理输出为12维的其他航班价格参考向量进行向量拼接,得到序列长度为10,每个时间节点表示向量维度为48维的特征向量,输入到Encoder。具体计算过程为:

第一步,对特征向量添加位置编码,位置编码使用三角函数位置编码,且添加位置编码后不改变向量的维度;

第二步,经过多头自注意力机制,此处dmodel=48dmodel=48,因此使用头数为4的多头注意力机制;

第三步,为了更好地优化深度网络,进行残差连接与Layer Normalization,残差连接将强化模型内部信息的流动,而Layer Normalization将神经网络中隐藏层归一化为标准正态分布,即独立同分布,加快训练速度和加速收敛;

第四步,经过Feed Forward(前馈神经网络),即两个全连接层,其中第一个全连接层包含ReLU激活函数,第二个全连接层不使用激活函数。接下来与第三步相同,进行残差连接与Layer Normalization(层标准化)。重复经过相同的6个堆叠的Encoder,最终输出维度dmodel=48dmodel=48保持不变。

3)航班间信息融合、局部特征提取的多层卷积(Multi-layer Convolutions)模块

由于上一步Encoder的输出向量包含其他航班参考价格信息、本航班价格信息与其他特征信息,因此使用多层卷积结构进行局部特征提取。其中堆栈包含两个卷积层。滑动窗口在每层的特征向量中从头到尾滑动。第一次卷积输出channel=16channel=16,第二次卷积输出channel=32channel=32。通过

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然可以!TPA-TCN是一种基于深度学习的时间序列预测模型,非常适合用于预测空气质量等时间序列数据。以下是一个简单的Python代码示例,用于实现一个基于TPA-TCN的空气质量预测模型: ```python import numpy as np import pandas as pd from keras.layers import Input, Dense, Conv1D, concatenate, MaxPooling1D, Flatten from keras.models import Model # 加载并预处理数据 data = pd.read_csv('air_quality.csv') X = data.iloc[:, :-1].values y = data.iloc[:, -1].values X = np.reshape(X, (X.shape[0], X.shape[1], 1)) # 定义模型结构 input_layer = Input(shape=(X.shape[1], X.shape[2])) conv1 = Conv1D(filters=64, kernel_size=2, activation='relu', padding='same')(input_layer) conv2 = Conv1D(filters=64, kernel_size=2, activation='relu', padding='same')(conv1) conv3 = Conv1D(filters=64, kernel_size=2, activation='relu', padding='same')(conv2) conv4 = Conv1D(filters=64, kernel_size=2, activation='relu', padding='same')(conv3) max_pooling = MaxPooling1D(pool_size=2)(conv4) flatten = Flatten()(max_pooling) dense1 = Dense(64, activation='relu')(flatten) dense2 = Dense(1, activation='linear')(dense1) # 编译模型 model = Model(inputs=input_layer, outputs=dense2) model.compile(optimizer='adam', loss='mse') # 训练模型 model.fit(X, y, epochs=100, batch_size=32) # 使用模型进行预测 prediction = model.predict(X) ``` 在以上代码中,我们首先加载了空气质量数据,并对数据进行了预处理。然后,我们定义了一个包含多个卷积层和全连接层的TPA-TCN模型,并使用MSE作为损失函数进行了模型编译。接着,我们使用训练数据对模型进行了训练,并最终使用训练好的模型对数据进行了预测。注意,这只是一个简单的示例,您可以根据自己的需求和数据特点来修改模型结构和超参数等设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗伯特之技术屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值