python预测机票价格_一种国内机票价格预测方法与流程
本發(fā)明屬于機(jī)票查詢預(yù)測(cè)技術(shù)領(lǐng)域,具體涉及一種國(guó)內(nèi)機(jī)票價(jià)格預(yù)測(cè)方法。
背景技術(shù):
隨著生活水平的提高,選擇飛機(jī)作為旅游出行的交通工具的人數(shù)逐年增加。但是,旅客對(duì)于機(jī)票價(jià)格依然十分敏感,且以最優(yōu)價(jià)格購(gòu)買(mǎi)心儀航線機(jī)票的愿望十分強(qiáng)烈,機(jī)票市場(chǎng)未來(lái)幾年需求巨大。由于國(guó)內(nèi)航空公司使用收益管理并根據(jù)旅客購(gòu)買(mǎi)行為改變定價(jià)策略,國(guó)外機(jī)票價(jià)格的預(yù)測(cè)方法大多不適合國(guó)內(nèi)的機(jī)票價(jià)格變化。面對(duì)新形勢(shì)下國(guó)內(nèi)機(jī)票價(jià)格的變動(dòng)趨勢(shì),幾經(jīng)摸索,國(guó)內(nèi)機(jī)票價(jià)格預(yù)測(cè)技術(shù)已經(jīng)有了一定發(fā)展,比較常見(jiàn)的有:
第一種是基于相同起飛日期、不同觀測(cè)時(shí)間采集到的歷史價(jià)格數(shù)據(jù)建模,用于預(yù)測(cè)未來(lái)觀測(cè)日期同一起飛日期的機(jī)票價(jià)格。其優(yōu)點(diǎn)是:可以為旅客提供有效的機(jī)票價(jià)格購(gòu)買(mǎi)決策建議;其缺點(diǎn)是:對(duì)建模能力要求較高,需要大量數(shù)據(jù)集,并需要反復(fù)驗(yàn)證,數(shù)據(jù)集較少時(shí)難以保證準(zhǔn)確度。
第二種是采用時(shí)間序列算法對(duì)短期價(jià)格進(jìn)行預(yù)測(cè),對(duì)數(shù)據(jù)進(jìn)行等價(jià)類劃分,依據(jù)機(jī)票價(jià)格分為短期和長(zhǎng)期等多種,并訓(xùn)練模型。其優(yōu)點(diǎn)是:建模思路清晰,預(yù)測(cè)效果好;其缺點(diǎn)是:未來(lái)需要人工干預(yù),應(yīng)對(duì)定價(jià)趨勢(shì)的改變,對(duì)以往取得的正確結(jié)果并沒(méi)有反饋。
第三種是Q-learning模型法。利用增強(qiáng)學(xué)習(xí)的數(shù)據(jù)挖掘方法找到其中的規(guī)律,對(duì)模型在不同狀態(tài)下采取的不同決策給予相應(yīng)的獎(jiǎng)懲,最終得到該模型在每個(gè)狀態(tài)下的最優(yōu)決策并返回預(yù)測(cè)價(jià)格。其優(yōu)點(diǎn)是:預(yù)測(cè)效果較好,正確結(jié)果能夠得到有效反饋;其缺點(diǎn)是:需要收集更多的航線特征,策略引入當(dāng)前價(jià)格和平均價(jià)格的比較,對(duì)于定價(jià)規(guī)則的變化不敏感。
以上三種預(yù)測(cè)方法存在一個(gè)共同的缺點(diǎn),對(duì)特殊日期如節(jié)假日出發(fā)的機(jī)票價(jià)格預(yù)測(cè)的準(zhǔn)確度不高。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中存在的上述問(wèn)題,本發(fā)明提出一種國(guó)內(nèi)機(jī)票價(jià)格預(yù)測(cè)方法。
為實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種國(guó)內(nèi)機(jī)票價(jià)格預(yù)測(cè)方法,包括以下步驟:
步驟1,從歷史票價(jià)數(shù)據(jù)庫(kù)中獲取按照收集日期和航線進(jìn)行分類的數(shù)據(jù),并對(duì)節(jié)假日的數(shù)據(jù)進(jìn)行標(biāo)注,航線包括出發(fā)地和到達(dá)地;
步驟2,將歷史價(jià)格數(shù)據(jù)中節(jié)假日的最低票價(jià)替換為相近普通日期的最低票價(jià),構(gòu)建某航線的最低票價(jià)序列ST={x1,x2,…,xn},xn為收集日期T后n天出發(fā)的航班的最低票價(jià);
步驟3,構(gòu)建包含m個(gè)最低票價(jià)序列的數(shù)據(jù)集I={ST-(m-1),ST-(m-2),…,ST-1,ST},利用長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)對(duì)I進(jìn)行訓(xùn)練,得到所述航線在日期T+1后1~n天出發(fā)的航班的預(yù)測(cè)票價(jià)P={p1,p2,…,pn};
步驟4,計(jì)算出發(fā)日期為節(jié)假日的預(yù)測(cè)票價(jià)k×pj,pj∈P其中,k為節(jié)假日系數(shù),根據(jù)經(jīng)驗(yàn)確定或利用構(gòu)建的數(shù)學(xué)模型進(jìn)行定量計(jì)算得到。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
本發(fā)明通過(guò)從歷史票價(jià)數(shù)據(jù)庫(kù)中獲取歷史價(jià)格數(shù)據(jù),將節(jié)假日的歷史價(jià)格數(shù)據(jù)替換為普通日期的數(shù)據(jù),構(gòu)建訓(xùn)練數(shù)據(jù)集,利用長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)對(duì)訓(xùn)練數(shù)據(jù)集進(jìn)行訓(xùn)練,得到將出發(fā)日期全部看作普通日期的預(yù)測(cè)票價(jià),用所述預(yù)測(cè)票價(jià)乘于節(jié)假日系數(shù),得到出發(fā)日期為節(jié)假日的預(yù)測(cè)票價(jià)。本發(fā)明通過(guò)引入節(jié)假日系數(shù)提高了節(jié)假日機(jī)票的預(yù)測(cè)精度,解決了現(xiàn)有預(yù)測(cè)方法中存在的特殊日期機(jī)票價(jià)格預(yù)測(cè)準(zhǔn)確度不高的問(wèn)題。
附圖說(shuō)明
圖1為本發(fā)明實(shí)施例一種國(guó)內(nèi)機(jī)票價(jià)格預(yù)測(cè)方法的流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
本發(fā)明實(shí)施例一種國(guó)內(nèi)機(jī)票價(jià)格預(yù)測(cè)方法的流程圖如圖1所示,所述方法包括以下步驟:
S101、從歷史票價(jià)數(shù)據(jù)庫(kù)中獲取按照收集日期和航線進(jìn)行分類的數(shù)據(jù),并對(duì)節(jié)假日的數(shù)據(jù)進(jìn)行標(biāo)注,航線包括出發(fā)地和到達(dá)地;
S102、將歷史價(jià)格數(shù)據(jù)中節(jié)假日的最低票價(jià)替換為相近普通日期的最低票價(jià),構(gòu)建某航線的最低票價(jià)序列ST={x1,x2,…,xn},xn為收集日期T后n天出發(fā)的航班的最低票價(jià);
S103、構(gòu)建包含m個(gè)最低票價(jià)序列的數(shù)據(jù)集I={ST-(m-1),ST-(m-2),…,ST-1,ST},利用長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)對(duì)I進(jìn)行訓(xùn)練,得到所述航線在日期T+1后1~n天出發(fā)的航班的預(yù)測(cè)票價(jià)P={p1,p2,…,pn};
S104、計(jì)算出發(fā)日期為節(jié)假日的預(yù)測(cè)票價(jià)k×pj,pj∈P其中,k為節(jié)假日系數(shù),根據(jù)經(jīng)驗(yàn)確定或利用構(gòu)建的數(shù)學(xué)模型進(jìn)行定量計(jì)算得到。
在本實(shí)施例中,步驟S101用于從歷史票價(jià)數(shù)據(jù)庫(kù)獲取歷數(shù)據(jù)。歷史票價(jià)數(shù)據(jù)庫(kù)保存了從航司網(wǎng)站收集的歷史票價(jià)數(shù)據(jù),用于構(gòu)建進(jìn)行預(yù)測(cè)需要的訓(xùn)練數(shù)據(jù)集。歷史票價(jià)數(shù)據(jù)按收集日期和航線進(jìn)行分類。收集日期以天為單位,即一天收集的同一航線的數(shù)據(jù)放在一起。航線由出發(fā)地和到達(dá)地確定,比如北京到上海,上海到天津。另外,還要對(duì)節(jié)假日的數(shù)據(jù)進(jìn)行標(biāo)注,以便后面對(duì)節(jié)假日數(shù)據(jù)進(jìn)行特殊處理。
在本實(shí)施例中,步驟S102用于將歷史票價(jià)數(shù)據(jù)中的節(jié)假日數(shù)據(jù)進(jìn)行平滑處理,將節(jié)假日數(shù)據(jù)替換為普通日期的數(shù)據(jù)。這樣處理的原因是,節(jié)假日數(shù)據(jù)明顯有別于普通日期的數(shù)據(jù),尤其是五一、國(guó)慶等傳統(tǒng)節(jié)日,如果將這些特殊數(shù)據(jù)與普通日期的數(shù)據(jù)混在一起進(jìn)行訓(xùn)練,勢(shì)必會(huì)影響預(yù)測(cè)結(jié)果。可以用節(jié)假日前后一段時(shí)間票價(jià)的平均值代替節(jié)假日的數(shù)據(jù)。進(jìn)行平滑處理后,構(gòu)建航線的最低票價(jià)序列,包含收集日期T后1~n天出發(fā)的航班的最低票價(jià)。
在本實(shí)施例中,步驟S103主要用于根據(jù)歷史數(shù)據(jù)進(jìn)行預(yù)測(cè),得到航線在日期T+1后1~n天出發(fā)的航班的預(yù)測(cè)票價(jià)。本步驟得到的預(yù)測(cè)票價(jià)是將節(jié)假日看作是普通日期的預(yù)測(cè)票價(jià)。首先,構(gòu)建由m個(gè)對(duì)應(yīng)不同收集日期T-(m-1)~T的最低票價(jià)序列組成的數(shù)據(jù)集I;然后,以I為訓(xùn)練數(shù)據(jù)集,采用長(zhǎng)短期記憶人工神經(jīng)網(wǎng)絡(luò)對(duì)I進(jìn)行訓(xùn)練,主要包括以下步驟:
(1)引入長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò),利用輸入門(mén)it、遺忘門(mén)ft和輸出門(mén)ot控制增加、刪除信息及輸出信息。
在t時(shí)刻,前向傳播和后項(xiàng)傳播的參數(shù)更新關(guān)系如下所示:
ht=ot tanh(ct)
其中,ct、ht為當(dāng)前t時(shí)刻的單元狀態(tài)、隱藏狀態(tài),ct-1、ht-1為上一時(shí)刻t-1的單元狀態(tài)、隱藏狀態(tài);Xt為前t時(shí)刻的輸入向量;Wi、Wf、Wo、Wc為輸入門(mén)、遺忘門(mén)、輸出門(mén)、單元狀態(tài)的權(quán)重矩陣;bi、bf、bo、bc為輸入門(mén)、遺忘門(mén)、輸出門(mén)、單元狀態(tài)的偏置項(xiàng);σ、tanh為σ函數(shù)和ReLU函數(shù),表達(dá)式為:
其中,x為單個(gè)節(jié)點(diǎn)的輸入值。
(2)設(shè)置長(zhǎng)短期記憶網(wǎng)絡(luò)模型,配置模型神經(jīng)元參數(shù)。
取n=100,m=30,設(shè)置維度為100×30×2的長(zhǎng)短期記憶網(wǎng)絡(luò)層作為輸入層。每個(gè)節(jié)點(diǎn)為序列I中的元素,隱藏層為5層,具體為3層長(zhǎng)短期記憶神經(jīng)網(wǎng)和2層dropout層,順序第一層為長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò),其后每一層長(zhǎng)短期記憶神經(jīng)網(wǎng)絡(luò)之間引入dropout層(防止模型過(guò)擬合),最后輸出層有100個(gè)節(jié)點(diǎn)。
引入激活函數(shù):采用σ函數(shù)作為輸入層內(nèi)激活函數(shù)和輸入層與隱藏層之間的激活函數(shù),ReLU為隱藏層內(nèi)的激活函數(shù),線性函數(shù)作為輸出層的激活函數(shù)。
采用python語(yǔ)言中深度學(xué)習(xí)框架keras,搭建LSTM訓(xùn)練模型,輸入訓(xùn)練數(shù)據(jù),使用ModelCheckpoint函數(shù)保留訓(xùn)練過(guò)程中模型內(nèi)參數(shù),設(shè)置參數(shù)lr為0.001,beta_1為0.91,beta_2為0.988,epsilon為1×10-8、decay為0.0。
(3)進(jìn)行模型訓(xùn)練和驗(yàn)證。
以70%、20%、10%的比例將I分割為訓(xùn)練數(shù)據(jù)集、測(cè)試數(shù)據(jù)集和驗(yàn)證數(shù)據(jù)集。訓(xùn)練數(shù)據(jù)集用于模型訓(xùn)練,測(cè)試數(shù)據(jù)用于每個(gè)周期訓(xùn)練后展現(xiàn)訓(xùn)練效果,驗(yàn)證訓(xùn)練集用于評(píng)估訓(xùn)練后的模型。將上述訓(xùn)練數(shù)據(jù)集輸入到長(zhǎng)短期記憶網(wǎng)絡(luò)模型中,設(shè)置時(shí)間步長(zhǎng)為100,迭代次數(shù)為1000~2000次,批量為100,進(jìn)行訓(xùn)練,得到訓(xùn)練好的網(wǎng)絡(luò)模型。根據(jù)訓(xùn)練好的網(wǎng)絡(luò)模型,輸入歷史票價(jià)數(shù)據(jù)即可得到預(yù)測(cè)票價(jià)。
在本實(shí)施例中,步驟S104用于基于步驟S103的預(yù)測(cè)結(jié)果利用節(jié)假日系數(shù)計(jì)算出發(fā)日期為節(jié)假日的預(yù)測(cè)票價(jià)。節(jié)假日系數(shù)可以根據(jù)經(jīng)驗(yàn)確定,如k=1.1。當(dāng)然,為了提高預(yù)測(cè)精度,也可以利用通過(guò)構(gòu)建數(shù)學(xué)模型進(jìn)行定量計(jì)算得到。
作為一種可選實(shí)施例,在S102之后還包括按照公式(1)對(duì)ST={x1,x2,…,xn}進(jìn)行歸一化處理,公式(1)為:
其中,xi′為xi歸一化后的值,
在本實(shí)施例中,為了消除數(shù)據(jù)集中的一些奇異樣本數(shù)據(jù)對(duì)訓(xùn)練造成不良影響,在進(jìn)行訓(xùn)練前進(jìn)行歸一化處理,將所有數(shù)據(jù)變換成[0,1]的數(shù)據(jù)。按照公式(1)進(jìn)行歸一化處理,最小值將變?yōu)?,最大值將變?yōu)?,其它值變?yōu)榇笥?小于1的正數(shù)。當(dāng)然,如果采用歸一化后的數(shù)據(jù)進(jìn)行訓(xùn)練,得到的是歸一化后的預(yù)測(cè)票價(jià),還需要進(jìn)行逆歸一化運(yùn)算得到非歸一化的預(yù)測(cè)票價(jià)。
作為一種可選實(shí)施例,所述S104計(jì)算節(jié)假日系數(shù)k的數(shù)學(xué)模型為:
其中,dD是出發(fā)日期為D的訂單量,是日平均訂單量;pD為出發(fā)日期為D的最低票價(jià),是平均票價(jià);py為當(dāng)年平均票價(jià),py-1為上一年平均票價(jià),α1、α2、α3為加權(quán)系數(shù),α1+α2+α3=1。
本實(shí)施例給出了計(jì)算節(jié)假日系數(shù)k的一種技術(shù)方案。航司參與指定折扣票價(jià)時(shí)要考慮訂單量(航班有退票的概率,故存在超售以攤平運(yùn)營(yíng)成本)和自身運(yùn)營(yíng)成本等(每年的通脹概率、設(shè)備維修等),比如出票訂單量上升會(huì)影響其制訂的票價(jià);新價(jià)格的出現(xiàn)又會(huì)影響未來(lái)的出票量。所以,本實(shí)施例的節(jié)假日系數(shù)考慮了出發(fā)日期訂單量、出發(fā)日期價(jià)格和全年價(jià)格三個(gè)影響因素。公式(2)中,dD是出發(fā)日期為D的訂單量(無(wú)視訂單日期,系統(tǒng)內(nèi)可收集到的所有訂單);是日平均訂單量,等于所有航班全年的訂單量除以365。pD為出發(fā)日期為D的最低票價(jià);是平均票價(jià),等于每個(gè)票價(jià)的總和除以觀測(cè)到所述票價(jià)的天數(shù)。py是當(dāng)年平均票價(jià),py-1是上一年平均票價(jià),(py-py-1)/365是平均一天增加的票價(jià)。α1、α2、α3為加權(quán)系數(shù),根據(jù)經(jīng)驗(yàn)確定,例如,可以取α1=0.27,α2=0.71,α3=0.02。
總結(jié)
以上是生活随笔為你收集整理的python预测机票价格_一种国内机票价格预测方法与流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (转载)MatLab绘图
- 下一篇: 【飞项】定制你的专属日程管理管家拒绝行动