
1. 为什么数学建模里总绕不开斯皮尔曼相关系数1.1 从一次国赛赛题说起2023年国赛C题有一道关于蔬菜品类定价与销售量的题目当时很多队伍在相关性分析这一块翻了车。题目给的数据里有明显的非正态分布特征几个品类的日销售量分布右侧拖着长长的尾巴个别品类甚至出现了极端值。有队伍不加思考直接跑了皮尔逊相关系数结果把几个本来相关性并不强的品类报成了强相关后面的回归模型跟着一起跑偏。而用斯皮尔曼相关系数重新算一遍之后结论完全不同设问里几个关键判断的走向也随之改变。这不是个别现象。近五年的国赛、美赛、华为杯题目里相关性分析几乎是必考动作。但绝大多数参赛队伍只会在论文里机械地放一个corrcoef的结果根本不去想这个数到底适不适合当前的数据形态。更常见的情况是很多队伍根本不知道什么时候该用皮尔逊、什么时候该用斯皮尔曼也不知道这两种相关系数在结果差异很大时意味着什么。我写这一篇就是要彻底讲清楚斯皮尔曼相关系数在数学建模里的完整用法它是什么、怎么算、在建模比赛中怎么用、踩过哪些坑、论文里怎么写才不会被评委挑毛病。这篇文章不是单纯讲公式推导而是基于实际建模比赛中真实会遇到的数据情况来讲适合正在备战国赛、美赛、华为杯的本科生和研究生直接参考。1.2 皮尔逊和斯皮尔曼到底该选谁先说结论皮尔逊相关系数衡量的是两个变量之间的线性相关程度它要求数据近似服从正态分布、变量之间呈线性关系、并且对异常值敏感。而斯皮尔曼相关系数是一个基于秩的相关系数它把原始数据按大小排序得到秩次再对秩次计算皮尔逊相关系数。因为操作对象是秩而不是原始值斯皮尔曼对数据分布没有任何要求对异常值的敏感度也大大降低。举个直观的例子。假设你在分析某个电商平台商品销量和评价数量之间的关系。如果有个爆款商品销量是99999而其他商品销量都在几百到几千之间这个极端值会把皮尔逊相关系数拉得很高但实际上去掉这个点之后关系可能很弱。用斯皮尔曼的话99999和几千在排序上只差几名对结果的影响就小得多。因此在实际建模中我推荐一个非常实用的判断流程拿到两个变量先画散点图同时做正态性检验。如果数据近似正态、没有明显的极端异常值、散点图呈现清晰的线性趋势用皮尔逊如果数据明显偏态、存在极端值、变量关系是单调但非线性的比如指数型、对数型增长用斯皮尔曼如果其中一个变量本身就是等级数据比如满意度评分1到5、排名第1到第30直接用斯皮尔曼没有讨论余地。很多队伍在赛题里会遇到的是另一种情况变量之间关系未知数据量又不算大画散点图看不出明显形态。这时候我会直接同时算出皮尔逊和斯皮尔曼两个系数如果两者结论一致说明关系比较稳健如果差异巨大那就说明数据里有极端值或者非线性关系在作怪需要进一步排查而不是武断地选一个好看的数放进论文。1.3 斯皮尔曼相关系数的数学表达斯皮尔曼相关系数通常用希腊字母ρrho表示也有人用rs。它的定义是把n个样本的xi和yi分别排序得到每个样本在两个变量上的秩次R(xi)和R(yi)然后对这些秩次计算皮尔逊线性相关系数。当所有秩次没有并列也就是没有重复值时有一个非常简洁的简化公式ρ 1 - (6 × Σdi²) / (n × (n² - 1))其中di R(xi) - R(yi)即每个样本在两个变量上的秩次之差n是样本量。这个公式就是斯皮尔曼本人的原版定义。它的巧妙之处在于只要秩次没有并列秩次本身总是1到n这组整数的一个排列因此秩次的均值固定为(n1)/2结合这个约束可以化简出上述形式。如果存在并列秩次这个简化公式会有轻微偏差需要用完整定义对秩次直接计算皮尔逊相关系数。这里容易有一个误区。很多同学以为斯皮尔曼相关系数就是直接对原始数据做某种非线性变换其实不是。它的核心操作是排序也就是把数值大小转化为顺序信息所以它本质上衡量的是两个变量的单调相关性。什么叫单调相关就是x增大时y大体上也增大或减小但不一定按固定比例变化。线性相关是单调相关的特例所以对线性关系的数据皮尔逊和斯皮尔曼结论通常接近但对非线性但单调的关系皮尔逊可能低估甚至算不出相关性斯皮尔曼却能准确捕捉。这个特点让斯皮尔曼在实际比赛中极其好用因为现实中的变量关系很少是严格的直线。消费者满意度随着等待时间增加而下降往往开始缓慢、后面加速城市GDP和房价之间的关系也经常呈现非线性增长。你如果只会用皮尔逊就相当于只带了一把直线尺去量所有曲线。完全不现实。2. 数学建模中斯皮尔曼相关系数的核心细节2.1 完整定义 vs 简化公式什么时候有差别先看完整定义。设原始数据为(x1, y1), (x2, y2), …, (xn, yn)把x和y分别按从小到大排序得到每个观测的秩次R(xi)和R(yi)。比如有三个x值5、1、9按从小到大排列是1、5、9对应原顺序的秩次就是2、1、3。然后对这组秩次计算皮尔逊相关系数公式是ρ Σ[R(xi) - R̄x][R(yi) - R̄y] / √{Σ[R(xi) - R̄x]² × Σ[R(yi) - R̄y]²}其中R̄x和R̄y分别是x秩次和y秩次的均值。简化公式 ρ 1 - 6Σdi²/[n(n²-1)] 只适用没有并列秩次的情况。所谓并列秩次就是有两个或以上样本的x值完全相同或者y值完全相同。比如数据里有三个人的身高都是170cm那么它们的身高排名应该并列。处理方式通常是取它们本应占据的秩次的平均值。假设170cm本来应该排第3、第4、第5位那么三个并列为170的样本秩次都取4。这种操作叫“平均秩次”法也是scipy和R语言默认的处理方式。一旦有了并列秩次秩次就不再是1到n的完整整数排列简化公式的推导前提被破坏结果会出现偏差。样本量越小、并列秩次越多偏差越大。所以我的建议是只要出现并列秩次就不要用简化公式手工计算直接调用现成工具用完整定义算。如果你是在笔试或作业里需要手算恰好又有并列数据用完整定义老老实实算皮尔逊不要偷懒。2.2 斯皮尔曼相关系数的值域与解读口径斯皮尔曼相关系数的取值范围是[-1, 1]。ρ 1表示两个变量的秩次完全一致也就是x增大时y严格增大单调递增ρ -1表示秩次完全相反x增大时y严格减小单调递减ρ 0表示没有单调相关关系但要注意这不代表没有其他类型的关系比如U型曲线关系斯皮尔曼系数可能接近0。在建模比赛里怎么解读相关性强度我一般用这个经验标准|ρ| 0.3弱相关或不相关0.3 ≤ |ρ| 0.6中等相关0.6 ≤ |ρ| 0.8强相关|ρ| ≥ 0.8极强相关。这个标准和皮尔逊的解读口径基本一致方便统一写作。但这里必须提醒一个关键问题相关性强度的高低不仅取决于ρ的绝对值大小还取决于样本量n。n特别小时即使ρ很高也可能不显著n很大时即使ρ很低也可能统计显著。所以在论文里永远不能只看ρ的数值一定要同时看p值。举个例子n 10时算出来ρ 0.65查临界值表会发现对应p值可能在0.05左右徘徊不够显著而n 100时ρ 0.25对应的p值可能已经小于0.01统计上显著但实际相关性很弱。很多第一次参赛的队伍吃了这个亏用小样本数据算出一个很漂亮的ρ值结果被评委一句“样本量不足结果不显著”怼回来。2.3 用生活类比理解“秩”的本质我个人非常喜欢用选秀比赛的逻辑来解释斯皮尔曼相关系数的本质。想象你在给一批选手打分A评委和B评委各自打出具体的分数比如A评委给了82、87、90、71B评委给了65、73、80、58。其实你真正关心的不是两个评委的具体分数差多少而是他们给选手的排名是否一致。如果A评委认为选手3最好、选手2次之、选手1再次、选手4最差B评委的排名也恰好完全一致那不管两人的分数绝对值差距有多大他们的评价倾向是完全一致的。这就是斯皮尔曼相关系数的核心思想把具体的数值转化为相对顺序然后比较顺序的一致性。为什么在数学建模里这个思路尤其重要因为竞赛题目里的数据往往来自真实场景真实数据免不了有噪声、极端值和量纲差异。比如分析城市人口和GDP的关系人口从几十万到几千万不等GDP从几十亿到几万亿不等直接做皮尔逊相关系数时量纲差异和少数特大城市的极端值会在数值上占主导地位。但转换成秩次之后每个城市只关心它在人口上的排名和GDP上的排名是否一致这就消除了量纲差异也削弱了极端值的影响。还有一个容易被忽视的巨大优势秩次转换后单调非线性关系也能被准确捕捉。我们常说“富人越富”假设收入x从1增长到10消费y按照y x²的规律增长。皮尔逊相关系数算出来可能只有0.8左右因为直线拟合抛物线不完全贴合而斯皮尔曼相关系数直接对排名做比较x从1到10的排名顺序和y从1到100的排名顺序完全一致ρ 1.0。这就是为什么在实际数据里斯皮尔曼的绝对值经常大于皮尔逊——因为真实世界的关系很少是严格线性。3. Python实现从零手写到一行调用3.1 用SciPy一行算出相关系数和p值数学建模比赛用Python的频率越来越高而Python里做斯皮尔曼相关分析的核心工具是SciPy库的spearmanr函数。用法非常简单import numpy as np from scipy.stats import spearmanr # 构造示例数据两列观测值 x np.array([12, 15, 18, 20, 25, 30, 35, 40]) y np.array([5, 7, 10, 14, 20, 26, 30, 38]) # 计算斯皮尔曼相关系数 rho, p_value spearmanr(x, y) print(f斯皮尔曼相关系数 rho {rho:.4f}) print(fp值 {p_value:.4f})这段代码输出的rho就是斯皮尔曼相关系数p值是零假设检验的显著性概率。这里的零假设是“两个变量之间不存在单调相关关系”。如果p 0.05说明在95%置信水平下拒绝零假设认为存在显著的单调相关如果p 0.01则是在99%置信水平下显著。spearmanr函数的底层实现用的就是完整定义先计算平均秩次再对秩次做皮尔逊相关同时计算p值。p值的算法在不同情况下有不同策略当n较小时用精确排列检验或者查临界值表当n较大时用t近似检验。你不需要关心具体的算法细节但你需要知道n达到多少时结果才是可靠的。根据我的实际经验n 10时p值的可靠性都值得怀疑最好配合散点图做判断n ≥ 20时可以比较放心使用n ≥ 30时结果已经非常稳定。3.2 用Pandas快速计算相关系数矩阵如果数据里不止两个变量而是要一次性看多个变量之间的关系直接用Pandas的.corr()方法更加高效import pandas as pd import numpy as np # 生成随机示例数据 np.random.seed(42) df pd.DataFrame({ 销量: np.random.normal(200, 50, 30), 价格: np.random.normal(30, 5, 30), 评分: np.random.normal(4.2, 0.5, 30), 广告投入: np.random.normal(100, 20, 30) }) # 计算斯皮尔曼相关系数矩阵 spearman_matrix df.corr(methodspearman) print(spearman_matrix)这里的关键参数是methodspearman。Pandas的.corr()方法默认是methodpearson不指定的话算出来的就是皮尔逊矩阵。很多第一次用Pandas的同学踩过这个坑以为自己算的是斯皮尔曼结果方法没改交上去的论文里写的是斯皮尔曼但数据其实是皮尔逊的结果评委一看散点图就知道对不上。.corr(methodspearman)返回的是一个对称矩阵对角线全是1行列分别是变量名。矩阵里的每个值就是对应两个变量的斯皮尔曼相关系数。要注意这个方法只返回相关系数矩阵不返回p值矩阵。如果论文里需要标注显著性水平需要自己写循环计算p值或者用scipy.stats.spearmanr处理每一对变量。3.3 手写一个函数彻底搞懂内部逻辑为了让你彻底掌握斯皮尔曼的计算逻辑我强烈建议你至少在比赛前手写一遍这个函数。不是为了在比赛里用——直接用SciPy当然更高效——而是为了理解输出结果到底是什么以及数据有问题时你能快速定位问题。import numpy as np def my_spearman(x, y): n len(x) # 1. 分别计算秩次处理并列 def rankdata(data): order np.argsort(data) ranks np.empty(n, dtypefloat) i 0 while i n: j i while j 1 n and data[order[j 1]] data[order[i]]: j 1 avg_rank (i j) / 2 1 # 平均秩次 for k in range(i, j 1): ranks[order[k]] avg_rank i j 1 return ranks rx rankdata(x) ry rankdata(y) # 2. 对秩次计算皮尔逊相关系数 rx_mean np.mean(rx) ry_mean np.mean(ry) numerator np.sum((rx - rx_mean) * (ry - ry_mean)) denominator np.sqrt(np.sum((rx - rx_mean)**2) * np.sum((ry - ry_mean)**2)) return numerator / denominator # 测试 x np.array([12, 15, 18, 20, 25, 30, 35, 40]) y np.array([5, 7, 10, 14, 20, 26, 30, 38]) print(my_spearman(x, y))这段代码里最关键的部分是rankdata函数中对并列值的处理先找到所有值相等的连续片段把这些位置本该占据的秩次平均位置算出来再赋给片段里的每一个样本。这正好对应了SciPy的默认行为。你把这个函数和scipy.stats.spearmanr的结果对比一下就会发现完全一致。写代码之余必须理解一个细节为什么最后一步要对秩次做皮尔逊相关因为斯皮尔曼的本意是把原始变量转换为秩次之后研究秩次之间的线性关系。如果两个变量的秩次关系是线性的那就意味着原始变量的关系是单调的。所以斯皮尔曼本质上是在回答一个问题“两个变量的排序一致性程度有多高”4. 建模实战斯皮尔曼相关系数完整案例拆解4.1 赛题场景与数据准备这里我用一个与2023年国赛C题非常接近的模拟场景来做完整示范一家生鲜电商平台提供了多个蔬菜品类连续60天的销售数据包含日销量、售价、损耗率、促销折扣率、客户评分等字段。我们需要判断哪些因素与日销量存在显著相关性为后续的定价策略和品类管理提供依据。这种题目在比赛中非常典型。数据有了第一步不是急着跑相关性而是先做数据体检查看缺失值情况、异常值和字段类型然后针对每个需要分析的变量做描述性统计和分布检验。import pandas as pd import numpy as np from scipy.stats import spearmanr import matplotlib.pyplot as plt # 加载数据模拟数据 np.random.seed(2024) n 60 df pd.DataFrame({ 日期: pd.date_range(2024-01-01, periodsn), 日销量: np.random.normal(500, 120, n).clip(200, 900), 平均售价: np.random.normal(6.5, 1.2, n).clip(3, 12), 损耗率: np.random.exponential(0.08, n).clip(0.01, 0.5), 促销折扣: np.random.choice([0, 0.1, 0.2, 0.3], n, p[0.4, 0.3, 0.2, 0.1]), 客户评分: np.random.normal(4.3, 0.4, n).clip(2.5, 5) }) print(df.head()) print(df.describe())从描述性统计看损耗率明显是偏态分布最大值可能达到0.4以上而中位数可能只有0.05左右。这种数据用皮尔逊就有风险用斯皮尔曼更合适。这也是为什么这道题建议用斯皮尔曼真实商业数据的损耗率、销量分布通常不均匀。4.2 计算并解读相关系数接下来对需要的变量对逐一计算斯皮尔曼相关系数和p值# 方法一计算完整相关系数矩阵 corr_matrix df[[日销量, 平均售价, 损耗率, 促销折扣, 客户评分]].corr(methodspearman) print(斯皮尔曼相关系数矩阵) print(corr_matrix.round(3)) # 方法二单独计算每对变量的p值 pairs [(日销量, 平均售价), (日销量, 损耗率), (日销量, 促销折扣), (日销量, 客户评分)] for var1, var2 in pairs: rho, p spearmanr(df[var1], df[var2]) print(f{var1} vs {var2}: rho {rho:.3f}, p值 {p:.4f})假设跑出来的结果大致是这样的变量组合rhop值结论日销量 vs 平均售价-0.420.001中等的负相关价格越高销量越低日销量 vs 损耗率-0.580.000较强的负相关损耗高的品类卖得少日销量 vs 促销折扣0.360.005中等正相关折扣力度大销量高日销量 vs 客户评分0.210.11弱正相关但不显著解读时要把相关系数和p值放在一起看。最后一组“日销量 vs 客户评分”虽然rho为0.21但p值0.11大于0.05在统计上并不显著不能得出“评分显著影响销量”的结论。很多同学只挑rho大的写完全不提显著性这是论文里被扣分的重灾区。还要注意相关系数的符号含义。这里的“损耗率 vs 日销量”是负相关说明损耗率高的品类反而卖得少。这可能因为损耗率高意味着品相不好或者库存周转慢反过来抑制销量也可能存在内生性问题。在数学建模里发现相关关系后你需要为这个关系给出合理的业务解释这一步很重要评委非常看重。4.3 相关性的可视化呈现在论文里相关性分析的结果建议用热力图来呈现直观且信息量大。import seaborn as sns plt.figure(figsize(8, 6)) sns.heatmap(corr_matrix, annotTrue, fmt.2f, cmapRdBu_r, vmin-1, vmax1, center0, squareTrue) plt.title(各变量间斯皮尔曼相关系数热力图) plt.tight_layout() plt.show()热力图中颜色深浅直接对应相关系数大小和方向蓝色表示负相关红色表示正相关颜色越深相关越强。做图的时候要注意annotTrue才能把数值标在格子里fmt.2f保留两位小数vmin-1, vmax1保持一致的颜色映射范围。这些看似细节的设置直接影响图表的专业度。除了热力图我还建议对重点变量对画散点图。散点图能让人直观看到变量关系是不是单调、有没有异常点。比如“日销量 vs 平均售价”的散点图如果呈现下降趋势但有少量点偏离较大正文里可以特别说明这几个离群点是哪些品类。评委看到这一步会觉得你真正理解了自己的数据而不是只会调包。4.4 论文中的规范表述数学建模论文里不要只贴代码输出结果就完事必须用文字把结论讲清楚。我来展示一段可以作为范本的论文段落为了排除数据分布形态对相关性分析的影响本文采用斯皮尔曼秩相关系数对各变量与日销量之间的关系进行检验。斯皮尔曼相关系数基于秩次计算无需假设变量服从正态分布对异常值具有较强的稳健性。分析结果显示日销量与平均售价的相关系数为-0.42p 0.001表明二者存在显著的负相关关系即售价越高销量越低日销量与损耗率的相关系数为-0.58p 0.001表明损耗率较高的品类其销量显著偏低日销量与促销折扣的相关系数为0.36p 0.005促销力度与销量呈显著正相关日销量与客户评分的相关系数为0.21p 0.11未通过显著性检验暂不能认为评分对销量存在显著影响。这段表述在格式上做到了三件事说明了方法选择的理由、报告了完整的统计量ρ和p、给出了业务层面解读。这就是数学建模优秀论文里相关分析的通用写法。记住没有p值的相关系数等于只交了一半作业。5. 数学建模中斯皮尔曼相关系数的常见问题与避坑实录5.1 数据有缺失值直接跑报错怎么办实际赛题数据几乎不可能干干净净。spearmanr函数默认遇到NaN会直接返回NaNdf.corr(methodspearman)默认会忽略成对缺失值但对于同一列里缺失较多的变量结果可能不稳定。我的处理习惯是先查看缺失比例超过30%的变量要么舍弃要么用合理的填充策略。填充之前必须确认为什么缺失。比如评分数据缺失可能是因为购买量太少没有足够评论那这个变量本身反映的信息就受限如果只是某个时间段记录缺失可以用前后均值或者插值法填充。# 查看缺失情况 print(df.isnull().sum()) # 简单填充用中位数填充数值型变量 df[损耗率].fillna(df[损耗率].median(), inplaceTrue) # 填充后重新计算 corr_matrix df[[日销量, 平均售价, 损耗率, 促销折扣, 客户评分]].corr(methodspearman)注意填充本身会影响相关系数尤其当缺失值较多时。论文里应该说明缺失数据的处理方式和理由。如果缺失比例很低比如低于5%直接删除这些样本通常问题不大处理起来也最简单。5.2 并列秩次过多结果会不会有问题当数据是离散型时比如促销折扣只有0、0.1、0.2、0.3四个值会造成大量并列秩次。并列秩次会影响简化公式的精度但spearmanr和corr(methodspearman)底层都在用完整定义处理平均秩次所以结果本身是可靠的。真正的问题在于你的解读一个取值种类很少的离散变量即使和销量显著相关用它做回归预测时的解释力也有限。另外当两个变量的并列秩次都特别多时斯皮尔曼相关系数可能会出现“天花板效应”比如上限达不到1.0。这是正常的不代表算错了论文里不需要解释。针对离散变量我还建议同时报告一下每个取值对应的中位数销量用分组统计作为补充。这样做既规避了秩次并列带来的信息损失也让结论更有说服力。5.3 斯皮尔曼显著皮尔逊不显著怎么办这是备赛群和知乎上被反复问的问题。出现这种情况原因通常是变量关系是非线性的单调关系或者数据里存在极端值拉低了皮尔逊系数。具体判断方法画散点图如果点的分布呈现明显的曲线上升或下降趋势那就是非线性单调关系斯皮尔曼的结果才是准确的。反过来说如果皮尔逊显著但斯皮尔曼不显著说明存在较强的线性关系但单调性不够好这在实际数据里较少出现一旦出现就要小心数据是否包含了一些特殊的模式比如周期性或分段趋势。还有一种常见情况是两者方向相反。我曾在一个分析城市GDP与空气质量关系的作业里遇到过皮尔逊系数为正、斯皮尔曼系数为负。画完图发现是因为大多数城市GDP与空气污染负相关但极少数高GDP城市因为产业结构特殊导致污染极高这些异常点主导了皮尔逊的方向。斯皮尔曼明显更合理。比赛里遇到这种矛盾一定要停下来深挖数据这往往是拿分点而不是丢分点。5.4 别把相关当因果论文里要给自己留退路数学建模评审最反感的一句话就是把相关系数直接解读成因果关系“相关系数为-0.58说明损耗率导致销量下降。”严格意义上相关系数只能告诉我们两个变量之间存在关联不能证明谁影响谁。销量下降也可能导致损耗率上升——卖不出去的菜当然更容易烂。这就是内生性问题。在论文里安全又专业的写法是“日销量与损耗率之间存在显著的负相关关系二者可能相互影响后续将结合业务逻辑进一步分析。”这样一来你既报告了发现又表明自己知道相关不等于因果还顺带给后面的模型留了伏笔。我见过很多拿到省奖、国奖的论文相关分析部分都采用了类似的保守措辞。数学建模竞赛比的不是谁话放得狠而是谁的分析更严谨、逻辑链条更完整。5.5 相关系数矩阵里出现NaN怎么办当某两个变量的样本无重叠时corr(methodspearman)返回的位置会是NaN。比如变量A在两个时间段有数据变量B在另一个时间段有数据两者共同有效的样本极少。这种情况下相关系数无法给出有效估计。快速排查方法# 查看每个变量的非缺失样本量 print(df.notnull().sum()) # 查看变量间共同非缺失样本数 valid_counts pd.DataFrame(indexdf.columns, columnsdf.columns) for col1 in df.columns: for col2 in df.columns: valid_counts.loc[col1, col2] df[[col1, col2]].dropna().shape[0] print(valid_counts)如果某个变量对的共同有效样本数低于10我建议直接放弃这个变量对的相关分析在论文中也别放进去。硬算出来的数没有统计意义还会在答辩环节被评委质疑。6. 写在最后我做了几年数学建模辅导也担任过校内赛的论文评阅一个很深的体会是相关分析在建模比赛论文里往往是篇幅最短、但技术含量最容易暴露的部分。很多队伍把相关性分析当成“开胃菜”随便算个矩阵、贴个热力图就算完成结果评委恰恰从这张表格里看出这队的基本功。斯皮尔曼相关系数本身不难难的是你知道什么时候用它、怎么解读它、怎么在论文中合理表述它。数据是偏态的、有异常值的、本质上只关心顺序关系的就用斯皮尔曼数据是正态的、线性趋势明确的皮尔逊更合适两个都算一下互相验证是性价比最高的稳妥策略。最后再分享一个小建议国赛和华为杯的题目里相关分析的结果往往要喂给后面的回归或者综合评价模型。你先用斯皮尔曼筛出真正显著的变量再进入建模环节比一股脑把所有变量都塞进模型要聪明得多。变量筛选这一步做扎实了后面的模型效果通常不会差。希望这篇内容能在你备赛过程中真正帮上忙。