01
寫在前面
在數據分析的問題中, 經常會遇見的一種問題就是相關的問題, 比如抖音短視頻的產品經理經常要來問留存(是否留下來)和觀看時長, 收藏的次數, 轉發的次數, 關注的抖音博主數等等是否有相關性, 相關性有多大。
因爲只有知道了哪些因素和留存比較相關, 才知道怎麼去優化從產品的方向去提升留存率, 比如 如果留存和收藏的相關性比較大 那麼我們就要引導用戶去收藏視頻, 從而提升相關的指標,
除了留存的相關性計算的問題, 還有類似的需要去計算相關性的問題, 比如淘寶的用戶 他們的付費行爲和哪些行爲相關, 相關性有多大, 這樣我們就可以挖掘出用戶付費的關鍵行爲
這種問題就是相關性量化, 我們要找到一種科學的方法去計算這些因素和留存的相關性的大小,
這種方法就是相關性分析
02
什麼是相關性分析
相關性分析是指對兩個或多個具備相關性的變量元素進行分析,從而衡量兩個變量因素的相關密切程度。相關性的元素之間需要存在一定的聯繫或者概率纔可以進行相關性分析(官方定義)
簡單來說, 相關性的方法主要用來分析兩個東西他們之間的相關性大小
相關性大小用相關係數r來描述,關於r的解讀:(從知乎摘錄的)
(1)正相關:如果x,y變化的方向一致,如身高與體重的關係,r>0;一般地,
·|r|>0.95 存在顯著性相關;
·|r|≥0.8 高度相關;
·0.5≤|r|<0.8 中度相關;
·0.3≤|r|<0.5 低度相關;
·|r|<0.3 關係極弱,認爲不相關
(2)負相關:如果x,y變化的方向相反,如吸菸與肺功能的關係,r<0;
(3)無線性相關:r=0, 這裏注意, r=0 不代表他們之間沒有關係, 可能只是不存在線性關係。
下面用幾個圖來描述一下 不同的相關性的情況
第一張圖r=-0.92 <0 是說明橫軸和縱軸的數據呈現負相關, 意思就是隨着橫軸的數據值越來越大縱軸的數據的值呈現下降的趨勢, 從r的絕對值爲0.92>0.8 來看, 說明兩組數據的相關性高度相關
同樣的, 第二張圖 r=0.88 >0 說明縱軸和橫軸的數據呈現正向的關係, 隨着橫軸數據的值越來越大, 縱軸的值也隨之變大, 並且兩組數據也是呈現高度相關
03
如何實現相關性分析
前面已經講了什麼是相關性分析方法, 那麼我們怎麼去實現這種分析方法呢, 以下先用python 實現
1. 首先是導入數據集, 這裏以tips 爲例
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
## 定義主題風格
sns.set(style="darkgrid")
## 加載tips
tips = sns.load_dataset("tips")
2. 查看導入的數據集情況,
字段分別代表
total_bill: 總賬單數
tip: 消費數目
sex: 性別
smoker: 是否是吸菸的羣衆
day: 天氣
time: 晚餐 dinner, 午餐lunch
size: 顧客數
tips.head() # 查看數據的前幾行
3. 最簡單的相關性計算
tips.corr()
4. 任意看兩個數據之間相關性可視化,比如看 total_bill 和 tip 之間的相關性,就可以如下操作進行可視化
## 繪製圖形,根據不同種類的三點設定圖注
sns.relplot(x="total_bill", y="tip", data=tips);
plt.show()
從散點圖可以看出賬單的數目和消費的數目基本是呈正相關, 賬單的總的數目越高, 給得消費也會越多
5. 如果要看全部任意兩兩數據的相關性的可視化
sns.pairplot(tips)
6. 如果要分不同的人羣, 吸菸和非吸菸看總的賬單數目total_bill和小費tip 的關係。
sns.relplot(x="total_bill", y="tip", hue="smoker", data=tips)# 利用hue 進行區分
plt.show()
7. 同樣的 區分抽菸和非抽菸羣體看所有數據之間的相關性,我們可以看到
對於男性和女性羣體, 在小費和總賬單金額的關係上, 可以同樣都是賬單金額越高的時候, 小費越高的例子上, 男性要比女性給得小費更大方
在顧客數量和小費的數目關係上, 我們可以發現, 同樣的顧客數量, 男性要比女性給得小費更多
在顧客數量和總賬單數目關係上, 也是同樣的顧客數量, 男性要比女性消費更多
sns.pairplot(tips ,hue ='sex')
04
實戰案例
問題:
影響B 站留存的相關的關鍵行爲有哪些?
這些行爲和留存哪一個相關性是最大的?
分析思路:
找全與留存相關的行爲
計算這些行爲和留存的相關性大小
首先規劃好完整的思路, 哪些行爲和留存相關, 然後利用這些行爲+時間維度 組成指標, 因爲不同的時間跨度組合出來的指標, 意義是不一樣的, 比如登錄行爲就有 7天登錄天數, 30天登錄天數
第二步計算這些行爲和留存的相關性, 我們用1 表示會留存 0 表示不會留存
那麼就得到 用戶id + 行爲數據+ 是否留存 這幾個指標組成的數據
然後就是相關性大小的計算
import matplotlib.pyplot as plt
import seaborn as sns
retain2 = pd.read_csv("d:/My Documents/Desktop/train2.csv") # 讀取數據
retain2 = retain2.drop(columns=['click_share_ayyuid_ucnt_days7']) # 去掉不參與計算相關性的列
plt.figure(figsize=(16,10), dpi= 80)
# 相關性大小計算
sns.heatmap(retain2.corr(), xticklabels=retain2.corr().columns, yticklabels=retain2.corr().columns, cmap='RdYlGn', center=0, annot=True)
# 可視化
plt.title('Correlogram of retain', fontsize=22)
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.show()
圖中的數字值就是代表相關性大小 r 值 所以從圖中我們可以發現
留存相關最大的四大因素:
•30天或者7天登錄天數(cor: 0.66)
•30天觀看品類個數(cor: 0.44)
•30天觀看主播數 (cor: 0.37)
•30天日均觀看時長(cor: 0.26)
轉自:DS數據科學之美
END
版權聲明:本號內容部分來自互聯網,轉載請註明原文鏈接和作者,如有侵權或出處有誤請和我們聯繫。
合作請加QQ:365242293
數據分析(ID : ecshujufenxi )互聯網科技與數據圈自己的微信,也是WeMedia自媒體聯盟成員之一,WeMedia聯盟覆蓋5000萬人羣。