当前位置:首页 > 抖音教程 > 抖音资讯 > 本文内容

数据分析—因子分析怎么用?

发布时间:2023-03-17 05:00:01源自:https://www.it-th.com作者 :it谈话网阅读(228)

数据分析中,主成分分析(PCA)是被大家熟知的数据降维方法。而因子分析和主成分分析是非常相似的两种方法,他们都属于多元统计分析里的降维方法。但因子分析最大的优点就是:因此,因子分析可以作为需要满足可解释性数据建模」的前期数据降维的方法。下文会介绍因子分析的原理逻辑、用途以及Python代码实现过程。

因子分析的起源这样的,1904年英国的一个心理学家发现学生的英语、法语和古典语成绩非常有相关性,他认为这三门课程背后有一个共同的因素驱动最后将这个因素定义为“语言能力”。基于这个想法,发现很多相关性高的因素背后有共同的因子驱动,从而定义了因子分析。


因子分析在经济学、心理学、语言学和社会学等领域经常被用到,一般会探索出背后的影响因素如:语言能力、智力、理解力等。这些因素都是无法直接计算,而是基于背后的调研数据所推算出的公共因子。


因此概括下,因子分析就是将。


【举个例子】:学生有语文、英语、历史、数学、物理、化学六门成绩,通过因子分析会发现这六门课由两个公共因子驱动,前三门是由“文科”因子,后三门是“理科”因子从而可以计算每个学生的文科得分和理科得分来评估他在两个方面的表现

1、在多变量场景下,挖掘背后影响因子

比如在企业品牌调研中,消费者调查很多问题来评估企业品牌对这些问题通过因子分析可以刻画出背后少量的潜在影响因素。比如:服务质量商品质量等等。

2、用于数学建模前的降维

因子分析和主成分分析都可用于降维但因子分析的优点是:因子作为新的解释变量去建模,有更好的解释性。

因此对于有些需要业务解释的数据建模,可以在建模前通过因子分析提取关键因子,再用因子得分为解释变量,通过回归或者决策树等分类模型去建模。

算法实现步骤

首先需要注意的是,和主成分分析一样,两种方法的目的都是降维,所以两种方法的前提假设都是:特征之间不是完全互相交互


因子分析是寻找不线性相关的“变量”的线性组合表示原始变量,这些“变量”称为因子,如下中的F就是因子,X是原始变量,eps是原始变量不可被公共因子表示的部分。


以上公式还需要满足:


要求因子的数据小于原始变量的数量,即m≤p


因子F之间是相互独立方差为1


因子F和eps之间的相关性为0,eps之间相关性为0


因此,因子分析的过程就是实现以下几个的的过程:


1)求解方程中的因子F的系数


2)给予因子F实际的解释


3)展示原始特征和公共因子之间的关系,从而实现降维和特征分类等目的


求解方程的过程,就是分析变量的相关系数矩阵,从而找到少数几个随机变量去描述所有变量又因为求解的不唯一性,最后通常会对因子的载荷矩阵做一次正交旋转,目的是为了:方便理解每个因子的意义。


1)充分性检验

检验变量之间是否存在相关性,从而判断是否适合做因子分析


抽样适合性检验(KMO检验)或者 巴特利特检验(Bartlett’s Test)


2)选择因子个数

通过数据定义最合适的潜在公共因子个数,这个决定后面的因子分析效果


方法:Kaiser"s准则 或者 累积贡献原则


3)提取公共因子并做因子旋转

提取公共因子就是上面提到的求解函数的过程,一般求解方法有:主成分法、最大似然法、残差最小法等等

因子旋转的原因是提取公共因子的解有很多,而因子旋转后因子载荷矩阵将得到重新分配,可以使得旋转后的因子更容易解释。常用的方法是:方差最大法。

4)对因子做解释和命名

解释和命名其实是对潜在因子理解的过程这一步非常关键,需要非常了解业务才可。这也是我们使用因子分析的主要原因。


根据因子载荷矩阵发现因子的特点。

5)计算因子得分

每一样本数据,得到它们在不同因子上的具体数据值,这些数值就是因子得分。

数据集介绍:


美国洛杉矶2000年街区普查数据,共有110个街区,15个变量,变量具体情况见下表想分析影响不同街区下人口分布的潜在因子。


新增“人口密度”特征,删除特征人口量、面积、经度和维度

import pandas as pd 

import numpy as np

LA_data = pd.read_csv('LA.Nei**orhoods.csv')

# 新增人口密度,去掉人口量、面积、经度和维度

LA_data['density'] = LA_data['Population']/LA_data['Area']

LA_data_final = LA_data.drop(['Population','Area','Longitude','Latitude'],axis=1)

LA_data_final_feat = LA_data_final.drop(['LA_Nbhd'],axis=1)


巴特利特P值小于0.01,KMO值大于0.6说明此数据适合做因子分析。

# 计算巴特利特P值from factor_analyzer.factor_analyzer import calculate_bartlett_sphericitychi_square_value,p_value=calculate_bartlett_sphericity(LA_data_final_feat)chi_square_value, p_value  

# 计算KMO值 

from factor_analyzer.factor_analyzer import calculate_kmokmo_all,kmo_model=calculate_kmo(LA_data_final_feat)print(kmo_model)

特征值大于1的因子数有2个,且两个因子的累计方差有68%因此确定因子个数为2个。


# Create factor analysis object and perform factor analysis

from factor_analyzer import FactorAnalyzer

fa = FactorAnalyzer(LA_data_final_feat.shape[1]+1, rotation=None)

fa.fit(LA_data_final_feat)ev, v = fa.get_eigenvalues() 

# 计算特征值和特征向量

var = fa.get_factor_variance()

#给出方差贡献率



调用因子分析函数,并得到因子载荷矩阵从载荷矩阵可以看到第一个因子和收入、有房家庭比例、复员军人比例及欧裔比例成正相关第二个因子和非裔比例成正相关,反而和收入及有房比例等成负相关。


fa = FactorAnalyzer(2, rotation="varimax")

fa.fit(LA_data_final_feat)

输出载荷矩阵

df_loading = pd.DataFrame(fa.loadings_,index=LA_data_final_feat.columns.tolist())

df_loading


其中因子1得分越大表示:收入、有房家庭比例、复员军人比例及欧裔比例更高因子2得分高表示:非裔人群比例更高。

#计算因子得分

LA_data_trans = pd.DataFrame(fa.transform(LA_data_final_feat),index=LA_data_final['LA_Nbhd'])

#以散点图的形式呈现

plt.figure(figsize=(10,4), dpi= 80)

plt.subplot(1,2,1)

plt.scatter(LA_data_trans.loc[:,0],LA_data_trans.loc[:,1])

plt.title('Scree Plot')

plt.xlabel('Factor1')

plt.ylabel('Factor2')plt.grid()




综上,以上就是本文要介绍的全部内容因子分析在互联网数据分析场景下用到的比较少,主要原因就是很多人不知道怎么用?不知道用到哪里?希望看完文章你能初步了解因子分析,能知道下面几个问题的答案(不记得就回头看上面的介绍分享哦)。

1、什么是因子分析?

2、因子分析可以解决什么问题?

3、因子分析的算法逻辑和分析流程是什么

4、Python代码如何实现?

-END-

欢迎分享转载→ 数据分析—因子分析怎么用?

用户评论

精品推荐

© 2013-2028 - it谈话网 版权所有 收藏本站 - 网站地图 - 关于本站 - 网站公告 - 合作申请