赞
踩
随着我国的机动车数量不断增长,人均保有量也随之增加,机动车以“二手车”形式在流通环节,包括二手车收车、二手车拍卖、二手车零售、二手车置换等环节的流通需求越来越大。二手车作为一种特殊的“电商商品”,因为其“一车一况”的特性比一般电商商品的交易要复杂得多,究其原因是二手车价格难于准确估计和设定,不但受到车本身基础配置,如品牌、车系、动力等的影响,还受到车况如行驶里程、车身受损和维修情况等的影响,甚至新车价格的变化也会对二手 车价格带来作用。目前国家并没有出台一个评判二手车资产价值的标准。一些二手车交易平台和二手车第三方估价平台都从自身的角度建立了一系列估价方法用于评估二手车资产的价值。
在一个典型的二手车零售场景,二手车一般通过互联网等线上渠 道获取用户线索,线下实体门店对外展销和售卖,俗称 O2O 门店模式。门店通过“买手”从个人或其他渠道收购二手车,然后由门店定价师定价销售,二手车商品和其他商品一样,如果定价太高滞销也会打 折促销,甚至直接以较低的价格打包批发,直至商品最终卖出。
基于以上背景,请你们团队根据附件给出的数据,通过数据分析与建模的方法帮助二手车交易平台解决下面的问题:
初赛问题
问题 1:基于给定的二手车交易样本数据(附件 1:估价训练数据),选用合适的估价方法,构建模型,预测二手车的零售交易价格,数据中会对 id 类,主要特征类等信息进行脱敏。主要数据包括车辆基础信息、交易时间信息、价格信息等,包含 36 列变量信息,其中15 列为匿名变量。字段如下:
请采用附件 1 中的“估价训练数据”(带标签)训练模型和测试模型,自行设置测试集,使用训练完成后的模型对附件 2 中的“估价验证数据”(不带标签)进行预测,并将预测结果保存在附件 3“估价模型结果”文件中,注意不要修改格式,单独上传到竞赛平台。
其中附件 1“估价训练数据”和附件 2“估价验证数据”只相差最后1 列数据(二手车交易价格(预测目标)),附件 3“估价模型结果”文件字段如下:
问题 2:在门店模式中,车辆在被“买手”收车以后,会进入门店进行售卖,车辆能否成功交易,除了取决于销售的谈判技巧,更重要的是车辆本身是否受消费者青睐,价格是否公道。假设你们是门店的定价师,请你们结合附件 4“门店交易训练数据”对车辆的成交周期(从车辆上架到成交的时间长度,单位:天)进行分析,挖掘影响车辆成交周期的关键因素。假如需要加快门店在库车辆的销售速度,你们可以结合这些关键因素采取哪些行之有效的手段,并进一步说明这些手段的适用条件和预期效果。
附件 4“门店交易训练数据”包括 6 个字段,如下表所示,其中所有 carid 等相关信息包含在附件 1“估价训练数据”中。各字段间采用“\t”分隔符分割,不包含表头。
问题 3:依据给出的样本数据集,你们觉得还有哪些问题值得研究,并给出你们的思路?将问题 1、2、3 的解决过程写成一篇论文,明确你们的思路、模型、方法和结果。
我们使用数据库对数据进行处理及分析:
首先将原数据变为csv或是excel数据然后倒入数据库中,如下图所示:
导入成功之后,接下来进行数据处理,对于空值及特殊字段
我们可以看到,所有字段均非空的数据寥寥无几,占比很少(原数据总数为30000而均非空数目只有271条),因此不能直接剔除含空数据的车辆数据,那如何处理这个二手车部分字段空值数据呢?
此处数据处理应根据实际情况给出二手车交易过程中题中所给影响因素占比权重,然后再根据不同权重下的变量将不同空值下的数据进行分类存储,为后面做数据分析作铺垫。
例如:里程、过户次数、载客人数、上牌日期、年款等等这些都是影响二手车交易价的重要指标,如何合理的分配这些影响因素的占比是你鉴于实际背景查阅相关资料所要深入研究的。
合理分配完权重之后,按照空值缺失字段影响占比超过30%的变量进行分类(空与非空),根据该题目一中要求,这显然是一个基于回归的机器学习问题,因此为了能够达到较好的预测效果及题中所要求的精确率,必须将特殊字段进行数值化处理(都是什么字段怎么处理呢?嘿嘿我不告诉你,想要就看最下方,此处用到了substring函数分割截取以及分类变量转化增广矩阵)。
数据处理之后,我们也对数据全局有个大概的掌握,现在就是细化分析,根据你设计的权重大的变量进行单因素因子分析,怎么分析,如下图所示:
要想单因子首先看是否存在同一品牌id同一车系id下存在不同车型id,题中给的数据还是比较良心的啊,没有这样的数据,这个务必说明验证一下,接下来继续数据分析
大的方向找到了之后,接下来扣更细的点,我这里之前未将空与非空拆分,你们一定要拆分呦,进行必要的数据计算分析的过程之后,就是最重要的一步对已有训练数据进行构建回归模型训练了,至于采用什么回归模型(我还是不告诉你,哈哈哈哈哈),有需要程序及数学模型的见下方。
友情提示一下,一定要将平均相对误差低于5%,别怪我没有提醒哦。
紧接上文回归模型我给个线性回归的和SVM回归的,大家可以比较看看
优缺点就不说了,像废话一样,直接上程序。
import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LinearRegression from sklearn.linear_model import SGDRegressor from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error data = pd.read_csv(open('C:/Users/Tracy/Desktop/300/2021/附件/附件1.csv')) data.fillna(0) data1 = np.array(data) X = data1[:, 1:-2] y = data.iloc[:, 37] #print("Giving dataset has {} data points with {} variables each.".format(*data.shape)) #print(y) minimum_price = np.min(y) maximum_price = np.max(y) mean_price = np.mean(y) median_price = np.median(y) std_price = np.std(y) # 分析回归目标值的差异。 print("The max target price is", np.max(y)) print("The min target price is", minimum_price) print("The average price value is", mean_price) #print("The median price value is", median_price) #print("The std_price price value is", std_price) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3) print(X_train.shape) print(X_test.shape) print(y_train.shape) print(y_test.shape) # 分别初始化对特征和目标值的标准化器。 ss_X = StandardScaler() ss_y = StandardScaler() # 分别对训练和测试数据的特征以及目标值进行标准化处理。 X_train = ss_X.fit_transform(X_train) X_test = ss_X.transform(X_test) y_train = ss_y.fit_transform(y_train) y_test = ss_y.transform(y_test) st = ss_y.transform(y_test)
接下来的使用默认配置初始化线性回归器LinearRegression,使用训练数据进行参数估计,对测试数据进行回归预测,使用LinearRegression模型自带的评估模块,并输出评估结果;使用r2_score模块,并输出评估结果…
基于二手车估价线性回归的程序想要全部见最下方
import numpy as np import pandas as pd from sklearn import svm,datasets from sklearn.multiclass import OneVsRestClassifier from sklearn.svm import SVC from sklearn.model_selection import train_test_split clf = OneVsRestClassifier(svm.SVC(kernel='linear')) df = pd.read_table('C:/Users/Tracy/Desktop/300/2021年MathorCup大数据竞赛赛道A/附件/附件1.txt', 'r', delimiter='\\t', header = None) x = df.iloc[:5000,:36] x1 = np.array(df.iloc[:5000,:36]).astype(str) tdf = pd.read_table('C:/Users/Tracy/Desktop/300/2021年MathorCup大数据竞赛赛道A/附件/附件2.txt', 'r', delimiter='\\t', header = None) y = tdf.iloc[:] y1 = np.array(tdf.iloc[:5000,:36]).astype(str) x_train, x1_test, y_train, y1_test = train_test_split(x, y, test_size=3) clf.fit(x_train, y_train) y_pred = clf.predict(x1_test) rf = pd.DataFrame(list(zip(y_pred, y1_test)), columns=['predicted', 'actual']) rf['correct'] = rf.apply(lambda r:1 if r['predicted'] == r['actual'] else 0, axis=1) print(rf)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。