王紅愛
(中國鐵道科學(xué)研究院,北京 100081)
退票是鐵路客票發(fā)售和預(yù)訂系統(tǒng)(以下簡稱客票系統(tǒng))的核心業(yè)務(wù)之一[1],當(dāng)旅客行程變更或自然災(zāi)害、調(diào)整運(yùn)行圖等事件發(fā)生時,可通過辦理退票手續(xù)來取消旅行。目前有4種辦理退票的渠道,分別為窗口退票、互聯(lián)網(wǎng)退票、手機(jī)退票、自助設(shè)備退票,多渠道辦理大大提高了旅客辦理退票業(yè)務(wù)的便捷性。退票后系統(tǒng)會將席位從“已售”狀態(tài)變更為“未售”狀態(tài),初始的一個長途席位可能會被分成多個短途席位,組織該部分席位進(jìn)行再售,對退票席位充分使用,一直是鐵路部門研究的重要課題之一,也是鐵路收益管理的重要內(nèi)容之一。對預(yù)售期內(nèi)的空閑席位,包括通過辦理退票、改簽、作廢票等業(yè)務(wù)釋放的席位,國內(nèi)外都實(shí)施了不同的售票組織策略。國外鐵路部門[2-3],如美國,建立了ARROW客票預(yù)訂系統(tǒng),通過價格浮動,合理分配運(yùn)輸能力;法國國家鐵路公司(SNCF)采用SABRE方案尋求最大化的收益增加方案,使得所有列車的席位分配達(dá)到最優(yōu);英國大東北鐵路公司(GNER)采用IRIS工程方案,通過預(yù)測需求及采用折扣票價實(shí)現(xiàn)席位的最大化利用。國內(nèi)鐵路部門實(shí)施了席位合并、預(yù)分、復(fù)用、共用、取消限售等不同策略[4-6],并將釋放的空閑席位隨機(jī)轉(zhuǎn)到網(wǎng)上進(jìn)行公開發(fā)售,以避免“隨返隨放”導(dǎo)致囤票倒票現(xiàn)象。為實(shí)現(xiàn)“票盡其用”的目標(biāo),鐵路部門對空閑席位制定了多方位的售票組織策略,但還沒有對未來“可能”的空閑席位進(jìn)行智能化管理,本文旨在從鐵路客票系統(tǒng)的歷史客票數(shù)據(jù)中,通過智能化技術(shù),挖掘有用的信息,提前對因退票而釋放的席位情況進(jìn)行預(yù)測,為票額再售提供決策依據(jù),為旅客購票提供更多選擇。
文中將退票率作為目標(biāo)變量,對其進(jìn)行預(yù)測研究,從旅客來說,可以根據(jù)預(yù)測結(jié)果規(guī)劃購票需求,對退票率高的意向列車進(jìn)行候補(bǔ)下單,對退票率低的意向列車可以更換其他購票成功率高的列車進(jìn)行下單;從客票系統(tǒng)來說,可以根據(jù)預(yù)測結(jié)果對候補(bǔ)購票的排隊(duì)數(shù)量進(jìn)行動態(tài)調(diào)整,避免票額能力不足而排隊(duì)過長造成的訪問資源浪費(fèi),并且可以提升旅客購票體驗(yàn);從鐵路部門來說,可以根據(jù)預(yù)測結(jié)果提前對票額進(jìn)行動態(tài)調(diào)整,制定共用、取消限售等策略,滿足更多旅客的出行需求;從車站來說,可以根據(jù)預(yù)測結(jié)果實(shí)行彈性開窗機(jī)制,節(jié)約旅客退票排隊(duì)時間。
目前對客票系統(tǒng)歷史數(shù)據(jù)的研究,主要是基于不同的學(xué)習(xí)算法進(jìn)行模型研究,如BP人工神經(jīng)網(wǎng)絡(luò)[7]、灰色動態(tài)模型[8]、灰色-馬爾科夫預(yù)測模型[9]、XGBoost(Extreme Gradient Boosting)算法[10]、遺傳算法[11]等。XGBoost機(jī)器學(xué)習(xí)算法[12]是近年來新興的一種高效算法,能夠自動利用CPU的多線程進(jìn)行并行處理,在效率及精度上都比較有優(yōu)勢,故在本文中采用了XGBoost算法進(jìn)行退票率的分類及預(yù)測研究,研究中對客票數(shù)據(jù)進(jìn)行了脫敏處理。在進(jìn)行分類預(yù)測前,首先對退票率數(shù)據(jù)做預(yù)處理,根據(jù)退票業(yè)務(wù)特點(diǎn),分析影響退票率的特征變量,并且為滿足分類算法的要求,需要對退票率數(shù)據(jù)進(jìn)行離散化處理。
退票率是指退票量占售出量的比例,是對某列車或多列車同一天同一區(qū)段同一席別的席位退票情況的統(tǒng)計(jì)指標(biāo)之一,退票率Rijk為
(1)
式中:Tijk為某天第i趟車第j個區(qū)段第k個席別的退票量;Sijk為某天第i趟車第j個區(qū)段第k個席別的售出量。
退票率的統(tǒng)計(jì)要依據(jù)客票系統(tǒng)的售票、退票交易數(shù)據(jù),交易數(shù)據(jù)包括乘車日期、車次、發(fā)站、到站、車廂、席位號、售出渠道、售出時間等屬性。影響退票率的特征變量見表1,包括時間特征、區(qū)段特征、席別特征、售出特征,其中,時間特征依據(jù)節(jié)假日特點(diǎn)劃分售出時間屬性值;區(qū)段特征依據(jù)車票發(fā)站、到站與始發(fā)站、終到站的關(guān)系劃分屬性值;售出特征中“售出渠道”子特征,包括互聯(lián)網(wǎng)、手機(jī)APP、車站窗口、TVM、電話訂票幾類屬性值。文中將售出特征中的各子特征與各主特征一起作為特征變量,退票率作為目標(biāo)變量進(jìn)行分類及預(yù)測研究,在研究過程中對原始數(shù)據(jù)依據(jù)特征變量進(jìn)行統(tǒng)計(jì),獲得售出量及退票量以進(jìn)行退票率的計(jì)算。
表1 影響退票率的特征變量
為避免樣本偏差帶來的噪聲問題,對目標(biāo)變量采用無監(jiān)督離散化。離散化[13-16]即將樣本數(shù)據(jù)劃分為多個空間,每個空間由一個離散的值來標(biāo)識。無監(jiān)督離散化算法[17]包括等寬離散化方法(Equal Width,EW)、等頻率離散化方法(Equal Frequent,EF)、近似等頻離散化方法(Approximate Equal Frequency Discretization Method,AEFD)、基于局部密度的離散化算法、基于聚類的離散化算法等。其中,DBSCAN[18](Density-Based Spatial Clustering of Applications with Noise)是基于密度的優(yōu)秀聚類算法,它把具有足夠高密度的區(qū)域劃分為簇,將簇定義為密度相連的點(diǎn)的最大集合,可以在噪聲的空間數(shù)據(jù)庫中發(fā)現(xiàn)任意形狀的聚類,并且不需要事先知道要形成的簇類數(shù)量。根據(jù)業(yè)務(wù)特點(diǎn),退票率具有密度不均勻的特征,而經(jīng)典的DBSCAN算法難以適應(yīng)密度不均勻的數(shù)據(jù)集。為解決密度不均勻帶來的問題,設(shè)計(jì)了EW-DBSCAN離散化方法,即首先用等寬離散化方法將樣本數(shù)據(jù)進(jìn)行離散化,然后將離散化結(jié)果中高密度區(qū)段采用DBSCAN算法進(jìn)行二次離散化。實(shí)現(xiàn)如下:
Step1取一定時間段的退票率數(shù)據(jù),分析數(shù)據(jù)分布特征。
Step2根據(jù)數(shù)據(jù)分布特征,確定等寬離散化的區(qū)間個數(shù)。
Step3將退票率數(shù)據(jù)等寬離散化,并分析各區(qū)間的數(shù)據(jù)密度。
Step4將已劃分區(qū)間中密度較高的區(qū)間通過DBSCAN算法進(jìn)行二次離散化。
Step6最后將各個局部的聚類結(jié)果進(jìn)行合并。
由于每個局部區(qū)域使用的是各自局部的聚類半徑值來進(jìn)行聚類,從而可以有效緩解因使用全局聚類半徑值dEps而導(dǎo)致聚類質(zhì)量惡化的問題。本文取客座率較高的某線列車2017年客票數(shù)據(jù),通過Python3.5.1實(shí)現(xiàn)該算法,表2為目標(biāo)離散化結(jié)果,取值范圍及切分點(diǎn)以百分比為單位。
表2 目標(biāo)離散化結(jié)果
在一些客運(yùn)業(yè)務(wù)中,掌握精確值比掌握區(qū)間值對旅客、管理部門及客票系統(tǒng)進(jìn)行決策更有指導(dǎo)性意義,因此為指導(dǎo)退票后的售票策略,本文在每個退票率分類中,計(jì)算能滿足一定誤差范圍的最優(yōu)預(yù)測退票率取值,使得該最優(yōu)預(yù)測退票率在誤差范圍內(nèi)密度最大。梯度算法具有很強(qiáng)的局部搜索能力,采用梯度算法進(jìn)行區(qū)間退票率最優(yōu)值計(jì)算。取某個離散化區(qū)間[Rl,Rl+1],求該區(qū)間的最優(yōu)預(yù)測退票率,算法實(shí)現(xiàn)如下:
Step1Rl1,Rl2,…,Rln為區(qū)間[Rl,Rl+1]上的n個樣本數(shù)據(jù),給定誤差范圍[e1,e2]。
Step2根據(jù)誤差范圍,可將樣本數(shù)據(jù)點(diǎn),分成n個樣本區(qū)間
{[Rl1-e1,Rl1+e2],[Rl2-e1,Rl2+e2],…,[Rln-e1,Rln+e2]}
Step3統(tǒng)計(jì)上述n個樣本區(qū)間對應(yīng)的樣本數(shù)量{Y1,Y2,…,Yn},擬合各區(qū)間中位數(shù)與樣本數(shù)量的數(shù)據(jù)特征曲線
Y=f(X)
式中:X為以各區(qū)間的中位數(shù)為特征的變量。
Step4給定一個初始點(diǎn)X0,并設(shè)定算法終止距離ε以及步長α。
Step6重復(fù)計(jì)算導(dǎo)數(shù),直至滿足算法終止距離ε,計(jì)算到的極值即為最優(yōu)預(yù)測退票率。
建立擬合函數(shù),進(jìn)行梯度算法求最優(yōu)預(yù)測退票率,可以避免直接迭代求最值造成的過擬合問題。
根據(jù)實(shí)際業(yè)務(wù)需求,將誤差范圍設(shè)定為[-5%,5%],取客座率較高的某線列車2017年客票數(shù)據(jù),擬合誤差區(qū)間的樣本數(shù)量。因?yàn)闃I(yè)務(wù)特點(diǎn),不會出現(xiàn)整年售出車票大部分被退票的現(xiàn)象,故區(qū)間[85,100]數(shù)據(jù)密度較低,該區(qū)間擬合函數(shù)特征不太明顯,其他區(qū)間二次曲線特征明顯。樣本密度較高的[25%,40%)區(qū)間的擬合曲線見圖1,最優(yōu)預(yù)測退票率的計(jì)算結(jié)果見表3。
圖1 [25%,40%)區(qū)間的擬合曲線圖
表3 最優(yōu)預(yù)測退票率的計(jì)算結(jié)果
XGBoost是一種可擴(kuò)展的、分布式的算法庫,在GBDT(Gradient Boosting Decision Tree,梯度提升決策樹)基礎(chǔ)上做了很多優(yōu)化,如損失函數(shù)、正則項(xiàng)、特征選擇、并行運(yùn)算等。XGBoost的集成學(xué)習(xí)過程為
(2)
第m次的目標(biāo)函數(shù)為
(3)
基于XGBoost算法的退票率分類實(shí)現(xiàn)如下:
Step2初始值設(shè)定:設(shè)定正則參數(shù)p1、p2;設(shè)定樹的深度;設(shè)定樹的總量,即要建多少棵樹。
Step3計(jì)算各樣本的Sm函數(shù)的一階導(dǎo)數(shù)及二階導(dǎo)數(shù)。
Step4進(jìn)行建樹,核心的裂解過程見圖2。
Step5達(dá)到樹的深度則一棵樹建立完成,重復(fù)Step3、Step4,直至按照樹的總量建立完成,即完成分類。
為了支持自定義損失函數(shù),在XGBoost算法中,需要對損失函數(shù)進(jìn)行二階泰勒展開
(4)
另外,建樹過程中,需要計(jì)算增益值,并根據(jù)最大增益值來進(jìn)行分叉處理。增益值Ggain為
(5)
式中:FL為分裂點(diǎn)的左側(cè)樣本一階導(dǎo)數(shù)之和;SL為對應(yīng)的二階導(dǎo)數(shù)之和;FR為分裂點(diǎn)的右側(cè)樣本一階導(dǎo)數(shù)之和;SR為對應(yīng)的二階導(dǎo)數(shù)之和;r1、r2為常數(shù)項(xiàng),在建樹過程中控制了復(fù)雜度,取值均為0.1。
圖2 XGBoost建樹分枝過程
2.2.1 XGBoost算法的參數(shù)優(yōu)化
參數(shù)組合對XGBoost算法的分類性能影響較大,一般會運(yùn)用經(jīng)驗(yàn)或者窮舉法對參數(shù)進(jìn)行調(diào)整。因?yàn)樨惾~斯優(yōu)化具有迭代次數(shù)少,速度快,可以避免非凸函數(shù)的局部最優(yōu)問題等優(yōu)點(diǎn),在很多應(yīng)用[19-20]中調(diào)參時選擇貝葉斯方法,并取得較好的效果,故選擇用貝葉斯方法對XGBoost算法進(jìn)行參數(shù)優(yōu)化。
貝葉斯調(diào)參時需要設(shè)定目標(biāo)函數(shù),本文中,目標(biāo)函數(shù)入?yún)榉诸愃惴╔GBoost的所有參數(shù),輸出為模型交叉驗(yàn)證5次的AUC均值。依據(jù)上文目標(biāo)離散化中用到的某線列車2017年客票數(shù)據(jù),將該數(shù)據(jù)80%部分進(jìn)行訓(xùn)練,20%部分進(jìn)行測試,采用貝葉斯方法對XGBoost算法進(jìn)行參數(shù)最優(yōu)化,結(jié)果見表4,其中迭代8次的參數(shù)達(dá)到最優(yōu)。
表4中,參數(shù)1=colsample_bytree,表示構(gòu)造每棵樹時的列采樣率;參數(shù)2=gamma,表示指定節(jié)點(diǎn)被分割時,最小損失函數(shù)減小的大??;參數(shù)3=learning_rate,表示學(xué)習(xí)率,可以使模型更加健壯;參數(shù)4=max_depth,表示樹的最大深度,該參數(shù)用于控制過擬合;參數(shù)5=min_child_weight,表示所有觀察值的最小權(quán)重和,該參數(shù)用于減少過擬合;參數(shù)6=n_estimators,表示樹的數(shù)量,本次調(diào)優(yōu)取值范圍[10,100];參數(shù)7=subsample,表示樣本的采樣率;AUC(Area Under Curve),作為參數(shù)最優(yōu)化的評價標(biāo)準(zhǔn),取值范圍在[0,1]。
2.2.2 退票率預(yù)測模型
退票率預(yù)測模型見圖3。包括模型生成、模型使用、模型評價、模型優(yōu)化4個階段。按照模型生成→模型使用→模型評價→模型優(yōu)化流程進(jìn)行退票率預(yù)測。
模型生成階段:首先,按照EW-DBSCAN離散化方法對歷史退票率進(jìn)行離散化處理,應(yīng)用梯度算法對各離散化區(qū)間選取最優(yōu)預(yù)測退票率;其次,將歷史客票數(shù)據(jù)按照8∶2的比例,采用基于貝葉斯調(diào)參的XGBoost算法進(jìn)行退票率分類訓(xùn)練和測試。
模型使用階段:準(zhǔn)備待預(yù)測數(shù)據(jù)后,通過生成的模型對此部分?jǐn)?shù)據(jù)進(jìn)行退票率預(yù)測。
模型評價階段:將預(yù)測結(jié)果與實(shí)際退票率進(jìn)行對比,準(zhǔn)度符合要求時,模型無須優(yōu)化,繼續(xù)下一次預(yù)測。準(zhǔn)度不符合要求時,記錄預(yù)測日志表,當(dāng)準(zhǔn)度不符合要求的累計(jì)次數(shù)達(dá)到閾值時,進(jìn)行模型優(yōu)化。
表4 貝葉斯方法對XGBoost算法進(jìn)行調(diào)參
圖3 退票率預(yù)測模型圖
模型優(yōu)化階段:以最新客票歷史數(shù)據(jù)為數(shù)據(jù)源,進(jìn)行模型訓(xùn)練和測試,重新生成模型,在模型優(yōu)化階段,定期依據(jù)新數(shù)據(jù)重新將退票率離散化處理。
分類精度的衡量指標(biāo)很多,常用的有混淆矩陣、總體分類精度、Kappa系數(shù)、ROC曲線等。對于二分類問題,可以使用ROC曲線來評估模型的預(yù)測效果;對于多分類問題衡量模型精準(zhǔn)度的可以用混淆矩陣、Kappa系數(shù)等。混淆矩陣不能直觀反映出分類精度的好壞,本文中采用Kappa系數(shù)進(jìn)行算法精度評價,Kappa系數(shù)基于實(shí)際分類與預(yù)測分類的混淆矩陣,表示分類與完全隨機(jī)的分類產(chǎn)生錯誤減少的比例,值越大,則代表模型實(shí)現(xiàn)的分類準(zhǔn)確度越高,在實(shí)際應(yīng)用中,一般取值范圍是[0,1]。K為Kappa系數(shù),其計(jì)算過程為
(6)
(7)
3.1.1 基于貝葉斯參數(shù)優(yōu)化的XGBoost算法有效性驗(yàn)證
為了驗(yàn)證基于貝葉斯參數(shù)優(yōu)化的XGBoost算法是否較其他分類算法在鐵路退票率分類預(yù)測中效果更好,本文同樣以客座率較高的某線列車2018年客票數(shù)據(jù)進(jìn)行驗(yàn)證,實(shí)驗(yàn)環(huán)境為Win10,64位操作系統(tǒng),Intel(R) Core(TM) i7-7700HQ CPU @ 2.80 GHz,內(nèi)存32 GB,Python3.5.1。表5為基于貝葉斯參數(shù)優(yōu)化的XGBoost算法、基于窮舉法的XGBoost算法、GBDT 算法、SVM算法、Adaboost算法、RandomForest算法的Kappa系數(shù)驗(yàn)證結(jié)果。
表5 不同算法的退票率預(yù)測精度對比
由表5可見,相對于其他分類算法, XGBoost算法在預(yù)測退票率時有較高的分類精度,基于窮舉法的XGBoost算法與基于貝葉斯優(yōu)化參數(shù)的XGBoost算法的預(yù)測精度相差不多,但是基于貝葉斯參數(shù)優(yōu)化的XGBoost算法比基于窮舉法的XGBoost算法的訓(xùn)練速度快9倍多,因此采用貝葉斯參數(shù)優(yōu)化法進(jìn)行XGBoost參數(shù)調(diào)優(yōu)。XGBoost算法在進(jìn)行訓(xùn)練之前,預(yù)先對數(shù)據(jù)進(jìn)行了排序,然后保存為block結(jié)構(gòu),后面的迭代中重復(fù)地使用這個結(jié)構(gòu),在進(jìn)行節(jié)點(diǎn)的分裂時,對各個特征的增益計(jì)算就可以開多線程進(jìn)行,大大減少了計(jì)算量,在生成候選的分割點(diǎn)時體現(xiàn)了高效。
3.1.2 退票率離散化算法有效性驗(yàn)證
為了驗(yàn)證本文中使用的離散化方法在退票率區(qū)間分割中更有效,將退票率采用等寬、等頻、DBSCAN算法及本文中提出的EW-DBSCAN算法進(jìn)行對比實(shí)驗(yàn),分類算法均為基于貝葉斯參數(shù)優(yōu)化的XGBoost算法。這幾種不同離散化方法后的預(yù)測精度對比見表6,其中EW-DBSCAN算法的Kappa指數(shù)最高。
表6 不同離散化方法的退票率預(yù)測精度對比
為了驗(yàn)證本文中使用的區(qū)間最優(yōu)退票率選取方法的有效性,將各離散化區(qū)間分別采用密度法、均值法、梯度法選取區(qū)間最優(yōu)收入率,并且將誤差范圍均設(shè)定為[-5%,5%],計(jì)算退票率的預(yù)測精度,結(jié)果見表7,其中使用梯度法得到的退票率預(yù)測準(zhǔn)確度最高。
表7 不同區(qū)間最優(yōu)退票率選取方法的退票率預(yù)測精度對比
鐵路部門一直致力于以旅客服務(wù)為核心的研究,為充分實(shí)現(xiàn)票盡其用,本文以退票率為目標(biāo)變量進(jìn)行了分類及預(yù)測的研究,旨在能通過預(yù)知退票率信息對退票釋放的席位進(jìn)行提前規(guī)劃。文中分析了退票率數(shù)據(jù)的特征,提出EW-DBSCAN算法對目標(biāo)變量進(jìn)行離散化處理;通過梯度算法獲取目標(biāo)區(qū)段內(nèi)的最優(yōu)值,在預(yù)售期內(nèi)可以供旅客購票進(jìn)行參考;通過基于貝葉斯參數(shù)優(yōu)化的XGBoost算法對退票率進(jìn)行分類及預(yù)測,并驗(yàn)證了算法的有效性。后續(xù)的研究中可以細(xì)化特征變量,研究具體特征對退票率的影響,如研究開車時間與退票率的關(guān)系,鐵路部門可以將退票率很大的列車通過調(diào)整開行時刻等策略來提高運(yùn)營收益,充分利用現(xiàn)有的運(yùn)能,滿足旅客乘車需求。