數據分析基本-相關分析與可視化(R語言)

在做數據分析時,滿常會遇到相關性分析,以電商來說,我們想提升的目標是GMV,可能和用戶收藏商品次數、 購買次數、購買頻率、單次購買金額有相關,相關性有多大。了解這些數據才知道如何引導用戶,進而提升目標。常見的機器學習,像是預測、分類模型,modeling前也可以用相關性分析來做初步的特徵探索。

此階段的分析大致會經歷以下四個步驟:

  1. 找全相關的特徵
  2. 數據清洗與轉換
  3. 相關性及顯著性
  4. 可視化
『Rock Data』臉書粉絲頁跟IG(@andyrockdata)圍繞"數據"這一話題,也分享互聯網、職場中的思考以及一些有趣的人事物,立即追蹤不錯過任何數據大小事👉(https://www.facebook.com/andyrockdata)

一、找全相關的特徵

我覺得結合業務經驗先進行篩選是最重要的,首先規劃好完整的思路,哪些行為可能跟目標有相關的?

也可以在此階段引入業務專家的意見,因為業務專家的商業敏感性可以有效縮小自變量的考察範圍

然后對這些行為+時間維度、屬性維度延伸, 比如點擊行為,就可以有近7天、近30天點擊次數;交易行為可以有近90天3C商品購買次數、近90天母嬰商品購買次數…等。

這些需求數據的生成,一般在hive中取數。

Hive取數不熟悉的朋友,歡迎參考我在Hahow的課程<入門數據分析,掌握Hive SQL取數能力>,有任何問題都可以臉書小窗詢問。

二、數據清洗與轉換

髒數據的清洗可以說佔了分析項目的60%時間,R語言可以透過str()summary()了解數據基本情況。數據清洗多屬於數據質量問題,這之後再專門寫一篇,先舉例如下:

  • 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 ScoreWhat is Predictive Power Score (PPS) – Is it better than Correlation ?

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.