一、引言
在许多实际业务场景中,我们常常需要处理大量复杂且相互关联的变量数据。例如在市场调研、心理学研究、教育评估等领域,如何从众多变量中提取关键的潜在因素,并揭示变量之间深层次的内在联系,成为了数据分析的重要任务。因子分析作为一种成熟的多元统计分析方法,为此类问题提供了有效的解决方案。
二、因子分析原理
基本思想
因子分析基于这样一个假设:观测到的多个变量之间的相关性是由少数几个不可观测的潜在公共因子引起的。也就是说,各个观测变量可以看作是这些公共因子与各自特殊因子(仅对单个观测变量起作用的独特部分)的线性组合。通过寻找这些公共因子,能够简化数据结构,用相对较少的公共因子来解释众多原始变量之间的相关关系,起到降维的作用,同时帮助我们理解数据背后隐藏的本质特征。
模型构建
设我们有
个观测变量
,存在
个公共因子
(通常
),以及对应的特殊因子
。每个观测变量可以表示为如下线性组合:
用矩阵形式表示则为:
其中,
是
维观测变量向量,
是因子载荷矩阵(
表示第
个观测变量在第
个公共因子上的载荷,反映了两者的相关程度),
是
维公共因子向量,
是特殊因子向量。
假设条件
- 公共因子
之间相互独立,且服从均值为
、方差为
的正态分布,即
,
,
(
)。
- 特殊因子
与公共因子
相互独立,且
,
(
为特殊方差,不同的特殊因子方差可以不同)。
三、因子分析公式推导
协方差结构
根据上述模型假设及矩阵形式,可以推导出观测变量的协方差矩阵
的表达式:
由于
(单位矩阵,基于公共因子的独立性及方差设定),
(对角矩阵,对角元素为特殊方差
),所以可得:
因子载荷估计
常用的估计因子载荷矩阵
的方法有多种,以下是几种常见方法简述:
-
主成分分析法(Principal Component Method) :
先对原始数据进行主成分分析,按照累计方差贡献率选取一定数量的主成分,然后通过适当的变换将主成分载荷矩阵转换为因子载荷矩阵。其基本思路是利用主成分分析提取的主成分作为公共因子的初始估计,再根据一定规则进行调整。
-
极大似然估计法(Maximum Likelihood Method) :
假设观测变量服从多元正态分布,通过构造似然函数,并求使似然函数达到最大值时对应的参数估计值,来确定因子载荷矩阵、公共因子方差等参数。这种方法在理论上有较好的统计性质,但计算相对复杂,且对数据的正态性假设要求较高。
公共因子解释与命名
在得到因子载荷矩阵后,通常通过观察各观测变量在每个公共因子上的载荷大小来解释公共因子的实际意义。一般认为,当因子载荷的绝对值大于
时,表明该观测变量与对应的公共因子有较强的相关性。据此,可以根据载荷绝对值较大的那些变量所代表的含义来对公共因子进行命名,使其具有实际的业务解释性。
因子得分计算
为了进一步利用公共因子进行后续分析(如聚类分析、回归分析等),需要计算每个样本在各个公共因子上的得分。常见的计算因子得分的方法如回归法,其计算公式如下:
设因子得分向量为
,则可通过求解以下回归方程得到因子得分:
四、业务应用案例
业务背景
以一家综合性的金融服务公司为例,该公司提供多种金融产品,包括储蓄、理财、保险、贷款等业务。为了更好地了解客户对不同金融产品的偏好以及影响客户选择金融产品的潜在因素,公司收集了大量客户数据,涵盖客户年龄、收入水平、风险承受能力(通过问卷评估得到一个量化分数)、投资经验年限、家庭资产规模、是否有房产、是否有子女、储蓄金额、理财金额、保险购买金额、贷款金额等变量信息,总共有
个客户样本。
公司希望通过因子分析挖掘出影响客户金融行为的潜在综合因素,以便进行精准的市场细分,制定更有针对性的营销策略,例如针对不同类型客户推荐合适的金融产品组合。
分析方案
-
数据收集与预处理
在进行因子分析前,对数据进行预处理,包括检查数据完整性,处理缺失值(可以采用均值填充、中位数填充或其他合适的方法),以及对连续变量进行标准化处理,使各变量的均值为
,方差为
,以消除量纲差异对分析结果的影响。 2. 因子分析模型构建与参数估计
import
numpy
as
np
import
pandas
as
pd
from
sklearn.decomposition
import
FactorAnalysis
import
matplotlib.pyplot
as
plt
data = pd.read\_csv(
'financial\_customers.csv'
)
X = data.iloc[:,
1
:].values
# 选取除客户编号等标识列外的变量作为特征矩阵
from
sklearn.preprocessing
import
StandardScaler
scaler = StandardScaler()
X\_std = scaler.fit\_transform(X)
接着,选择合适的因子分析方法(这里以主成分分析法作为初始估计方法为例),并设定提取的公共因子数量(可通过观察特征值碎石图等方法来初步确定合适的数量,这里假设先尝试提取
个公共因子):
fa = FactorAnalysis(n\_components=
4
)
fa.fit(X\_std)
-
结果分析与解释
- 查看因子载荷矩阵 :
factor\_loadings = fa.components\_
print(
"因子载荷矩阵:"
)
print(pd.DataFrame(factor\_loadings, columns=data.columns[
1
:]))
通过观察因子载荷矩阵中各变量在不同公共因子上的载荷大小,尝试对公共因子进行命名和解释。例如,若发现年龄、家庭资产规模、储蓄金额在某个公共因子上载荷较大,可能将这个公共因子命名为“稳健理财因子”,反映客户在财务方面相对保守、偏好稳健型金融产品的特点。
- **查看各公共因子解释的方差**:
explained\_variance = fa.explained\_variance\_
print(
"各公共因子解释的方差:"
, explained\_variance)
了解每个公共因子所包含的信息量大小,即对原始变量的解释能力。比如某个公共因子解释的方差占比较大,说明它在概括原始变量相关性方面更为重要。
- **计算因子得分并可视化**:
factor\_scores = fa.transform(X\_std)
factor\_scores\_df = pd.DataFrame(factor\_scores, columns=[ 'Factor1' , 'Factor2' , 'Factor3' , 'Factor4' ])
if
factor\_scores.shape[ 1 ] >=
2
:
plt.scatter(factor\_scores\_df[
'Factor1'
], factor\_scores\_df[
'Factor2'
])
plt.xlabel(
'公共因子 1'
)
plt.ylabel(
'公共因子 2'
)
plt.title(
'因子得分可视化'
)
plt.show()
通过因子得分的可视化,可以直观地看到不同客户在公共因子空间中的分布情况。如果客户呈现出明显的聚类趋势,那么可以基于这些聚类进一步细分客户群体,为不同群体制定差异化的营销策略。例如,对于集中在“稳健理财因子”得分较高区域的客户群体,可以重点推荐储蓄、低风险理财等产品;而对于在“风险投资因子”(假设存在这样一个通过载荷分析命名的公共因子)得分较高的客户群体,则可以推荐一些高收益但相对高风险的理财产品或投资型保险产品等。