python预测机票价格_一种国内机票价格预测方法与流程
本發明屬于機票查詢預測技術領域,具體涉及一種國內機票價格預測方法。
背景技術:
隨著生活水平的提高,選擇飛機作為旅游出行的交通工具的人數逐年增加。但是,旅客對于機票價格依然十分敏感,且以最優價格購買心儀航線機票的愿望十分強烈,機票市場未來幾年需求巨大。由于國內航空公司使用收益管理并根據旅客購買行為改變定價策略,國外機票價格的預測方法大多不適合國內的機票價格變化。面對新形勢下國內機票價格的變動趨勢,幾經摸索,國內機票價格預測技術已經有了一定發展,比較常見的有:
第一種是基于相同起飛日期、不同觀測時間采集到的歷史價格數據建模,用于預測未來觀測日期同一起飛日期的機票價格。其優點是:可以為旅客提供有效的機票價格購買決策建議;其缺點是:對建模能力要求較高,需要大量數據集,并需要反復驗證,數據集較少時難以保證準確度。
第二種是采用時間序列算法對短期價格進行預測,對數據進行等價類劃分,依據機票價格分為短期和長期等多種,并訓練模型。其優點是:建模思路清晰,預測效果好;其缺點是:未來需要人工干預,應對定價趨勢的改變,對以往取得的正確結果并沒有反饋。
第三種是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=ot tanh(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)進行歸一化處理,最小值將變為0,最大值將變為1,其它值變為大于0小于1的正數。當然,如果采用歸一化后的數據進行訓練,得到的是歸一化后的預測票價,還需要進行逆歸一化運算得到非歸一化的預測票價。
作為一種可選實施例,所述S104計算節假日系數k的數學模型為:
其中,dD是出發日期為D的訂單量,是日平均訂單量;pD為出發日期為D的最低票價,是平均票價;py為當年平均票價,py-1為上一年平均票價,α1、α2、α3為加權系數,α1+α2+α3=1。
本實施例給出了計算節假日系數k的一種技術方案。航司參與指定折扣票價時要考慮訂單量(航班有退票的概率,故存在超售以攤平運營成本)和自身運營成本等(每年的通脹概率、設備維修等),比如出票訂單量上升會影響其制訂的票價;新價格的出現又會影響未來的出票量。所以,本實施例的節假日系數考慮了出發日期訂單量、出發日期價格和全年價格三個影響因素。公式(2)中,dD是出發日期為D的訂單量(無視訂單日期,系統內可收集到的所有訂單);是日平均訂單量,等于所有航班全年的訂單量除以365。pD為出發日期為D的最低票價;是平均票價,等于每個票價的總和除以觀測到所述票價的天數。py是當年平均票價,py-1是上一年平均票價,(py-py-1)/365是平均一天增加的票價。α1、α2、α3為加權系數,根據經驗確定,例如,可以取α1=0.27,α2=0.71,α3=0.02。
總結
以上是生活随笔為你收集整理的python预测机票价格_一种国内机票价格预测方法与流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转载)MatLab绘图
- 下一篇: 【Python爬虫】爬取云班课资源,活动