2021年华数杯数学建模
C题 电动汽车目标客户销售策略
原题再现:
汽车产业是国民经济的重要支柱产业,而新能源汽车产业是战略性新兴产业。大力发展以电动汽车为代表的新能源汽车是解决能源环境问题的有效途径,市场前景广阔。但是,电动汽车毕竟是一个新兴的事物,与传统汽车相比,消费者在一些领域,如电池问题,还是存在着一些疑虑,其市场销售需要科学决策。
某汽车公司最新推出了三款品牌电动汽车,包括合资品牌(用1表示)、自主品牌(用2表示)和新势力品牌(用3表示)。为研究消费者对电动汽车的购买意愿,制定相应的销售策略,销售部门邀请了1964位目标客户对三款品牌电动汽车进行体验。具体体验数据有电池技术性能(电池耐用和充电方便)满意度得分(满分100分,下同)a1、舒适性(环保与空间座椅)整体表现满意度得分a2、经济性(耗能与保值率)整体满意度得分a3、安全性表现(刹车和行车视野)整体满意度得分a4、动力性表现(爬坡和加速)整体满意度得分a5、驾驶操控性表现(转弯和高速的稳定性)整体满意度得分a6、外观内饰整体表现满意度得分a7、配置与质量品质整体满意度得分a8等。另外还有目标客户体验者个人特征的信息,详情见附录1和2。
请你研究数据,查阅相关文献,运用数学建模的知识回答下列问题:
1.请做数据清洗工作,指出异常值和缺失数据以及处理方法。对数据做描述性统计分析,包括目标客户对于不同品牌汽车满意度的比较分析。
2.决定目标客户是否购买电动车的影响因素有很多,有电动汽车本身的因素,也有目标客户个人特征的因素。在这次目标客户体验活动中,有部分目标客户购买了体验的电动汽车(购买了用1表示,没有购买用0表示)。结合这些信息,请研究哪些因素可能会对不同品牌电动汽车的销售有影响?
3.结合前面的研究成果,请你建立不同品牌电动汽车的客户挖掘模型,并评价模型的优良性。运用模型判断附件3中15名目标客户购买电动车的可能性。
4.销售部门认为,满意度是目标客户汽车体验的一种感觉,只要营销者加大服务力度,在短的时间内提高a1-a8五个百分点的满意度是有可能的,但服务难度与提高的满意度百分点是成正比的,即提高体验满意度5%的服务难度是提高体验满意度1%服务难度的5倍。基于这种思路和前面的研究成果,请你在附件3每个品牌中各挑选1名没有购买电动汽车的目标客户,实施销售策略。
5.根据前面的研究结论,请你给销售部门提出不超过500字的销售策略建议。
整体求解过程概述(摘要)
本文探究的是某汽车公司中三个品牌电动汽车的目标客户满意度情况、影响因素、预测购买可能性以及制定销售策略等问题。
针对问题一,通过分析附件一,同时结合附件二的个人特征调查表,提取调查表问题本身的限制条件,并发掘调查问题之间的关系,最终建立不同调查问题之间合理的约束关系,由此,对不同的异常数据和缺失数据采用了不同的填充策略。基于数据清洗后的结果,对各项影响满意度得分的指标取平均值,发现:目标客户对该公司三种品牌的满意度从高到低依次为合资品牌>自主品牌>新势力品牌。
针对问题二,采用了基于惩罚项和基于树模型两种不同的嵌入法分别进行特征选取,前一种用 LR、LASSO、SVM 三种模型,后一种用 RF、LightGBM 模型共五个模型来进行机器学习,求出影响不同品牌销售的相关特征,对选出的特征上采用投票法,结果发现:电动车的电池技术性能、舒适性、目标客户全年房贷、车贷占家庭年收入情况对三种品牌的销售均有较大影响。除此之外,经济型、安全性、客户的工作情况等也在不同程度上对不同品牌的销售产生不同程度的影响。
针对问题三,由于标签不均衡的问题严重,本文先通过 SMOTE 采样解决标签不平衡问题,再通过纵向比较和横向比较,纵向使用 F1-score 和 AUC 指标衡量训练效果,横向对不同模型的分数进行比较,从而挑选出适用于不同品牌的最优模型。进而利用网络搜索方法给每个品牌效果最优的模型进行超参数调优,其中 LightGBM 的在整个验证集上的 AUC 值达到 97.10%。最后利用这三个最优模型预测了附件三的 15名目标客户购买电动车的可能性。
针对问题四,本文在问题三基础上,运用了多目标规划原理,建立三个目标函数,即提高体验满意度的服务难度尽量小,选择提高服务的数量尽可能少,目标客户购买概率提升的百分比尽可能大。用 python 求解该规划模型,结果显示,着重满足品牌 1、编号 3 的顾客在经济性上的需求;满足品牌 2、编号 9 的顾客在电池性能上的需求以及品牌 3、编号 14 的顾客在舒适性上的需求有助于提高顾客的购买率。
针对问题五,基于问题一到问题四所建立的模型、因子探究等的基础上,提出了精准营销的策略,在人群洞察、品牌导向、效果评估这三个方向去探讨,旨在为该团队有针对性地制定销售策略,为该汽车公司创造最大的效益。
问题分析:
问题一要求考虑题目要求和结合实际背景对附件一和附件三的数据进行数据清洗操作,并进行描述性统计,该题的思路分为一下三个步骤:
1. 利用附件二的目标客户个人特征调查表,以及题目中对满意度评价表的约束,综合考虑实际生活和客观规律,充分挖掘问题本身的限制条件,以及不同问题之间的限制条件,最终建立不同回答之间合理的约束关系。
2. 之后利用所建立出的约束关系,对附件一和附件三的异常数据进行初步清洗。对于离群类型异常值用有效数据的平均值替换。对于不满足约束关系的异常值,用数据间的关系做出推断后进行替换,对缺失数据的缺失情况进行综合分析,用已有的数据进行推断并分析实际背景,对缺失数据进行填充处理,以保证建模的准确性。
3. 基于数据清洗后的结果,对各项影响满意度得分的指标取平均值,然后对各品牌进行排序。
问题二需要筛选出影响不同品牌销售的主要因素,针对该问题采用基于惩罚项和基于树模型两种不同的嵌入法,前一种用 LR、LASSO、SVM 三种模型,后一种用RF、LightGBM 模型共五个模型,求出影响不同品牌销售的相关特征。再根据特征重要性程度从高到低排序,并设置一个阈值,得到每个算法重要性排名靠前的特征,在五个模型选出的结果上采用投票法,筛选出大于等于 2 票的特征,作为影响该品牌销售主要因素。
问题三是建立在问题二的基础上的,通过 SMOTE 采样解决标签不平衡问题之后,利用 F1-score 和 AUC 指标,对模型的训练和预测效果进行纵向比较,并利用 k 折交叉验证,对不同模型进行横向比较。对三个品牌,分别训练这 5 个模型,通过比较分析,在不同品牌中,挑选出在验证集上 F1-score 和 AUC 值最优的模型,并利用网络搜索方法,给每个品牌对应的最优的模型进行超参数调优。最后利用这三个最优模型预测附件三的 15 名目标客户购买电动车的可能性。
问题四,是在问题二、三基础上的多目标规划问题。需要建立以提高服务的难度最小,提高的服务的数量最少,购买概率提高的百分比最多的多目标规划模型。在附件三的 3 个品牌中挑选没有购买电动车的客户,求解得出使得各个体验满意度应该提高的百分比,对没有购买电动车的目标客户设计销售策略。
问题五主要是建立在前四问的基础上以信件的方式对销售部门提出销售策略。根据问题一可以得出客户对不同品牌的倾向程度;根据问题二可以得出对三种品牌电动汽车销售影响较大的因子;根据问题三可以得出适合三种品牌预测目标客户购买可能性的模型;根据问题四可以在提升服务满意度与服务难度之间找到一个优化方案。
模型假设:
1. 假设影响目标客户满意度的因素仅考虑题目给出的电池技术性能、舒适性、经济型、安全性、动力性、驾驶操控性、外观内饰整体表现和配置与质量品质,且各个影响因素之间相互独立。
2. 假设服务难度与提高的满意度百分点是成正比的关系。
3. 假设在做出销售策略的这段时间内,目标客户对电动汽车的满意度、购买意向等不会发生改变。
4. 假设在做出销售策略的阶段不会有黑天鹅事件或重大自然灾害等对该公司的电动车销售带来影响。
问题分析
问题一要求考虑题目要求和结合实际背景对附件一和附件三的数据进行数据清洗操作,并进行描述性统计,该题的思路分为一下三个步骤:
1. 利用附件二的目标客户个人特征调查表,以及题目中对满意度评价表的约束,综合考虑实际生活和客观规律,充分挖掘问题本身的限制条件,以及不同问题之间的限制条件,最终建立不同回答之间合理的约束关系。
2. 之后利用所建立出的约束关系,对附件一和附件三的异常数据进行初步清洗。对于离群类型异常值用有效数据的平均值替换。对于不满足约束关系的异常值,用数据间的关系做出推断后进行替换,对缺失数据的缺失情况进行综合分析,用已有的数据进行推断并分析实际背景,对缺失数据进行填充处理,以保证建模的准确性。
3. 基于数据清洗后的结果,对各项影响满意度得分的指标取平均值,然后对各品牌进行排序。
问题二的分析
问题二需要筛选出影响不同品牌销售的主要因素,针对该问题采用基于惩罚项和基于树模型两种不同的嵌入法,前一种用LR、LASSO、SVM 三种模型,后一种用RF、LightGBM 模型共五个模型,求出影响不同品牌销售的相关特征。再根据特征重要性程度从高到低排序,并设置一个阈值,得到每个算法重要性排名靠前的特征,在五个模型选出的结果上采用投票法,筛选出大于等于2票的特征,作为影响该品牌销售主要因素。
问题三的分析
问题三是建立在问题二的基础上的,通过SMOTE采样解决标签不平衡问题之后,利用F1-score 和 AUC指标,对模型的训练和预测效果进行纵向比较,并利用k折交叉验证,对不同模型进行横向比较。对三个品牌,分别训练这5个模型,通过比较分析,在不同品牌中,挑选出在验证集上F1-score和AUC值最优的模型,并利用网络搜索方法,给每个品牌对应的最优的模型进行超参数调优。最后利用这三个最优模型预测附件三的15名目标客户购买电动车的可能性。
问题四的分析
问题四,是在问题二、三基础上的多目标规划问题。需要建立以提高服务的难度最小,提高的服务的数量最少,购买概率提高的百分比最多的多目标规划模型。在附件三的3个品牌中挑选没有购买电动车的客户,求解得出使得各个体验满意度应该提高的百分比,对没有购买电动车的目标客户设计销售策略。
问题五的分析
问题五主要是建立在前四问的基础上以信件的方式对销售部门提出销售策略。根据问题一可以得出客户对不同品牌的倾向程度;根据问题二可以得出对三种品牌电动汽车销售影响较大的因子;根据问题三可以得出适合三种品牌预测目标客户购买可能性的模型;根据问题四可以在提升服务满意度与服务难度之间找到一个优化方案。
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
非慈善耶稣
论文缩略图:
全部论文及程序请见下方“ 只会建模 QQ名片” 点击QQ名片即可
非慈善耶稣
程序代码:
svm_get_features.py
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)
# 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()])
# 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()])
# 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()]
Lgb_get_features.py
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]
# X.drop(['B1','B6','B7'],axis=1)
# X.sample(n=100,random_state=0)
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")
# plt.savefig(f'F:./图片/特征重要度 1.png',dpi=600)
importance = gbm.feature_importance(importance_type='split')
feature_name = gbm.feature_name()
# for (feature_name,importance) in zip(feature_name,importance):
# print (feature_name,importance)
feature_importance =
pd.DataFrame({'feature_name':feature_name,'importance':importance} )
feature_importance.sort_values(['importance'],ascending=False)
lgb_predictors = [i for i in X_train.columns[2:27]]
pd.Series(gbm.feature_importance(), lgb_predictors).sort_values(ascending=False)