== 注:本文参考2021年华数杯数学建模C题优秀论文==
文章目录
- 问题一
- 【1】数据预处理
- (一) 满意度得分的异常数据清洗工作
- (二) 目标客户个人特征的异常数据清洗工作
- (三) 缺失值的处理
- 【2】目标客户对不同品牌汽车的满意度分析
- 问题二
- 1、SVM 模型
- 2、lasso 回归模型
- 3、LR 逻辑回归模型
- (二)随机森林提取特征
- (三)LightGBM 提取特征
- 问题三
- (一)模型与三种品牌的匹配程度与检验
- (二)判断指定客户购买电动汽车的可能性
- 问题四
- 问题五
题目:
汽车产业是国民经济的重要支柱产业,而新能源汽车产业是战略性新兴产业。大力 发展以电动汽车为代表的新能源汽车是解决能源环境问题的有效途径,市场前景广阔。 但是,电动汽车毕竟是一个新兴的事物,与传统汽车相比,消费者在一些领域,如电池 问题,还是存在着一些疑虑,其市场销售需要科学决策。 某汽车公司最新推出了三款品牌电动汽车,包括合资品牌(用 1 表示)、自主品牌 (用 2 表示)和新势力品牌(用 3 表示)。为研究消费者对电动汽车的购买意愿,制定 相应的销售策略,销售部门邀请了 1964 位目标客户对三款品牌电动汽车进行体验。具 体体验数据有电池技术性能(电池耐用和充电方便)满意度得分(满分 100 分,下同) a1、舒适性(环保与空间座椅)整体表现满意度得分 a2、经济性(耗能与保值率)整体 满意度得分 a3、安全性表现(刹车和行车视野)整体满意度得分 a4、动力性表现(爬 坡和加速)整体满意度得分 a5、驾驶操控性表现(转弯和高速的稳定性)整体满意度得 分 a6、外观内饰整体表现满意度得分 a7、配置与质量品质整体满意度得分 a8 等。另外 还有目标客户体验者个人特征的信息,详情见附录 1 和 2。
问题一
问题:请做数据清洗工作,指出异常值和缺失数据以及处理方法。对数据做描述性统计分析,包括目标客户对于不同品牌汽车满意度的比较分析。
【1】数据预处理
缺失值、异常值的处理是数据处理不可缺少的一环。缺失值是源于数据采集的空 缺、传输间丢失等不可控情况所导致或人为故意丢失等多种情况,如何处理空值是数 据处理中恒久不变的问题。而其中异常值是由于数据传输错误所导致的,通常对其采 取修改或是剔除的处理方式,但具体所采取的方式也需要依据客观上分析数据所决定。 以下主要分成三点叙述本文所采用的处理方法及处理结果。
(一) 满意度得分的异常数据清洗工作
根据题意,该公司的销售部门对目标客户进行体验调查时,规定满意度得分满分为 100 分,故在数据清洗时剔除附录 1 中 a1~a8 数值大于 100 的数据。以 a1 为例, 该列展示了目标客户对电池技术性能的满意度得分情况。利用散点图经筛查发现,编 号为 0001 的目标客户对电池技术性能的满意度高达 753.04 分(> 100 分),故用正常 值数据的平均值(77.93 分)进行替换。数据清洗前后的结果如图 2、图 3 所示。同理 可分别对编号为 1964、0480 的目标客户对应在 a3、a5 的数据进行清洗(满意度原始 评价分数分别为 703.00 分、605.03 分)。
(二) 目标客户个人特征的异常数据清洗工作
- 由于家庭年收入应大于等于个人年收入,故对附录 1 中 b13、b14 的数据进行 筛查,共发现 76 条异常值。同理,家庭年收入应大于等于家庭的可支配年收入,故 对附录 1 中 b13、b15 的数据进行筛查,共发现 73 条异常值。 考虑到不同目标客户的家庭、个人收入极值差异较大,为了提高替换数据的准确 度,故先以家庭可支配收入为基准,计算得有效数据中各个家庭的可支配年收入占年 收入的比例,并对所有家庭该比例值进行排序,求得中位数为 0.6667,再用这个倍数 关系,修正家庭的年收入值,并对修正后的年收入值与个人年收入进行比较、校验。 清洗后的数据经检验仍有 7 条数据不满足上述规则,故再用相同的方法,以个人 年收入为基准,计算得有效数据中个人年收入占家庭年收入比例的中位数为 0.7%,进 行数据清洗后按照规则进行校验,满足规则要求。
- 由附录 2 的目标客户个人特征调研表可知,B17 调查了目标客户全年车贷支出 占家庭年收入的比例,故用正常值的平均值(10%)替换附录 1 中该题大于 100%的 数值,即编号为 0223 的客户,其 B17 问题的原始数值高达 300%,数据清洗前后的散 点图如图 4、图 5 所示。
(三) 缺失值的处理
由附录 1 可知,缺失数据集中在 B7,即目标客户的孩子数量。由于目前已有的 数据仅为 1、2、3 名孩子数量,不符合常理,因此考虑了出生年份后,将所有缺失数 据的孩子数量均替换为 0,共完成 1457 处的替换。
【2】目标客户对不同品牌汽车的满意度分析
根据题意可知,影响目标客户对三款品牌电动汽车满意度的主要影响因素主要有 8 个,分别为电池技术性能(电池耐用和充电方便)、舒适性(环保与空间座椅)整体 表现、经济性(耗能与保值率)、安全性表现(刹车和行车视野)、动力性表现(爬坡 和加速)、驾驶操控性表现(转弯和高速的稳定性)、外观内饰整体表现、配置与质量 品质,其满意度分别是 a1~a8。为此,基于上述数据清洗的结果,对全体目标客户评 价的 a1~a8 分别求平均值,然后再对这 8 项指标的平均值再次求平均,并求出最后得分。运行结果显示,合资品牌、自主品牌和新势力品牌的满意度最终得分分别为 78.16 分、77.54 分和 76.93 分,表明目标客户普遍对合资品牌的满意度评价最高,新势力品 牌的满意度最低。
问题二
问题:决定目标客户是否购买电动车的影响因素有很多,有电动汽车本身的因素,也有目标客户个人特征的因素。在这次目标客户体验活动中,有部分目标客户购买了体验的电动汽车(购买了用 1 表示,没有购买用 0 表示)。结合这些信息,请研究哪些因素可能会对不同品牌电动汽车的销售有影响?
特征选择方法中的过滤法和包裹法,在特征选择过程与模型训练过程是独立进行的,而嵌入法则是综合考虑这两个过程,在学习的同时进行特征选择,因此,为了使 结果更具有代表性,利于模型训练,本文使用以下两种嵌入法:
- 一是基于惩罚项的特征选择法,本文采用基于 SVM 模型、LASSO 模型、逻辑回归模型的惩罚项特征选择法来选择特征。用正则 L1 范数作为惩罚项。L1 范数不但 可 以降低过拟合风险,还可以使求得的 w 有较多分量为 0。所以当希望减少特征 的维 度以用于其他分类器时,可以选择不为 0 的系数所对应的特征 。
- 二是树模型的特征选择法,这种方法能够用来计算特征的重要程度,因此可以用 来去除不相关的特征。本文采用随机森林模型、LightGBM 模型的树模型特征选择法 来选择特征。再根据特征重要性程度,设置一个阈值,得到每个算法排名靠前的特征, 最后在五个模型选出的结果上采用投票法,筛选出大于等于 2 票的特征,作为影 响该品牌销售主要因素。
from sklearn.linear_model import LogisticRegression as LR
from sklearn.svm import LinearSVC
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso, LassoCV
from sklearn.preprocessing import MinMaxScaler
import pandas as pd
import numpy as np
df = pd.read_excel('2.xlsx')
# b13,14,15 处理
df.loc[(df['B13'] < df['B14']) | (df['B13'] < df['B15']), 'B13'] = np.nan
df.loc[df['B13'].isnull(), 'B13'] = df.loc[df['B13'].isnull(), 'B15'] * 1.667
df.loc[(df['B13'] < df['B14']) | (df['B13'] < df['B15']), 'B13'] = np.nan
df.loc[df['B13'].isnull(), 'B13'] = df.loc[df['B13'].isnull(), 'B14'] * 1.7142
x = df.iloc[:, 2:-1]
Y = df.iloc[:, -1]
Scaler = MinMaxScaler().fit(x) # 标准化
X = Scaler.transform(x)
print(X.shape)
print(Y.shape)
X是将x数据进行标准化之后的数据。
1、SVM 模型
lsvc = LinearSVC(C=3, penalty="l1", dual=False) # 1-0.99; 2-3;3-0.35
sfm = SelectFromModel(lsvc, max_features=8).fit(X, Y)
print(sfm)
print(sfm.get_support())
print(df.columns[2:-1][sfm.get_support()])
围观SVM模型在分类和预测问题上的强悍表现!
2、lasso 回归模型
clf = LassoCV()
sfm = SelectFromModel(clf, max_features=8).fit(X, Y)
print(sfm)
print(sfm.get_support())
print(df.columns[2:-1][sfm.get_support()])
3、LR 逻辑回归模型
sfm = SelectFromModel(estimator=LR(C=7), max_features=8).fit(X, Y)
print(sfm)
print(sfm.get_support())
print(df.columns[2:-1][sfm.get_support()])
(二)随机森林提取特征
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from IPython.display import display
sns.set(style="darkgrid",palette='deep')
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
%matplotlib inline
from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = "all" from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
df = pd.read_excel('2_del.xlsx')
df1 = df[df.品牌类型 == 1]
df2 = df[df.品牌类型 == 2]
df3 = df[df.品牌类型 == 3]
X = df3.iloc[:,2:27]
# X.drop(['B1','B6','B7'],axis=1)
# X.sample(n=100,random_state=0)
target = df3.iloc[:,27]
x_train, x_test, y_train, y_test = train_test_split(X, target, test_size = 0.2, random_state = 0) feat_labels = df.columns[2:27]
forest = RandomForestClassifier(n_estimators=10000, random_state=0, n_jobs=-1)
forest.fit(x_train, y_train)
# 特征重要性
l = []
importances = forest.feature_importances_
indices = np.argsort(importances)[::-1]
for f in range(x_train.shape[1]):
print("%2d) %-*s %f" % (f + 1, 30, feat_labels[indices[f]], importances[indices[f]]))
l.append((feat_labels[indices[f]],importances[indices[f]]))
l=pd.DataFrame(l)
(三)LightGBM 提取特征
from sklearn.metrics import mean_squared_error
import lightgbm as lgb
from sklearn.model_selection import train_test_split
df = pd.read_excel('2_del.xlsx')
X = df.iloc[:,0:12]
target = df.iloc[:,12]
X_train, X_test, y_train, y_test = train_test_split(X, target, test_size=0.2,random_state=0)
from sklearn.preprocessing import LabelEncoder
from sklearn.metrics import
confusion_matrix,classification_report,accuracy_score,roc_auc_score,f1_score evals_result = {}
valid_sets = [X_train, X_test]
valid_name = ['train', 'eval']
# 创建成 lgb 特征的数据集格式
lgb_train = lgb.Dataset(X_train, y_train)
lgb_eval = lgb.Dataset(X_test, y_test, reference=lgb_train)
# 将参数写成字典下形式
params = {
'task': 'train',
'boosting_type': 'gbdt', # 设置提升类型
'min_data_in_leaf': 10,
'max_depth': -1,
'objective': 'binary', # 目标函数
'metric': {'binary_logloss', 'auc','f1'}, # 评估函数
'num_leaves':3, # 叶子节点数
'learning_rate': 0.0001, # 学习速率
'feature_fraction': 0.8, # 建树的特征选择比例
'bagging_fraction': 0.8, # 建树的样本采样比例
"lambda_l1": 0.1,
'verbose': -1 ,# <0 显示致命的, =0 显示错误 (警告), >0 显示信息
"nthread": -1,
'n_estimators' : 500,
'is_unbalance':True,
}
# 训练 cv and train
gbm = lgb.train(params, lgb_train,
valid_names=valid_name,
num_boost_round=500,
valid_sets=lgb_eval,
evals_result=evals_result,
early_stopping_rounds=20)
# 预测数据集
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration) lgb.plot_metric(evals_result, metric='auc')
绘图:
plt.figure(figsize=(12,6))
lgb.plot_importance(gbm, max_num_features=30)
plt.title("Featurertances")
图 6 是利用五种模型对各个特征进行投票得出的特征出现次数图,本文选取大于 等于 2 出现次数的特征为重要特征,并认为会分别对三种品牌的电动汽车产生影响。
由图 6 可知,对三种品牌来说,电动车的电池技术性能、舒适性、目标客户全年 房贷、车贷占家庭年收入的占比均为两次及以上,说明这四个指标对顾客的购买情况 有较大的影响。除了以上的四个指标外,影响品牌 1 购买情况的因子还有经济型、安 全性、驾驶操控性以及目标客户的职位;经济型、安全性、动力性、外观内饰、目标 客户的工作情况(包括工作年限、单位性质)、家庭年收入、可支配年收入会是目标 客户购买品牌 2 的主要考虑因素;品牌 3 销售的主要影响指标则还有动力性、目标客 户的婚姻家庭情况还有工作年限。
问题三
问题:结合前面的研究成果,请你建立不同品牌电动汽车的客户挖掘模型,并评价模型的优良性。运用模型判断附件3中15名目标客户购买电动车的可能性。
对于类别不平衡问题,通过 SMOTE 进行采样,为了评价模型的优良性,我们使 用 F1 值和 AUC 值对单个模型进行综合评价。同时对每个模型进行 k 折交叉验证,计算 F1 值和 AUC 值,对不同模型的分数进行横向比较,从而挑选出适用于不同品牌的 最优模型。进而利用网络搜索方法给每个品牌效果最优的模型进行超参数调优。
(一)模型与三种品牌的匹配程度与检验
(一)数据采样
数据附件一中的 1964 条数据中只有 99 位客户有购买意愿,类别的比例不均衡时, 多数类的样本会被过多地关注,这样,少数类样本的分类性能就会受到影响,因此需要对数据不平衡的问题进行处理,本文采用抽样 SMOTE 法解决标签类别不平衡问题, 使得目标客户的购买意向 1 标签(购买)与 0 标签(不买)的比值调整为 0.6。
(二)训练集与验证集的划分
本文将把 1964 条数据集划分成训练集和验证集,训练集占比 0.8,验证集占比 0.2, 进行 K 折交叉验证。
(三)模型训练与比较
使用 python 对五个模型在三个品牌的训练集上进行训练,对验证集进行预测,计 算 F1 值和 AUC 值,计算结果如下:
由上述分析可知,品牌 1 和 3 与随机森林模型匹配性较好,品牌二与 LightGBM 模型的匹配性较好,故本文将利用随机森林、LightGBM 模型来预测附件三中 15 名目 标客户购买电动汽车的可能性。
(二)判断指定客户购买电动汽车的可能性
利用随机森林模型、LightGBM 模型、随机森林模型分别对品牌 1、2 和 3 的客户 进行预测,结果如表 8 所示。
由结果可知,附件三中 15 名待预测的目标客户中,仅有编号为 1、6、7 的客户 有较大概率会选购品牌 1、品牌 2、品牌 2 的电动汽车,其他客户选购电动车的可能 性较低。
问题四
问题:销售部门认为,满意度是目标客户汽车体验的一种感觉,只要营销者加大服务力度,在短的时间内提高 a1-a8 五个百分点的满意度是有可能的,但服务难度与提高的满 意度百分点是成正比的,即提高体验满意度 5%的服务难度是提高体验满意度 1%服务难 度的 5 倍。基于这种思路和前面的研究成果,请你在附件 3 每个品牌中各挑选 1 名没有购买电动汽车的目标客户,实施销售策略。
这题较难。。。所以。。
问题五
问题:根据前面的研究结论,请你给销售部门提出不超过 500 字的销售策略建议。
思路:这问没啥好说的了吧,主要看写作同学的发挥。
文章出处登录后可见!