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