数据综合评价方法盘点:从原理到实践(四)因子分析法

因子分析法

原理

因子分析法和主成分分析法类似,也是降维技术。它通过研究变量相关性,把多个相关变量归结为少数公共因子。这些公共因子是原始变量内在结构,能解释变量间大部分相关性。因子分析法假设原始变量由潜在公共因子和特殊因子共同作用,通过分析数据找出公共因子,确定每个变量在各因子上的载荷,实现数据降维和结构分析。

实现路径

  1. 数据标准化:和主成分分析法一样,先对原始数据标准化,消除量纲和数量级影响。
  2. 计算相关系数矩阵:算标准化后数据的相关系数矩阵RR,相关系数矩阵反映变量线性相关性。
  3. 求解因子载荷矩阵:对相关系数矩阵RR分解,求因子载荷矩阵AA,使R=AAT+ΨR = AA^T + \PsiΨ\Psi是对角矩阵,对角元素是各变量特殊方差。因子载荷矩阵AA元素aija_{ij}表示第ii个变量在第jj个因子上的载荷,反映变量与因子相关性程度。
  4. 因子旋转:为让因子含义更清晰,便于解释理解,一般对因子载荷矩阵旋转。常用正交旋转(如 Varimax 旋转)和斜交旋转。旋转后因子载荷矩阵能更好反映原始变量与公共因子关系。
  5. 计算因子得分:根据因子载荷矩阵和原始数据,算每个样本在各因子上的得分,再根据因子得分和因子权重计算综合评价得分。

Python 实现代码

1
2
3
4
5
6
7
8
9
10
11
12
13
import numpy as np
from sklearn.decomposition import FactorAnalysis


# 示例数据
data = np.array([[10, 20, 30],
[15, 25, 35],
[20, 30, 40]])

fa = FactorAnalysis(n_components = 2, rotation = 'varimax')
fa.fit(data)
factor_scores = fa.transform(data)
print("因子得分:", factor_scores)

优劣势

  • 优势
    • 可解释性强:通过旋转提高因子可解释性,能提取隐藏在变量间的公共因子,对变量分类解释。
    • 处理多变量有效:处理多变量问题效果好,能挖掘变量间潜在关系,简化数据结构。
  • 劣势
    • 计算复杂:计算过程复杂,需要统计学知识和经验。
    • 样本量要求高:对样本量有要求,样本量小结果不稳定。
    • 主观性存在:确定因子个数和因子旋转方法有主观性。

具体案例

具体案例

某市场调研公司为了深入了解消费者对智能手机的偏好,对 200 名消费者进行了问卷调查。问卷涵盖了智能手机的 8 个属性:屏幕清晰度、运行速度、拍照质量、电池续航、外观设计、价格、品牌知名度、售后服务。收集到的数据如下表所示(部分数据展示):

消费者编号 屏幕清晰度 运行速度 拍照质量 电池续航 外观设计 价格 品牌知名度 售后服务
1 8 7 8 6 7 5 6 4
2 7 8 7 7 8 4 7 5
3 9 9 9 8 7 6 8 6
... ... ... ... ... ... ... ... ...
200 6 6 7 5 6 3 5 3

以下是运用因子分析法对这些数据进行分析的详细过程:

  1. 数据标准化: 首先,对原始数据进行标准化处理,消除量纲和数量级的影响,使不同属性具有可比性。在 Python 中,可以使用以下代码实现:
1
2
3
4
5
from sklearn.preprocessing import StandardScaler

# 假设 data 是包含上述数据的 numpy 数组
scaler = StandardScaler()
data_standardized = scaler.fit_transform(data)
  1. 计算相关系数矩阵: 计算标准化后数据的相关系数矩阵,以了解各个属性之间的线性相关性。在 Python 中,使用 numpy 库的 corrcoef 函数可以实现:
1
correlation_matrix = np.corrcoef(data_standardized, rowvar=False)
  1. 求解因子载荷矩阵: 对相关系数矩阵进行分解,求解因子载荷矩阵。这里我们使用 scikit - learn 库中的 FactorAnalysis 类来实现。假设我们希望提取 3 个公共因子:
1
2
3
4
5
from sklearn.decomposition import FactorAnalysis

fa = FactorAnalysis(n_components = 3, rotation='varimax')
fa.fit(data_standardized)
factor_loadings = fa.components_
  1. 因子旋转: 使用 Varimax 旋转方法对因子载荷矩阵进行旋转,使因子的含义更加清晰。在上述代码中,我们在创建 FactorAnalysis 对象时已经指定了 rotation='varimax'。旋转后的因子载荷矩阵能够更好地反映原始变量与公共因子之间的关系。

  2. 计算因子得分: 根据因子载荷矩阵和原始数据,计算每个消费者在各个因子上的得分。

1
factor_scores = fa.transform(data_standardized)
  1. 结果分析 通过上述步骤,我们得到了三个公共因子,经过分析,我们可以对这三个因子进行如下命名和解释:
  • “品质综合因子”:这个因子在屏幕清晰度、运行速度、拍照质量和电池续航这些属性上的载荷较高。这表明该因子主要反映了智能手机的硬件性能和核心使用体验方面的品质。消费者在这个因子上的得分越高,说明他们对手机的硬件品质要求越高。
  • “外观与价格因子”:外观设计和价格在这个因子上有较高的载荷。这说明这两个属性之间存在一定的相关性,可能反映了一部分消费者在购买手机时,会在外观喜好和价格接受度之间进行权衡。得分较高的消费者可能更注重手机的外观设计,同时对价格也比较敏感。
  • “品牌与服务因子”:品牌知名度和售后服务在这个因子上的载荷较高。这表明这两个属性相互关联,反映了消费者对品牌形象和售后服务的重视程度。在这个因子上得分高的消费者,可能更倾向于选择知名品牌且注重售后服务的手机。
  1. 为企业提供决策依据 基于以上因子分析的结果,企业可以针对性地制定产品研发、定价和营销等策略:
  • 产品研发:对于注重“品质综合因子”的消费者,企业应加大在硬件研发上的投入,提升屏幕清晰度、运行速度、拍照质量和电池续航等方面的性能。
  • 定价策略:考虑到“外观与价格因子”,企业可以针对不同外观设计的手机制定差异化的价格策略。对于外观设计独特、符合潮流的款式,可以适当提高价格,但要注意控制在消费者对价格敏感的范围内。
  • 营销推广:针对“品牌与服务因子”得分高的消费者,企业要加强品牌建设和宣传,提升品牌知名度和美誉度。同时,要注重售后服务体系的完善,通过优质的售后服务吸引这部分消费者。