-
問題陳述
隨著代步工具的普及,“買賣車”需求激增。但對于部分預(yù)算有限的個(gè)體或家庭而言,購置一輛二手車更為明智。二手車的巨大供給需求催生了近年來日益壯大的二手車市場,但二手車的售賣面臨著價(jià)格漂浮的問題。
因此,我們的目標(biāo)是根據(jù)賣家或買家提供的參數(shù)信息計(jì)算價(jià)格的合理區(qū)間,幫助用戶判斷二手車售賣價(jià)格的高低。
-
方法
(一)動(dòng)機(jī)
在前面我們了解并學(xué)習(xí)了python部分人工智能庫、機(jī)器學(xué)習(xí)等方面的內(nèi)容,我們決定結(jié)合實(shí)際的問題場景,在人工智能庫的幫助下選取相關(guān)的簡單算法和大數(shù)據(jù)計(jì)算工具,通過案例的方式,去進(jìn)一步實(shí)踐機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的大致流程,在此基礎(chǔ)上建立模型并解決實(shí)際問題。
(二)實(shí)現(xiàn)
我們所實(shí)踐的案例是二手車價(jià)格評估,選用的人工智能庫為Scikits-Learn。我們選取了二手車平臺(tái)上不同參數(shù)下的售賣價(jià)格數(shù)據(jù)集,目的是為了根據(jù)現(xiàn)有數(shù)據(jù),將之經(jīng)過數(shù)據(jù)預(yù)處理、數(shù)據(jù)清洗,選擇必含數(shù)據(jù)項(xiàng),篩除掉無效的或者缺失的數(shù)據(jù);通過數(shù)據(jù)脫敏,保護(hù)用戶的重要個(gè)人隱私,將之以隨機(jī)值替代或直接覆蓋;通過可視化,直觀、形象地表達(dá)出數(shù)據(jù)之間內(nèi)在的聯(lián)系;在人工智能庫Scikits-Learn的幫助下,經(jīng)過機(jī)器學(xué)習(xí)和模型擬合創(chuàng)建模型,設(shè)計(jì)程序,幫助用戶在輸入相關(guān)車輛的參數(shù)信息后,輸出理想價(jià)格區(qū)間,并依照此區(qū)間對該價(jià)格高低進(jìn)行判斷。
-
- 數(shù)據(jù)探索
1.1. 數(shù)據(jù)整體情況介紹
數(shù)據(jù)來源于外國某網(wǎng)站關(guān)于美國二手車交易記錄的數(shù)據(jù)集,總數(shù)據(jù)量約為40萬條,包括26列變量信息,數(shù)據(jù)集中的各字段如表1所示。
表1 二手車交易記錄數(shù)據(jù)集字段介紹
Field |
Description |
Field |
Description |
id |
用戶名 |
transmission |
自動(dòng)擋/手動(dòng)擋 |
url |
網(wǎng)址 |
VIN |
車輛識(shí)別號碼 |
region |
地區(qū) |
drive |
驅(qū)動(dòng) |
region_url |
地區(qū)網(wǎng)址 |
size |
車輛大小 |
price |
售價(jià) |
type |
車輛類型 |
year |
出廠年份 |
paint_color |
漆色 |
manufacturer |
制造商 |
image_url |
虛擬網(wǎng)址 |
model |
型號 |
description |
二手車描述 |
condition |
車輛狀況 |
county |
縣 |
cylinders |
汽缸數(shù)目 |
state |
州 |
fuel |
燃料種類 |
lat |
緯度 |
odometer |
行駛里程數(shù) |
long |
經(jīng)度 |
title_status |
車輛改造經(jīng)歷 |
posting_date |
掛售時(shí)間 |
1.2. 數(shù)據(jù)概況
首先導(dǎo)入數(shù)據(jù)分析所用工具包,讀取數(shù)據(jù)集,查看數(shù)據(jù)量大小。

輸出結(jié)果:

查看數(shù)據(jù)集前五行:

進(jìn)一步查看數(shù)據(jù)概況:

得到數(shù)據(jù)概況如表2所示。
表2 二手車交易記錄數(shù)據(jù)集數(shù)據(jù)概況
columns_number |
Feature |
Unique_values |
Percentage of missing values |
Percentage of values in the biggest category |
type |
21 |
county |
0 |
100 |
100 |
float64 |
16 |
size |
4 |
72.15472155 |
72.15472155 |
object |
9 |
cylinders |
8 |
40.15940159 |
40.15940159 |
object |
8 |
condition |
6 |
38.28938289 |
38.28938289 |
object |
14 |
VIN |
34773 |
36.03736037 |
36.03736037 |
object |
15 |
drive |
3 |
30.47430474 |
30.47430474 |
object |
18 |
paint_color |
12 |
29.77629776 |
29.77629776 |
object |
17 |
type |
13 |
19.61119611 |
22.7402274 |
object |
6 |
manufacturer |
41 |
4.4200442 |
14.91914919 |
object |
12 |
title_status |
6 |
2.27902279 |
95.03495035 |
object |
11 |
odometer |
38309 |
1.52101521 |
1.52101521 |
float64 |
7 |
model |
12613 |
1.28501285 |
1.4600146 |
object |
10 |
fuel |
5 |
0.60300603 |
82.91382914 |
object |
23 |
lat |
12791 |
0.53900539 |
2.03202032 |
float64 |
24 |
long |
12814 |
0.53900539 |
2.03202032 |
float64 |
13 |
transmission |
3 |
0.51400514 |
77.75577756 |
object |
5 |
year |
104 |
0.42800428 |
8.656086561 |
float64 |
20 |
description |
86284 |
0.03900039 |
0.08300083 |
object |
19 |
image_url |
64480 |
0.03800038 |
1.53501535 |
object |
25 |
posting_date |
94276 |
0.03800038 |
0.03800038 |
object |
1 |
url |
99999 |
0 |
0.00100001 |
object |
4 |
price |
6610 |
0 |
8.328083281 |
int64 |
22 |
state |
18 |
0 |
50.61450615 |
object |
3 |
region_url |
84 |
0 |
2.98302983 |
object |
2 |
region |
84 |
0 |
2.98302983 |
object |
根據(jù)整體的統(tǒng)計(jì)信息得知,county為無效字段(信息量為空);size、cylinders、condition、VIN、drive、paint_color、type字段缺失量較大,在后續(xù)分析過程中要考慮是否將其納入影響范圍;大部分?jǐn)?shù)據(jù)類型為object,應(yīng)通過賦值將其轉(zhuǎn)化成方便建立模型的int64或float64類型。
1.3. 探索性數(shù)據(jù)分析
1.3.1 缺失值可視化
在前面的數(shù)據(jù)信息統(tǒng)計(jì)表中發(fā)現(xiàn)有幾個(gè)字段存在缺失值,接下來分析缺失值情況。

圖1 二手車交易記錄數(shù)據(jù)集缺失值矩陣圖

將缺失值可視化后可以發(fā)現(xiàn),size、condition、cylinders、drive等字段缺失值比較多,后續(xù)需要對這些字段缺失值進(jìn)行處理。
1.3.2 查看變量分布
首先,查看二手車售賣價(jià)格的大致分布。

圖2 二手車交易價(jià)格分布圖

利用scipy模塊下的johnsonsu、norm、lognorm將價(jià)格的總體分布畫出來后,發(fā)現(xiàn)Johnson SU擬合效果較好,價(jià)格數(shù)據(jù)分布存在右偏,說明存在部分過大的極端值。需要對數(shù)據(jù)中的過大的價(jià)格值進(jìn)行處理。
利用箱型圖查看具體的分布劃分,從箱型圖中可以看出,價(jià)格大于60000則為離群值。
圖3 二手車交易價(jià)格箱型圖

將價(jià)格大于60000的數(shù)據(jù)剔除后再重新畫圖,并對價(jià)格進(jìn)行l(wèi)og取對數(shù)處理。由圖可知,取對數(shù)后價(jià)格的分布相對集中,說明后續(xù)在特征工程中可對價(jià)格的數(shù)據(jù)進(jìn)行l(wèi)og處理。

圖4 二手車交易價(jià)格分布對比圖

(左圖為去掉離群值后,右圖為左圖取對數(shù)后)
2.數(shù)據(jù)預(yù)處理
劃分測試集和訓(xùn)練集
將原始數(shù)據(jù)按照3 : 1 的比例,分成訓(xùn)練集和測試集,分別用來訓(xùn)練和測試模型。

處理缺失值
由于數(shù)據(jù)集中部分行存在缺失值,會(huì)對后續(xù)預(yù)估分析造成影響,還有部分列字段對模型作用不(例如description字段,因?yàn)榫哂兄饔^性且篇幅較大,難以將其作為車輛價(jià)格預(yù)估的參考,lat、long對本次分析無意義,county、size缺失量過大),因此將部分字段直接刪除。

此外,有些缺失值可能會(huì)對預(yù)估模型造成影響,故設(shè)置一部分列為必填項(xiàng),將必填項(xiàng)為空的行刪除。

數(shù)據(jù)清洗
根據(jù)上面的分析,數(shù)據(jù)集中存在一些“臟數(shù)據(jù)”(臟數(shù)據(jù)是指不符合現(xiàn)實(shí)邏輯,且會(huì)對模型預(yù)測效果產(chǎn)生干擾的數(shù)據(jù),臟數(shù)據(jù)的存在使得數(shù)據(jù)集的質(zhì)量下降),因此要對數(shù)據(jù)集進(jìn)行數(shù)據(jù)清洗的工作。
本數(shù)據(jù)集的price字段表示的是二手車的交易價(jià)格,應(yīng)該是一個(gè)大于零的數(shù),如果出現(xiàn)了price小于零或其他異常值的數(shù)據(jù)記錄,則斷定此數(shù)據(jù)是臟數(shù)據(jù)。
完成后部分?jǐn)?shù)據(jù)如圖所示。

3. 查看特征相關(guān)性
相關(guān)性計(jì)算
由圖可以看出,特征字段之間相關(guān)性較低,這是由于大部分字段為object類型,故為了后續(xù)分析建立模型,為object類型特征量進(jìn)行賦值處理。
熱力圖展示
對部分object類型數(shù)據(jù)進(jìn)行賦值轉(zhuǎn)換類型處理后,為了更直觀地展示數(shù)據(jù)之間的相關(guān)性,繪制相關(guān)性熱力圖。
從相關(guān)性熱度圖表中,我們可以看到不同定距數(shù)據(jù)之間的相關(guān)性大小。從中可以挑選出與價(jià)格相關(guān)性較大的特征字段,剔除相關(guān)性為0的特征字段。此外后續(xù)的回歸預(yù)測中還需要解決共線性特征。

圖5 部分字段相關(guān)性熱力圖

由圖可以看出,price與year、cylinders、status的相關(guān)性較大。
查看定類數(shù)據(jù)相關(guān)性
3.3.1. 分析年份與價(jià)格的關(guān)系

圖6 不同汽車注冊年份的價(jià)格分布箱型圖

分析不同汽車注冊年份的價(jià)格分布箱型圖,上世紀(jì)80年代前由于數(shù)據(jù)分布較零散且數(shù)據(jù)量較小,不具有太大參考價(jià)值;而注冊年份越往后,價(jià)格的跨度越來越大,推測二手車的車型越來越多,且價(jià)格有上升的趨勢。
3.3.2. 分析不同定類變量與價(jià)格之間的關(guān)系

圖7 不同定類變量與價(jià)格之間的關(guān)系圖

查看不同類別字段下的價(jià)格分布,可以發(fā)現(xiàn)不同cylinder類型的車型,其價(jià)格跨度會(huì)有所不同;車輛狀況的好壞程度對價(jià)格分布也有較大影響,越好的售價(jià)越高;沒有改造過的車也比改造過的售價(jià)高一些。
回歸分析
從上面熱力圖中,得出價(jià)格price和另外幾個(gè)變量之間相關(guān)性很大。因此,接下來使用IMplot進(jìn)一步查看兩個(gè)因素之間的關(guān)系。Implot對所選數(shù)據(jù)集進(jìn)行了一元線性回歸,擬合出了一條最佳的直線。

圖7 一元線性回歸擬合圖

4. 模型建立
Lasso回歸
首先,導(dǎo)入機(jī)器學(xué)習(xí)所用的人工智能庫sklearn。


圖8 Lasso回歸折線圖

特征重要性分析

圖9 特征重要性交叉驗(yàn)證圖

運(yùn)行結(jié)果為:

5. 改進(jìn)和創(chuàng)新
觀測可視化
積極使用matplotlib庫、missingno庫、seaborn庫等可視化第三方庫輔助數(shù)據(jù)進(jìn)行特性分析及指標(biāo)衡量,利用直觀的可視圖像對擬合效果及模型狀況進(jìn)行評估與檢驗(yàn),相比直接的數(shù)據(jù)。
參數(shù)具象化
由于二手車數(shù)據(jù)的回歸模型建立需要較多數(shù)值指標(biāo),通過參數(shù)運(yùn)算獲得非數(shù)指標(biāo)的歸整數(shù)據(jù)化,便于lasso回歸模型建立。
數(shù)據(jù)標(biāo)準(zhǔn)化。
通過縮放手段避免部分特性的方差過大帶來的高支配影響或部分特征值過小或過大帶來的數(shù)據(jù)點(diǎn)集中在坐標(biāo)軸某特定偏遠(yuǎn)區(qū)域現(xiàn)象。利用數(shù)據(jù)標(biāo)準(zhǔn)化可為分析數(shù)據(jù)帶來帶來方便。
求解嚴(yán)謹(jǐn)化。
通過增加懲罰系數(shù)alpha,強(qiáng)制影響系數(shù)絕對值之和小于某個(gè)固定值,避免單變量的支配影響。
檢驗(yàn)合理化。
利用交叉檢驗(yàn)、殘差圖、MSE和R2等方式對系數(shù)重要度及擬合效果進(jìn)行檢驗(yàn)評估,保障預(yù)測效果。
6. 結(jié)果與分析
residual plot 殘差圖
畫圖表示實(shí)際值和預(yù)測值之間的差異。

圖10 residual plot 殘差圖

MSE和R2

運(yùn)行結(jié)果為:

7. 查看具體實(shí)際值和預(yù)測值
查看模型預(yù)測值與真實(shí)值的對比,并計(jì)算準(zhǔn)確率。

結(jié)果如下:

面向客戶(買家/賣家)的窗口:

8. 討論與結(jié)論
優(yōu)點(diǎn):
回歸檢驗(yàn)度高,通過多重檢驗(yàn)保障回歸準(zhǔn)確性。
缺點(diǎn):
擬合過程對于數(shù)值數(shù)據(jù)依賴性大,對于非數(shù)值數(shù)據(jù)的處理能力較差。
改進(jìn)方向:
通過數(shù)據(jù)類別分析,進(jìn)行非數(shù)值數(shù)據(jù)與數(shù)值數(shù)據(jù)的共同擬合。文章來源:http://www.zghlxwxcb.cn/news/detail-408151.html
源碼及項(xiàng)目文檔:https://github.com/YourHealer/Python-Used-car-price-PredictSys.git文章來源地址http://www.zghlxwxcb.cn/news/detail-408151.html
到了這里,關(guān)于Python【二手車價(jià)格預(yù)測案例】數(shù)據(jù)挖掘的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!