
在做數據分析時,滿常會遇到相關性分析,以電商來說,我們想提升的目標是GMV,可能和用戶收藏商品次數、 購買次數、購買頻率、單次購買金額有相關,相關性有多大。了解這些數據才知道如何引導用戶,進而提升目標。常見的機器學習,像是預測、分類模型,modeling前也可以用相關性分析來做初步的特徵探索。
此階段的分析大致會經歷以下四個步驟:
- 找全相關的特徵
- 數據清洗與轉換
- 相關性及顯著性
- 可視化
(日常生活與工作歷程分享都在 IG、限動:@andyrockdata)–> 追蹤IG、關注FB粉絲頁
一、找全相關的特徵
我覺得結合業務經驗先進行篩選是最重要的,首先規劃好完整的思路,哪些行為可能跟目標有相關的?
也可以在此階段引入業務專家的意見,因為業務專家的商業敏感性可以有效縮小自變量的考察範圍
然后對這些行為+時間維度、屬性維度延伸, 比如點擊行為,就可以有近7天、近30天點擊次數;交易行為可以有近90天3C商品購買次數、近90天母嬰商品購買次數…等。
這些需求數據的生成,一般使用Hive SQL中取數。
Hive/SQL語法不熟悉的朋友,歡迎參考我在Hahow的課程<入門數據分析,掌握Hive SQL取數能力> !!
二、數據清洗與轉換
髒數據的清洗可以說佔了分析項目的60%時間,R語言可以透過str()
或summary
()了解數據基本情況。數據清洗多屬於數據質量(Data Quality)問題,這之後再專門寫一篇,先舉例如下:
P.S. 了解更多數據質量(Data Quality)知識:數據太髒了!3個步驟做好數據質量(資料品質)管理
- A字段有少數樣本夾雜中文,與大多數觀察值的數據格式不同,剔除該樣本
- B字段有50%以上是NULL,刪除該字段
- C字段是類別變量,但以中文文字儲存,將其轉化為數字格式的類別變量(例如1=是、0=否)
- D字段有20%是空值,經業務理解,這些空值就是代表0,因此將所有空值替代為0
- 其他處理:數據轉換,利用對數(log)轉換、指數轉換、標準化等方式,解除一些不對稱分佈問題
決定好處方方式後,具體實現可以在分析工具中處理,生成比較乾淨的數據,但我自己是習慣回到Hive處理。
三、相關性與顯著性
- 皮爾森相關係數(Pearson Correlation),也稱為r值,值域在-1到1之間,相關係數越高表明兩者間關係越密切, r=0 不代表他們之間沒有關係,,可能只是非線性關係
- 顯著水準,就是P值(p-value),這是首要的,如果不顯著相關係數再高也沒用,可能只是因為偶然因素引起的,若不指定,默認p-value小於0.05就是顯著
關於相關係數及顯著水準,網上資源很多,也是大一統計學的基礎,這邊就不贅述了,以下介紹R的實現,資料集使用R內建的mtcars,各函數具體說明請用help()
查看。
最簡單的相關性計算,R內建的cor()
可以完成,但p-value就比較麻煩
cor(mtcars)
因此介紹另一個package,Hmisc,包里的rcorr()
函数能同時给出相關係數及p-value。
library(Hmisc)cor_mtcars <- rcorr(as.matrix(mtcars))
cor_mtcars
若只要提取其中的相關係數可以用cor_mtcars$r
,只要提取其中的顯著水準可以用cor_mtcars$P

四、相關係數矩陣、散點圖矩陣可視化
當變數非常多時,返回的結果看起來會眼花繚亂,跟老闆或業務方初步討論時也比較不直觀,可視化就可以很好的幫助我們。
相關係數矩陣圖用corrplot包的corrplot
函數。
library(corrplot) #加载包
corrplot(corr=cor_mtcars$r, # 相關係數矩陣
p.mat=cor_mtcars$P) #p-value矩陣

相關係數矩陣是左右對稱的,我想做一些自定義,原圖只保留右上角,展示相關係數的值,照特征向量角(AOE)排序,另外我個人偏好熱力圖的感覺,實現如下:
corrplot(corr=cor_mtcars$r,
p.mat=cor_mtcars$P, #sig.level=0.05
order = \"AOE\",
method = \"color\",
type=\"upper\",
addCoef.col=\"grey\")

我們也常常想看單一變數分佈,例如mpg的分佈情況、以及兩倆變數之間的分佈,例如mpg跟disp:
library(ggplot2) ggplot(data = mtcars,aes(x = mpg)) + geom_bar() ggplot(data = mtcars,aes(x = mpg, y = disp)) + geom_point()
但這麼多變數,有沒有什麼方法可以一次展示變數的分佈,兩兩變數之間關係、以及相應的相關係數/顯著水準?
可以用GGally包的ggpairs
函數跟PerformanceAnalytics這個包的chart.Correlation()
函數:
library(GGally)
ggpairs(mtcars)

library(PerformanceAnalytics)
chart.Correlation(mtcars)

這是一篇數據分析的基礎內容,在實務中我們還是有不少細節要注意,例如非線性關係、共線性、假設檢定等議題。
以往我的文章偏向總體觀念為主,這是第一次寫比較實戰的內容,如果喜歡可以給我反饋,視情況逐漸拓展為系列,例如路徑分析、漏斗分析、預測、分類等常見的分析問題。
延伸閱讀:RIP correlation. Introducing the Predictive Power Score、What is Predictive Power Score (PPS) – Is it better than Correlation ?
I simply could not go away your web site prior to suggesting that I really enjoyed the standard info a person supply on your guests? Is going to be back incessantly to investigate cross-check new posts.