拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

主成分得分与因子得分:降维与潜变量估计的选型指南

主成分得分与因子得分:降维与潜变量估计的选型指南

1. 两张“得分表”的渊源:同是降维,路径却分道扬镳

先从一个真实场景讲起。有个做零售运营的朋友找到我,手里攥着一份用户调研数据,十几个指标:复购意愿、退款体验、物流速度、页面停留时长、客服响应、客单价……老板只给了她一句话:“你帮我算个综合分,给用户分个高中低档。”她跑去找教程,发现主成分分析和因子分析都能出“得分”,每一篇教程都说“得分越高代表综合表现越好”,于是她拿主成分得分交了差,结果业务方反问:“你这第一主成分到底是啥意思?为什么权重有正有负?它跟用户忠诚度有什么关系?”她一时答不上来。

这个场景我估计不少数据分析师都撞见过。问题的根源就在于:主成分得分和因子得分,这两张表长得实在太像了——都是一个样本对应一个数值,都可以当综合排名用,软件里点两下就出来。但它们的数学逻辑、假设前提、可解释性和适用边界,差别大到你选错了就可能整个项目翻车。这篇文章打算站在实际做项目的角度,把这两套得分的计算逻辑、估计思路、应用场景和容易踩的坑一次性说清楚。

先说最核心的一句结论:主成分得分是原始变量的确定性线性组合,是坐标旋转后的投影值;因子得分是一个不可观测潜变量的估计值,是模型反推出来的近似结果。一个是“算出来”的,一个是“猜出来”的。理解不了这句话,后面所有的比较都会跑偏。

这里还要提醒一句:本文聊的是打分逻辑和项目选型,不是纯数学推导。我会给出关键的公式形态和计算步骤,但尽量用项目语言拆解,保证你能在SPSS、R或Python里直接复现。

2. 主成分得分:方差最大化下的坐标投影

2.1 数学内核:特征向量决定组合权重

主成分分析的出发点非常简单纯粹:找到一组新的正交坐标轴,让样本数据在这些轴上的投影方差依次递减。第一个轴(第一主成分)方向上的方差最大,第二个轴次之,以此类推。这样的好处是,你用一个更小的维度就能保留数据里大部分的变异信息,而且新维度之间互不相关,不存在多重共线性问题。

具体到计算上,假设原始数据经过标准化处理,有p个指标x1到xp,那么第k个主成分的得分长这样:

PCk = ak1*x1 + ak2*x2 + ... + akp*xp

这里的系数向量(ak1, ak2, ..., akp)不是随便定的,它们来自数据相关系数矩阵的特征分解。特征向量给出了组合权重,特征值则告诉你这个主成分能解释多少方差。每个主成分的系数平方和等于1,不同主成分的系数向量彼此正交。

我拿一个人群消费行为的小例子说明。假设有三个标准化指标x1(月均消费金额)、x2(月均购买次数)、x3(客单价),相关系数矩阵经特征分解后,第一个特征值对应的特征向量为(0.55, 0.62, 0.56),那么第一主成分得分就是:

PC1 = 0.55*x1 + 0.62*x2 + 0.56*x3

把每个样本的标准化数值代进去,就得到了这个样本的PC1得分。这个得分有三个非常关键的性质:

  • 得分的均值为0,方差等于该主成分对应的特征值;
  • 不同主成分之间的协方差为0(正交);
  • 它是原始变量的精确线性组合,只要系数确定,任何一个样本的得分都可以复现,不存在随机误差。

2.2 主成分得分的适用场景:何时该用

实际项目中,主成分得分最常用于三类场景:

第一类是数据压缩和降维。比如你有20个相关性很高的指标,直接放进回归模型会引发多重共线性,但用前5个主成分得分替代后,既保留了90%的方差,又获得了正交输入变量,回归结果稳定得多。

第二类是探索性可视化和聚类。把样本映射到PC1-PC2二维平面,可以直接观察样本的分群结构、离群点,这是做用户画像或异常检测最常用的前置手段。

第三类是快速评分排名。在指标同质度比较高的情况下,直接取第一主成分得分做综合排名,效果往往不错。比如都是同一类KPI(转化率、点击率、客单价),它们之间的共同方差很大,PC1能集中反映整体水平。

不过我必须强调一个非常容易被忽略的边界:主成分得分不代表任何潜在结构,也没有因果解释含义。PC1只是数据方差最大的投影方向,它可能同时加载了消费金额、购买次数、客单价和用户的活跃天数,你不能简单给它贴上“用户价值”的标签,只能客观描述它是原始指标的一个加权组合。把这个边界记牢,后面跟业务方沟通能省掉很多麻烦。

2.3 用Python快速算一份主成分得分

这里给一个能直接跑的参考操作。用sklearn里的PCA模块,做标准化后用fit_transform就能拿到主成分得分矩阵:

import pandas as pd import numpy as np from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA # 假设df是指标数据 scaler = StandardScaler() X_scaled = scaler.fit_transform(df) pca = PCA(n_components=0.9) # 保留90%方差 scores = pca.fit_transform(X_scaled)

需要注意,sklearn输出得分的符号可能和SPSS相反,因为特征向量乘以-1后依然是特征向量,这不代表算错了。判断方向对不对,要看得分与你核心指标的相关性是否符合预期。我的经验是:先抽几个样本人工核对,再决定要不要做符号校正,千万别直接拿默认结果去画报告。

3. 因子得分:从模型里“反推”看不见的潜变量

3.1 因子分析的模型设定:变量背后藏着“幕后推手”

如果说主成分分析是“看数据本身怎么分散”,那因子分析就是在问“指标为什么相关”。它的模型假设很明确:你观测到的十几个指标,之所以有相关性,是因为它们背后共享着若干个不可观测的公共因子,再加上每个指标独有的特殊因子共同作用。公式写成这样:

x1 = λ11*F1 + λ12*F2 + ... + λ1m*Fm + ε1 x2 = λ21*F1 + λ22*F2 + ... + λ2m*Fm + ε2 ... xp = λp1*F1 + λp2*F2 + ... + λpm*Fm + εp

这里λ就是因子载荷,表示原始变量和公共因子的关联强度;ε是特殊因子,代表无法被公共因子解释的剩余部分。用人话说就是:你看到顾客经常买运动鞋、能量饮料、健身器材,这三个行为之间存在相关性,可不代表它们互相影响,而是背后有一个“健身习惯”的隐性因子在驱动。因子分析想做的事,就是把这个看不见的“健身习惯”的取值给反推出来。

3.2 因子得分的估计方法:三条常用路径

既然因子F不可直接观测,就必须通过模型去估计每个样本的因子得分。目前最常用的方法有三种,各有侧重。

回归法(Thompson法)是目前软件默认最常见的方案。它假设因子和原始变量服从联合正态分布,通过回归方程估计得分,得到的因子得分和真实因子的相关性最大。代价是得分方差会收缩,即得分的离散程度被压缩,但用于排序和相关分析问题不大。

Bartlett法走的是加权最小二乘思路,将特殊因子作为权重计入,得到的估计无偏性更好,但在某些数据下均方误差会偏大。它适合你比较在意得分与真实因子偏差的场景。

Anderson-Rubin法在Bartlett基础上做了标准化和正交化校正,让不同因子得分之间不相关,适合后续建模需要正交变量的时候用。

实际操作里,绝大多数项目用回归法就够了。如果后续要把因子得分扔进回归模型做预测变量,而你又很在意因子之间的正交性,再考虑Anderson-Rubin。

3.3 因子得分是“估计值”这件事,到底意味着什么

有一句话我每次培训都要强调:因子得分没有唯一解。同样一份数据,你用回归法、Bartlett法和Anderson-Rubin法分别估计,得到的得分数值会不一样;即便方法固定,你提取的因子个数不同、旋转方式不同,得分也会跟着变。所以,因子得分的绝对数值没有意义,只有相对排序和相关性才有参考价值。

这一点和主成分得分形成鲜明对比。主成分得分是确定的,只要数据标准化规则和特征向量确定,得分唯一;因子得分是估计出来的,换一种估计策略,数值就会漂移。理解了这个区别,你就能解释为什么有些论文里的因子得分带有“回归法”的字眼,而主成分得分从不需要标注算法。

3.4 用Python做一次因子得分实操

用factor_analyzer库可以很方便地完成因子分析和得分计算:

from factor_analyzer import FactorAnalyzer # 标准化后的数据X_scaled fa = FactorAnalyzer(n_factors=3, rotation='varimax', method='principal') fa.fit(X_scaled) factor_scores = fa.transform(X_scaled) # 回归法得分

这里我特意用了varimax正交旋转,目的是让载荷矩阵更清晰,方便后续给因子命名和业务解释。旋转之后因子得分的解释性会显著提升,但要注意旋转只是改变了载荷结构,没有改变公共方差的解释总量,得分的数值也随之变化,这是正常现象。

4. 两张得分表的本质差异:四个维度决定你的选型

4.1 数学定位、可解释性与方差组成对比

把两张表放在一起做对比,最能看清它们的分工。我整理了一个对照表,方便你直接查阅:

对比维度主成分得分因子得分
数学定位原始变量的确定性线性组合潜变量的模型估计值
是否可精确复现完全可复现依赖估计方法,不同方法结果不同
正交性天然正交视旋转方法和估计方法而定
解释性无潜在结构含义可解释为公共因子
方差处理解释原始变量全部方差只解释公共方差,特殊因子被剥离
综合评分友好度中,需注意解释负担高,有因子命名作为桥梁
后续建模适配性高,正交变量避免共线性中,需处理因子间相关性

这张表里最值得记住的一条是:主成分分析分解的是全部方差,包括各个指标独有的变异和噪声;因子分析只关注公共方差,把特殊因子(可以粗略理解为“个性”和“噪声”)排除在模型核心之外。换句话说,主成分得分里带着噪声,因子得分相对“纯净”。

这也是为什么在涉及测评、满意度、能力评估这类需要理论构念支撑的领域,研究者更偏爱因子分析。它们回答的问题不一样:主成分问“哪些方向上的投影能保留最多的数据变异”,因子分析问“哪些潜变量能解释指标间的相关结构”。

4.2 综合评分流程中的两个“坑位”

做综合评分时,很多人的第一反应是直接拿第一主成分得分排名。这种做法在指标高度同质的情况下成立,比如一堆转化类指标,PC1基本可以代表综合水平。但更复杂的场景里,指标间存在不同的维度结构——比如财务类、运营类、服务类指标混合在一起,第一主成分往往只是个大杂烩方向,解释起来非常牵强。

更稳妥的综合评分路径,通常是走因子分析的路子:

  1. 先做KMO检验和Bartlett球形检验,确认数据适不适合做因子分解;
  2. 用主成分法或主轴法提取初始因子,结合累积方差贡献率和碎石图确定因子个数;
  3. 做varimax正交旋转,让载荷矩阵的结构更清晰;
  4. 根据旋转后的载荷给因子命名(比如“服务体验因子”“商品价值因子”);
  5. 用回归法计算每个样本在各因子上的得分;
  6. 以各因子方差贡献率占累积贡献率的比例为权重,加权得到综合得分。

这套流程的价值在于:每个因子都有明确的名字,综合得分的权重来源透明可信,业务方问起来你解释得清楚。比如你可以理直气壮地说“综合得分里,服务体验因子占40%,商品价值因子占35%,协同因子占25%”,而不是支支吾吾地说“第一主成分权重是一堆系数的组合”。

4.3 一个真实的项目复盘:满意度评分我为什么会选因子得分

我记得有一年做连锁零售的消费者体验诊断,问卷涵盖商品、物流、售后、复购、推荐意愿等十几个题项。业务方明确要求最后的产出是一个能解释、能追踪、能拆解到门店层面的满意度综合分。我先做了KMO和Bartlett检验,KMO=0.87,说明数据非常适合作因子分析。提取三个因子后,经过varimax旋转,第一个因子载荷集中在配送速度、客服响应、退换货便利,命名“服务体验因子”;第二个因子集中在商品丰富度、质量感知和价格评价,命名“商品价值因子”;第三个则反映线上和线下的互动体验。

最后我用方差贡献率加权计算出综合体验得分,跟NPS和复购率做了相关性验证,系数都在0.5以上,业务方非常认可。如果当时图省事直接取第一主成分得分,排名或许差别不大,但业务方问“这个分数到底由什么构成”时,你根本说不出子丑寅卯。

这并不代表主成分得分一无是处。如果你只是单纯需要一组低维度、正交的变量去做后续机器学习建模,主成分得分明显更轻量、更稳定、更可复现。关键判断标准就一句话:你的产出是给人做决策解释,还是给模型当输入。前者偏因子得分,后者偏主成分得分。

5. 实操避坑指南:符号翻转、旋转误用和数据弱时的应对

5.1 符号翻转问题:为什么你的得分和别人正好相反

新手第一个容易懵的点就是符号。PCA和因子分析的载荷符号都不是唯一的,因为特征向量乘以-1之后仍然是同一个特征向量,解释的方差大小不变。这就导致同一份数据,两个不同统计软件跑出来,第一主成分的系数可能完全反号:你的PC1=0.55x1+0.62x2+0.56x3,别人算出来是-0.55x1-0.62x2-0.56x3。如果你只看系数不看含义,就会以为哪里算错了。

正确做法是:先根据业务常识确认第一主成分或因子与关键指标的相关方向。比如消费金额和购买次数越高,主成分得分理论上也该越高;如果算出来是负相关,就要把整个得分乘以-1做符号校正,保证报告口径统一。尤其是跨团队协作时,大家用不同工具算出来的结果符号不一致,务必在交付文档里写明符号校正规则。

5.2 因子得分不能直接当“绝对量”比较

很多人拿到因子得分就喜欢排序,甚至有人会说“A的因子得分是2.0,B的是1.0,所以A比B强一倍”。这种解读是错的。因子得分是模型估计的相对量,它的尺度依赖估计方法、旋转方式、提取因子个数,数值本身没有绝对意义。你要做的比较应该限定在“相对高低”的层面,比如“A样本在服务体验因子上的得分高于B样本”,而不是“A是B的两倍”。

更隐蔽的一个坑是,不同批次、不同来源的数据算出来的因子得分不能直接混在一起比较。如果你要做跨期追踪,必须固定载荷矩阵和旋转结构,用同一套参数计算新数据的因子得分,不然前后两期的分数体系可能是两套尺度,比较毫无意义。我在实际项目中踩过这个坑,后来凡是做长期指标体系的项目,我都会提前把载荷矩阵、旋转方式、标准化参数全部固化保存,并写清楚版本号。

5.3 旋转方式的选择:正交还是斜交

主成分分析一般不做旋转,转了反而破坏正交性和最大方差方向。但因子分析里旋转几乎是标配,而且旋转方法的选择直接影响因子得分的结构和解释:

  • 正交旋转(varimax)适合探索性阶段和追求解释简洁的场景,旋转后因子之间保持不相关,因子得分之间的关系处理起来也简单;
  • 斜交旋转(promax等)允许因子之间存在相关,有时载荷结构更符合理论实际,比如“服务质量”和“整体满意”在理论上本来就相关,斜交旋转的载荷可能更干净。但代价是因子间的相关需要额外处理,后续做回归或路径分析时不能再忽略因子之间的共变。

我自己的习惯是:项目探索初期先用varimax,简单直接;如果理论上确认因子之间存在必然相关,再换promax验证。不要一上来就斜交旋转,不然解释和后续建模都会复杂一个量级。

5.4 样本量不足、指标质量不佳时的应急方案

因子分析对样本量有隐性要求。经验法则是最少要是指标数的5到10倍,且最好超过100个样本,否则KMO和Bartlett检验不稳定,因子结构也很难复现。这时候硬上因子模型,得分基本是自欺欺人。

如果数据不够,我建议退一步用主成分得分。主成分分析不是模型估计,不涉及潜变量推断,对样本量的宽容度更高,计算也更稳定。你可以先用主成分分析做探索性可视化,看看样本分布和离群点,再补数据或者做特征筛选。记住一个原则:在数据条件不理想的时候,宁可做简单的确定性变换,也不要强行拟合一个解释不了、复现不了的因子模型。

5.5 交付时的规范建议

最后分享一点项目经验。无论你最终选了哪种得分,交付给业务方或报告读者时,至少要在附录里写清楚这几件事:

  • 使用的过程:主成分分析还是因子分析,提取方法是什么;
  • 标准化方式:是否做了Z-score标准化,均值和标准差是哪个批次算的;
  • 旋转方式:正交还是斜交,具体算法是什么;
  • 得分估计方法:如果是因子得分,用的是回归法、Bartlett还是Anderson-Rubin;
  • 符号校正规则:有没有调整方向,依据是什么;
  • 权重来源:如果是综合得分,各成分权重怎么来的。

这些信息决定了结果的可复现性和可审计性。尤其是综合评分会影响绩效考核、资源分配这类决策时,解释不清楚的分数等于给自己埋雷。

回头再看开头的那个问题——遇到满意度调研、用户分层、绩效评价这类“需要解释”的场景,优先考虑因子得分;遇到特征压缩、模型输入、探索可视化这类“只要稳定”的场景,主成分得分足够了。很多分析工作翻车不翻在算法复杂度,而翻在对每个技术选择背后的“为什么”想不清楚。搞清楚自己要回答什么问题,这两张得分表该怎么选,其实并不难。

返回列表