1. 项目概述与赛题核心解读

2021年的华数杯数学建模竞赛C题,题目是“电动汽车目标客户销售策略研究”。这个题目一出来,当时我们团队就意识到,这绝对是一个“接地气”的好题。它不像一些纯理论推导的题目,而是直接把一个现实商业问题抛给你:一家电动汽车公司,手头有一批潜在客户的调查数据,怎么从里面精准地找出最可能买车的人,并且制定有效的销售策略?这本质上是一个典型的 数据挖掘 商业智能 问题,融合了机器学习、统计分析、运筹优化等多个领域。对于参赛者来说,挑战不仅在于模型的建立,更在于如何将数学工具转化为有说服力的商业洞察。很多新手队伍容易一头扎进复杂的算法里,却忽略了题目最根本的商业诉求——帮企业赚钱。今天,我就结合当年的解题思路和后续的一些反思,把这个题的“里子”和“面子”都拆开来讲透,希望能给未来参赛的朋友们一些实实在在的启发。

这道题提供的核心数据是一份客户特征问卷数据,包含了客户的基本属性、家庭情况、对电动汽车的认知、态度以及购买意愿等信息。你的任务很明确:第一,建立模型识别高价值潜在客户(也就是“目标客户”);第二,分析这些客户的特征,为企业制定销售策略提供依据。听起来简单,但每一步都藏着坑。比如,特征怎么选?模型用哪个?策略怎么才算“有效”?这些都需要你有一个清晰的、闭环的逻辑链条来支撑。

2. 解题整体思路与框架设计

面对这类数据驱动的商业问题,一个系统性的分析框架至关重要。不能拿到数据就开始跑模型,那样很容易迷失方向。我们当时的整体思路遵循了一个经典的商业分析流程: 商业理解 -> 数据理解与预处理 -> 建模与评估 -> 策略生成与验证 。这个流程能确保你做的每一件事都紧扣题目要求。

2.1 第一步:商业问题数学化

这是最关键的一步,决定了你后续所有工作的方向。题目问“销售策略”,但策略是建立在“目标客户”识别基础上的。所以,我们首先要定义什么是“目标客户”。题目数据中有一个“购买意愿”字段,这通常可以作为我们模型的 标签 。但这里有个小心思:直接把它当作二分类标签(买/不买)可能过于粗糙。因为客户的购买意愿是一个从0到1的概率,或者是一个有序的等级(比如强烈不愿意、不愿意、中立、愿意、强烈愿意)。我们当时认为,将购买意愿视为一个 有序多分类 回归 问题可能更精细,能够区分出“一般潜在客户”和“高价值潜在客户”。最终,我们将其处理为一个二分类问题(高意愿 vs 低意愿),但特征工程和模型选择都为更精细的划分留了余地。

接下来,要把抽象的“销售策略”转化为可量化的数学目标。策略的目的是什么?提高销量、降低成本、提升投入产出比。那么,我们的模型和后续分析就应该服务于这些目标。例如,在识别客户时,不仅要关注预测的准确性,还要关注 查准率 ——我们找出来的人,有多大比例真的会买?因为销售资源是有限的,把资源浪费在不可能购买的客户身上就是成本。因此,我们初步确定的核心任务是:构建一个以高查准率为主要优化目标之一的分类模型,并能够输出客户的“价值评分”,用于优先级排序。

2.2 第二步:数据勘探与预处理实战

数据是模型的基石,这一步做不好,再高级的算法也是空中楼阁。题目给的数据通常不会是“干净”的,一定会存在缺失值、异常值、量纲不统一、类别分布不平衡等问题。

1. 缺失值处理: 我们首先检查了每个特征的缺失比例。对于缺失比例较低(如<5%)的特征,如果特征是数值型,我们采用了 中位数填充 (对于偏态分布的数据,中位数比均值更稳健);如果是类别型,则用 众数填充 。对于缺失比例较高的特征,我们评估了该特征的重要性,如果认为其重要性不高,则直接删除该特征,以避免引入过多噪声。例如,某个关于“充电桩了解程度”的问题缺失了30%,我们通过相关性分析发现它与其他几个关于基础设施认知的特征高度相关,于是选择删除它,用其他特征来替代这部分信息。

2. 异常值处理: 对于数值型特征(如年龄、收入),我们使用了 箱线图 进行可视化检查。对于明显超出合理范围的异常值(比如年龄填了200岁),我们将其视为缺失值,并按上述缺失值方法处理。对于在合理范围内但分布极端的值,我们采用了 缩尾处理 ,即将超出99%分位数和低于1%分位数的值,用分位数值进行替换,以减少极端值对模型(特别是线性模型)的干扰。

3. 特征编码: 数据中包含大量类别型特征,如性别、教育程度、职业类型、对电动汽车各项特性的态度(非常不同意、不同意、中立、同意、非常同意)。对于有序类别(如态度量表、教育程度),我们采用了 标签编码 有序整数编码 ,以保留其顺序信息。对于无序类别(如职业、车型偏好),我们使用了 独热编码 。这里要注意维度爆炸问题,如果某个类别特征取值非常多,可以考虑先进行归类(如将几十种职业归为几大类),或者使用 目标编码 (用该类别下目标变量的均值来编码),但目标编码要小心过拟合,最好在交叉验证中进行。

4. 特征工程: 这是提升模型性能的“魔法”环节。我们不仅仅使用原始特征,还尝试创造新的特征。

  • 交互特征: 例如,“家庭年收入”与“家庭人数”可以生成“人均收入”,这可能比单独的收入更能反映购买力。
  • 多项式特征: 对于与购买意愿可能存在非线性关系的特征(如年龄),我们尝试创建了年龄的平方项。
  • 分箱: 将连续变量如年龄、收入离散化成几个区间(如青年、中年、老年),有时能让线性模型捕捉到非线性关系,也便于后续的业务解读。
  • 态度指数合成: 问卷中多个关于性能、环保、成本的态度问题,我们可以通过 主成分分析 或简单加权平均,合成一个“总体态度积极指数”,既能降维,又能减少共线性。

注意: 所有基于目标变量的特征工程(如目标编码、基于目标的分箱),都必须在严格的交叉验证框架下进行,或者先划分训练集和测试集,只在训练集上计算统计量再应用到测试集,防止数据泄露。

2.3 第三步:模型选择与构建逻辑

在预处理后的数据上,我们开始构建客户识别模型。没有哪个模型是万能的,我们的策略是“先集成后精选”。

1. 基准模型: 我们首先建立了逻辑回归作为基准模型。逻辑回归的优点在于可解释性强,每个特征的系数大小和正负代表了其对购买意愿的影响方向和力度,这对后续生成业务策略至关重要。通过逻辑回归,我们可以初步筛选出显著的特征。

2. 集成模型: 为了追求更高的预测性能,我们采用了树模型。一开始我们尝试了单一的决策树,但容易过拟合。随即我们转向了集成模型:

  • 随机森林: 这是我们的主力模型之一。它能有效处理非线性关系、交互作用,并且可以给出特征重要性排序,非常实用。我们通过网格搜索调整了树的数量、最大深度等超参数。
  • 梯度提升树: 我们使用了XGBoost或LightGBM。这类模型通常在表格数据上表现优异,尤其是LightGBM,速度快且内存占用小。它同样能提供特征重要性。

为什么选择这两个? 随机森林训练快,抗过拟合能力强,特征重要性稳定,适合作为第一道防线。GBDT类模型精度往往更高,但需要仔细调参。我们通常会同时训练这两个模型,并比较它们在验证集上的表现,特别是 查准率 ROC-AUC

3. 模型评估与选择: 我们最关注的指标不是单纯的准确率,因为数据可能存在不平衡(想买的人总是少数)。我们更关注:

  • 查准率: 模型预测为“会购买”的客户中,真正会购买的比例。这直接关系到销售资源的投放效率。
  • 查全率: 所有真正会购买的客户中,被模型找出来的比例。这关系到市场覆盖率。
  • F1-Score: 查准率和查全率的调和平均数,是一个综合指标。
  • ROC曲线与AUC值: 衡量模型整体排序能力的好坏,AUC越高,说明模型越能把“会买”的客户排在前面。

我们通过 交叉验证 来获取稳定的评估结果。最终模型的选择,是在保证一定查全率的基础上,尽可能追求高查准率。因为对于企业来说,优先联系那些购买概率最高的客户,ROI可能最大。

2.4 第四步:客户分群与策略制定

模型预测出每个客户的购买概率后,工作只完成了一半。更重要的是如何利用这个结果。我们采用了 客户分群 的方法。

1. 基于预测概率的分层: 我们将所有潜在客户按预测购买概率从高到低排序,划分为几个层级:

  • S级(核心目标客户): 概率最高的前10%-15%。这部分客户是销售团队应 立即优先跟进 的对象,可以分配最多的资源和最优惠的促销政策。
  • A级(高潜力客户): 概率次高的15%-20%。可以进行定期培育,如发送深度产品资料、邀请参加试驾活动。
  • B级(一般潜在客户): 中间部分。进行低成本维护,如发送新闻资讯、品牌动态。
  • C级(低意向客户): 概率最低的部分。暂时保持观望,或仅进行品牌广宣。

2. 基于特征画像的策略生成: 对于S级和A级客户,我们深入分析他们的共同特征。通过模型的特征重要性(来自随机森林或XGBoost)和逻辑回归的系数,我们找出驱动购买的关键因素。

  • 如果发现“对环保性能评分高”是强相关特征: 那么针对这部分客户的营销话术和材料,应重点突出电动汽车的环保特性、低碳足迹。
  • 如果“家庭有儿童”且“关注安全性”特征显著: 则销售策略应强调车辆的安全评级、儿童锁等相关功能。
  • 如果“对充电便利性担忧”是主要负向特征: 企业策略则应考虑向这部分客户提供详细的充电桩安装服务方案、赠送充电卡、或强调公司合作的公共充电网络覆盖度。

我们当时为每一类高价值客户群体都绘制了“人物画像”,并配套制定了相应的 沟通渠道建议 (如线上广告、电话销售、线下活动)、 产品推介重点 促销方案 (如金融贴息、充电补贴、延长保修)。这使得我们的解决方案从一个单纯的数学模型,落地为一个可执行的商业计划草案。

3. 核心环节实现与关键技术细节

3.1 特征重要性分析与业务解读

模型建好了,但你不能只给评委一个AUC值。你必须解释清楚模型“为什么”这样工作。我们以随机森林模型为例,输出特征重要性排序后,做了两件事:

第一, 可视化。 用水平条形图将最重要的前15-20个特征展示出来,直观明了。

第二, 业务翻译。 这是体现你思考深度的关键。例如,如果“周围朋友推荐意愿”这个特征重要性排第一,你不能只说“这个特征很重要”。你要解读出: 口碑营销和社交影响对于电动汽车推广至关重要。企业应加强老客户推荐计划,打造用户社群,利用KOC进行传播。 如果“每月可承受用车支出”重要性高,则可以解读为: 客户对使用成本敏感,灵活的电池租赁方案、充电服务套餐可能比单纯降低车价更有效。

我们还会使用 SHAP值 进行更细致的解释。SHAP值能展示每个特征对于单个预测结果的贡献是正向还是负向。比如,对于一个被预测为高购买概率的客户,SHAP图可以显示是“高收入”和“环保意识强”这两个特征贡献最大。这能让销售人员在面对具体客户时,更有针对性地沟通。

3.2 销售策略的量化与模拟

制定策略不能拍脑袋。我们尝试对提出的策略进行简单的量化模拟,以增强说服力。例如:

假设: 传统广撒网式的电话销售,转化率为2%,单次联系成本为10元。 我们的策略: 使用模型筛选出前20%的高概率客户进行重点联系,假设在这部分人群中转化率提升至8%,单次联系成本因需要更专业的销售而升至15元。

我们设定一个固定的总预算(比如10万元),然后计算两种策略下的预期成交客户数和单客获取成本:

  • 传统策略: 可联系人数 = 100,000 / 10 = 10,000人。预期成交 = 10,000 * 2% = 200人。单客成本 = 10 / 2% = 500元。
  • 模型策略: 只联系前20%的客户,假设总潜在客户池为10,000人,则高价值客户为2,000人。联系这些人的总成本 = 2,000 * 15 = 30,000元(远低于预算)。预期成交 = 2,000 * 8% = 160人。单客成本 = 15 / 8% = 187.5元。

对比结论: 虽然模型策略触达人数少,预期成交总数略少(160 vs 200),但 单客获取成本大幅降低(187.5元 vs 500元) ,投入产出比显著提高。在预算有限的情况下,企业采用模型策略可以用更少的钱获得更优质的客户线索,销售团队也能更专注。这样的量化对比,比空谈“提升效率”要有力得多。

3.3 模型部署与持续迭代的思考

在论文中,我们还简要探讨了模型落地可能面临的问题和解决方案,这能体现你对问题思考的完整性。

  • 数据更新: 销售是一个动态过程,新数据会不断产生。模型需要定期(如每季度)用新数据重新训练,以保持其预测能力。
  • 线上部署: 可以将训练好的模型封装成API服务,集成到企业的CRM系统或销售线索管理平台中。当新的潜在客户信息录入时,系统自动调用模型API,实时输出购买概率评分。
  • 反馈闭环: 最重要的环节。销售人员的跟进结果(最终是否成交)应作为新的标签数据,回流到数据池中,用于下一轮的模型优化。这样,模型就在业务实践中不断进化,越用越聪明。

4. 常见问题、避坑指南与参赛心得

4.1 数据处理中的“坑”

坑1:盲目处理缺失值。 看到缺失值就用均值填充,这是大忌。一定要先分析缺失模式:是随机缺失还是系统缺失?比如,“收入”字段缺失,可能因为高收入人群更不愿意透露。这种情况下,用均值填充会严重低估这部分人的收入。更好的做法是,将“是否缺失收入”本身作为一个新的二值特征,可能具有很强的预测能力。

坑2:忽略特征缩放。 如果你使用了逻辑回归、SVM或K-Means聚类等基于距离的模型,必须对连续特征进行标准化或归一化。树模型虽然不需要,但良好的习惯是对所有数值特征进行缩放,特别是当你后续可能尝试不同模型时。

坑3:在划分训练测试集之前做特征工程。 这是导致数据泄露、模型评估结果虚高的最常见原因。尤其是那些用到目标变量信息的操作(如目标编码、基于目标的分箱),必须在训练集上完成拟合,然后将拟合器应用到测试集。最安全的做法是使用 Pipeline ColumnTransformer (在sklearn中)将预处理和模型打包,在交叉验证中整体进行。

4.2 模型构建与评估的“坑”

坑1:只用一个指标评判模型。 盯着准确率不放,对于不平衡数据集毫无意义。一定要结合混淆矩阵、查准率、查全率、F1、AUC等多个指标综合判断。并向评委解释,在本题的商业背景下,你更看重哪个指标以及为什么。

坑2:不进行交叉验证。 直接用一次划分的测试集成绩作为最终模型性能,结果非常不稳定。务必使用K折交叉验证,尤其是数据量不大的时候,它能给出更可靠的性能估计。

坑3:堆砌复杂模型,忽视可解释性。 一上来就用深度神经网络,结果可能还不如调好参的XGBoost。在数学建模竞赛中,模型的 可解释性 商业洞察 往往比那一点点预测性能的提升更重要。逻辑回归、决策树、随机森林的特征重要性都是很好的解释工具。复杂模型可以作为“黑盒”补充,但一定要有“白盒”模型来支撑你的论点。

4.3 论文写作与表达的“坑”

坑1:只有模型,没有分析。 论文里大段代码和公式,却没有对结果深入分析。评委想看到的是:这个特征重要意味着什么?这个客户群体有什么特点?我们提出的策略具体怎么操作?要把数学语言翻译成商业语言。

坑2:策略空洞无物。 “加强宣传”、“提高服务质量”这类建议等于没说。你的策略必须是具体的、可操作的、与你的模型发现紧密挂钩的。例如:“针对模型识别出的、对‘续航焦虑’敏感但‘通勤距离固定’的年轻白领群体,设计‘一周通勤无忧’试驾套餐,并提供公司周边三公里内充电桩地图。”

坑3:忽视模型的局限性。 任何模型都有假设和局限。主动在论文中讨论你的模型有哪些不足(例如,数据是横截面数据,无法捕捉时间趋势;问卷数据可能存在主观偏差等),以及未来可以如何改进,这体现了严谨的科学态度,是加分项。

4.4 我的参赛心得与技巧

  1. 三人分工要明确,但沟通要频繁。 一个人主攻建模和编程,一个人主攻论文写作和可视化,一个人主攻思路梳理和策略设计。但每天必须集中讨论多次,确保三个部分严丝合缝,写作的人必须完全理解模型的结果。
  2. 可视化是第二语言。 多用图表说话。特征重要性图、ROC曲线、客户分群雷达图、策略效果对比柱状图……一图胜千言。图表要美观、规范、有自明性(不看正文也能懂个大概)。
  3. 从评委角度思考。 评委时间紧,要看大量论文。你的摘要是否清晰概括了所有工作?你的章节结构是否一目了然?你的核心创新点和结论是否突出?在摘要和引言部分就牢牢抓住评委的眼球。
  4. 代码要整洁,附在附录。 虽然论文主体不展示大量代码,但附录里整洁、有注释的代码能体现你的工作扎实。确保你的代码从头到尾可以复现论文中的所有结果。
  5. 时间管理是生命线。 三天时间,第一天必须确定思路、完成数据探索和预处理;第二天上午完成基础建模和调优,下午开始论文写作和深入分析;第三天全天用于论文打磨、策略深化、可视化优化和检查。最后留出几个小时应对突发问题。

回过头看,华数杯C题是一个经典的“数据科学+”赛题,它考察的远不止建模技术,更是将技术应用于解决实际商业问题的综合能力。其核心逻辑—— 用数据识别机会,用模型指导决策,用分析创造价值 ——在当今的数据驱动时代具有普适性。希望这份详细的思路拆解,能帮助你不仅赢得比赛,更掌握一种解决问题的思维框架。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐