1 前言
二手车保值率估计是最近比较火的一个方向,也是大数据应用比较成功的一个方向。
二手车保值率估计,顾名思义,就是结合二手车的具体使用情况,比如上牌时间、里程数,外观内饰的磨损情况以及车辆的具体参数配置,如排量,级别等,对二手车的价值进行评估。在大数据之前,个人二手车交易、银行抵押贷款等都有自己的二手车估值算法,如年限比率法、综合分析法等。这些算法一方面考察的粒度较大,另一方面人的经验在其中作用相对较大,而每个人心中有杆秤,因此这些算法估值的误差相对来说比较大。大数据却没有这种问题,如果拥有大量的交易数据,那么通过匹配聚类的方式,基本上就能把某款车的价格定下来,首先不管这辆车的价格会是多少,起码知道与我相同的车款已经成交了上万辆,它们的交易价格摆在那呢,随大流就行。
下面是有关二手车估值的一些试验性结果。
2 数据来源
从几个比较大的二手车网站抓取了近10w条挂牌数据,字段有:车款名、车型名、品牌名、城市、车主报价、新车报价、上牌时间、里程数、车主姓名、车主职业、过户次数、颜色、年检到期、交强险到期、商业险到期、是否降价、降价金额、服务费、厂商、级别、发动机、变数箱、车身结构、长宽高、进气形式、燃油类型、燃油标号、排放标准、驱动形式、全景天窗、真皮座椅、车载雷达、无钥匙启动、座椅加热、倒车影像、GPS、胎压监测、检测报告等48个字段。
3 数据预处理
3.1 缺失值检测
field_name | missing_cnt | missing_ratio |
---|---|---|
降价金额 | 2980 | 0.3% |
燃油类型 | 174 | 0.2% |
排量 | 198 | 0.2% |
燃油标号 | 196 | 0.2% |
进气形式 | 191 | 0.2% |
驱动方式 | 79636 | 91% |
商业险到期 | 3707 | 3.7% |
从上表可以看到有的字段缺失值比较少,有的缺失值比较多,先看一下缺失值缺失的原因。
- 商业险到期,查了一下,商业险是一个非强制性购买的保险,不像交强险必须强制购买,应该是有的车主没有购买商业险,考虑按照"已过期"对待;
- 驱动方式,驱动方式有全时四驱、分时四驱、前轮驱动、后轮驱动、适时四驱、待查以及缺失,考虑将缺失值按照“待查”对待。
由于数据量较大,在训练时可以对有缺失值的记录直接扔掉,在预测时,如果预测对象包含缺失值,则可以补充缺失值。 - 排量,查了一下,所有没有排量的车型均属于电动车,本模型暂不考虑电动车的估值。
3.2 异常值检测
异常值检测的方法有很多种:基于局部异常因子的算法 LOF,基于矩阵分解的异常点检查,基于距离的检测,基于聚类的检测,基于箱线图的检测。对于回归问题,又可以通过模型的残差值的大小检测异常值,一般残差值大的样本对应的特征值是异常值。本文即是通过残差值的大小检测异常值。
检测出的异常值,一般有以下几种处理方法:直接剔除、探究异常值出现的原因并结合业务确定是否保留、对异常值进行规约。
- 数据归一
回归问题的数据,应该不需要进行量纲上的归一,对比了同一批数据,归一前和归一后的结果一样。就像线性回归那样,量纲上的不同可以通过变量前的系数进行反应。比如某个变量的量纲是100,那么把它归一到0-1,和不归一,其对应的系数就会差100倍。
4 二手车保值率估值模型
- 保值率。 由于没有实际的交易数据,故而采用 车主报价/新车报价 的比值作为保值率的值
- 采用GBRT模型对保值率进行回归
- 目标函数的选择
一般来说,目标函数选用LAD(Least absolute deviation)或者LS(Least squares). 我这里选择的是LAD, 便于筛选重要特征。 - 服务费字段的使用:服务费与车主报价应该是有一定的关系的。因此,采用两阶段模型方法进行建模。第一阶段采用的特征中不包含服务费,在第二阶段,由于已经有了车主报价的一个估计,将该估计值对应的服务费加入到特征中,在进行建模。
5 结果分析
5.1 方案1 过滤缺失值,目标函数LAD
模型误差:训练集合测试集按照7:3划分,训练集误差为0.0352,测试集误差为0.0388
特征重要性
上牌时间 0.112735651
新车报价 0.108792134
里程数 0.068376329
外观内饰检测 0.034283287
年检到期 0.028611269
排量 0.028043956
交强险到期 0.021585812
车款年份_2013款 0.009003335
brand_name_福特 0.008518271
brand_name_丰田 0.008317663
车款年份_2015款 0.008296052
5.1.1 误差和异常值分析
下图是截取的保值率误差>20%的车辆信息,
从上表中可以看到,从三个最重要的特征(里程数、新车报价、上牌时间)上来看,造成保值率估计误差大的一个主要因素是,车主对自己车源的报价过于不合理,比如车辆1,9,12,13,23,31,明显可以看出高估了很多,当然也存在部分车主低估自己车源的情况,如车辆4,8。结合保值率估值高误差表中的数据以及对实际情况的理解,考虑将这些记录按照异常值对待。
5.2 方案2 过滤缺失值,过滤异常值,目标函数LAD
模型误差:训练集合测试集按照7:3划分,训练集误差为0.0342,测试集误差为0.0384
特征重要性
新车报价 0.124242393
上牌时间 0.106741841
里程数 0.066697211
外观内饰检测 0.033216939
排量 0.029956022
年检到期 0.025192599
交强险到期 0.018959537
车款年份_2014款 0.011135565
brand_name_福特 0.01104375
brand_name_现代 0.009563938
可以依照此方法,多次对预测误差进行分析,筛选出其中的异常记录。
5.3 方案3 过滤缺失值,过滤异常值,加入服务费,目标函数LAD
模型误差:训练集合测试集按照7:3划分,训练集误差为0.0334,测试集误差为0.0384
6 小样本问题
样本数据是一个不断积累的过程,在数据积累到一定的量之前,总会出现小样本问题。比如豪车(如玛莎拉蒂、法拉利),年份旧(如2005年车款)、年份新(如2017年车款)的车源少,车辆里程数过高或过低。对于这种情况,一般可以根据参数的重要性,将部分参数的取值划分区间进而合并,比如对于品牌属性,只保留车源信息最丰富的top20的品牌,其余的品牌统一归为其他品牌。
结合所使用的数据,仅对上牌时间、里程数、新车报价、车主报价、过户次数进行小样本分析,而豪华品牌、城市、年份等根据分布进行区间合并策略。上牌时间采用上牌的具体时间点与抓取数据的时间点之间的月份数表示。这里首先采用箱线图的方法查看数据的基本分布情况,箱线图的原理介绍见http://blog.csdn.net/shuaishuai3409/article/details/51428106
- 里程数
里程数比较搞怪,有的车的里程数都大于20w公里了,有的还不到100公里。对数据进行统计得知,里程数>16w公里的车辆数低于0.5%,不高于100公里的车辆数低于0.1%。这部分数据暂时不使用,个人理解是,二手车估值模型更多的是从统计的角度计算各个因素的重要性,如果可供参考的数据较少,缺少统计学意义,也影响模型的整体精度。加入这些数据对模型的的影响怎么样,下文再通过数据说明。 - 新车报价和车主报价
车主报价与新车报价具有强相关性,只分析新车报价。对数据进行统计分析得知,有差不多94%的的车辆的新车报价低于37w.对与高于37w的数据暂时不使用。加入这些数据对模型的的影响怎么样,下文再通过数据说明。 - 过户次数
对过户次数数据进行统计得知,99%的过户次数<=3,只有不到1%的过户次数有4,5,6,8,9,14次。依个人理解,选择将这些数据删除,毕竟过户次数这么多,这车肯定有猫腻。这部分数据也可以认为是异常值。
下面是对小样本数据的预测结果,可以看出,对小样本的估值误差远高于总体平均误差。
1.里程数
里程数>16w公里的车源对应的平均保值率误差为0.088,
里程数<=0.1w公里的车源对应的平均保值率误差为0.057,
2.新车报价
新车报价>37w的车源对应的平均保值率误差为0.073,
- 其他待分析项
因为时间关系,暂只分析到这一步。其他待分析项有:
1.根据车主职业、里程数、上牌时间挖掘那些车源进行调表了
2.根据特征重要性,将城市、品牌进行归类,减少模型训练参数。根据我试验的结果,品牌重要性远高于城市。
3,考察服务费对不同网站车主报价的影响
4,