📑 查看全课大纲(第 15 / 20 节)

因子分析代码实战与行业综合评价

约 19 分钟

📺 正在播放小象官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · 多元统计分析

因子分析是探索多元数据潜在结构的核心方法,通过少数不可观测的公共因子解释众多观测变量的相关性。本节将带你掌握Python中因子分析的完整实现流程,包括适用性检验、因子提取、旋转解释与综合得分计算,最终实现行业综合评价。

💡 核心导读

  • 掌握KMO与Bartlett适用性检验的判断标准
  • 理解因子提取与Varimax旋转的核心原理
  • 学会用Python实现因子分析全流程
  • 能够基于因子得分构建综合评价体系

一、因子分析核心理论基础

1. 数学模型

因子分析将pp个观测变量表示为mm个公共因子(m<pm < p)与特殊因子的线性组合: X=AF+εX = AF + \varepsilon 其中:

  • XRpX \in \mathbb{R}^p为标准化后的观测变量向量
  • FRmF \in \mathbb{R}^m为公共因子向量
  • ARp×mA \in \mathbb{R}^{p \times m}因子载荷矩阵
  • εRp\varepsilon \in \mathbb{R}^p为特殊因子向量

模型基本假设:公共因子互不相关(协方差为单位矩阵)、特殊因子互不相关、公共因子与特殊因子不相关。

2. 核心指标

  • 共同度:变量方差中公共因子解释的比例,计算公式为hi2=j=1maij2[0,1]h_i^2 = \sum_{j=1}^m a_{ij}^2 \in [0,1],值越大说明公共因子对该变量的解释力越强。
  • 因子方差贡献:第jj个公共因子对所有变量的总解释力,计算公式为gj2=i=1paij2g_j^2 = \sum_{i=1}^p a_{ij}^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全流程实现,重点掌握:

  1. 理论基础:理解因子分析的数学模型、共同度、方差贡献等核心概念
  2. 前提检验:掌握KMO和Bartlett检验的判断标准与应用场景
  3. 实战流程:熟练掌握数据标准化、因子提取、旋转解释、得分计算的完整步骤
  4. 业务应用:能够基于因子得分构建行业/企业综合评价体系

因子分析作为探索数据潜在结构的强大工具,广泛应用于市场研究、金融分析、社会科学等领域,掌握其Python实现能够为量化决策提供有力支撑。

— 小象教研组

配套学习资源与课件
  • 第6章课件:因子分析
    下载
  • 多元统计分析参考讲义与常用函数(多元分析与主成分常用函数速查)
    下载
  • 课程配套数据集(全课程实战数据包)
    下载
  • 课程全套源代码(课程相关代码汇总)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加顾问免费领取;想学什么,直接告诉顾问
微信二维码:扫码添加课程顾问微信扫码添加顾问