一、商务数据分析的背景与目标
(一)分析背景
当前市场竞争日益激烈,二手车市场尤为如此。在这种环境下,传统二手车经销商面临着来自线上和线下多渠道销售模式的双重冲击。线上销售平台凭借其便捷性和广泛的覆盖面,吸引了大量消费者;同时,线下销售渠道通过实体店的直接体验和售后服务,依然占据重要市场份额。在这种多变的市场环境中,传统二手车经销商亟需通过数据分析和科技手段来提升自身的竞争力,以应对日益复杂的市场需求。
(二)分析目标
a.提升销售额。
b.优化库存管理。
c.提高客户满意度。
二、数据概述与预处理
(一)数据类型
结构化数据:包括车辆的编号、年份、里程数、税费、mpg(油耗)、排量、价格等。数据集共包含2538条记录,时间跨度涵盖近五年的二手车销售情况。
数据字段说明如下:
编号ID: 汽车编号。
年份: 汽车生产年份。
里程数: 已经行驶的里程数,单位:公里。
税费: 税费,单位:元。
mpg: 每加伦汽油能距的英里数。
排量: 汽车排量,单位:L。
价格: 二手车市场价格,单位:元
(二)数据预处理
数据清洗:
处理缺失值,检查并处理缺失数据,确保数据完整性。异常值处理,识别并处理数据中的异常值,以防影响分析结果。
数据转换:
类型转换,确保数据类型正确,例如年份、里程数、价格等字段为数值型。标准化处理,对部分变量进行标准化处理,确保数据在同一尺度下进行分析。
三、数据分析过程
(一)分析方法
描述性统计:描述性统计用于了解数据的基本特征和分布情况,通过基本统计量如均值、中位数、标准差等,以及直方图、箱线图等可视化工具,快速掌握数据整体状况和各变量的具体情况。
相关性分析:相关性分析用于分析各变量之间的关系,识别影响价格的主要因素。通过计算相关系数,量化两个变量之间的相关程度和方向。例如,分析可能显示行驶里程数与价格呈负相关,年份与价格呈正相关,从而识别出对二手车价格有显著影响的关键变量。
回归分析:回归分析用于构建预测模型,如线性回归和随机森林模型,通过这些模型预测二手车价格,并验证模型的有效性。线性回归可以提供对价格影响因素的线性解释,而随机森林则可以处理更复杂的非线性关系。通过比较模型的MAE、RMSE和R²等指标,确定最佳的价格预测模型。
(二)分析工具
使用Python的Pandas、NumPy、Matplotlib等库进行数据处理和可视化。使用scikit-learn构建和评估回归模型。
(三)分析步骤
数据探索和可视化:数据探索和可视化用于查看数据分布和基本统计特征,通过直方图、箱线图等图形直观展示数据特征。通过这些图表,可以识别数据的集中趋势、离散程度和异常值,为后续建模提供依据。
四、分析结果与业务诊断
(一)数据分析过程
首先读取导入数据分析的基本数据包和读取数据集前五行,因为存在两个数据集,所用都要读取和查看
基本数据集:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['KaiTi'] #中文
plt.rcParams['axes.unicode_minus'] = False #负号
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
data = pd.read_csv('data.csv', encoding='gbk')
data_to_predict = pd.read_csv('待预测二手车数据.csv', encoding='gbk')
这是数据集的基本情况,这五辆二手车的数据展示了不同年份、里程数、税费、油耗(mpg)、排量和售价的情况。车辆的制造年份从2017年到2019年不等,行驶里程数在8400到48141之间。。。。
待预测的数据集
可以看到,价格是空值,需要我们预测。
接下来查看数据类型和缺失值
print(data.info())
print(data_to_predict.info())
所有字段均无缺失值,数据类型主要为整数和浮点数。车辆的年份、里程数和排量等特征可能会对价格产生显著影响。数据量较大,有利于构建准确的价格预测模型,并为车辆定价和市场分析提供可靠依据。
plt.figure(figsize=(12, 6))
msno.matrix(data)
plt.title('数据中的缺失值', fontsize=30)
plt.tick_params(axis='both', which='major', labelsize=20)
plt.show()
从结果看来,该数据集不存在缺失值。
接下来进行描述性统计分析:
desc_stats = data.describe()
desc_stats
这2538辆二手车的数据展示了多项统计特征。车辆的制造年份从2003年到2020年,平均为2017年,表明数据集中大部分车辆较新。里程数从5公里到177644公里,平均为19690公里,显示车辆的使用情况差异较大。。。。
接下来对特征可视化分析:
首先查看年限分布情况:
plt.figure(figsize=(10, 6),dpi=200)
sns.histplot(data['年份'], kde=True, color='blue')
plt.title('年份分布')
plt.show()
这张图展示了二手车的制造年份分布。可以看出,车辆的制造年份主要集中在2017年至2019年,特别是2018年和2019年,这两个年份的车辆数量最多。。。。
接下来查看里程数分布的箱线图:
plt.figure(figsize=(10, 6),dpi=200)
sns.boxplot(x=data['里程数'], color='green')
plt.title('里程数分布')
plt.show()
这张图展示了二手车的里程数分布情况。图中可以看到大部分车辆的里程数集中在较低的范围内,少数车辆的里程数非常高,超过了10万公里。这些高里程数的车辆在图中显示为离群点。。。。。
接下来分析税费分布情况:
从图中可以看出,税费在大部分车辆中相对集中,主要有两个峰值,这可能是由于不同税率或政策造成的。税费的离散性较大,存在一些极端值。。。。
接下来查看汽车的油耗分布情况:
plt.figure(figsize=(10, 6),dpi=200)
sns.kdeplot(data['mpg'], shade=True, color='purple')
plt.title('mpg分布')
plt.show()
油耗数据集中在一个明显的峰值附近,表明大多数车辆的油耗在某一范围内。这一分布可能反映了市场上常见的车辆类型和排量。
接下来研究排量与价格的情况(散点图):
这张图展示了二手车排量与价格的关系。从图中可以看出,排量与价格之间存在一定的相关性,排量较大的车辆通常价格较高。
接下来查看价格分布情况:
plt.figure(figsize=(10, 6),dpi=200)
sns.histplot(data['价格'], kde=True, color='cyan')
plt.title('价格分布')
plt.show()
从图中可以看出,价格分布大致呈现正态分布的形态,中间峰值较高,左右两侧逐渐减少。价格主要集中在60,000到100,000元之间,。。。。
接下来绘制各特征与价格的散点图:
for i, column in enumerate(data.columns[1:-1], 1):
plt.subplot(2, 3, i)
sns.scatterplot(data=data, x=column, y='价格')
plt.title(f'价格 vs {column}')
plt.tight_layout()
plt.show()
图中可以看到,车辆年份与价格之间存在一定的正相关关系,较新的车辆价格较高。里程数与价格之间呈现负相关关系,,,,
接下来用热力图查看不同特征之间的相关性:
颜色越深,表示相关性越强。可以看到,里程数与年份之间存在较强的负相关关系,年份较新的车辆行驶里程数较少。
(二)机器学习模型预测和评价
接下来正式进入机器学习预测,这里我们使用了线性回归和随机森林两种模型来对二手车价格进行预测,随后选取了平均绝对误差和均方根误差以及拟合优度来对模型进行评价:
首先模型构建和预测,对训练集和测司机的划分标准是8:2。
# 线性回归模型
lr_model = LinearRegression()
lr_model.fit(X_train, y_train)
lr_y_pred = lr_model.predict(X_test)
# 随机森林模型
from sklearn.ensemble import RandomForestRegressor
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
rf_y_pred = rf_model.predict(X_test)
# 模型评价
lr_mae = mean_absolute_error(y_test, lr_y_pred)
lr_rmse = np.sqrt(mean_squared_error(y_test, lr_y_pred))
lr_r2 = r2_score(y_test, lr_y_pred)
rf_mae = mean_absolute_error(y_test, rf_y_pred)
rf_rmse = np.sqrt(mean_squared_error(y_test, rf_y_pred))
rf_r2 = r2_score(y_test, rf_y_pred)
模型 | MAE | RMSE | 拟合优度 |
线性回归 | 7146.109 | 9255.833 | 0.847 |
随机森林 | 5618.475 | 8432.415 | 0.873 |
# 绘制图形
plt.figure(figsize=(14, 6),dpi=200)
# 绘制MAE柱状图
plt.bar(index, mae_scores, bar_width, label='MAE', color='blue')
# 绘制RMSE柱状图
plt.bar(index + bar_width, rmse_scores, bar_width, label='RMSE', color='green')
# 添加标签和标题
plt.xlabel('模型', fontsize=14)
plt.ylabel('误差值', fontsize=14)
plt.title('线性回归和随机森林的MAE和RMSE比较', fontsize=16)
plt.xticks(index + bar_width / 2, models, fontsize=12)
plt.yticks(fontsize=12)
plt.legend(fontsize=12)
# 显示图形
plt.show()
接下来可视化实际值与预测值:
plt.figure(figsize=(10, 6),dpi=200)
plt.scatter(y_test, lr_y_pred, color='blue', alpha=0.5, label='线性回归')
plt.scatter(y_test, rf_y_pred, color='green', alpha=0.5, label='随机森林')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)
plt.xlabel('实际价格')
plt.ylabel('预测价格')
plt.title('实际价格与预测价格')
plt.legend()
plt.show()
从上面的图和表可以看出,随机森林模型在预测二手车价格时表现优于线性回归模型。随机森林模型的MAE(5618.475)和RMSE(8432.415)均低于线性回归模型的MAE(7146.109)和RMSE(9255.833)
接下来可视化残差
根据残差分布情况,蓝色的柱状图和曲线表示线性回归模型的残差分布,绿色的柱状图和曲线表示随机森林模型的残差分布。可以看出,两个模型的残差大致呈现正态分布,但随机森林模型的残差分布更加集中,峰值更高,
接下来展示一下对应待预测数据集的预测结果:
整体来看,随机森林模型和线性回归模型在预测二手车价格时有一定的差异。随机森林模型由于其能够捕捉非线性特征的能力,在一些情况下表现更好。
五、结论
本次实验通过对二手车数据进行详细分析,构建并评估了线性回归和随机森林模型以预测二手车价格。通过描述性统计分析,我们了解了数据的基本特征和分布情况;相关性分析帮助我们识别了影响价格的主要因素;利用线性回归和随机森林算法进行回归分析,构建了价格预测模型。模型评价结果表明,随机森林模型在MAE、RMSE和拟合优度(R²)方面均优于线性回归模型,说明其在处理复杂非线性关系时表现更佳。因此,随机森林模型在预测二手车价格方面更具可靠性。