武文斌



摘 要:當今社會,屬于第三產業的旅游業對社會的發展起著越來越重要的作用。酒店入住是旅游業發達與否的一個重要體現。本文從維多利亞酒店入住情況數據出發,應用支持向量回歸機的方法對酒店入住情況相關的月度入住次數這一時間序列數據進行建模和預測,進一步計算預測結果的均方根誤差來定量地評價預測精度。通過實驗驗證,我們可以對酒店入住情況進行較為精準的預測,為維多利亞酒店未來營業模式的安排提供有意義的參考。
關鍵詞:支持向量回歸;時間序列預測;實驗驗證
中圖分類號:U491 文獻標志碼:A
0 引言
酒店入住情況對于每一家酒店,甚至對整座城市的旅游業起著至關重要的作用。酒店可以通過對以往入住情況的統計,比如歷史的月住房次數數據來預測下一個月或者下幾個月的入住次數。這樣就可以在旅游旺季來臨之際提前做好準備,從而實現人力物力的合理配置,減少不必要的損失,從而取得經濟效益。通過對酒店入住情況的預測,不僅可以探索其發展變化的規律,而且可以從一個側面反映社會經濟現象的發展情況。
對于月住房次數這樣的時間序列數據,通過文獻調研,還沒有發現相關的研究。但是,對于其他領域的時間序列數據,已有不少相關研究,并涉及到眾多技術。特別地,應用支持向量回歸機(support vector machines regression, SVR)預測時間序列數據已有不少研究。楊金芳等人簡要介紹了時間序列預測的研究狀況以及支持向量回歸的基本原理,將支持向量回歸用于對煤氣爐時間序列的預測,并同其他神經網絡進行比較,實驗表明支持向量回歸在預測性能方面明顯更優。尉詢楷等人將支持向量機預測模型應用于某型航空發動機的滑油金屬含量監測中,并與遞歸神經網絡預測器進行比較,實驗表明支持向量機表現出優秀的泛化能力,可預測區間較長且具有較高的準確度。
董輝、冷伍明詳細分析了支持向量機用于時間序列預測的理論基礎,并采用支持向量機和其他兩種神經網絡模型進行對比,分別對仿真時序和工程滑坡變形時序進行了回歸與預測,結果表明在噪聲水平較低時,SVR回歸效果稍好。
曲文龍等人介紹了相空間重構和基于支持向量機的時間序列預測建模技術,提出了復雜時間序列的多尺度分解方法,對支持向量機回歸與預測的各項參數設置進行了實驗分析,通過對股票數據進行建模和預測表明支持向量機對復雜時間序列具有較好的預測效果。夏國恩針對目前鐵路客運量預測方法不足的問題,采用SVR對鐵路客運量時間序列進行預測,通過與標準的反向傳播人工神經網絡進行對比表明,SVR的預測精度更高。
1 支持向量回歸
支持向量機回歸是一種機器學習方法,并可以應用于時間序列數據的預測。SVR采用了結構風險最小化原則,通過多維輸入和輸出之間的實值映射來提高所建立模型的泛化能力。該映射可以表示為一種潛在函數,并且當引入非線性核函數K(xi,x)時該映射也是非線性的,將輸入空間轉換為的更高維特征空間的線性回歸函數。使用ε(也稱誤差邊界)不敏感損失函數的非線性SVR回歸函數可以表示為:
其中,αi和αi*是求解目標函數中的拉格朗日乘數,ai、αi*和a 表示最優值,C是預設值(也稱為懲罰因子),用來調節經驗誤差和泛化誤差的平衡。在公式(1)中,觀察到的輸入向量xi是實際對回歸函數有貢獻的支持向量,并且對應于正的αi和αi*。在本文中,我們選擇了流行的高斯徑向基函數作為核函數,可以表示為K(x,y)=exp(-(x-y)2/2σ2),其中σ是核函數參數。
在SVR建模過程中,有3個參數ε,C和σ需要被確定。已有一些可用于參數選擇的智能方法,比如遺傳算法,粒子群優化算法,模擬退火算法等。本文采用了啟發式算法直接從訓練數據中計算ε和σ這兩個參數的取值。
2 研究方法
本文的整體研究框架大致分為以下幾個步驟:首先上網搜集維多利亞酒店入住情況數據并整理成“.csv”格式的數據文件,再將數據進行預處理(將原始數據轉換格式、時間序列化等),然后將預處理后得到的數據劃分成訓練集和測試集,并由此對訓練集建立SVR模型,接著應用SVR模型進行預測,最后將所得到的預測值計算預測精度。
整個預測過程的實現程序如算法1所示。首先導入“rminer”的數據包,然后將酒店入住情況數據通過“read.csv("數據文件路徑名稱”,header=TRUE)”函數讀取進來,并保存到“table”這個變量中;之后將table中的入住次數這一列數據通過代碼“Rm=table$Room_nights”從“table”中取出來并保存到“Rm”這個變量中;再使用“as.numeric()”、“as.character()”3個函數將取出的原始數據進行預處理;接著通過代碼“Rm=ts(Rm,start=c(1980,1),frequency=12)”將“Rm”變量的時間序列周期設定為月度數據的潛在周期12,以便建立預測模型;然后將原始數據劃分為訓練集和測試集;接下來使用時間序列建模函數“fit()”對訓練集建立SVR模型;然后通過“lforecast()”函數建立預測模型并執行預測;最后使用“mgraph()”繪圖函數繪制預測結果。
算法1:月度酒店入住次數預測
輸入:往期酒店月入住次數
輸出:未來酒店月入住次數
1.library(rminer)
2. table = read.csv(“文件路徑", sep=",", header=TRUE)
3.Rm=table$Room_nights
4.Rm=as.numeric(as.character(Rm))
5.Rm=ts(Rm,start = c(1980,1),frequency = 12)endprint
6.window=24
7.H=6
8.L=length(Rm)
9.Target=Rm[181:186]
10.d=CasesSeries(Rm,c(1:window))
11.LD=nrow(d)
12.dtr=1:(LD-H)
13.SV=fit(y~.,d[dtr,],model="ksvm",C=NA,epsilon=NA,kpa="automatic",seed=1000)
14. Pred=lforecast(SV,d,start=(LD-H+1),horizon=H)
15. r=round(mmetric(Target,Pred,metric="RMSE"),3)
16. txt=paste("SVM RMSE:",r,"\n")
17.mgraph(Target,Pred,graph="REG",Grid=10,col=c("black","blue"),leg=list(pos="topright",leg=c("target","predictions")),main=txt)
3 實驗驗證
3.1實驗準備
實驗數據來源于對維多利亞1980年1月到1995年6月酒店入住情況的統計。該時間序列共計186個數據點,設置前180個點為訓練集,最后6個點為測試集。實驗數據總體呈上升趨勢,但也有周期性的波動,波峰主要出現在春秋兩季,此時正值旅游旺季。實驗運行環境為R語言和集成開發環境Rstudio。R是用于統計分析、繪圖展示的語言和操作環境。R語言免費開源,并提供了對象、運算符和函數來探索、建模和可視化數據。其中,Rminer是以開源數據挖掘工具WEKA為核心的R語言程序包。Rminer實現了大多數經典和最新的數據挖掘算法,本文應用Rminer作為SVR預測模型的實現方法。
為了比較不同預測模型的優劣,本文采用均方根誤差(root mean square error, RMSE)作為預測模型的度量指標。RMSE的計算公式為
RMSE
其中,y和f分別表示時間序列的觀測值和模型輸出值,T為數據點的個數。本文通過對測試集計算RMSE來評價模型的預測精度,RMSE值越小,預測精度越高,預測模型性能越好。
3.2 實驗結果
本實驗通過改變窗口長度這個模型參數來得到四個不同的SVR模型。每個模型的窗口長度L都設為月度數據的潛在周期12的整數倍,在四個模型中分別為12、24、36、48。懲罰因子C均取默認值3。誤差邊界ε和核函數σ參數通過啟發式算法從訓練數據中計算獲得其取值。
通過分析實驗結果,可以看出以下幾點:(1)RMSE值的數量級為105,而原始數據的數量級為106,說明我們的預測精度是比較高的;(2)RMSE的最小值為22759.41,此時窗口長度為24,說明當窗口長度為24時預測精度最高,模型性能也最好;(3)隨著L的不斷增大,ε不斷增大,σ不斷減小,RMSE呈現出先減小后增大的趨勢。
4 結論
本文應用支持向量回歸機模型對酒店入住情況相關的時間序列數據進行預測,預測精度(RMSE值)達到了22759.41。基于目前工作,后續還可以做進一步研究,比如應用自回歸移動平均(autoregressive integrated moving average, ARIMA)、3次指數平滑(Hot-Winters)等模型進行實驗,比較各種統計學和人工智能等不同預測模型的優劣。
參考文獻
[1]楊金芳, 翟永杰, 王東風, 等.基于支持向量回歸的時間序列預測[J].中國電機工程學報,2005, 25(17):110-114.
[2]尉詢楷, 李應紅, 張樸, 等.基于支持向量機的時間序列預測模型分析與應用[J].系統工程與電子技術, 2005,27(3):529-532.
[3]董輝, 冷伍明.支持向量機的時間序列回歸與預測[J].系統仿真學報, 2006, 18(7):1785-1788.
[4]曲文龍, 樊廣佺, 楊炳儒.基于支持向量機的復雜時間序列預測研究[J].計算機工程,2005,31(23):1-3.
[5]夏國恩, 曾紹華, 金煒東.支持向量回歸機在鐵路客運量時間序列預測中的應用[J].計算機應用研究,2006,23(10):180-182.endprint