數(shù)據(jù)分析——因子分析怎么用?

LLL
4 評(píng)論 18243 瀏覽 44 收藏 12 分鐘

編輯導(dǎo)語(yǔ):作為多元統(tǒng)計(jì)分析里的降維方法之一,因子分析可以應(yīng)用于多個(gè)場(chǎng)景、如調(diào)研、數(shù)據(jù)建模等場(chǎng)景之中。本篇文章里,作者就對(duì)因子分析做了詳細(xì)介紹,對(duì)其原理邏輯、用途及代碼實(shí)現(xiàn)過程進(jìn)行了相關(guān)展示,讓我們來(lái)看一下。

數(shù)據(jù)分析中,主成分分析(PCA)是被大家熟知的數(shù)據(jù)降維方法。而因子分析和主成分分析是非常相似的兩種方法,他們都屬于多元統(tǒng)計(jì)分析里的降維方法。但因子分析最大的優(yōu)點(diǎn)就是:對(duì)新的因子能夠進(jìn)行命名和解釋,使因子具有可解釋性。

因此,因子分析可以作為「需要滿足可解釋性數(shù)據(jù)建模」的前期數(shù)據(jù)降維的方法。下文會(huì)介紹因子分析的原理邏輯、用途以及Python代碼的實(shí)現(xiàn)過程。

一、什么是因子分析?

因子分析的起源是這樣的,1904年英國(guó)的一個(gè)心理學(xué)家發(fā)現(xiàn)學(xué)生的英語(yǔ)、法語(yǔ)和古典語(yǔ)成績(jī)非常有相關(guān)性,他認(rèn)為這三門課程背后有一個(gè)共同的因素驅(qū)動(dòng),最后將這個(gè)因素定義為“語(yǔ)言能力”?;谶@個(gè)想法,發(fā)現(xiàn)很多相關(guān)性很高的因素背后有共同的因子驅(qū)動(dòng),從而定義了因子分析。

因子分析在經(jīng)濟(jì)學(xué)、心理學(xué)、語(yǔ)言學(xué)和社會(huì)學(xué)等領(lǐng)域經(jīng)常被用到,一般會(huì)探索出背后的影響因素如:語(yǔ)言能力、智力、理解力等。這些因素都是無(wú)法直接計(jì)算,而是基于背后的調(diào)研數(shù)據(jù)所推算出的公共因子。

因此概括下,因子分析就是將存在某些相關(guān)性的變量提煉為較少的幾個(gè)因子,用這幾個(gè)因子去表示原本的變量,也可以根據(jù)因子對(duì)變量進(jìn)行分類。

舉個(gè)例子。學(xué)生有語(yǔ)文、英語(yǔ)、歷史、數(shù)學(xué)、物理、化學(xué)六門成績(jī),通過因子分析會(huì)發(fā)現(xiàn)這六門課由兩個(gè)公共因子驅(qū)動(dòng),前三門是由“文科”因子,后三門是“理科”因子;從而可以計(jì)算每個(gè)學(xué)生的文科得分和理科得分來(lái)評(píng)估他在兩個(gè)方面的表現(xiàn)。

二、因子分析可以解決什么問題?

1. 在多變量場(chǎng)景下,挖掘背后影響因子

比如在企業(yè)和品牌調(diào)研中,消費(fèi)者會(huì)調(diào)查很多問題來(lái)評(píng)估企業(yè)品牌。對(duì)這些問題通過因子分析可以刻畫出背后少量的潛在影響因素,比如服務(wù)質(zhì)量、商品質(zhì)量等等。

2. 用于數(shù)學(xué)建模前的降維

因子分析和主成分分析都可用于降維。但因子分析的優(yōu)點(diǎn)是,因子作為新的解釋變量去建模,有更好的解釋性。

因此對(duì)于有些需要業(yè)務(wù)解釋的數(shù)據(jù)建模,可以在建模前通過因子分析提取關(guān)鍵因子,再用因子得分為解釋變量,通過回歸或者決策樹等分類模型去建模。

三、算法實(shí)現(xiàn)步驟

首先需要注意的是,和主成分分析一樣,兩種方法的目的都是降維,所以兩種方法的前提假設(shè)都是:特征之間不是完全互相交互。

因子分析是尋找不線性相關(guān)的“變量”的線性組合來(lái)表示原始變量,這些“變量”稱為因子,如下圖中的F就是因子,X是原始變量,eps是原始變量不可被公共因子表示的部分。

數(shù)據(jù)分析—因子分析怎么用?

以上的公式還需要滿足:

  1. 要求因子的數(shù)據(jù)小于原始變量的數(shù)量,即m≤p;
  2. 因子F之間是相互獨(dú)立且方差為1;
  3. 因子F和eps之間的相關(guān)性為0,eps之間相關(guān)性為0。

因此,因子分析的過程就是實(shí)現(xiàn)以下幾個(gè)目的的過程:

  1. 求解方程中的因子F的系數(shù);
  2. 給予因子F實(shí)際的解釋;
  3. 展示原始特征和公共因子之間的關(guān)系,從而實(shí)現(xiàn)降維和特征分類等目的。

求解方程的過程,就是分析變量的相關(guān)系數(shù)矩陣,從而找到少數(shù)幾個(gè)隨機(jī)變量去描述所有變量。又因?yàn)榍蠼獾牟晃ㄒ恍?,最后通常?huì)對(duì)因子的載荷矩陣做一次正交旋轉(zhuǎn),目的是為了方便理解每個(gè)因子的意義。

匯總一下:對(duì)于因子分析的實(shí)操可以提煉為以下幾個(gè)步驟。

1)充分性檢驗(yàn)

  • 目的:檢驗(yàn)變量之間是否存在相關(guān)性,從而判斷是否適合做因子分析;
  • 方法:抽樣適合性檢驗(yàn)(KMO檢驗(yàn))或者 巴特利特檢驗(yàn)(Bartlett’s Test)。

數(shù)據(jù)分析—因子分析怎么用?

2)選擇因子個(gè)數(shù)

  • 目的:通過數(shù)據(jù)定義最合適的潛在公共因子個(gè)數(shù),這個(gè)決定后面的因子分析效果;
  • 方法:Kaiser”s準(zhǔn)則 或者 累積貢獻(xiàn)率原則。

數(shù)據(jù)分析—因子分析怎么用?

3)提取公共因子并做因子旋轉(zhuǎn)

提取公共因子就是上面提到的求解函數(shù)的過程,一般求解方法有:主成分法、最大似然法、殘差最小法等等。

因子旋轉(zhuǎn)的原因是提取公共因子的解有很多,而因子旋轉(zhuǎn)后因子載荷矩陣將得到重新分配,可以使得旋轉(zhuǎn)后的因子更容易解釋。常用的方法是方差最大法。

4)對(duì)因子做解釋和命名

  • 目的:解釋和命名其實(shí)是對(duì)潛在因子理解的過程;這一步非常關(guān)鍵,需要非常了解業(yè)務(wù)才可。這也是我們使用因子分析的主要原因。
  • 方法:根據(jù)因子載荷矩陣發(fā)現(xiàn)因子的特點(diǎn)。

5)計(jì)算因子得分

對(duì)每一樣本數(shù)據(jù),得到它們?cè)诓煌蜃由系木唧w數(shù)據(jù)值,這些數(shù)值就是因子得分。

四、案例講解

數(shù)據(jù)集介紹:美國(guó)洛杉磯2000年街區(qū)普查數(shù)據(jù),共有110個(gè)街區(qū),15個(gè)變量,變量具體情況見下表。

想分析影響不同街區(qū)下人口分布的潛在因子。

數(shù)據(jù)分析—因子分析怎么用?

1. 第一步:數(shù)據(jù)預(yù)處理和分析

新增“人口密度”特征,刪除特征人口量、面積、經(jīng)度和維度。

import pandas as pd

import numpy as np

LA_data = pd.read_csv(‘LA.Neighborhoods.csv’)

#新增人口密度,去掉人口量、面積、經(jīng)度和維度

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)

數(shù)據(jù)分析—因子分析怎么用?

2. 第二步:因子分析——充分性檢驗(yàn)

巴特利特P值小于0.01,KMO值大于0.6;說明此數(shù)據(jù)適合做因子分析。

數(shù)據(jù)分析—因子分析怎么用?

3. 第三步:因子個(gè)數(shù)確定

特征值大于1的因子數(shù)有2個(gè),且兩個(gè)因子的累計(jì)方差有68%;因此確定因子個(gè)數(shù)為2個(gè)。

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() # 計(jì)算特征值和特征向量

var=fa.get_factor_variance()#給出方差貢獻(xiàn)率

數(shù)據(jù)分析—因子分析怎么用?

4. 第四步:做因子分析

調(diào)用因子分析函數(shù),并得到因子載荷矩陣;從載荷矩陣可以看到,第一個(gè)因子和收入、有房家庭比例、復(fù)員軍人比例及歐裔比例成正相關(guān);第二個(gè)因子和非裔比例成正相關(guān),反而和收入及有房比例等成負(fù)相關(guān)。

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

數(shù)據(jù)分析—因子分析怎么用?

5. 第五步:計(jì)算因子得分

其中因子1得分越大表示:收入、有房家庭比例、復(fù)員軍人比例及歐裔比例更高;因子2得分高表示:非裔人群比例更高。

數(shù)據(jù)分析—因子分析怎么用?

綜上,以上就是本文要介紹的全部?jī)?nèi)容。

因子分析在互聯(lián)網(wǎng)數(shù)據(jù)分析場(chǎng)景下用到的比較少,主要原因就是很多人不知道怎么用?不知道用到哪里?希望看完文章的你能初步了解因子分析,能知道下面幾個(gè)問題的答案(不記得就回頭看上面的介紹分享哦)。

  • 什么是因子分析?
  • 因子分析可以解決什么問題?
  • 因子分析的算法邏輯和分析流程是什么?
  • Python代碼如何實(shí)現(xiàn)?

 

本文由 @須臾即永恒 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載

題圖來(lái)自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. nb。看著太燒腦。

    來(lái)自北京 回復(fù)
  2. 博主您好,請(qǐng)問您的數(shù)據(jù)集在哪里能下載到呀?謝謝

    回復(fù)
  3. 您好,請(qǐng)問您的數(shù)據(jù)集在哪里下載的呀?謝謝

    回復(fù)
  4. 博主您好,可以請(qǐng)問您是在哪家公司做數(shù)據(jù)分析嘛?

    回復(fù)