姚一,周中雨,李洋,楊程屹
(中國民航信息網(wǎng)絡(luò)股份有限公司,北京,100105)
航空公司電子客票航班查詢動態(tài)緩存系統(tǒng)設(shè)計(jì)
姚一,周中雨,李洋,楊程屹
(中國民航信息網(wǎng)絡(luò)股份有限公司,北京,100105)
本文采用機(jī)器學(xué)習(xí)技術(shù)實(shí)現(xiàn)航空公司電子客票航班查詢的動態(tài)緩存。針對第三方大量抓取航空公司網(wǎng)站航班數(shù)據(jù)的問題,進(jìn)行訪問行為分析,建立航班查詢緩存模型并進(jìn)行系統(tǒng)改造,以達(dá)到降低查詢預(yù)訂比的效果。
航班查詢;機(jī)器學(xué)習(xí);緩存
隨著民航電子客票的廣泛使用,國內(nèi)大多數(shù)航空公司已經(jīng)實(shí)現(xiàn)了電子客票的線上銷售模式,打造出各具特色的官方網(wǎng)站。但就像其它電子商務(wù)平臺所面臨的問題一樣,也產(chǎn)生了航空公司網(wǎng)站航班數(shù)據(jù)被惡意采集的問題。互聯(lián)網(wǎng)爬蟲不正當(dāng)抓取航空公司網(wǎng)站數(shù)據(jù)不僅使航空公司為超額流量支付大量額外費(fèi)用,而且使其承受更大的訪問壓力,以至于需要投入更多的軟硬件成本。
針對這種日益嚴(yán)重的問題,需要在網(wǎng)站端與后臺航班查詢系統(tǒng)之間建立一套高效的緩存機(jī)制。目前一般采用的方式主要是固定或者僅僅是粗粒度的劃分不同航線的緩存有效期。這種做法過度依賴經(jīng)驗(yàn)值,航空公司需要一種能夠根據(jù)用戶查詢行為動態(tài)決策緩存策略的方式,利用緩存最大程度的節(jié)約后臺流量并且保證緩存數(shù)據(jù)的相對準(zhǔn)確。以下我們采用目前較為流行的機(jī)器學(xué)習(xí)[1]方式實(shí)現(xiàn)緩存有效期的計(jì)算,并且將其應(yīng)用于實(shí)際系統(tǒng)中。
學(xué)習(xí)系統(tǒng)的關(guān)鍵在于如何對當(dāng)前查詢的請求和結(jié)果設(shè)置合理的緩存時(shí)效,比如用戶今天9:00查詢了北京-上海某航空公司的航班數(shù)據(jù),其查詢結(jié)果應(yīng)當(dāng)在緩存系統(tǒng)中保存多久才不會影響用戶的預(yù)訂。對此我們可以從歷史查詢?nèi)罩局羞M(jìn)行分析,通過查詢量與頻度預(yù)測當(dāng)前的緩存時(shí)效。
參數(shù)名稱備注departure起飛機(jī)場arrival到達(dá)機(jī)場departuredate起飛日期querydate當(dāng)前查詢?nèi)掌赼irline航空公司direct是否直達(dá)
網(wǎng)站記錄的用戶每次航班查詢的日志將作為用戶行為分析的基礎(chǔ)數(shù)據(jù)。一次正常的查詢請求主要包括以下參數(shù)。其中起飛和到達(dá)機(jī)場對應(yīng)的航線、起飛日期以及查詢?nèi)掌诙伎赡苁怯绊懖樵円?guī)律的因素。按照業(yè)務(wù)現(xiàn)狀,航空公司不同航線的查詢量分布差異很大,我們將其分為重點(diǎn)航線和普通航線。以下根據(jù)生產(chǎn)數(shù)據(jù)進(jìn)行樣本分析,以便發(fā)現(xiàn)其中的規(guī)律。
1.1 分析樣本數(shù)據(jù)
選取某航空公司2014年11月-2015年1月查詢?nèi)罩?,日均訪問量在百萬級。從中抽取查詢量占60%以上的航線作為重點(diǎn)航線著重分析。以下是對其中訪問量較大的幾條重點(diǎn)航線查詢量數(shù)據(jù)的初步分析。
圖1 CAN-PEK航線查詢90天內(nèi)航班查詢量
上面兩幅圖的縱坐標(biāo)為查詢量(次數(shù)),橫坐標(biāo)為起飛日期距離查詢?nèi)掌?。每張圖代表一個(gè)航線,圖中每條線代表在一個(gè)固定的日期查詢不同起飛日期的查詢量,起飛日期距離查詢?nèi)掌诘臅r(shí)間范圍分布在0-90天。
可以觀察到航班起飛日期距離查詢?nèi)掌诋?dāng)間隔為約30天時(shí)查詢量有顯著變化,而30天之內(nèi)的查詢,當(dāng)查詢/起飛日期間隔在約10天時(shí),查詢量又發(fā)生顯著波動。根據(jù)業(yè)務(wù)特點(diǎn),航班起飛日期離查詢?nèi)掌谠浇?,查詢越頻繁。從以上兩條航線的查詢量分析得知頻繁的查詢主要集中在30天內(nèi)。其次,某些航線(圖1)在查詢提前時(shí)間在30天之外保持平穩(wěn)的較少查詢量,但是某些航線(圖2)會有劇烈的波動,經(jīng)確認(rèn)是該航線與春運(yùn)購票有關(guān)。事實(shí)上重要假期或事件對航班查詢規(guī)律都會造成顯著的影響。
圖2 CAN-CTU航線查詢90天內(nèi)航班查詢量
圖3 是分析一天內(nèi)的查詢規(guī)律,縱坐標(biāo)是查詢次數(shù),橫坐標(biāo)是一天24小時(shí),分析結(jié)果呈現(xiàn)出在大約在7時(shí)是查詢量明顯變化的分界點(diǎn),同時(shí)庫存變化的頻度也與查詢量變化規(guī)律基本一致。這也呼應(yīng)了民航旅客普遍的作息規(guī)律。
圖3 一天內(nèi)24小時(shí)查詢量的變化
根據(jù)以上分析結(jié)果,初步得出結(jié)論:
(1)對于航空公司特定航線影響查詢規(guī)律的因素主要與查詢?nèi)掌?querydate),起飛日期(depaturedate)相關(guān)。
(2)緩存策略所影響的查詢時(shí)間范圍,每天集中在7時(shí)至24時(shí),而航班起飛日期與查詢?nèi)掌陂g隔集中在30天以內(nèi)。
1.2 構(gòu)造樣本數(shù)據(jù)
因查詢量與緩存時(shí)效有相關(guān)性:查詢量大,航班剩余可銷售狀態(tài)變化頻繁,緩存時(shí)效需較短,反之亦然。為了動態(tài)計(jì)算緩存時(shí)效,首先需要預(yù)測查詢量。根據(jù)對查詢量數(shù)據(jù)的初步分析,判斷影響航班查詢量的日期因素包括:
星期:查詢或起飛日期在每周一至周日會有差異,例如查詢?nèi)掌谠谥芪甯浇鼤龆?,而起飛日期在周六附近會增多;
節(jié)日:查詢和起飛日期在各種節(jié)日附近的行為會有差異,節(jié)日可以分為長假的節(jié)日(7天及以上)、短假的節(jié)日(1至3天)和不放假的節(jié)日;
寒暑假:學(xué)生寒暑假也會是影響因素??梢苑譃榧倨陂_始和假期結(jié)束,假期開始附近(包括假期之前的若干天)和假期結(jié)束附近(包括假期之后的若干天);
查詢?nèi)掌谂c起飛日期的間隔也是一個(gè)重要的影響因素。
根據(jù)以上日期因素,起飛和查詢?nèi)掌诳煞謩e指定17個(gè)特征,再增加日期間隔一共35個(gè)特征。
表1 日期特征
對于多維特征的有限數(shù)據(jù)樣本,我們采用機(jī)器學(xué)習(xí)中的支持向量機(jī)(SVM)模型,并使用其中的支持向量回歸(SVR)[2]算法對未來查詢量進(jìn)行預(yù)測。
在JAVA環(huán)境下使用libsvm[3]工具進(jìn)行學(xué)習(xí)訓(xùn)練。預(yù)先準(zhǔn)備60天的歷史數(shù)據(jù),篩選重點(diǎn)航線,對每條航線生成樣本特征文件,格式形如:
T1 T2 T3 ...... T35 querycount
querydate1 depdate1 0 1 0 0 100
querydate1 depdate2 0 1 0 0 200
querydate1 depdate3 0 0 1 1 300
querydate1 depdate4 1 0 0 0 150
......
querydate60 depdateN 0 1 0 0 100
其次構(gòu)造預(yù)測結(jié)果文件,其中指定查詢?nèi)掌?,航班時(shí)間為未來30天的不同查詢條目
T1 T2 T3 ...... T35 querycount(待預(yù)測)
depdate1 0 1 0 0
depdate2 0 1 0 0
depdate3 0 0 1 0
depdate4 1 0 0 0
......
depdate30 0 1 0 0
接下來根據(jù)樣本特征文件構(gòu)造預(yù)測模型。我們使用的是SVR算法默認(rèn)的核函數(shù)RBF[4]構(gòu)建SVM預(yù)測模型,其中核函數(shù)的相關(guān)參數(shù)暫時(shí)使用默認(rèn)值(libsvm的使用在這里不再贅述)。
按照預(yù)測文件進(jìn)行計(jì)算生成每個(gè)起飛日期的預(yù)測查詢量。圖4是預(yù)測查詢量與實(shí)際查詢量的對比,基本符合實(shí)際查詢量的變化規(guī)律。
圖4 算法預(yù)測查詢量與實(shí)際查詢量的對比
1.3 緩存時(shí)效的轉(zhuǎn)換與驗(yàn)證
通過前文步驟預(yù)測查詢量后,需要轉(zhuǎn)換為最終的緩存有效期,如果查詢量為x,緩存時(shí)間為T,需要選定一個(gè)轉(zhuǎn)換函數(shù)T=f(x)。按照業(yè)務(wù)特點(diǎn)分析:
(1)對于查詢量越高的請求,應(yīng)當(dāng)給予越短的緩存時(shí)間以保證其及時(shí)更新,反之查詢量越低則緩存時(shí)間越長。
(2)因?yàn)楹骄€分為重點(diǎn)和普通航線,普通航線訪問量較少,可以暫時(shí)固定其緩存時(shí)間。
(3)重點(diǎn)航線的緩存時(shí)間為最終需要計(jì)算的T,且有最低的緩存時(shí)間值。
根據(jù)以上可知的參數(shù),我們使用多種函數(shù)進(jìn)行試驗(yàn)并使用生產(chǎn)數(shù)據(jù)進(jìn)行驗(yàn)證,以尋求最優(yōu)的緩存效果。為此我們準(zhǔn)備兩個(gè)月的歷史日志作為基礎(chǔ)數(shù)據(jù),并且取最后若干天的數(shù)據(jù)作為預(yù)測結(jié)果的驗(yàn)證比對數(shù)據(jù)。
我們試驗(yàn)在不同的緩存時(shí)間下,命中率與準(zhǔn)確率的效果(命中率=從緩存獲得結(jié)果總數(shù)/總請求數(shù);準(zhǔn)確率是通過緩存結(jié)果與真實(shí)結(jié)果是否一致來計(jì)算)。我們針對基礎(chǔ)數(shù)據(jù)最后若干天的查詢請求模擬在緩存的錄入和失效下的查詢行為,如果當(dāng)前掃描到的請求在緩存中不存在時(shí),會將其結(jié)果插入緩存;當(dāng)下次相同請求被掃描到時(shí)比較兩次請求的時(shí)間差,如果在緩存時(shí)效內(nèi)則命中,否則清除當(dāng)前緩存數(shù)據(jù)并獲得最新結(jié)果;當(dāng)緩存命中時(shí)與原有日志中的真實(shí)結(jié)果進(jìn)行比對以驗(yàn)證準(zhǔn)確性。
以下在選定某個(gè)查詢量與緩存時(shí)間轉(zhuǎn)換函數(shù)以及指定各已知參數(shù)(普通航線和重點(diǎn)航線最低緩存時(shí)間)的驗(yàn)證結(jié)果。經(jīng)過多次實(shí)驗(yàn)驗(yàn)證得出結(jié)論:在業(yè)務(wù)許可的精度內(nèi),線性回歸方程[5]T=a-bx即可滿足表示查詢量與緩存有效期的關(guān)系,并且通過不同參數(shù)設(shè)置可以達(dá)到較優(yōu)的命中率與準(zhǔn)確率平衡,圖5所示,當(dāng)橫坐標(biāo)x查詢量越大時(shí),對應(yīng)縱坐標(biāo)緩存時(shí)間T會越短。該函數(shù)中,參數(shù)a為重點(diǎn)航線最低緩存時(shí)間,參數(shù)b作為調(diào)控參數(shù)。
表2 驗(yàn)證結(jié)果
700 700 0.893513974 0.849014295 800 800 0.925494537 0.82853509 900 900 0.900102582 0.842538137
圖5 查詢量與查詢時(shí)間的對應(yīng)關(guān)系
至此總結(jié)獲得緩存時(shí)效主要分為兩大步驟:預(yù)測查詢量和計(jì)算緩存時(shí)間,這其中包含的若干可變參數(shù)需要經(jīng)過實(shí)際數(shù)據(jù)驗(yàn)證以選取最優(yōu)組合。圖6體現(xiàn)了不同參數(shù)設(shè)置下,驗(yàn)證的命中率與準(zhǔn)確率的變化規(guī)律。為了保證生產(chǎn)環(huán)境下正常運(yùn)行,我們按照準(zhǔn)確率在95%以上的標(biāo)準(zhǔn)進(jìn)行調(diào)優(yōu),當(dāng)命中率能夠達(dá)到降低冗余查詢成本的要求時(shí),該參數(shù)為最優(yōu)調(diào)控組合。
圖6 驗(yàn)證結(jié)果的命中率與準(zhǔn)確率關(guān)系圖
引入動態(tài)緩存系統(tǒng)后的系統(tǒng)架構(gòu)如圖7所示,新增的緩存系統(tǒng)與原有系統(tǒng)各自獨(dú)立;緩存系統(tǒng)根據(jù)航班查詢?nèi)罩具M(jìn)行夜間離線學(xué)習(xí)訓(xùn)練,不會對實(shí)時(shí)系統(tǒng)造成影響,并將學(xué)習(xí)結(jié)果的緩存策略放到Cache中供實(shí)時(shí)系統(tǒng)調(diào)用。網(wǎng)站原有的航班查詢系統(tǒng)新增緩存查詢邏輯,可以決策查詢真實(shí)數(shù)據(jù)或查詢緩存數(shù)據(jù)。
圖7 航班查詢架構(gòu)調(diào)整
緩存查詢邏輯如圖8所示。學(xué)習(xí)系統(tǒng)每天夜間執(zhí)行一次,次日航班查詢時(shí),如果當(dāng)前請求在緩存中不存在時(shí),會根據(jù)學(xué)習(xí)結(jié)果的緩存時(shí)效將當(dāng)前的查詢結(jié)果錄入緩存。
圖8 緩存查詢邏輯流程圖
緩存系統(tǒng)投產(chǎn)后效果顯著,以某航空公司實(shí)際投產(chǎn)前后數(shù)據(jù)對比為例,如圖9所示,該系統(tǒng)于2016年4月底投產(chǎn),5月份緩存命中率已經(jīng)達(dá)到了50%以上,且查詢量與訂座量比例(查訂比)的降幅也超過了50%。
圖9 投產(chǎn)前后查詢量效果對比
其次在這種命中率很高的情況下,用戶的預(yù)訂成功量并沒有因?yàn)榫彺娲嬖跍?zhǔn)確率的問題而受到影響,如圖10。
動態(tài)緩存系統(tǒng)投產(chǎn)后有效的節(jié)省了直接查詢后臺的流量。同時(shí)這種高命中率的查詢對航班結(jié)果的準(zhǔn)確性并沒有造成明顯影響,投產(chǎn)后為了進(jìn)一步提高緩存的準(zhǔn)確率,我們也采用了一些判斷邏輯,比如當(dāng)發(fā)現(xiàn)有艙位預(yù)訂行為時(shí)會及時(shí)更新緩存中相應(yīng)結(jié)果。在這些舉措下通過一段時(shí)間的檢驗(yàn),緩存的使用不僅增加了后臺承載能力,也促進(jìn)了網(wǎng)站預(yù)訂量的增漲,提高了航空公司收益。
在投產(chǎn)之后緩存的算法仍然需要進(jìn)一步調(diào)優(yōu),算法中各項(xiàng)預(yù)設(shè)參數(shù)還有待進(jìn)一步驗(yàn)證,以達(dá)到更優(yōu)的命中率與準(zhǔn)確率的平衡。
圖10 投產(chǎn)后預(yù)訂量變化
[1]楊樹仁,沈洪遠(yuǎn).基于相關(guān)向量機(jī)的機(jī)器學(xué)習(xí)算法研究與應(yīng)用[J].計(jì)算技術(shù)與自動化,2010,29(1):43-47.
[2]楊玫,劉瑜,孔波.SVR模型參數(shù)選擇方法的研究[J].計(jì)算機(jī)時(shí)代,2009(11):53-55.
[3]Chang C C, Lin C J. LIBSVM: A library for support vector machines[M]. ACM, 2011.
[4]林升梁,劉志.基于RBF核函數(shù)的支持向量機(jī)參數(shù)選擇[J].浙江工業(yè)大學(xué)學(xué)報(bào),2007,35(2):163-167.
[5]劉連福.一元線性回歸方程中回歸系數(shù)的幾種確定方法[J].沈陽師范大學(xué)學(xué)報(bào)(自然科學(xué)版),2008,26(4):406-408.
The design of dynamic caching system for airline flight inquiry
Yao Yi,Zhou Zhongyu,Li Yang,Yang chengyi
(TravelSky Technology Limited,beijing,100105)
This paper introduced a method that involved Macheine Learning to achieve dynamic caching system for airline flight inquiry. According to the problem of data crawlers of third-parties, the system analyzed visiting behaviors and established a caching model for flight inquiry. As a result, the system can help reducing the query and booking ratio.
Flight inquires; Machine Learning; Caching
姚一(1981-),男,中國民航信息網(wǎng)絡(luò)股份有限公司高級工程師,主要從事JAVA后臺高并發(fā)服務(wù)設(shè)計(jì)和研發(fā)。
周中雨(1978-),男,中國民航信息網(wǎng)絡(luò)股份有限公司資深工程師,主要從事J2EE平臺軟件設(shè)計(jì)研發(fā),研究方向:高性能架構(gòu),規(guī)則引擎,機(jī)器學(xué)習(xí)等。
李洋(1977-),男,中國民航信息網(wǎng)絡(luò)股份有限公司資深工程師,主要從事航空公司電子商務(wù)智能化解決方案的研究和實(shí)現(xiàn)。
楊程屹(1986-),男,中國民航信息網(wǎng)絡(luò)股份有限公司工程師,主要從事數(shù)據(jù)分析、算法開發(fā)工作。
北京市科學(xué)技術(shù)委員會2017年度創(chuàng)新基地培育與發(fā)展專項(xiàng)(Z171100002217047)。