2026 华数杯备考与决胜攻略:基于“数据清洗-特征归因-混合算法-多目标优化”的电动汽车营销精准决策全流程方案

写在前面:在数学建模竞赛中,精准的数据预处理、严密的特征选择、稳健的模型构建以及可落地的商业决策是冲击一等奖的核心要素。本文围绕华数杯经典赛题"电动汽车目标客户销售策略研究"展开,系统拆解一套获得高分的完整建模体系,提供可直接运行的 Python 源码,并对 2026 年华数杯的命题趋势进行深度预测。

一、 华数杯赛题演变与 2026 年命题趋势预测

1.1 历年赛题演进逻辑

回顾近年华数杯数学建模竞赛(以 C 题/大数据类题目为例),题目从早期单纯的统计描述与基础分类,逐步演变为"复杂数据清洗 + 跨模态特征工程 + 高维不平衡分类 + 约束下的多目标运筹优化"的复合型架构:

  • 2021 年 (电动汽车目标客户销售策略):侧重于客户体验数据清洗、多品牌偏好归因、不平衡数据挖掘与服务难度约束下的营销优化。

  • 近年趋势:引入了更多时空潮汐特征、新能源与碳中和背景、微观行为建模及系统协同调度(如能源-建筑-车辆协同管理)。

1.2 2026 年华数杯命题方向预测

基于国家"双碳"战略深化与工业人工智能的快速普及,针对 2026 年华数杯建模竞赛进行以下前瞻性预测:

复制代码
+-----------------------------------------------------------------------------------+
|                            2026 华数杯核心命题预测方向                             |
+-----------------------------------------------------------------------------------+
| 1. 车网互动 (V2G) 与源-网-荷-储协同调度: 结合电价波动与微观出行行为的确定性/不确定性优化 |
| 2. 多模态用户画像与生成式营销推荐: 融合文本评论、行为轨迹与生理体验数据的深度学习拟合  |
| 3. 供应链韧性与绿色全生命周期 (LCA) 评估: 考虑碳足迹与零部件衰减的多目标 Pareto 前沿求解 |
+-----------------------------------------------------------------------------------+

二、 一等奖方案全景架构与解题逻辑

为了完美解答"电动汽车目标客户销售策略"这一典型问题,设计了一套环环相扣的五阶段解题架构:

复制代码
【数据输入】(1964位体验者数据: a1-a8满意度 + B1-B17个人特征)
     │
     ▼
【阶段一:逻辑校验与非参数数据清洗】
 ├── 基于业务逻辑的条件约束校验 (如家庭收入 >= 个人收入)
 ├── 基于箱线图 (IQR) 的四分位极值修复[cite: 1, 10]
 └── 条件缺失值填补 (基于婚姻状态 B6 推导孩子数 B7)
     │
     ▼
【阶段二:采样平衡与多模型投票特征提取】
 ├── SMOTE / ADASYN 自适应过采样处理标签极度不平衡问题
 ├── 惩罚项嵌入法 (LASSO / LinearSVM / LR)
 ├── 树模型嵌入法 (Random Forest / LightGBM)
 └── 5 模型票选机制 (Majority Voting) 提取各品牌核心因子
     │
     ▼
【阶段三:贝叶斯超参数调优与高精度挖掘】
 ├── 搭建 LightGBM / XGBoost / CatBoost / 随机森林分类器
 ├── 基于 F1-Score 与 ROC-AUC 的贝叶斯优化求解最优超参数
 └── 输出 15 名潜在目标客户的购买概率
     │
     ▼
【阶段四:服务难度与转化率组合优化】
 ├── 建立网格搜索/规划模型:限定总满意度提升百分比不超过 5%
 └── 最小化服务提升难度系数,最大化客户购买概率转化
     │
     ▼
【阶段五:精准营销决策矩阵与商业落地】
 └── 输出针对合资、自主、新势力三大品牌的差异化战略建议

三、 实战建模拆解与 Python 代码实现

本部分针对问题的四个核心阶段,提供符合工程规范、可移植运行的 Python 代码。

3.1 阶段一:数据清洗与非参数统计分析 (针对问题一)

解题思路
  1. 逻辑约束校验:在真实场景中,家庭年收入应大于等于个人年收入和可支配收入。如果发现逻辑矛盾,优先采用中位数比例进行逻辑修复。

  2. 条件缺失值填补:缺失值 B7(孩子数量)与 B6(婚姻状态)强相关。未婚或独身状态下直接填补为 0,已婚状态下利用非缺失数据的中位数填补。

  3. 满意度分布检验 :由于满意度评分得分往往不严格服从正态分布,采用 Kruskal-Wallis 检验Wilcoxon 秩和检验 代替传统方差分析,比较不同品牌(合资、自主、新势力)在 a1 \\sim a8 各维度上的满意度差异。

Python 实现:数据预处理与差异性分析

Python

python 复制代码
import numpy as np
import pandas as pd
from scipy import stats

def clean_ev_dataset(df):
    """
    电动汽车体验数据清洗与逻辑修复函数
    """
    df_clean = df.copy()
    
    # 1. 满意度得分上限截断 (满分100分)
    score_cols = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8']
    for col in score_cols:
        if col in df_clean.columns:
            mean_val = df_clean.loc[df_clean[col] <= 100, col].mean()
            df_clean.loc[df_clean[col] > 100, col] = mean_val
            
    # 2. 收入逻辑校验与修复 (B13:家庭收入, B14:个人收入, B15:可支配收入)
    if set(['B13', 'B14', 'B15']).issubset(df_clean.columns):
        # 计算有效数据中家庭收入与个人收入的比例中位数
        valid_mask = (df_clean['B13'] >= df_clean['B14']) & (df_clean['B13'] >= df_clean['B15'])
        ratio_b14 = (df_clean.loc[valid_mask, 'B13'] / (df_clean.loc[valid_mask, 'B14'] + 1e-5)).median()
        
        # 修复逻辑异常项
        invalid_mask = ~valid_mask
        df_clean.loc[invalid_mask, 'B13'] = df_clean.loc[invalid_mask, 'B14'] * ratio_b14

    # 3. 缺失值条件填补 (B6:婚姻状态, B7:孩子数量)
    if 'B7' in df_clean.columns and 'B6' in df_clean.columns:
        # 未婚/单身(设定取值为1,2,3,4,8)的孩子数填补为0
        single_mask = df_clean['B6'].isin([1, 2, 3, 4, 8]) & df_clean['B7'].isnull()
        df_clean.loc[single_mask, 'B7'] = 0
        
        # 其余缺失项采用中位数填补
        median_children = df_clean.loc[df_clean['B7'].notnull(), 'B7'].median()
        df_clean['B7'].fillna(median_children, inplace=True)
        
    return df_clean

# 假设模拟创建数据集并执行
np.random.seed(42)
data_sim = pd.DataFrame({
    'brand_type': np.random.choice([1, 2, 3], 100),
    'a1': np.random.uniform(50, 95, 100),
    'a2': np.random.uniform(50, 95, 100),
    'B6': np.random.choice([1, 5], 100),
    'B7': [np.nan if i % 5 == 0 else 1 for i in range(100)],
    'B13': np.random.uniform(10, 50, 100),
    'B14': np.random.uniform(5, 60, 100) # 存在逻辑异常
})

data_cleaned = clean_ev_dataset(data_sim)

# Kruskal-Wallis 检验不同品牌在 a1 指标上的差异
stat, p_val = stats.kruskal(
    data_cleaned[data_cleaned['brand_type'] == 1]['a1'],
    data_cleaned[data_cleaned['brand_type'] == 2]['a1'],
    data_cleaned[data_cleaned['brand_type'] == 3]['a1']
)
print(f"Kruskal-Wallis 检验 H统计量: {stat:.4f}, P值: {p_val:.4f}")

3.2 阶段二:多模型集成特征选择 (针对问题二)

解题思路

单个特征选择算法(如纯皮尔逊相关系数或单一树模型)极易受到共线性和噪声干扰。一等奖方案采用 多算法组合票选机制

  1. 先利用 SMOTE 算法对极度不平衡的购买标签(购买者仅占约 5%)进行过采样。

  2. 引入 5 种异构模型独立筛选重要特征:逻辑回归(L1 惩罚)、线性 SVM(L1 惩罚)、LASSO 回归、随机森林(Gini 增益)、LightGBM(Split 增益)。

  3. 统计各特征在 5 个模型中的得票数,保留获得 2 票及以上的特征作为该品牌的核心影响因子。

核心特征投票矩阵表

以下为利用多模型投票得出的不同品牌关键影响因子提取结果:

品牌类型 核心影响因子得票 ≥4 的特征 得票 ≥2 的次要影响特征 商业含义分析 PDF
合资品牌 (1) a1 (电池), B16 (房贷比), B17 (车贷比) a2 (舒适), a3 (经济), a4 (安全), B12 (职务) 客户最看重电池续航与财务杠杆压力。
自主品牌 (2) a1 (电池), a3 (经济), B16 (房贷比), B17 (车贷比) a5 (动力), a7 (外观), B11 (单位性质), B15 (可支配收入) 对性价比与综合实用性高度敏感。
新势力品牌 (3) a2 (舒适), B16 (房贷比), a1 (电池), a5 (动力) a6 (操控), B10 (工龄), B17 (车贷比) 更加关注驾乘舒适度、智能化与动力体验。
Python 实现:SMOTE 与多模型投票特征提取

Python

python 复制代码
from imblearn.over_sampling import SMOTE
from sklearn.linear_model import LogisticRegression, LassoCV
from sklearn.svm import LinearSVC
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
import lightgbm as lgb

def ensemble_feature_selection(X, y, feature_names, top_k=8):
    """
    五模型投票法特征选择
    """
    # 1. 过采样处理
    smo = SMOTE(sampling_strategy=0.6, random_state=42)
    X_res, y_res = smo.fit_resample(X, y)
    
    votes = pd.Series(0, index=feature_names)
    
    # 模型 1: Logistic Regression (L1)
    lr = LogisticRegression(penalty='l1', solver='liblinear', C=1.0)
    sfm_lr = SelectFromModel(lr, max_features=top_k).fit(X_res, y_res)
    votes[feature_names[sfm_lr.get_support()]] += 1
    
    # 模型 2: Linear SVM (L1)
    svm = LinearSVC(penalty='l1', dual=False, C=0.5, random_state=42)
    sfm_svm = SelectFromModel(svm, max_features=top_k).fit(X_res, y_res)
    votes[feature_names[sfm_svm.get_support()]] += 1
    
    # 模型 3: LASSO
    lasso = LassoCV(cv=3).fit(X_res, y_res)
    sfm_lasso = SelectFromModel(lasso, max_features=top_k).fit(X_res, y_res)
    votes[feature_names[sfm_lasso.get_support()]] += 1
    
    # 模型 4: Random Forest
    rf = RandomForestClassifier(n_estimators=100, random_state=42).fit(X_res, y_res)
    sfm_rf = SelectFromModel(rf, max_features=top_k).fit(X_res, y_res)
    votes[feature_names[sfm_rf.get_support()]] += 1
    
    # 模型 5: LightGBM
    lgb_model = lgb.LGBMClassifier(n_estimators=100, random_state=42, verbose=-1).fit(X_res, y_res)
    sfm_lgb = SelectFromModel(lgb_model, max_features=top_k).fit(X_res, y_res)
    votes[feature_names[sfm_lgb.get_support()]] += 1
    
    # 筛选得票数 >= 2 的特征
    selected_features = votes[votes >= 2].index.tolist()
    return votes, selected_features

# 模拟运行
X_dummy = np.random.randn(200, 10)
y_dummy = np.array([1]*15 + [0]*185)
feats = [f'Feat_{i}' for i in range(10)]

vote_scores, selected = ensemble_feature_selection(X_dummy, y_dummy, feats)
print("特征得票情况:\n", vote_scores)
print("最终保留的核心特征:", selected)

3.3 阶段三:基于贝叶斯优化的客户挖掘建模 (针对问题三)

解题思路

对品牌 1、品牌 2 和品牌 3 的客户分别建立分类预测模型。比较随机森林、LightGBM、XGBoost、CatBoost 的表现,引入 贝叶斯优化 (Bayesian Optimization) 搜索最优超参数,以 ROC-AUCF1-Score 作为调优目标。

预测性能对比表

通过 5 折交叉验证,各模型优化后的最终评估表现如下:

品牌 最佳匹配模型 PDF 最佳超参数组合 F1-Score PDF ROC-AUC PDF 评语
合资品牌 (1) 随机森林 max_depth=5, n_estimators=70, min_samples_leaf=3 0.959 0.978 泛化性能极稳定,抗噪能力强。
自主品牌 (2) LightGBM learning_rate=0.015, num_leaves=35, max_depth=7 0.963 0.971 对非线性高维组合特征拟合极佳。
新势力品牌 (3) 随机森林 / XGBoost max_depth=8, n_estimators=100, min_samples_split=3 0.918 0.960 样本特征较稀疏,树深度需适度控制。
Python 实现:LightGBM 模型训练与贝叶斯优化

Python

python 复制代码
import lightgbm as lgb
from bayes_opt import BayesianOptimization
from sklearn.metrics import f1_score, roc_auc_score
from sklearn.model_selection import train_test_split

def tune_and_train_lgb(X, y):
    """
    LightGBM 贝叶斯超参数优化与模型训练
    """
    X_train, X_val, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
    
    def lgb_eval(num_leaves, max_depth, learning_rate, n_estimators):
        params = {
            'num_leaves': int(num_leaves),
            'max_depth': int(max_depth),
            'learning_rate': float(learning_rate),
            'n_estimators': int(n_estimators),
            'objective': 'binary',
            'metric': 'auc',
            'verbose': -1,
            'random_state': 42
        }
        clf = lgb.LGBMClassifier(**params)
        clf.fit(X_train, y_train)
        preds = clf.predict_proba(X_val)[:, 1]
        return roc_auc_score(y_test, preds)

    # 设定参数搜索空间
    pbounds = {
        'num_leaves': (15, 63),
        'max_depth': (3, 10),
        'learning_rate': (0.01, 0.2),
        'n_estimators': (50, 200)
    }

    optimizer = BayesianOptimization(f=lgb_eval, pbounds=pbounds, random_state=42, verbose=0)
    optimizer.maximize(init_points=5, n_iter=15)
    
    best_params = optimizer.max['params']
    best_params['num_leaves'] = int(best_params['num_leaves'])
    best_params['max_depth'] = int(best_params['max_depth'])
    best_params['n_estimators'] = int(best_params['n_estimators'])
    best_params['objective'] = 'binary'
    best_params['verbose'] = -1
    
    final_model = lgb.LGBMClassifier(**best_params)
    final_model.fit(X_train, y_train)
    
    return final_model, best_params

# 模拟建模调用
X_dummy_train = np.random.randn(500, 8)
y_dummy_train = np.random.choice([0, 1], 500, p=[0.7, 0.3])

model, params = tune_and_train_lgb(X_dummy_train, y_dummy_train)
print("最优贝叶斯调参结果:", params)
附件三 15 名目标客户预测结果表 (模拟/标准示范)

基于阶段三训练完成的模型,对附件三中的 15 名客户进行可能性推断:

客户编号 对应品牌 DOCX 预测购买概率 PDF+ 1 预测判定 PDF+ 1 核心决策归因
1 品牌 1 (合资) 67.8% 购买 满意度各项评分均衡,财务杠杆较低。
2 品牌 1 (合资) 8.0% 不购买 车贷占比过高,电池满意度低。
3 品牌 1 (合资) 2.5% 不购买 (Q4选定) 经济性得分严重落后于均值。
6 品牌 2 (自主) 92.3% 购买 经济性与安全满意度得分极高。
9 品牌 2 (自主) 3.4% 不购买 (Q4选定) 电池体验得分存在短板。
14 品牌 3 (新势力) 6.1% 不购买 (Q4选定) 舒适性评价偏低,无房贷车贷压力。

3.4 阶段四:服务难度约束下的多目标优化 (针对问题四)

解题思路

题目要求:在短时间内提升 a1 \\sim a8 各指标满意度得分(提升上限不超过 5%),且提升 5% 的服务难度是提升 1% 的 5 倍(即服务难度与提升百分点成正比)。在每个品牌中选出 1 名未购买的客户实施针对性策略。

建立优化决策逻辑:

  • 目标 1:最小化总服务提升难度:\\text{Min } \\sum c_i \\cdot \\Delta x_i

    cite: 9, 10

  • 目标 2:最大化客户购买概率转化率:\\text{Max } \\Delta P(y=1)

    cite: 9, 10

  • 约束条件:总满意度提升比例 \\le 5\\%,且单项得分提升后不超过 100 分cite: 4, 9, 10

从附件三中选定 3 名未购买的目标客户cite: 4, 9

  • 品牌 1 :选择 3号客户

  • 品牌 2 :选择 9号客户

  • 品牌 3 :选择 14号客户

Python 实现:基于网格搜索的服务提升优化

Python

python 复制代码
def optimize_marketing_strategy(model, customer_profile, score_indices, max_diff_budget=5):
    """
    营销服务提升多目标优化求解器
    """
    base_profile = customer_profile.copy()
    base_pred = model.predict_proba([base_profile])[0][1]
    
    best_conversion = 0
    best_strategy = None
    min_difficulty = float('inf')
    
    # 构建满意度增加值的组合网格 (假设每个指标增加 0~10分)
    grid_search_space = [0, 2, 4, 6, 8, 10]
    
    from itertools import product
    for increments in product(grid_search_space, repeat=len(score_indices)):
        # 计算总提升服务难度 (与百分点成正比)
        total_increment_pct = sum(increments) / len(score_indices)
        if total_increment_pct > max_diff_budget:
            continue  # 超过 5% 的服务难度预算上限
            
        temp_profile = base_profile.copy()
        valid_flag = True
        for idx, inc in zip(score_indices, increments):
            temp_profile[idx] = min(100, temp_profile[idx] + inc)
            
        # 预测调整后的购买概率
        new_pred = model.predict_proba([temp_profile])[0][1]
        prob_gain = new_pred - base_pred
        
        # 求解准则:优先追求成功转换(购买概率升至临界点以上)或增益最大且难度最小
        if prob_gain > best_conversion:
            best_conversion = prob_gain
            best_strategy = increments
            min_difficulty = sum(increments)
            
    return base_pred, base_pred + best_conversion, best_strategy, min_difficulty

# 模拟优化运行
mock_customer = np.array([76.2, 74.6, 66.7, 88.8, 88.8, 91.6, 99.9, 99.9])
score_idx = [0, 1, 2, 3] # 关注 a1-a4
base_p, opt_p, strat, diff = optimize_marketing_strategy(model, mock_customer, score_idx)
print(f"优化前概率: {base_p:.4f} -> 优化后概率: {opt_p:.4f}")
print("各维度满意度得分推荐提升值 (a1-a4):", strat)

四、 决策建议与商业落地 (针对问题五)

根据定量建模与归因分析结果,向销售部门提交如下精准营销决策建议(控制在 500 字以内)cite: 4

📝 销售部门电动汽车精准营销策略建议书

1. 品牌差异化资源配置

  • 合资品牌 (主推策略):目标客户满意度基础最高。应主打"高保障与低使用成本",重点针对客户关心的电池耐用度(a1)与经济保值率(a3)展开宣传cite: 9, 10,推荐提供"电池终身质保"或"免费充电额度"以消除财务顾虑。

  • 自主品牌 (性价比策略):客户对车辆安全(a4)与动力表现(a5)极为敏感cite: 9, 10。建议在试驾环节增设复杂路况爬坡与紧急制动体验,并联合金融机构推出免息低首付方案,对冲车贷(B17)带来的购买阻力cite: 9

  • 新势力品牌 (体验驱动策略):客户核心痛点在于驾乘舒适度(a2)与操控智能化(a6cite: 9, 10。销售端应着重营造车载舒适空间,提供免费试驾与高级座舱选装包福利。

2. 目标客群精准画像与转化 优先锁定本地户口、已婚、自由职业或中等收入家庭cite: 9。对于潜在临界客户(如 3 号、9 号、14 号)cite: 9,无需全维度提升满意度,只需将 80% 的服务资源集中于其核心短板维度(如单独提升合资品牌客户的经济性体验)cite: 9,即可在不超过 5% 的服务难度成本下实现客户购买概率的最大化飞跃cite: 4, 9, 10

五、 竞赛总结与国奖论文加分项

5.1 论文写作与排版避坑指南

  1. 纯学术表达:正文中切忌粘贴原始代码段,应将算法过程转化为伪代码框图、算法流程图或逻辑步骤说明。

  2. 图表占位与高精可视化 :所有图表均须标注图图题与表头,如 图 1: 多模型特征选择投票得分直方图,使用 Seaborn/Nature 学术配色提升视觉质感。

  3. 数据敏感性检验:在论文后半部分主动增加"灵敏度分析"章节,微调 SMOTE 采样比例或优化权重,验证分类概率的波动范围,展现模型的严谨性与鲁棒性。

本文方案逻辑与 Python 源码框架均遵循数学建模国奖标准,可作为自动化数据分析与精准营销类赛题的通用解题模板。

相关推荐
数模竞赛Paid answer1 小时前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯
数模竞赛Paid answer17 小时前
2025年五一杯数学建模A题支路车流量推测问题求解全过程论文及程序
数学建模·数据分析·五一杯
Tasiorh19 小时前
数学建模预测模型汇总
数学建模
数模竞赛Paid answer2 天前
2025年深圳杯数学建模B题LED显示屏颜色转换设计与校正解题全过程文档及程序
数学建模·数据分析·深圳杯
Tasiorh2 天前
《SVM支持向量机》在数学建模中实际运用
算法·机器学习·支持向量机·数学建模·svm
算法黑哥2 天前
2026数学建模Latex快速全局精讲
数学建模
维度攻城狮4 天前
基于状态空间方程的倒立摆控制方法详解——从数学建模到Python仿真实现
python·数学建模·倒立摆·状态空间
Tasiorh4 天前
《熵权法》在数学建模中实际运用
数学建模·topsis·熵权法·美赛·评价类
NoteStream10 天前
从数学建模到电子信息:我的编程学习路线规划与成长记录
c语言·数据结构·c++·学习·数学建模