本文为 车300 合伙人兼技术总监章水鑫在 4 月 14 日 CODING 技术小馆·南京站的演讲内容整理。
今天给大家分享的是车300在数据处理技术上的一些实践,一个是我们车300的数据类型,另一个是车300数据处理的架构。
车300是在2014年成立的一个专门专注于二手车价格评估的公司,是独立第三方车况车价信息查询服务提供商。如果有一辆车,通过车300平台可以告诉你价格,或者如果你想买一辆二手车,车300会告诉你大概以什么样的价格可以买得到;车300还可以告诉你要买的这辆车的车况历史。你看到一辆车的时候,其实你不一定能够知道它的车型是什么样的:比如你知道是一辆凯美瑞,但是你不知道它是什么年代产的,不知道它是高配还是低配,我们提供一个车型识别判定和车辆保值率分析。通过这几个渠道,我们可以去规避在买车卖车中的一些风险。
车300在2014年3月份成立,2014年7月份就获得了五岳天使投资,我们的合作伙伴数一直在不断地突破,到现在已经有上千家。现在在我们平台上查询二手车价格次数已经超过30亿次。我们在2017年8月份的时候上线了一个伽马资产管理系统。大家知道,现在二手车市场已经非常活跃。在二手车领域,金融正在不断渗透,大家所熟知的瓜子、优信、大搜车等,他们通过各种金融工具将车辆卖给消费者,然后车辆资产转化成了金融资产,但是这个金融资产他们不可能一直拿在手上,他们会去做一些资产证券化的处理。通过我们的伽马系统,可以给他们提供资产的扫描功能,就是你的这一批车到底应该值多少钱,经过我们伽马系统的扫描,这些资产就会被转化成证券资产去进行出售。
车300在做二手车估值的时候需要处理的数据非常多,因为我们通过各种合作伙伴的资源,几乎能获取所有在市面上出现的二手车的车源。中国现在机动车保有量超过3亿多,一辆车完成一次流转可能可能会有好几次交易,一辆车又可能会有好几次流转,每次流转中的大多数交易数据都会被我们获取到,所以我们每次估值需要去处理的数据可能会超过3亿条车源价格数据。
我们每天有200万的日活,这些日活需要进行监控,从这些信息里会获取一些我们所想要知道的信息,比如说用户的类型等等。
在我们获取数据的过程中,需要去做一些数据的清洗。提交一辆车的时候,系统其实并不能够确切地知道这辆车在车型库中应该是一辆什么样的车。举个例子,比如说一辆凯美瑞,早先广东这边可能叫佳美。我们需要把这些数据识别出来,跟车型库里面的车型匹配,这就是一个自然语言处理部分,你说的话要映射成机器所能理解的内容。在这个清洗的过程中,每天的数量非常多,所以在左边有一个原始数据,这些是我们通过各种渠道获取到的原始数据,然后这些待清洗的数据被放到一个消息队列里去做处理准备。
在这个处理的过程中,我们现在有六台机器从消息队列里获取要准备清洗识别的车源信息。在清洗的过程中首先会做车型识别,同时还会做车源去重。去重也是很重要的。不知道大家有没有在网上浏览过二手车,现在有很多的车源平台,车商在卖车的时候会将车辆发到各个平台,也会有个人将车辆放到多个平台进行寄售,另外,同一辆车也会在不同的车商手上进行流转,今天在宁波的一辆车,明天可能就会到上海,或者到新疆。在这个过程中,我们会根据车源的一些属性通过相似性特征比较进行去重。
还有一个最重要的就是虚假数据的识别。有很多人会为了卖掉这个车,把价格标得相对比较低一点,或者从低配描述成高配。我们在处理过程中有很多方式,比如说自然语言处理,特征相似等。我们通过一些先验知识人工收集一批虚假车源信息,理解语言组织方式,提取共同特征等,然后建立多个模型,导入这个虚假车源数据,判断虚假数据的可能性。在经过这些处理以后,我们会在清洗节点不断调用它们,完成清洗,再放到不同车型的数据库里面去。
再来讲讲数据处理中的规模与挑战,我们车300二手车估价的模型,可能跟其他的模型不是特别一样。车300的数据模型是一个经纬网络模型,这个可能大家没有听说过,因为这是我们初期创设车300的时候自己想出来的模型。我们在行业内咨询的时候,问那些资深的车商(他们对车辆的价格是最清楚的),在跟他们交流的过程中我们发现一些规律,比如一辆车最终的价格是怎么定出来的?如果我想给一辆车估价,可以去看一样的车是以什么样的价格收回来的,这是最简单的。如果这个车没有人做过,就可以去看价格高一点,高配一点的车辆是什么价格收回来的,比这辆车低配的车价格是怎么收过来的,所以这是一个左右对比的过程。
或者又比如说一辆2015年的车,如果没有同样2015年的车型对比,那么可以看2014年或者2016年上牌的车,就可以得到一些推论。所以我们把这个模型简单命名为经纬网络模型,上下左右都看一看,然后得到一个价格。
我们一开始像右边一张图一样,是一张曲面网络图,后来维度越来越多,但是原理是一样的。中国3万多个车型,这些车型又分为不同的年份,不同的地区,不同的车子车况也不一样,有的车子会在原有车型基础上增加一些选装的配置,因此我们也不可能完全把中国所有的车源价格数据都拿在手上,所以这中间会有一些缺失,还会有一些异常的数据或者一些关系的错位。另外在交易的过程中的价格还会有场景之分,比如说大车商门店装修很豪华,车辆也有质量保证,价格就会贵一点;从普通二手车商家手上买的话可能会便宜一点。所以在这个过程中我们不能简单地看这一个节点上面数据量是怎么分布,而是要放到整个网络模型中去定价格才会比较合理。
刚才说到在处理的过程中有非常多的数据,提取数据的时候不可能把所有的数据都提出来,所以我们会定义一个数据的关联规则。二手车行业里的从业人员怎么来定价的,我们就根据这个规则去定义了一个数据的关联规则,比如估一辆2013年凯美瑞的车,我们就会去根据这个定义的关联规则,把与之相关的最关联的数据都捞出来,如果不够,那么再去捞次相关的数据,直到所有数据都捞尽为止。
看前面一张图,假如我们估的是顶尖的那个节点的价格,我们会把跟它相关紧密的数据捞起来,然后会放到数据的缓存服务器里备用。在这个分布式节点里拿过来,这时再去做一些价格的变换、推演,得到它的数据价格范围以及最终价格等等。
刚才谈到用户日志的数据,我们的日志数据也会非常多,因为每天的日活大概有200万左右,为了改善用户体验,我们需要去根据用户行为去找出用户的高频动作,去识别不同的用户类型,为他们提供更加高效使用体验,更加精准的服务。我们对这些数据有不同的处理逻辑,针对某个特定处理逻辑,为了减少数据量,我们采用了一种订阅模式,就是数据流过来的时候,我们根据订阅的规则,把数据进行分类,分布式存储,在这个过程中给这些数据打上一些标签,比如车龄、车型、车价、位置、行为路径、行为时间等等。行为路径就是从哪些渠道进入估值或者选车,在模块停留的时间,输入或筛选的行为。
我们的数据处理实践中,比较常用的就是用户类型分辨,然后做一些精准的推荐给我们的用户,比如对于车商用户,我们会根据他的车型偏好给他推荐适合他的比较好的车子。对于普通用户,我们会给他一些比较好的卖车渠道或者推荐一些性价比较高的车源等等。为了识别是不是车商,我们根据我们了解的车商用户在我们app上的行为建立了一个模型,来描述车商的行为逻辑特征。在这个过程中,我们就发现了一些比较有意思的特征,比如车商的位置特征,他们的城市跨度比较大,既有估异地车的价格,也会跑到异地去然后打开我们app来查各种数据信息。所以说车商其实是非常辛苦的,他想要收一辆车常常会跑到别的城市,南京的车商可能会跑到安徽、河南、山东,就是为了收一辆车。另一个就是在市内的集中度,主要在哪个位置使用我们的产品,还有周边单位的类型。我们能知道具体的一个地址,但并不知道是4S店还是二手车市场,还是二手车经销商等等,因此我们会根据周边单位类型做一个判定。我们根据品牌车型、品牌偏好、品牌等级,再跟周边单位类型做关联,关联以后会发现跟我们的预想是一样的,比如某个用户在宝马4S店用得比较多,而且他估价比较多的品牌就是别克、大众等等,一个是豪华车品牌,一个是中级车品牌。他的逻辑是什么呢?有很多人会到4S店买新车的时候,通常会做置换,这时4S店工作人员就会用我们的APP对客户的二手车进行估值。所以说从这个地方我们就能分析出来什么样品牌的用户会置换成宝马。在这些个过程中我们用到了很多东西,算法本身都是大家比较熟悉的,比如做一些聚类、K—近邻、SVM、关联规则等等,然后根据算法得到的结果跟我们所预想的行业经验是匹配的,这个模型就是OK的。所以在做数据分析的过程中,行业经验也是一个非常重要的方面。
我的分享本身在技术的高度难度上面可能并不是非常突出,重要的还是通过现有的技术把一些在行业中所呈现出来的难点给解决掉,我觉得这就是最大的一个成就了。以上就是我本次分享的内容,谢谢。
2018 年 4 月 29 日, CODING 技术小馆将在深圳南山区举办。以「快速开发,弹性部署」为主题,深入探索云计算负载均衡、服务器等热点问题,并探索云计算如何助力开发者,让开发更简单、沟通更高效、资源分配更合理。赶紧点击阅读原文报名!