1. 从“影响评价”到“数据驱动决策”一个建模者的实战复盘去年带队参加电工杯B题“人工智能对大学生学习影响的评价”一出来我们团队就意识到这绝不是一个简单的“好”或“坏”的判断题。它本质上是一个典型的多指标综合评价问题但内核却是一个数据驱动的决策支持系统构建过程。题目要求我们构建评价模型但更深层的需求是如何用数学语言和计算工具将“人工智能”这个抽象、多维的概念与“学习影响”这个同样复杂的结果建立起可量化、可比较、可解释的关联。这不仅仅是套个AHP层次分析法或者TOPSIS优劣解距离法公式就能交差的它考验的是对问题本质的拆解能力、对数据工具的驾驭能力以及将数学模型转化为实际洞察的叙事能力。今天我就结合我们当时的解题思路、具体的Python实现代码以及赛后反思的一些关键点和大家完整复盘一遍这个项目。无论你是正在备赛数学建模的新手还是对数据分析和评价模型感兴趣的实践者希望这篇近万字的“踩坑”与“填坑”实录能给你带来一些实实在在的参考。2. 破题第一步构建一个“接地气”的评价指标体系拿到题目最忌讳的就是立刻打开文献找一堆“学习投入”、“学习满意度”、“学术绩效”的现成量表往里套。数学建模不是文献综述评价指标必须服务于你的模型目标和数据可得性。我们的思路是先回归常识把“人工智能对学习的影响”这个宏大的命题拆解成几个可操作的维度。2.1 维度拆解影响发生在哪些环节我们团队经过几轮“头脑风暴”结合自身作为大学生的体验将影响归纳为四个核心维度学习效率与效果维度这是最直接的影响。AI工具能否帮助我们更快地查找资料如ChatGPT、理解复杂概念如Wolfram Alpha、完成作业如代码辅助、论文润色最终是否提升了我们的成绩或知识掌握深度学习行为与习惯维度AI的介入是否改变了我们的学习模式是变得更依赖“提问-获取答案”还是学会了更高效地利用AI进行探索式学习自主学习时间是增加了还是减少了认知负荷与心理体验维度使用AI是减轻了学习压力还是因为担心学术诚信或技术依赖而产生了新的焦虑对学习本身的兴趣和自信心有何影响技能发展与适应性维度在与AI协作的过程中我们是否培养了新的技能比如“提示词工程”、批判性评估AI输出、人机协作解决问题的能力这对未来就业有何影响这四个维度基本覆盖了“过程-结果”、“行为-心理”、“当下-未来”等多个层面构成了我们指标体系的一级指标。2.2 指标量化如何把感觉变成数字确定了维度下一步就是为每个维度找到可量化的二级指标。这里的关键是可操作化。你不能直接问“你的学习效率提高了吗”因为回答是主观的、模糊的。我们需要设计具体的问题或寻找代理数据。我们当时设计了一份调查问卷这是此类题目最常见的数据来源假设部分指标示例如下对于“学习效率与效果”任务完成时间缩短率使用AI辅助后完成某项特定学习任务如文献综述、编程作业所需时间相比之前的预估减少百分比。问卷中可设区间选项如“缩短20%以上”、“缩短10%-20%”等并赋予分值。知识测验得分提升针对某个AI辅助学习过的知识点进行前后测计算得分提升率。可通过假设数据模拟。GPA或课程成绩变化长期使用AI与否的学生群体平均成绩对比。需注意控制其他变量实践中常用虚拟变量回归分析但在有限时间的比赛中可简化为分组对比。对于“学习行为与习惯”AI工具使用频率每日/每周使用AI进行学习的次数或时长。学习资源搜索方式变化优先使用AI问答 vs. 传统搜索引擎/图书馆数据库的比例。深度学习行为指标在使用AI解答后是否会追问、验证或拓展相关问题的比例。对于“认知负荷与心理体验”学习压力自评分数使用1-5分或1-7分量表。学术诚信焦虑程度对使用AI可能带来的作弊风险的担忧程度。学习兴趣评分对AI辅助学习的科目是否更感兴趣。对于“技能发展与适应性”提示词编写能力自评对自己有效提问、引导AI能力的评分。信息甄别能力自信度评估自己判断AI输出信息真伪、质量的信心。对AI协作的就业准备信心认为所学技能对未来职场有帮助的程度。注意在实际比赛中我们并没有进行真实的问卷调查而是基于这些指标的逻辑合成了模拟数据集。这是数学建模竞赛中处理此类问题的常见且合理的方法关键在于模拟的数据要符合常识和统计规律如正态分布、相关性等。我们使用Python的numpy和pandas生成了500名学生的模拟数据。2.3 指标预处理无量纲化与方向一致化收集或模拟到数据后不能直接扔进模型。因为指标单位不同有的是百分比有的是分数有的是频率且方向不同有的是正向指标数值越大越好如成绩提升率有的是适度指标如使用频率过高可能意味着依赖。因此必须进行预处理。正向化将所有指标转化为极大型指标。对于极小型指标如焦虑程度常用倒数法或差值法(max - x)。对于适度指标可以先计算每个样本值与最优值如我们认为的“合理使用频率”中值的绝对距离然后将其转化为极小型指标后再正向化。无量纲化消除量纲影响。最常用的是Z-score标准化(x - mean) / std和Min-Max归一化(x - min) / (max - min)。Z-score标准化后的数据均值为0标准差为1适用于后续涉及距离计算的模型如TOPSIS、聚类。Min-Max归一化将数据缩放到[0,1]区间更直观。我们的选择由于后续计划使用TOPSIS模型基于欧氏距离我们选择了Z-score标准化。这能保证不同指标在距离计算中的权重不受原始量纲影响。import pandas as pd import numpy as np # 假设df是我们的原始数据DataFrame列名为各个指标名称 # 例如time_reduction_rate, score_improvement, usage_freq, stress_level... def preprocess_data(df): 数据预处理函数正向化与标准化 df_processed df.copy() # 1. 正向化处理 (假设stress_level焦虑程度是极小型指标需正向化) # 使用差值法 stress_level_positive max(stress_level) - stress_level if stress_level in df_processed.columns: df_processed[stress_level] df_processed[stress_level].max() - df_processed[stress_level] # 2. Z-score 标准化 from sklearn.preprocessing import StandardScaler scaler StandardScaler() # 选择所有需要标准化的数值型列排除可能存在的ID列等 numeric_cols df_processed.select_dtypes(include[np.number]).columns.tolist() df_processed[numeric_cols] scaler.fit_transform(df_processed[numeric_cols]) return df_processed, scaler # 返回处理后的数据和scaler对象可用于后续新数据 # 生成模拟数据示例 np.random.seed(2023) n_samples 500 data { time_reduction_rate: np.random.normal(15, 5, n_samples), # 时间缩短率均值15%标准差5% score_improvement: np.random.normal(8, 3, n_samples), # 成绩提升均值8分标准差3 usage_freq: np.random.poisson(5, n_samples), # 使用频率泊松分布均值5次/周 stress_level: np.random.randint(1, 6, n_samples), # 压力水平1-5分 interest_score: np.random.normal(4, 0.8, n_samples), # 兴趣评分均值4标准差0.8 } df_raw pd.DataFrame(data) print(原始数据前5行\n, df_raw.head()) df_processed, scaler preprocess_data(df_raw) print(\n标准化后数据前5行\n, df_processed.head()) print(\n标准化后数据描述均值应接近0标准差接近1\n, df_processed.describe().round(2))3. 模型核心组合拳——AHP-熵权法-TOPSIS单一的模型往往有局限性。我们采用了一种“组合赋权综合评价”的思路即用主观赋权法AHP和客观赋权法熵权法结合来确定指标权重再用TOPSIS进行最终排序。这样既能融入我们对各维度重要性的专业判断又能尊重数据本身的信息量。3.1 第一步主观赋权——层次分析法AHPAHP的核心是通过两两比较确定各层指标的相对重要性。我们首先对四个一级指标效率效果、行为习惯、心理体验、技能发展进行两两比较。实操步骤与代码实现构建判断矩阵根据Saaty的1-9标度法我们团队讨论后得到如下判断矩阵示例实际需根据团队共识效率效果 vs. 行为习惯稍微重要赋值3效率效果 vs. 心理体验明显重要赋值5效率效果 vs. 技能发展强烈重要赋值7... 以此类推形成4x4矩阵。一致性检验这是AHP可靠性的关键。计算一致性比率CRConsistency Ratio。通常要求CR 0.1否则需要调整判断矩阵。计算权重通过计算判断矩阵的最大特征值对应的特征向量并归一化得到各一级指标的权重。import numpy as np def ahp_weight(matrix): 计算AHP权重并进行一致性检验 matrix: 判断矩阵numpy array n matrix.shape[0] # 计算特征值和特征向量 eigenvalues, eigenvectors np.linalg.eig(matrix) max_eigval max(eigenvalues.real) max_eigvec eigenvectors[:, eigenvalues.real.argmax()].real # 计算权重向量归一化 weights max_eigvec / max_eigvec.sum() # 一致性检验 CI (max_eigval - n) / (n - 1) RI {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45} # 平均随机一致性指标 CR CI / RI[n] return weights, CR, CI # 示例一级指标判断矩阵 # 假设效率[0] 行为[1] 心理[2] 技能[3] judgment_matrix np.array([ [1, 3, 5, 7], # 效率 vs [效率, 行为, 心理, 技能] [1/3, 1, 3, 5], [1/5, 1/3, 1, 3], [1/7, 1/5, 1/3, 1] ]) weights_ahp, CR, CI ahp_weight(judgment_matrix) print(AHP计算的一级指标权重, weights_ahp.round(4)) print(一致性指标 CI:, CI.round(4)) print(一致性比率 CR:, CR.round(4)) if CR 0.1: print(判断矩阵一致性可接受。) else: print(警告判断矩阵一致性不可接受需调整)对于二级指标可以对每个一级指标下的子指标再分别构建判断矩阵计算局部权重最后用一级指标权重加权合成全局权重。这一步工作量较大但逻辑相同。3.2 第二步客观赋权——熵权法Entropy Weight熵权法的思想是指标数据离散程度越大所包含的信息量越多在评价中应赋予更大的权重。这完全由数据驱动避免了主观偏见。计算过程数据标准化我们已经做了Z-score标准化但熵权法通常要求数据非负。因此可以对标准化后的数据做平移x x - min 1或直接使用Min-Max归一化到[0,1]区间的结果。我们选择后者进行熵权计算。计算比重第i个样本在第j个指标下的比重p_ij x_ij / sum(x_ij)。计算信息熵第j个指标的信息熵e_j -k * sum(p_ij * ln(p_ij))其中k 1/ln(n_samples)。计算差异系数d_j 1 - e_j。熵值越小差异系数越大指标越重要。计算权重w_j d_j / sum(d_j)。def entropy_weight(data): 计算熵权法权重 data: 预处理后的数据DataFrame要求数值非负可使用Min-Max归一化后的数据 # 确保数据非负如果使用Z-score数据需要先平移 data data - data.min() 1e-6 # 加一个极小值防止为0 # 计算比重 p data / data.sum(axis0) # 计算信息熵 k 1 / np.log(data.shape[0]) e -k * (p * np.log(p)).sum(axis0) # 计算差异系数和权重 d 1 - e w d / d.sum() return w.values # 为了熵权法我们使用Min-Max归一化后的数据从Z-score转换或重新处理 from sklearn.preprocessing import MinMaxScaler mms MinMaxScaler() df_minmax pd.DataFrame(mms.fit_transform(df_raw), columnsdf_raw.columns) # 对原始数据或处理后的数据归一化 weights_entropy entropy_weight(df_minmax) print(熵权法计算的各指标权重, dict(zip(df_minmax.columns, weights_entropy.round(4))))3.3 第三步组合赋权与TOPSIS综合评价得到主观权重W_ahp和客观权重W_entropy后我们采用线性加权组合W_combined α * W_ahp (1-α) * W_entropy。α是一个权衡系数通常取0.5表示主客观同等重要也可以根据偏好调整。我们取α0.5。然后使用组合权重对标准化后的数据Z-score进行加权得到加权决策矩阵。最后应用TOPSIS模型。TOPSIS逼近理想解排序法步骤构建加权规范矩阵V Z * W其中Z是标准化矩阵我们用的Z-score矩阵W是组合权重对角阵。确定正理想解V和负理想解V-正理想解是每个指标的最大值正向指标负理想解是每个指标的最小值。计算各样本到正负理想解的距离欧氏距离。计算相对贴近度C_i D-_i / (D_i D-_i)。C_i越接近1说明该样本越接近正理想解评价越高。def combined_weight_topsis(data_normalized, weights_ahp, weights_entropy, alpha0.5): 组合赋权TOPSIS综合评价 data_normalized: 标准化后的数据Z-scoreDataFrame weights_ahp: AHP法得到的权重向量需与指标顺序对应 weights_entropy: 熵权法得到的权重向量 alpha: 主观权重系数 # 1. 组合权重 weights_combined alpha * weights_ahp (1 - alpha) * weights_entropy # 确保权重和为1 weights_combined weights_combined / weights_combined.sum() print(组合权重, dict(zip(data_normalized.columns, weights_combined.round(4)))) # 2. 构建加权规范矩阵 V data_normalized * weights_combined # 3. 确定正负理想解 V_positive V.max(axis0) # 假设所有指标均已正向化越大越好 V_negative V.min(axis0) # 4. 计算距离 D_positive np.sqrt(((V - V_positive) ** 2).sum(axis1)) D_negative np.sqrt(((V - V_negative) ** 2).sum(axis1)) # 5. 计算相对贴近度 C D_negative / (D_positive D_negative 1e-8) # 加极小值防止除零 return C, weights_combined # 假设我们已经有了四个一级指标的AHP权重并平均分配到其下的二级指标实际应分别计算 # 这里简化处理假设我们有5个指标AHP权重需要与之对应。我们手动分配一个示例。 # 注意此处的weights_ahp_array需要与df_processed的列顺序对应且长度一致。 # 这是一个示例实际应根据AHP对二级指标的计算结果来。 example_ahp_weights_for_all_indicators np.array([0.3, 0.25, 0.2, 0.15, 0.1]) # 对应5个指标 # 熵权法权重已经计算过 weights_entropy # 计算TOPSIS得分 topsis_scores, final_weights combined_weight_topsis(df_processed, example_ahp_weights_for_all_indicators, weights_entropy, alpha0.5) # 将得分添加到原始数据框 df_result df_raw.copy() df_result[Topsis_Score] topsis_scores df_result[Rank] df_result[Topsis_Score].rank(ascendingFalse, methodmin) # 得分越高排名越前 print(\n综合评价结果前10名) print(df_result[[time_reduction_rate, score_improvement, Topsis_Score, Rank]].sort_values(Rank).head(10))4. 模型验证、可视化与深度分析模型跑出结果只是开始更重要的是解释结果、验证稳健性并通过可视化让结论一目了然。4.1 稳健性检验权重敏感性分析我们的组合权重中α取0.5这个选择是否稳健如果α变成0.3或0.7学生排名会发生剧烈变化吗进行敏感性分析是提升论文说服力的关键。方法让α在[0, 1]区间内以一定步长如0.1变化观察每个学生排名或前N名学生名单的变化情况。如果排名相对稳定说明模型稳健。def sensitivity_analysis(data_normalized, weights_ahp, weights_entropy, student_id0): 对某个特定学生索引为student_id进行权重系数alpha的敏感性分析 alphas np.arange(0, 1.1, 0.1) scores_vs_alpha [] ranks_vs_alpha [] all_scores_per_alpha [] for a in alphas: scores, _ combined_weight_topsis(data_normalized, weights_ahp, weights_entropy, alphaa) all_scores_per_alpha.append(scores) # 计算当前alpha下该学生的排名 rank (scores scores[student_id]).sum() 1 scores_vs_alpha.append(scores[student_id]) ranks_vs_alpha.append(rank) # 绘制敏感性分析图 import matplotlib.pyplot as plt fig, (ax1, ax2) plt.subplots(1, 2, figsize(12, 4)) ax1.plot(alphas, scores_vs_alpha, markero) ax1.set_xlabel(Alpha (主观权重系数)) ax1.set_ylabel(TOPSIS Score) ax1.set_title(f学生{student_id}得分随Alpha变化) ax1.grid(True) ax2.plot(alphas, ranks_vs_alpha, markers, colororange) ax2.set_xlabel(Alpha (主观权重系数)) ax2.set_ylabel(Rank) ax2.set_title(f学生{student_id}排名随Alpha变化) ax2.grid(True) # 排名是逆序y轴反转更直观排名1最好 ax2.invert_yaxis() plt.tight_layout() plt.show() # 也可以查看排名稳定性计算所有alpha下该学生排名的标准差 rank_std np.std(ranks_vs_alpha) print(f学生{student_id}在不同Alpha下的排名标准差为: {rank_std:.2f}) if rank_std 5: # 阈值可根据样本量调整 print(该学生的排名对权重系数变化不敏感模型在此处较稳健。) else: print(该学生的排名对权重系数变化较敏感需在结论中说明此局限性。) return all_scores_per_alpha # 对第一个学生进行敏感性分析 all_scores sensitivity_analysis(df_processed, example_ahp_weights_for_all_indicators, weights_entropy, student_id0)4.2 结果可视化让数据说话一份优秀的数模论文离不开清晰的图表。综合评价得分分布直方图直观展示全体学生受影响程度的分布情况是正态分布、偏态分布还是两极分化各维度得分雷达图/柱状图选取几个典型学生如总分最高、最低、平均展示他们在四个一级维度上的得分情况分析其优势维度和短板。指标权重对比图并列展示AHP权重、熵权法权重和组合权重体现主客观赋权的差异。聚类分析使用K-Means等算法对学生进行分群如“高效受益型”、“焦虑依赖型”、“无感型”等并可视化聚类结果可用PCA降维后散点图。import matplotlib.pyplot as plt import seaborn as sns from sklearn.decomposition import PCA from sklearn.cluster import KMeans # 设置中文字体如果环境支持 # plt.rcParams[font.sans-serif] [SimHei] # plt.rcParams[axes.unicode_minus] False # 1. 综合评价得分分布 plt.figure(figsize(10, 6)) plt.hist(df_result[Topsis_Score], bins30, edgecolorblack, alpha0.7) plt.xlabel(TOPSIS综合得分) plt.ylabel(学生人数) plt.title(人工智能对大学生学习影响的综合评价得分分布) plt.grid(True, axisy, linestyle--, alpha0.7) plt.show() # 2. 各维度得分对比假设我们有一级维度得分数据这里用原始指标近似模拟 # 我们需要先计算每个学生在四个维度上的平均得分假设指标已归属维度 # 这里仅为示例假设前两个指标属维度1第三个属维度2第四五个属维度3和4。 dim1_score df_processed[[time_reduction_rate, score_improvement]].mean(axis1) dim2_score df_processed[usage_freq] dim3_score df_processed[stress_level] # 已正向化 dim4_score df_processed[interest_score] dim_scores pd.DataFrame({效率效果: dim1_score, 行为习惯: dim2_score, 心理体验: dim3_score, 技能发展: dim4_score}) # 选取三个典型学生总分最高、最低、中位数附近 top_idx df_result[Rank].idxmin() # Rank1 bottom_idx df_result[Rank].idxmax() median_idx (df_result[Rank] df_result[Rank].median()).idxmax() fig, axes plt.subplots(1, 3, figsize(15, 4), subplot_kwdict(projectionpolar)) cases [(Top Student, top_idx), (Median Student, median_idx), (Bottom Student, bottom_idx)] for ax, (title, idx) in zip(axes, cases): values dim_scores.loc[idx].values angles np.linspace(0, 2*np.pi, len(values), endpointFalse).tolist() values np.concatenate((values, [values[0]])) # 闭合 angles angles[:1] # 闭合 ax.plot(angles, values, o-, linewidth2) ax.fill(angles, values, alpha0.25) ax.set_xticks(angles[:-1]) ax.set_xticklabels(dim_scores.columns) ax.set_title(title, size14, weightbold) plt.suptitle(典型学生在各维度的表现雷达图, size16) plt.tight_layout() plt.show() # 3. 权重对比图 weights_comparison pd.DataFrame({ AHP: example_ahp_weights_for_all_indicators, Entropy: weights_entropy, Combined: final_weights }, indexdf_processed.columns) weights_comparison.plot(kindbar, figsize(10, 6)) plt.title(不同赋权方法下的指标权重对比) plt.ylabel(权重) plt.xticks(rotation45) plt.legend() plt.grid(True, axisy, linestyle--, alpha0.7) plt.tight_layout() plt.show() # 4. K-Means聚类分析 (以标准化后的数据为基础) # 选择聚类数这里用肘部法则简单演示 inertia [] K_range range(1, 11) for k in K_range: kmeans KMeans(n_clustersk, random_state2023, n_init10) kmeans.fit(df_processed) inertia.append(kmeans.inertia_) plt.figure(figsize(8,5)) plt.plot(K_range, inertia, bo-) plt.xlabel(Number of clusters (K)) plt.ylabel(Inertia) plt.title(Elbow Method for Optimal K) plt.grid(True) plt.show() # 假设我们选择K3 kmeans_final KMeans(n_clusters3, random_state2023, n_init10) cluster_labels kmeans_final.fit_predict(df_processed) df_result[Cluster] cluster_labels # 用PCA降维到2维进行可视化 pca PCA(n_components2) df_pca pca.fit_transform(df_processed) plt.figure(figsize(10, 8)) scatter plt.scatter(df_pca[:, 0], df_pca[:, 1], ccluster_labels, cmapviridis, alpha0.6, edgecolorsw, s80) plt.xlabel(Principal Component 1) plt.ylabel(Principal Component 2) plt.title(学生聚类结果可视化 (PCA降维)) plt.colorbar(scatter, labelCluster Label) # 标注每个簇的中心点 centers_pca pca.transform(kmeans_final.cluster_centers_) plt.scatter(centers_pca[:, 0], centers_pca[:, 1], cred, markerX, s200, labelCluster Centers) plt.legend() plt.grid(True, linestyle--, alpha0.5) plt.tight_layout() plt.show() # 分析每个簇的特征 cluster_profile df_result.groupby(Cluster).mean() print(\n各聚类群体的特征均值) print(cluster_profile[[time_reduction_rate, score_improvement, usage_freq, stress_level, interest_score, Topsis_Score]])4.3 深度分析从排名到洞察得到排名和聚类后真正的分析才开始。我们需要回答高分群体特征综合得分最高的20%学生他们在各个指标上有什么共同点是使用频率适中且效率提升显著还是心理适应良好且技能发展快低分群体问题得分低的学生主要短板在哪个维度是过度使用导致效率反而下降还是心理焦虑严重抵消了工具带来的便利聚类群体画像根据聚类结果我们可以给每个群体打标签。例如簇0高效均衡型各项指标均较好尤其是效率提升和兴趣增加明显使用频率合理压力小。是AI辅助学习的“模范生”。簇1焦虑依赖型使用频率最高但压力水平也高效率提升不明显。可能陷入了“离不开但用不好”的困境。簇2无感疏离型各项指标都偏低使用频率低影响甚微。可能是对AI工具不了解、不信任或不需要。提出针对性建议基于以上分析可以向学校、教育者或学生本人提出建议。例如对“焦虑依赖型”学生应加强“如何与AI有效协作”的培训而非禁止使用对“无感疏离型”可以展示AI在特定学习场景下的成功案例激发其尝试意愿。5. 完整代码框架与参赛心得将以上所有步骤整合形成一个清晰的、可执行的Python脚本是论文附录的重要组成部分。代码要结构清晰注释完整。5.1 项目代码结构一个建议的项目目录结构如下AI_Learning_Impact_Evaluation/ ├── data/ │ ├── raw_data.csv # 原始模拟/调查数据 │ └── processed_data.csv # 预处理后的数据 ├── src/ │ ├── 01_data_preprocessing.py # 数据清洗、正向化、标准化 │ ├── 02_ahp_weight.py # AHP权重计算 │ ├── 03_entropy_weight.py # 熵权法计算 │ ├── 04_combined_topsis.py # 组合赋权TOPSIS计算 │ ├── 05_sensitivity_analysis.py # 敏感性分析 │ ├── 06_visualization.py # 所有可视化图表生成 │ └── 07_cluster_analysis.py # 聚类分析 ├── output/ │ ├── figures/ # 保存生成的图表 │ └── results.csv # 最终包含得分、排名、聚类的结果文件 └── main.py # 主程序按顺序调用各模块main.py示例骨架# main.py import pandas as pd import numpy as np from src import data_preprocessing, ahp_weight, entropy_weight, combined_topsis, sensitivity_analysis, visualization, cluster_analysis def main(): print(Step 1: 数据加载与预处理...) df_raw pd.read_csv(./data/raw_data.csv) df_processed, scaler data_preprocessing.preprocess_data(df_raw) df_processed.to_csv(./data/processed_data.csv, indexFalse) print(Step 2: AHP权重计算...) # 定义判断矩阵这里需要根据实际指标层级定义多个矩阵 judgment_matrix_level1 np.array([...]) # 一级指标矩阵 weights_ahp_level1, CR, _ ahp_weight.ahp_weight(judgment_matrix_level1) # ... 计算二级指标权重并合成全局AHP权重 weights_ahp_global weights_ahp_global ... print(Step 3: 熵权法计算...) weights_entropy entropy_weight.calculate_entropy_weight(df_processed) # 注意熵权法可能需要Min-Max数据 print(Step 4: 组合赋权TOPSIS综合评价...) topsis_scores, final_weights combined_topsis.combined_weight_topsis( df_processed, weights_ahp_global, weights_entropy, alpha0.5 ) df_result df_raw.copy() df_result[Topsis_Score] topsis_scores df_result[Rank] df_result[Topsis_Score].rank(ascendingFalse, methodmin) print(Step 5: 敏感性分析...) sensitivity_analysis.plot_sensitivity(df_processed, weights_ahp_global, weights_entropy) print(Step 6: 聚类分析...) df_result cluster_analysis.kmeans_clustering(df_processed, df_result, n_clusters3) print(Step 7: 生成可视化图表...) visualization.plot_score_distribution(df_result) visualization.plot_radar_chart(df_processed, df_result, dim_scores) visualization.plot_weight_comparison(weights_ahp_global, weights_entropy, final_weights) visualization.plot_cluster_pca(df_processed, df_result) print(Step 8: 保存结果...) df_result.to_csv(./output/results.csv, indexFalse) print(所有分析完成) if __name__ __main__: main()5.2 参赛实战心得与避坑指南时间管理是生命线三天比赛第一天必须完成选题、思路构建和指标设计。第二天上午完成数据预处理和基础建模AHP、熵权、TOPSIS下午完成分析、可视化和初稿撰写。第三天全天用于模型优化、敏感性分析、论文打磨和摘要精修。切忌在一个环节比如调一个图的颜色纠结太久。论文 模型 代码评委看论文的时间很短。模型不必追求最复杂但逻辑必须清晰、完整、自洽。AHP-熵权-TOPSIS这个组合拳之所以经典就是因为其逻辑链条完整易于在论文中阐述。你的论文要有“故事线”问题是什么 - 如何拆解指标体系- 如何量化数据- 如何评价模型- 结果是什么 - 结果意味着什么分析- 有什么建议。可视化是提分利器一图胜千言。雷达图、聚类散点图、权重对比图、得分分布图这些图表要做得专业、清晰、美观。每个图都必须有标题、坐标轴标签、图例如果需要并在正文中有明确的引用和解释。不要堆砌图表每个图都要服务于一个明确的论点。代码的“可展示性”附录里的代码不要求运行但要求整洁。多用函数封装加上必要的注释。关键的算法步骤如AHP一致性检验、TOPSIS距离计算可以保留核心代码块。像数据清洗这种冗长步骤可以简要带过。务必删除调试用的print语句和无关的测试代码。关于“模拟数据”的交代如果使用模拟数据必须在论文中明确说明“由于实际数据获取的限制本文依据指标内涵和常见统计分布合成了具有代表性的模拟数据集以验证模型有效性。该方法在学术研究中常见且不影响模型通用性。” 并简要描述你的数据生成逻辑如正态分布、均匀分布等。警惕“为了组合而组合”AHP和熵权法结合的前提是你认为主客观信息都重要。如果题目有明确的倾向如“请从学生视角评价”可能主观赋权AHP更合适如果强调“基于客观数据”则熵权法或CRITIC等客观法更佳。我们的组合是一种稳健策略但要在论文中论述其合理性。Python环境与库管理赛前准备好稳定的Python环境推荐Anaconda并确保numpy,pandas,scikit-learn,matplotlib,seaborn等常用库已安装。可以将所有代码和依赖写进一个requirements.txt文件显得更专业。这个项目从看到题目的茫然到拆解指标的争论再到代码调试的深夜最后到论文成稿的如释重负整个过程是对系统性思维和快速解决问题能力的一次绝佳锻炼。AI对学习的影响评价本身没有标准答案但通过这样一套严谨的数据建模流程我们至少能给出一个有理有据、逻辑自洽的“我们的答案”。而这正是数学建模的魅力所在。