李博涵LI Bo-han
(重慶交通大學(xué)機(jī)電與車輛工程學(xué)院,重慶 400074)
車輛價(jià)格的漲跌一直是當(dāng)下汽車行業(yè)的熱議話題,尤其是在新能源汽車出現(xiàn)后,對(duì)傳統(tǒng)汽車市場(chǎng)更是有不小影響。對(duì)于買家來說,很多買家清楚自己需要什么性能的車,但對(duì)于這種理想車型的價(jià)格并沒有一個(gè)很好的評(píng)估標(biāo)準(zhǔn)。對(duì)于賣家來說,對(duì)某些同級(jí)別車輛在市場(chǎng)中的價(jià)格沒有一個(gè)很好的參照,形成了定價(jià)困難的局面。也有許多專家和平臺(tái)會(huì)對(duì)車輛價(jià)格進(jìn)行人工預(yù)測(cè),但結(jié)果不夠客觀準(zhǔn)確。本文基于機(jī)器學(xué)習(xí)以及數(shù)據(jù)挖掘技術(shù),利用采集到的車輛特征數(shù)據(jù),對(duì)車輛進(jìn)行真實(shí)合理的價(jià)格預(yù)測(cè),該方法成本低廉且效率較高,同時(shí),預(yù)測(cè)結(jié)果也能達(dá)到較高的精度。
文章的數(shù)據(jù)來自于開放數(shù)據(jù)平臺(tái)Kaggle上的“汽車及其價(jià)格數(shù)據(jù)”,該數(shù)據(jù)共有6020條記錄,13個(gè)特征,其中包括車輛名稱,發(fā)動(dòng)機(jī)排量,里程等車輛基本屬性,整個(gè)的分析和建模過程都是在python3.9環(huán)境中進(jìn)行,文章采用的編譯器是pycharm。數(shù)據(jù)的特征匯總?cè)绫?所示。
表1 車輛特征匯總表
其中,將車輛的Price設(shè)置為模型的標(biāo)簽,Year,Kilometers_Driven,Mileage,Engine,Power,Seats屬 于 數(shù) 字型特征,但其中一部分?jǐn)?shù)據(jù)包含有字符串在內(nèi),所以需要先將數(shù)字與字符串分離,對(duì)Year這列特征,調(diào)用datetime工具包,用當(dāng)前時(shí)間減去汽車生產(chǎn)的年份,作為新的特征代 替 這 列。Name,Location,F(xiàn)uel,Type,Transmission,Owner_Type屬于分類列,考慮到汽車的價(jià)格可能和制造商有關(guān),先將Name這一列通過空格分隔,提取出制造商,將汽車制造商單獨(dú)作為一個(gè)分類特征,并且刪除原先的Name列。分類特征在使用之前應(yīng)將其轉(zhuǎn)換為虛擬變量,文章將用特征編碼的方式對(duì)分類列進(jìn)行處理,考慮到New_Price中缺失值過多,且已經(jīng)有Price作為標(biāo)簽,直接刪除這列無用特征。
seaborn是一個(gè)基于matplotlib開發(fā)的一個(gè)第三方可視化庫,其中包括的一個(gè)函數(shù)seaborn.heatmap()熱力圖,可以用于展示數(shù)據(jù)中幾組特征的相關(guān)系數(shù)矩陣,其中相關(guān)性的強(qiáng)弱可以用皮爾遜相關(guān)系數(shù)來衡量,用兩個(gè)變量之間的協(xié)方差和標(biāo)準(zhǔn)差的商來表示皮爾遜相關(guān)系數(shù),公式如下式所示:
公式中,ρ表示相關(guān)系數(shù),cov表示協(xié)方差,E表示數(shù)學(xué)期望。該公式的作用就是表現(xiàn)出兩個(gè)變量之間的線性關(guān)系強(qiáng)弱,即相關(guān)系數(shù)越接近1,則說明兩個(gè)變量之間相關(guān)性越強(qiáng),越接近-1,則說明兩個(gè)變量之間負(fù)相關(guān)性越強(qiáng),越接近0,則說明兩個(gè)變量基本不具有線性相關(guān)性[1]。熱力圖將所有數(shù)字變量之間的相關(guān)性匯總展示,通過熱力圖可以直觀地看到所給數(shù)值之間的關(guān)系強(qiáng)弱,從而判斷哪些指標(biāo)更值得去研究,為訓(xùn)練模型選擇特征作為變量做好準(zhǔn)備。車輛不同特征的相關(guān)性熱力圖如圖1所示。
由圖1可以看出Engine,Power和Price的正相關(guān)性最大,結(jié)合實(shí)際情況看,發(fā)動(dòng)機(jī)排量和馬力往往也是人們?cè)u(píng)價(jià)一輛車性能好壞的重要指標(biāo),Mileage和Price的負(fù)相關(guān)性最大,相對(duì)來說大排量大馬力的車輛油耗水平也會(huì)很高,每升油能夠行駛的公里數(shù)也是一個(gè)油耗指標(biāo),所以一般情況下,每升油能夠行駛的公里數(shù)越少,油耗越高,車輛的價(jià)格也會(huì)越高。Kilometers_Driven和Seats對(duì)于車輛價(jià)格幾乎沒有太大影響,但考慮到數(shù)據(jù)中也包含有二手車信息,所以先保留這兩個(gè)特征。
圖1 車輛特征的相關(guān)性熱力圖
車輛價(jià)格預(yù)測(cè)屬于回歸類型的模型,文章采用線性回歸,支持向量回歸,xgboost,隨機(jī)森林共四類機(jī)器學(xué)習(xí)模型對(duì)車輛價(jià)格進(jìn)行預(yù)測(cè),線性回歸是回歸算法中最基礎(chǔ)的一種算法,通過對(duì)數(shù)據(jù)中的不同特征添加權(quán)重,各類特征與相對(duì)應(yīng)的權(quán)重相乘,在最后加上一個(gè)偏置值,通過損失函數(shù)來判斷預(yù)測(cè)值和真實(shí)值的擬合程度,數(shù)據(jù)集共有多個(gè)特征,所以用到的是多元線性回歸模型[2]。主要公式如下式所示:
其中βn是權(quán)重,b為偏置值。
支持向量回歸屬于支持向量機(jī)用于回歸算法的分支,支持向量機(jī)主要用于解決分類問題,而支持向量回歸用于解決分類問題。支持向量機(jī)需要做的一個(gè)目標(biāo)任務(wù)找到一條最佳擬合線,使靠超平面最近的樣本點(diǎn)之間的間隔最大,而支持向量回歸則是使靠超平面最遠(yuǎn)的樣本點(diǎn)之間的間隔最大,最佳擬合線是點(diǎn)數(shù)最多的超平面。其優(yōu)點(diǎn)是在樣本量不是海量數(shù)據(jù)的時(shí)候,預(yù)測(cè)準(zhǔn)確率高,泛化能力強(qiáng),帶松弛變量的SVR的目標(biāo)函數(shù)如下式所示:
Xgboost是一個(gè)集成類算法,基于提升算法做了改進(jìn)且和決策樹有一定聯(lián)系,針對(duì)傳統(tǒng)GBDT算法做了很多細(xì)節(jié)的提高,包括損失函數(shù)、正則化、切分點(diǎn)查找算法優(yōu)化、稀疏感知算法、并行化算法設(shè)計(jì),其基本原理相當(dāng)于在子樹的基礎(chǔ)上層層添加新的樹,成為新的模型。假設(shè)有t輪的預(yù)測(cè)模型,即t顆樹,那么第t+1輪的模型如下式所示:
隨機(jī)森林也是一個(gè)集成類算法,相當(dāng)于將多個(gè)決策樹集成到一起,而決策樹本身就是一個(gè)算法,它將需要分析的特征通過一個(gè)篩選流程,有放回的隨機(jī)從訓(xùn)練集中選取樣本,同時(shí)也隨機(jī)選取數(shù)據(jù)的部分特征,每棵決策樹使用的樣本和特征都不一樣,訓(xùn)練出來的結(jié)果也不一樣,隨機(jī)森林把不同的決策樹結(jié)合,其結(jié)果是由這個(gè)隨機(jī)森林里面的每一棵樹共同決定,隨機(jī)森林的訓(xùn)練效率高,更適合高維數(shù)據(jù)的預(yù)測(cè)[4]。
文章篩選的評(píng)價(jià)指標(biāo)主要有四種,平均絕對(duì)誤差(MAE)、均方根誤差(RMSE)平均百分比誤差(MAPE)和擬合優(yōu)度(R2),通過對(duì)比以上四個(gè)模型的這四種指標(biāo),選出預(yù)測(cè)結(jié)果較為準(zhǔn)確的模型[5]。4個(gè)模型在測(cè)試集上表現(xiàn)的性能指標(biāo)如表2所示。
表2 四個(gè)模型的四種指標(biāo)
從表2可以看出隨機(jī)森林的的四項(xiàng)指標(biāo)是最好的,所以選擇隨機(jī)森林作為最后的預(yù)測(cè)模型,n_estimators和max_depth是隨機(jī)森林算法中兩大最重要的參數(shù),n_estimators代表的含義是森林中樹木的數(shù)量,即基評(píng)估器的數(shù)量。這個(gè)參數(shù)對(duì)隨機(jī)森林模型的精確性影響是單調(diào)的,n_estimators越大,模型的預(yù)測(cè)結(jié)果也會(huì)變得越精確。但是相應(yīng)的,不論什么模型都有自己的決策邊界,在n_estimators達(dá)到一定的程度之后,該模型的精確性不會(huì)再上升很多或開始波動(dòng),并且,n_estimators越大,需要的計(jì)算量和內(nèi)存也越大,訓(xùn)練的時(shí)間也會(huì)越來越長。對(duì)于這個(gè)參數(shù),需要平衡兩頭去調(diào)整,max_depth表示樹的最大深度[3]。最初設(shè)置的n_estimators=200,max_depth=8。但為了確??梢哉业阶罴呀Y(jié)果,將RMSE值設(shè)置為循環(huán)目標(biāo)參數(shù),為了找出RMSE的最小值,通過網(wǎng)格搜索遍歷,n_estimators的取值范圍設(shè)置為從10到500,max_depth的取值范圍設(shè)置為1到16,圖2為遍歷的結(jié)果。
圖2 網(wǎng)格搜索調(diào)參圖
通過圖2可以知道,在第59次循環(huán)時(shí),RMSE達(dá)到最小值3.472,通過先前設(shè)置的循環(huán)參數(shù)簡(jiǎn)單計(jì)算,在n_estimators為100,max_depth為9,可以使得RMSE達(dá)到該值,重新設(shè)定隨機(jī)森林的兩個(gè)參數(shù)為遍歷后得到的這兩個(gè)值,將n_estimators設(shè)置為100,max_depth設(shè)置為9,再次訓(xùn)練模型,得到范圍內(nèi)最好的結(jié)果,將新的結(jié)果與先前最對(duì)比,如表3所示。
表3 優(yōu)化前后結(jié)果對(duì)比
通過表3可以看出,通過網(wǎng)格搜索調(diào)整參數(shù)確實(shí)讓四個(gè)指標(biāo)都有一定能夠程度的優(yōu)化,可以認(rèn)為n_estimators為100,max_depth為9是隨機(jī)森林模型最好的參數(shù),能夠讓模型的預(yù)測(cè)達(dá)到最佳。
下面通過該模型對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,通過折線圖可視化,對(duì)比真實(shí)值和預(yù)測(cè)值之間的誤差,如圖3所示。
圖3 預(yù)測(cè)值和真實(shí)值對(duì)比圖
通過折線圖可以更加直觀地看出,預(yù)測(cè)值和真實(shí)值的走勢(shì)大致是相同的,說明該預(yù)測(cè)模型有一定參考價(jià)值。
文章首先觀察數(shù)據(jù)類型,對(duì)數(shù)據(jù)進(jìn)行預(yù)處理分析變量相關(guān)性等操作,隨后用四種機(jī)器學(xué)習(xí)模型對(duì)處理好的數(shù)據(jù)進(jìn)行訓(xùn)練,從四個(gè)模型的四個(gè)指標(biāo)判斷模型優(yōu)劣,選擇效果最好的模型進(jìn)行調(diào)參,找到范圍內(nèi)最合適的參數(shù),改進(jìn)模型,最終使得均方根誤差僅為3.472,平均百分比誤差僅為0.21%,說明文章建立的模型具有較高的準(zhǔn)確性,文章的結(jié)果可以給有車輛需求的買家提供購買參照,為車輛交易市場(chǎng)提供一些進(jìn)價(jià)和出價(jià)的引導(dǎo),相關(guān)部門可以根據(jù)車輛某些重要特征的數(shù)值,對(duì)車輛的定價(jià)進(jìn)行更合理的評(píng)估,同時(shí)也能為二手車市場(chǎng)提供價(jià)格參考。