📑 查看全课大纲(第 15 / 20 节)
- 1.多元统计分析概述与多元正态分布
- 2.多元数据矩阵与向量化运算
- 3.统计数据探索与高维数据清洗
- 4.样品与变量相似性度量(距离与相似系数)
- 5.系统聚类与K均值聚类算法原理
- 6.聚类分析代码实战与谱系图绘制
- 7.距离判别法理论推导与应用
- 8.贝叶斯判别与Fisher线性判别
- 9.判别分析代码实战与误判率评估
- 10.主成分分析推导、几何意义与统计性质
- 11.主成分回归与共线性消除
- 12.主成分分析代码实战与降维可视化
- 13.因子分析正交模型与因子载荷求解
- 14.因子正交旋转(方差最大化)与因子得分计算
- 15.因子分析代码实战与行业综合评价
- 16.列联表分析与卡方独立性检验
- 17.对应分析理论推导与过渡图原理
- 18.对应分析代码实战与双标图解读
- 19.典型相关变量数学推导与显著性检验
- 20.典型相关系数阵计算与代码实战
因子分析代码实战与行业综合评价
约 19 分钟
📺 正在播放小象官方高清录播(支持倍速与清晰度调节)
小象实战讲义 · 多元统计分析
因子分析是探索多元数据潜在结构的核心方法,通过少数不可观测的公共因子解释众多观测变量的相关性。本节将带你掌握Python中因子分析的完整实现流程,包括适用性检验、因子提取、旋转解释与综合得分计算,最终实现行业综合评价。
💡 核心导读
- 掌握KMO与Bartlett适用性检验的判断标准
- 理解因子提取与Varimax旋转的核心原理
- 学会用Python实现因子分析全流程
- 能够基于因子得分构建综合评价体系
一、因子分析核心理论基础
1. 数学模型
因子分析将个观测变量表示为个公共因子()与特殊因子的线性组合: 其中:
- 为标准化后的观测变量向量
- 为公共因子向量
- 为因子载荷矩阵
- 为特殊因子向量
模型基本假设:公共因子互不相关(协方差为单位矩阵)、特殊因子互不相关、公共因子与特殊因子不相关。
2. 核心指标
- 共同度:变量方差中公共因子解释的比例,计算公式为,值越大说明公共因子对该变量的解释力越强。
- 因子方差贡献:第个公共因子对所有变量的总解释力,计算公式为,值越大说明该因子越重要。
3. 适用性检验
因子分析前必须通过两项检验判断数据是否适合该方法:
- KMO检验:衡量变量间偏相关程度,取值范围为0-1,通常KMO>0.7时适合进行因子分析。
- Bartlett球形检验:检验变量是否相互独立(相关矩阵是否为单位矩阵),若p值小于0.05则拒绝原假设,认为数据适合因子分析。
4. 因子旋转与得分
- Varimax正交旋转:通过正交变换使载荷矩阵具有“简单结构”,即每个变量仅在少数因子上有高载荷,便于因子命名与解释。
- 因子得分:每个样本在公共因子上的取值,常用回归法估计,可进一步用于样本排序、分类与综合评价。
二、Python实战:行业综合评价全流程
import numpy as np
import pandas as pd
from sklearn.decomposition import FactorAnalysis
from sklearn.preprocessing import StandardScaler
from factor_analyzer import Rotator
from factor_analyzer.factor_analyzer import calculate_kmo, calculate_bartlett_sphericity
np.random.seed(42)
n = 100
f1 = np.random.normal(0, 1, size=n)
f2 = np.random.normal(0, 1, size=n)
x1 = 0.8 * f1 + np.random.normal(0, 0.3, size=n)
x2 = 0.85 * f1 + np.random.normal(0, 0.25, size=n)
x3 = 0.75 * f1 + np.random.normal(0, 0.35, size=n)
x4 = 0.8 * f2 + np.random.normal(0, 0.3, size=n)
x5 = 0.85 * f2 + np.random.normal(0, 0.25, size=n)
df = pd.DataFrame({'GDP': x1, 'Invest': x2, 'Consume': x3, 'Green': x4, 'Air': x5})
# 0. 数据标准化:消除量纲影响(标准化后各变量方差为1,总方差恰为变量数 p)
scaler = StandardScaler()
df_scaled = pd.DataFrame(scaler.fit_transform(df), columns=df.columns)
# 1. 适用性检验: KMO 与 Bartlett 球形检验(基于相关阵,标准化不改变检验结果)
kmo_per_variable, kmo_total = calculate_kmo(df_scaled)
chi2_val, p_val = calculate_bartlett_sphericity(df_scaled)
# 2. 因子模型拟合 (Varimax 正交旋转, 2 个主因子)
fa = FactorAnalysis(n_components=2, random_state=42)
factor_scores = fa.fit_transform(df_scaled)
# 计算各因子方差贡献与综合得分
loadings = Rotator(method='varimax').fit_transform(fa.components_.T) # 旋转后载荷, shape (5, 2)
factor_vars = np.sum(loadings**2, axis=0)
# 标准化后总方差 = 变量数 p;以 p 为分母,与基于相关阵的载荷口径一致
prop_vars = factor_vars / df_scaled.shape[1]
cum_vars = np.cumsum(prop_vars)
print("KMO 检验总体取样适度度量:", round(float(kmo_total), 4))
print("Bartlett 球形检验卡方统计量:", round(float(chi2_val), 2), "p-value:", round(float(p_val), 4))
print("因子方差贡献率 (Proportional Variance):", np.round(prop_vars, 4).tolist())
print("累计方差贡献率 (Cumulative Variance):", np.round(cum_vars, 4).tolist())
print("前 5 个样本的行业综合得分 (排名加权):")
comp_scores = (factor_scores @ prop_vars) / np.sum(prop_vars)
print(np.round(comp_scores[:5], 4).tolist())运行结果:
KMO 检验总体取样适度度量: 0.6532
Bartlett 球形检验卡方统计量: 437.37 p-value: 0.0
因子方差贡献率 (Proportional Variance): [0.5084, 0.3578]
累计方差贡献率 (Cumulative Variance): [0.5084, 0.8662]
前 5 个样本的行业综合得分 (排名加权):
[-0.7419, -0.0413, -0.6902, -1.129, 0.0209]结果解读:KMO=0.6532 处于中等偏下水平(略低于 0.7 的经验阈值),本例模拟数据仅作因子分析流程演示;实际应用时应选择 KMO 更接近 0.7 及以上的数据,或增大公共因子载荷、减小特殊方差以提高数据适用性。
📝 动手练一练
练习:尝试修改代码中的n_components参数为3,观察累计方差贡献率的变化,结合Kaiser准则(特征值大于1)判断提取几个因子更合适。 参考答案:本例提取2个因子时累计方差贡献率已达85%以上,将n_components改为3后,第3个因子的新增方差贡献很小,因此提取2个因子更合理。需注意:Kaiser「特征值大于1」准则仅适用于标准化数据的相关阵,需先标准化并单独计算相关阵的特征值;本节代码输出的是方差贡献率而非特征值,不应直接断言「第3个因子的特征值小于1」。
本章小结
本节系统学习了因子分析的核心理论与Python全流程实现,重点掌握:
- 理论基础:理解因子分析的数学模型、共同度、方差贡献等核心概念
- 前提检验:掌握KMO和Bartlett检验的判断标准与应用场景
- 实战流程:熟练掌握数据标准化、因子提取、旋转解释、得分计算的完整步骤
- 业务应用:能够基于因子得分构建行业/企业综合评价体系
因子分析作为探索数据潜在结构的强大工具,广泛应用于市场研究、金融分析、社会科学等领域,掌握其Python实现能够为量化决策提供有力支撑。
— 小象教研组
🎁 免费学习资源
领取《小象 11GB VIP 课件资料包与大厂真题手册》
包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。
- ✔完整 Python / 数据分析 Jupyter 实战源码
- ✔大厂真实业务数据集与练习题
- ✔微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信扫码添加顾问