- 定义问题
- 收集数据
- 数据清洗
- 数据分析及可视化
- 训练线性回归模型
本次项目,主要讨论以下两个问题:
- 二手车的定价和哪些因素有关?
- 如何在二手车数据集上训练线性回归模型.
囿于篇幅,这里仅提供爬虫的基本思路:
- 设置Agent等头部信息,防止被反爬虫机制拦截
- 抓取二手车品牌名称及对应的链接
- 在元素检查模式下找到剩余所需信息的链接
- 拼接完整链接,对所有链接发送请求
- 发送抓取链接的请求并解析数据
- 导出并储存数据
- 对于驾驶里程,"百公里内"的数据直接替换成100公里,这是比较合理的选择
- 对于上牌时间和新车价格缺失的,直接从数据集中删除,因为即使用其他值填补,也很难保证是一个好的估计,反而会影响后续的模型训练准确性
- 如果New_price < Sec_price,则数据肯定是错误的.试问,二手车价格比新车还贵,谁还买二手车呢?
- Brand,Name 这样的品牌名称对后续的分析无用,可以删除
- Boarding_time,day_base已经被压缩为Board_days,可以删除
通过观察,我们看到上面的各个特征,New_price的量级是106,而Discharge的量级是100,这种数据训练出来的线性模型具有非常大的误差,且各系数大小差距非常大.需要做归一化处理,这里我们采用(0-1)处理.
- New_price,Discharge,Board_days这三个特征和Sec_price是一种正相关
- Km和Sec_price是一种负相关
由于数据的可用特征较少,数据分析部分就不再展开详细讨论,给出下面的相关性热图作为参考:
模型的方程为: Sec_price = W0*New_price + W1*Km + W2*Discharge + W3*Board_days
下面使用测试集验证模型的准确率
- 在训练集上的准确率为86.76%,三个标准差置信区间浮动在+/-9.35%,最差准确率为77.41%
- 在测试集上的准确率为82.61%,三个标准差置信区间浮动在+/-24.55%,最差准确率为58.06%
可见,我们的模型有点偏向过拟合,对于过拟合,原本需要减少特征(参数)个数,降低模型复杂度.但是由于我们的数据本来只有4个特征可用,因此不宜再缩减特征.可以考虑使用局部加权线性回归,针对各特征赋予恰当的权重,平衡模型在训练集和测试集上的表现.具体实现不在此处展开.