news 2026/9/8 15:40:32

TOPSIS优劣解距离法:多指标决策的数学建模与Python实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TOPSIS优劣解距离法:多指标决策的数学建模与Python实战

1. 项目概述:从“拍脑袋”到“算距离”的决策革命

干了这么多年数据分析,最怕的就是遇到那种“公说公有理,婆说婆有理”的多指标决策问题。比如,领导让你从五个供应商里选一个,有的价格便宜但交货慢,有的质量好但服务差。这时候,你拿什么去说服大家?凭感觉?看关系?还是开个会吵上三天三夜?十年前,我可能也得跟着一起吵。但现在,我工具箱里有个“定海神针”——Topsis优劣解距离法。这名字听起来有点学术,但说白了,它就是一个帮你“算”出最优选择的数学工具,把主观的“我觉得”变成客观的“数据说”。

Topsis,全称Technique for Order Preference by Similarity to Ideal Solution,翻译过来就是“逼近理想解排序法”。它的核心思想特别符合人的直觉:我们要找的那个最佳方案,应该离想象中的“完美方案”(理想解)最近,同时离想象中的“最差方案”(负理想解)最远。就像选房子,你理想中的房子(市中心、大平米、学区房、价格低)现实中几乎不存在,但你可以比较每个候选房源和这个“理想房源”的差距,差距最小的,就是相对最符合你心意的。Topsis干的就是这个“算差距”的活儿,而且它能把不同单位、不同量纲的指标(比如价格是“万元”,交货期是“天”,满意度是“分数”)统一处理,公平地比较。

这个方法在数学建模竞赛、企业评估、项目评审、甚至学生综合测评里应用极广。它不生产数据,它只是数据的“裁判长”。如果你也经常被各种需要权衡比较的决策搞得头疼,或者你的工作涉及到对多个对象进行综合排名,那么掌握Topsis,就等于掌握了一套让决策过程清晰、透明、有说服力的“数学语言”。接下来,我就结合自己无数次实战和带队的经验,把这个方法的里里外外、坑坑洼洼都给你讲明白。

2. 核心思想与数学模型拆解:理想解并非遥不可及

Topsis的巧妙之处在于它构建了一个虚拟的参照系。我们不是直接比较各个方案本身,而是把每个方案放到这个由“最好”和“最坏”定义的坐标系里,看它的相对位置。

2.1 理想解与负理想解的构建逻辑

首先,我们得明确什么是“好”,什么是“坏”。对于一个多指标决策问题,假设我们有m个待评价方案(比如m个供应商),每个方案有n个评价指标(比如价格、质量、交货期、服务等)。

  • 理想解(A+):它是一个虚拟的方案,由所有m个方案在每个指标上的最优值组成。注意,这个“最优”取决于指标类型:
    • 效益型指标:越大越好,如利润、满意度。理想解取该指标在所有方案中的最大值。
    • 成本型指标:越小越好,如成本、缺陷率、耗时。理想解取该指标在所有方案中的最小值。
  • 负理想解(A-):同样是一个虚拟方案,由所有m个方案在每个指标上的最劣值组成。
    • 对于效益型指标,负理想解取最小值。
    • 对于成本型指标,负理想解取最大值。

举个例子,我们评价三个供应商(S1, S2, S3),指标是价格(成本型,越低越好)和质量评分(效益型,越高越好)。

  • 数据:S1(价格100, 质量80), S2(价格120, 质量90), S3(价格80, 质量70)
  • 理想解 A+ = (Min(价格), Max(质量)) = (80, 90)
  • 负理想解 A- = (Max(价格), Min(质量)) = (120, 70)

你看,这个理想解(80,90)在现实中可能不存在(没有一个供应商同时做到最低价80和最高分90),但它代表了完美的标杆。我们的目标就是找到最靠近(80,90)且最远离(120,70)的那个真实供应商。

2.2 距离测算与相对贴近度的计算

定义了标杆,下一步就是测量每个方案到这两个标杆的距离。这里用的是欧几里得距离(直线距离)。计算每个方案到理想解的距离D+,以及到负理想解的距离D-。

接着,最关键的一步来了:计算每个方案的相对贴近度CC = D- / (D+ + D-)

这个公式是Topsis的灵魂。它的值在0到1之间。

  • C值越大(越接近1),说明该方案离理想解越近,同时离负理想解越远,综合表现越好。
  • C值越小(越接近0),说明该方案离负理想解越近,离理想解越远,综合表现越差。

注意:这里有个新手极易混淆的点。相对贴近度C的分母是D+ + D-,这意味着它衡量的是一个相对的优劣。即使某个方案的D+和D-的绝对值都很大(说明它整体离两个极端都远,处于中间位置),但只要它的D-相对于D+更大,它的C值也可能较高。这符合现实:我们不一定非要追求绝对的“完美”,而是追求在现有选项中“相对最好”的那个。

3. 标准Topsis算法全流程与实操演练

理论说再多,不如亲手算一遍。我们用一个完整的例子,把Topsis的标准六步走一遍。假设我们要评估4款手机(A, B, C, D),考虑3个指标:价格(元,成本型)、电池容量(mAh,效益型)、摄像头评分(分,效益型)。原始数据如下:

手机价格电池容量摄像头评分
A2999450085
B3899500092
C2599400078
D3299480088

3.1 第一步:构建原始决策矩阵并归一化

首先,将数据写成矩阵形式,行是方案,列是指标。

X = [ [2999, 4500, 85], [3899, 5000, 92], [2599, 4000, 78], [3299, 4800, 88] ]

归一化(标准化)是为了消除不同指标量纲和数量级的影响。最常用的是向量归一化法。对于矩阵中第i行第j列的元素x_ij,其归一化值r_ij为:r_ij = x_ij / sqrt( sum( x_kj^2 ) ),其中k从1到m(方案数),即对同一列的所有值求平方和再开方。

我们来计算价格列(第一列)的归一化分母: sqrt(2999² + 3899² + 2599² + 3299²) = sqrt(8994001 + 15202201 + 6754801 + 10883401) ≈ sqrt(41834404) ≈ 6468.0

那么手机A的价格归一化值:2999 / 6468.0 ≈ 0.4637 同理,计算所有值,得到归一化矩阵R(保留四位小数):

手机价格(归一化)电池容量(归一化)摄像头评分(归一化)
A0.46370.44650.4504
B0.60280.49610.4873
C0.40180.39680.4132
D0.51000.47620.4661

实操心得:归一化这步,手动算非常繁琐且易错。在实际应用和数学建模中,我们绝对是用代码(Python的NumPy, Pandas)或软件(MATLAB, Excel)来完成。这里手动演算是为了让你彻底理解原理。记住,归一化是后续所有计算的基础,这一步错了,全盘皆输。务必检查分母计算是否正确。

3.2 第二步:构建加权规范化矩阵

不同的指标重要性不同。比如,你可能觉得价格比摄像头评分更重要。这就需要引入权重。假设我们通过专家打分或AHP等方法,得到三个指标的权重向量为 W = [0.5, 0.3, 0.2](价格权重0.5,电池0.3,摄像头0.2)。

构建加权规范化矩阵 V:v_ij = w_j * r_ij。即每一列的归一化值乘以该列的权重。

计算后得到矩阵V:

手机加权价格加权电池加权摄像头
A0.23190.13400.0901
B0.30140.14880.0975
C0.20090.11900.0826
D0.25500.14290.0932

注意事项:权重的设定是Topsis中最主观、也最关键的环节之一。权重不同,结果可能大相径庭。在实际项目中,权重的确定方法本身(如德尔菲法、熵权法)可能就需要大量篇幅来论证。如果是为了比赛或快速应用,确保权重分配有合理的依据(如业务需求、专家共识),并在报告中明确说明。

3.3 第三步:确定理想解与负理想解

根据加权矩阵V,确定理想解V+和负理想解V-。

  • 价格是成本型指标,取最小值为优。
  • 电池和摄像头是效益型指标,取最大值为优。

因此:V+ = [ Min(加权价格), Max(加权电池), Max(加权摄像头) ] = [0.2009, 0.1488, 0.0975]V- = [ Max(加权价格), Min(加权电池), Min(加权摄像头) ] = [0.3014, 0.1190, 0.0826]

3.4 第四步:计算各方案到理想解与负理想解的距离

计算每个方案(每行)到V+的欧氏距离D+,以及到V-的距离D-。 以手机A为例:D+_A = sqrt( (0.2319-0.2009)² + (0.1340-0.1488)² + (0.0901-0.0975)² ) ≈ sqrt(0.000961 + 0.000219 + 0.000055) ≈ sqrt(0.001235) ≈ 0.0351D-_A = sqrt( (0.2319-0.3014)² + (0.1340-0.1190)² + (0.0901-0.0826)² ) ≈ sqrt(0.004836 + 0.000225 + 0.000056) ≈ sqrt(0.005117) ≈ 0.0715

同理,计算出所有结果:

手机D+D-
A0.03510.0715
B0.10150.0316
C0.00000.1015
D0.05410.0475

注意,手机C的D+为0,因为它就是理想解V+本身(价格最低,加权价格值最小)。

3.5 第五步:计算各方案的相对贴近度

根据公式C_i = D- / (D+ + D-)计算:

  • C_A = 0.0715 / (0.0351 + 0.0715) ≈ 0.671
  • C_B = 0.0316 / (0.1015 + 0.0316) ≈ 0.237
  • C_C = 0.1015 / (0.0000 + 0.1015) = 1.000
  • C_D = 0.0475 / (0.0541 + 0.0475) ≈ 0.467

3.6 第六步:根据贴近度排序

按C值从大到小排序:C > A > D > B。 因此,综合来看,手机C是最优选择,其次是A,然后是D,最后是B。

这个结果符合直觉吗?手机C价格最低(2599),虽然电池和摄像头稍弱,但由于我们给了价格最高的权重(0.5),它最终胜出。手机B虽然电池和摄像头最强,但价格太高,权重也高,导致其综合排名垫底。Topsis将我们主观的权重偏好,通过数学计算转化为了客观的排序。

4. 权重确定:比算法本身更重要的环节

Topsis的骨架是距离计算,而灵魂则是指标权重。权重分配稍有偏差,结论可能截然不同。下面介绍几种常用的权重确定方法,并分析其适用场景。

4.1 主观赋权法:依赖专家经验

  1. 直接定权法:决策者或专家根据经验直接给出权重。优点是快速直接,适用于指标少、专家领域知识深厚的情况。缺点是主观性强,容易引发争议。

    • 实操技巧:可以邀请多位专家独立打分,然后取平均值或中位数,并在报告中列出各位专家的原始权重,以体现过程的严谨性。
  2. 层次分析法(AHP):这是一种系统性的方法,通过两两比较指标的重要性,构造判断矩阵,计算特征向量来确定权重。它能有效处理指标较多时的逻辑一致性。

    • 注意事项:AHP要求判断矩阵满足一致性比率(CR<0.1),否则需要调整判断。使用软件(如yaahp)可以方便地完成计算和一致性检验。这是数学建模中非常受欢迎的主观赋权法。

4.2 客观赋权法:让数据自己说话

  1. 熵权法:这是我个人在建模中最常用、也最推荐的客观赋权法。其原理是:指标的离散程度越大(即数据在该指标上差异越大),它所包含的信息量就越大,对评价结果的贡献就越大,应赋予更高的权重。

    • 计算过程:基于归一化后的矩阵,计算每个指标的信息熵,进而得到熵权。熵权法完全由数据驱动,避免了人为干扰。
    • 适用场景:当缺乏先验知识,或希望完全由数据本身决定重要性时使用。它特别适合数据差异较大的情况。但如果某个指标所有方案的值完全一样(无差异),则熵权为0,该指标将被剔除,这有时需要结合业务理解进行审视。
  2. CRITIC法:比熵权法更进一步,它不仅考虑指标的变异程度(对比强度),还考虑指标之间的冲突性(相关性)。相关性越强,说明信息重叠越多,权重应适当降低。

    • 优势:比熵权法更全面,综合了数据波动和指标间关系。
    • 计算:稍复杂,需要计算标准差和相关系数矩阵。

我的经验之谈:在实际项目或数学建模竞赛中,我强烈建议采用主客观结合的方式。例如,可以先使用熵权法或CRITIC法计算出一组客观权重,然后邀请业务专家根据这组权重进行微调(在一定的浮动范围内),形成最终权重。这样既尊重了数据事实,又融入了领域智慧,使得权重分配更具说服力。在论文或报告里,详细阐述权重的确定过程,其重要性不亚于展示Topsis的计算结果。

5. 算法变体与进阶思考:应对复杂现实

标准的Topsis假设很好,但现实问题往往更复杂。下面聊聊几种常见的变体和需要注意的细节。

5.1 指标类型与正向化处理

标准Topsis只明确区分了效益型和成本型。但现实中还有:

  • 区间型指标:希望值落在某个特定区间内最好,例如,人体体温最好在36.5°C左右,pH值最好在6.5-7.5之间。
  • 固定型指标:越接近某个固定值越好,例如,考试分数希望刚好是60分(及格线)。

对于这些非标准类型,需要在归一化之前进行正向化处理,将它们转化为效益型或成本型。常用方法有:

  • 区间型转效益型:设定最优区间[a, b],计算每个值与区间端点的距离,通过一个变换函数(如1 - 距离/最大距离)将其转化为越大越好的值。
  • 固定型转成本型:将每个值与固定值的绝对差|x - x_best|作为新的指标,此时绝对差越小越好,是成本型指标。

踩过的坑:曾经处理一个供应商评估项目,其中“交货准时率”指标,业务方认为95%-100%都是优秀,低于95%则扣分。我最初错误地将其作为普通效益型处理(越高越好),结果一个交货率100%但价格极高的供应商排名异常靠前。后来将其修正为区间型指标(最优区间[95%, 100%]),高于100%并无额外收益,结果才更符合业务逻辑。

5.2 距离公式的选择:欧氏距离是唯一解吗?

标准Topsis使用欧几里得距离。但在某些情况下,曼哈顿距离(城市街区距离)或切比雪夫距离也可能被使用。

  • 欧氏距离:最常用,考虑各维度综合差异,平方和开方会放大较大差异的影响。
  • 曼哈顿距离:各维度差异的绝对值之和。计算更简单,对异常值不如欧氏距离敏感。
  • 切比雪夫距离:只取各维度差异的最大值。适用于特别关心“短板效应”的场景。

如何选择?绝大多数情况下,欧氏距离是合理且稳健的选择。除非有很强的业务理由表明应该采用其他距离度量方式,否则不建议轻易更改。在数学建模论文中,如果使用了非欧氏距离,必须给出充分的解释。

5.3 归一化方法的探讨

我们之前用了向量归一化。其他常见方法还有:

  • 极差归一化(Min-Max Scaling)(x - min) / (max - min)。将数据缩放到[0,1]区间。这种方法会受极端值(极大、极小)影响很大。
  • Z-score标准化(x - mean) / std。将数据转化为均值为0、标准差为1的分布。适用于数据大致符合正态分布的情况。

向量归一化 vs 极差归一化:向量归一化在几何上保持了各方案在同一指标上的相对比例关系,且对原始数据的整体分布依赖较小,因此在多属性决策中更为常用。极差归一化则更直观,但容易因为一个异常的最大/最小值而扭曲整个数据分布。在Topsis的经典文献和多数应用中,向量归一化是默认选择

6. Python代码实现与自动化模板

手动计算只适用于教学和理解原理。实战中,我们必须借助工具。这里提供一个基于Python Pandas和NumPy的、带有详细注释的Topsis实现模板,它包含了熵权法确定权重的功能。

import numpy as np import pandas as pd def topsis(data, weight=None, index_type=None): """ TOPSIS算法实现 :param data: DataFrame或二维数组,行是方案,列是指标。第一列可以是方案名称。 :param weight: 权重数组。如果为None,则使用熵权法计算。 :param index_type: 列表,指示每列指标的类型。1表示效益型,0表示成本型。长度需与指标列数一致。 :return: 包含原始数据、评分、排名的DataFrame。 """ # 1. 数据准备 if isinstance(data, pd.DataFrame): df = data.copy() # 假设第一列是方案名 scheme_names = df.iloc[:, 0].values X = df.iloc[:, 1:].values.astype(float) # 指标数据 else: X = np.array(data, dtype=float) scheme_names = [f'方案{i+1}' for i in range(X.shape[0])] m, n = X.shape # m个方案,n个指标 # 2. 权重确定(熵权法) if weight is None: # 归一化 P = X / np.sum(X, axis=0) # 计算熵值,避免log(0) P[P == 0] = 1e-12 e = -np.sum(P * np.log(P), axis=0) / np.log(m) # 计算差异系数和权重 d = 1 - e weight = d / np.sum(d) print(f"熵权法计算得到的权重为:{weight}") else: weight = np.array(weight, dtype=float) if len(weight) != n: raise ValueError("权重数组长度与指标数不一致") # 3. 指标正向化 (如果提供了index_type) if index_type is not None: if len(index_type) != n: raise ValueError("index_type长度与指标数不一致") X_pos = X.copy() for i in range(n): if index_type[i] == 1: # 效益型,无需处理 pass elif index_type[i] == 0: # 成本型,取倒数或负向化(这里采用Max-X) X_pos[:, i] = np.max(X[:, i]) - X[:, i] # 此处可扩展区间型、固定型的处理 X = X_pos # 4. 标准化(向量归一化) norm_X = X / np.sqrt(np.sum(X**2, axis=0)) # 5. 加权标准化 weighted_norm_X = norm_X * weight # 6. 确定理想解和负理想解 # 默认处理:经过正向化后,所有指标都应视为效益型(越大越好) ideal_best = np.max(weighted_norm_X, axis=0) ideal_worst = np.min(weighted_norm_X, axis=0) # 7. 计算距离 # 使用欧氏距离 dist_best = np.sqrt(np.sum((weighted_norm_X - ideal_best)**2, axis=1)) dist_worst = np.sqrt(np.sum((weighted_norm_X - ideal_worst)**2, axis=1)) # 8. 计算相对贴近度 score = dist_worst / (dist_best + dist_worst) # 9. 排序 rank = np.argsort(-score) + 1 # 从大到小排序,排名1为最优 # 10. 整理结果 result_df = pd.DataFrame({ '方案': scheme_names, '综合评分': np.round(score, 4), '排名': rank }) # 按排名升序排列 result_df = result_df.sort_values('排名').reset_index(drop=True) return result_df, weight # ============ 使用示例 ============ # 示例数据:4个方案,3个指标(价格-成本型,电池-效益型,摄像头-效益型) data_matrix = [ ['手机A', 2999, 4500, 85], ['手机B', 3899, 5000, 92], ['手机C', 2599, 4000, 78], ['手机D', 3299, 4800, 88] ] df_input = pd.DataFrame(data_matrix, columns=['方案名', '价格', '电池容量', '摄像头评分']) # 指定指标类型:0-成本型,1-效益型 index_type_list = [0, 1, 1] # 调用函数,不传入weight则使用熵权法 result, calculated_weights = topsis(df_input, index_type=index_type_list) print("指标权重:", calculated_weights) print("\nTOPSIS综合评价结果:") print(result)

这段代码是一个功能完整的模板。你可以通过修改index_type_list来处理不同类型的指标,也可以通过weight参数直接传入自定义权重。熵权法的集成使得在缺乏先验权重时也能直接得到客观结果。

7. 常见问题、误区与实战排坑指南

即使理解了原理,掌握了代码,在实际应用中还是会遇到各种问题。下面是我总结的几个高频“坑点”。

7.1 结果反直觉?先检查权重和指标类型!

这是最常见的问题。算出来的第一名,感觉上却不是最好的。

  • 排查步骤1:复核指标类型。是不是把成本型指标错标成了效益型?或者区间型指标没有正确处理?这是第一要务。
  • 排查步骤2:审视权重。权重分配是否合理?一个不重要的指标是否被赋予了过高的权重?尝试微调权重,观察结果变化是否敏感。如果结果对某个权重极其敏感,说明这个权重的设定需要格外谨慎论证。
  • 排查步骤3:检查数据本身。是否有某个方案在绝大多数指标上都表现平平,但唯独在一个权重很高的指标上极端好或极端差?Topsis的结果反映的是加权后的综合距离,而不是单项冠军。

7.2 熵权法算出某个指标权重为0或接近0

这说明在所有方案中,该指标的数据几乎没有差异(例如,所有供应商的交货期都是“3天”)。从信息论角度看,这个指标无法提供任何区分度,因此权重为0是合理的。

  • 怎么办?首先,检查数据是否确实如此。如果是,考虑:1) 该指标是否还有必要保留?2) 能否采用更精细的度量方式(如将“天数”细化到“小时”)以产生差异?3) 如果业务上认为该指标重要,即使无差异也重要,则应放弃熵权法,采用主观赋权法。

7.3 归一化方法导致的结果差异

如前所述,不同的归一化方法会影响结果。在学术或严谨的应用中,可以进行敏感性分析:尝试两种不同的归一化方法(如向量归一化和极差归一化),看排名顺序是否稳定。如果排名基本一致,说明结果是稳健的;如果差异很大,则需要深入分析原因,并在报告中说明这种不确定性。

7.4 如何处理定性指标?

Topsis处理的是定量数据。但现实中很多指标是定性的,如“服务质量”(优、良、中、差)。

  • 标准做法:量化。通常采用李克特量表(Likert Scale)进行转换。例如,将“优、良、中、差”分别量化为5, 4, 3, 2分。或者通过专家打分(1-10分)将其定量化。量化过程需要明确规则,保证公平性。

7.5 方案数量很少或很多时的问题

  • 方案很少(如<5个):Topsis仍然可用,但结果的区分度可能不够明显,C值可能集中在某个区间。此时,决策应更多结合定性分析。
  • 方案很多(如>100个):计算完全没问题,但结果解读时,重点关注排名靠前(如前10%)和靠后(如后10%)的方案即可。中间排名的方案差异可能很小,不必过度纠结一两名之差。

最后,我想强调的是,Topsis是一个强大的工具,但它不是“魔法黑箱”。它输出的排名,严重依赖于你输入的数据质量、指标体系的构建、权重的设定以及指标类型的正确判断。它的价值在于提供了一个系统化、可重复、可讨论的决策框架。当你把计算过程、权重来源、假设条件都清晰地展示出来时,无论最终排名是否符合某个人的初始预期,讨论的焦点就从“我觉得谁好”转移到了“我们的评价标准是否合理”上,这才是科学决策的开始。在我经手的项目中,用Topsis算出一个初步排名,往往只是起点,随之而来的团队对权重和指标的深入讨论,才是最有价值的部分。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 2:18:29

如何在5分钟内用 Claude Code 生成第一套单元测试

如何在5分钟内用 Claude Code 生成第一套单元测试 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaining complex code, and hand…

作者头像 李华
网站建设 2026/8/30 23:28:53

35W-100W封闭式AC-DC电源:选型、散热与实战经验

1. 35W到100W这个功率段&#xff0c;到底卡在市场的哪个位置 1.1 从应用场景看&#xff0c;为什么电源厂家都爱做这四个功率点 做电源设计或者给设备选型的人&#xff0c;一定见过那些外观长得几乎一模一样的金属小方块——封闭式AC-DC电源&#xff0c;功率从35W到100W&#x…

作者头像 李华
网站建设 2026/8/31 6:18:40

3行代码提取多人对话人声:Transformers语音分离

3行代码提取多人对话人声&#xff1a;Transformers语音分离 【免费下载链接】transformers &#x1f917; Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference a…

作者头像 李华
网站建设 2026/9/1 1:34:55

基于维基百科与大模型生成的文本分辨测验项目全解析

先别急着去训练一个“AI 检测模型”。最近的 AI 应用开发和信息素养项目里&#xff0c;经常能遇到同一个问题&#xff1a;面对一段百科体文字&#xff0c;普通人到底能不能判断它来自维基百科的人类编辑&#xff0c;还是大模型生成的伪百科内容。如果不借助检测工具&#xff0c…

作者头像 李华
网站建设 2026/9/1 8:37:50

深入解析PCA降维:从最大投影方差与最小重构代价理解主成分分析

1. 项目概述&#xff1a;从数据“减肥”到洞察本质做数据分析或者机器学习的朋友&#xff0c;肯定都遇到过“维度灾难”这个头疼的问题。想象一下&#xff0c;你手头有一份用户画像数据&#xff0c;包含了年龄、收入、浏览记录、点击行为、地理位置等上百个特征。这些特征里&am…

作者头像 李华