【分析方法論】屬性對行為的影響分析
一直感覺之所以學習R語言,是因為其程式碼編譯屬性可以複用,那麼在對R語言有初步認識後,需要更有效率的對工作有些幫助,現階段在進行使用者分析過程中,有些共性的方法,記錄之。
本文的題目很讓人頭疼,一來這塊只是一個經驗,所以談不上是從大方法下挖出來的一個部分,所以暫且定位屬性對行為的影響分析吧。
顧名思義,屬性對行為影響的分析,主要的因是屬性,而行為是果,換句話說,因為在兩類中有了比較顯著的屬性劃分,造成二者的行為有差異,那麼這個情況就適合這個方法論。
看起來還是有些晦澀,下面舉幾個應用的例子:
1. 汽車分手動擋和自動擋,這是汽車的屬性,那麼關於汽車的行為,就是維修時間、故障頻率、耗油等
2. 使用者分男女,這是使用者的屬性,那麼使用者的購買品類,比如男的是否更容易購買低單價的商品,女性是否容易購買高單價的產品?
3. 網站本身的屬性是頁面排版,在做灰度的時候,是否因為這兩種屬性的差異,導致了PV的變化?
上面幾個例子,看似就是簡單的T檢驗或迴歸,但是其中有很多細節需要處理,那麼下面就針對一個例子說明一下一般性的五步處理方法:
- 資料集處理:缺失值、因子轉換等
- 頻數分佈和頻率分佈,描述性統計
- 屬性和行為的假設檢驗
- 迴歸
- 具體分析業務
好像CSDN無法傳附件,直接把資料集展示:
- sex city gmv type order
男 上海市 158 玩具樂器 首單
男 北京市 10 本地生活/旅遊出行 首單
男 黃石市 27 食品飲料 首單
男 黃石市 33 個護化妝 首單
男 深圳市 639 電腦、辦公 首單
男 福州市 160 食品飲料 首單
男 福州市 224 電腦、辦公 首單
男 福州市 224 電腦、辦公 首單
男 福州市 306 酒類 首單
男 東莞市 125 家用電器 首單
男 北京市 70 個護化妝 首單
男 北京市 152 食品飲料 首單
男 北京市 99 本地生活/旅遊出行 首單
男 遂寧市 104 醫藥保健 首單
男 德州市 517 個護化妝 首單
男 德州市 517 食品飲料 首單
男 德州市 517 家用電器 首單
男 德州市 72 食品飲料 首單
男 成都市 148 圖書 首單
男 成都市 148 圖書 首單
男 成都市 148 圖書 首單
男 廣州市 60 食品飲料 非首單
男 江門市 120 食品飲料 非首單
男 江門市 120 家居裝潢 非首單
男 廣州市 149 家用電器 非首單
男 深圳市 6085 電腦、辦公 非首單
男 深圳市 6085 電腦、辦公 非首單
男 瀋陽市 500 食品飲料 非首單
男 瀋陽市 500 食品飲料 非首單
男 瀋陽市 500 生鮮 非首單
女 瀋陽市 500 家居裝潢 非首單
女 瀋陽市 517 家用電器 非首單
女 瀋陽市 119 醫藥保健 非首單
女 瀋陽市 500 食品飲料 非首單
女 瀋陽市 500 家用電器 非首單
女 瀋陽市 34 圖書 非首單
女 瀋陽市 517 家居裝潢 非首單
女 瀋陽市 517 家用電器 非首單
女 廣州市 5899 手機 非首單
女 蘇州市 60 運動戶外 非首單
女 衡陽市 95 電腦、辦公 非首單
女 杭州市 3999 電腦、辦公 非首單
女 杭州市 3999 電腦、辦公 非首單
女 重慶市 115 個護化妝 非首單
女 重慶市 115 個護化妝 非首單
女 承德市 52 圖書 非首單
女 承德市 52 個護化妝 非首單
女 中山市 66 生鮮 未知
女 成都市 856 醫藥保健 未知
女 成都市 856 醫藥保健 未知
下面開始處理。
這個資料集是隨便編的,可以暫且認為是某網站的銷售資料詳單;其中的sex是性別,city是下單城市,gmv是訂單金額,type是品類,order是訂單類別。
下面進行第一步:資料預處理
由於我儲存到csv檔案到D盤,所以先開啟csv檔案,然後看各個列的屬性
t1<-read.csv('D:\\R study\\test.csv',stringsAsFactors = F)
str(t1)
t2<-transform(t1,sex=as.factor(sex),
city=as.factor(city),
type=as.factor(type),
order=as.factor(order))
str(t2)
首先先讀取這個csv檔案,我放在了D:\R study\test.csv這個地方,同時一般情況下都先把因子變成字元,也就是Stringsasfactors=F;
然後對於幾個變數進行因子轉換,先用str函式看看各項指標的類別:
str(t1)
'data.frame': 50 obs. of 5 variables:
$ sex : chr "男" "男" "男" "男" ...
$ city : chr "上海市" "北京市" "黃石市" "黃石市" ...
$ gmv : int 158 10 27 33 639 160 224 224 306 125 ...
$ type : chr "玩具樂器" "本地生活/旅遊出行" "食品飲料" "個護化妝" ...
$ order: chr "首單" "首單" "首單" "首單" ...
看到除了GMV是整數以外,其他的都是字元;
因為針對性別、城市、品類和下單屬性,後續會進行分類彙總,所以需要轉化為t2,轉化後的情況如下:
str(t2)
'data.frame': 50 obs. of 5 variables:
$ sex : Factor w/ 2 levels "男","女": 1 1 1 1 1 1 1 1 1 1 ...
$ city : Factor w/ 18 levels "北京市","成都市",..: 12 1 10 10 13 6 6 6 6 5 ...
$ gmv : int 158 10 27 33 639 160 224 224 306 125 ...
$ type : Factor w/ 13 levels "本地生活/旅遊出行",..: 11 1 8 3 2 8 2 2 6 5 ...
$ order: Factor w/ 3 levels "非首單","首單",..: 2 2 2 2 2 2 2 2 2 2 ...
可以看到,其他四個變數都是factor了。
然而,針對order變數,我們只是想要看是否為首單使用者,但是看到:
levels(factor(t2$order))
[1] "非首單" "首單" "未知"
還有一個未知的種類,雖然在實際過程中,這個種類從SQL推出來的要麼是NULL,要麼匯入R中變成了NA,那麼需要刪除不想要的行:
t3<-subset(t2,order=='首單'|order=='非首單')
下面開始第二部:描述性頻數和相對頻率的分析。
R中最吸引人的就是作圖,同時,在以前,作圖是一個結果而非過程,比如在excel中,最後形成的圖形是為了放在ppt中展示的,所以一般已經有了一些預設的結論,而R中,個人傾向於利用圖形來解釋資料,不是給別人看的,就是給自己看的圖。那麼一般對於大資料來說(R中一般處理500W左右的資料還OK),描述性統計的圖形是一個很好的方法迅速瞭解資料情況。下面開始。
首先,可以利用summary函式粗略的看下各引數的分佈:
summary(t3)
sex city gmv type order
男:30 瀋陽市 :11 Min. : 10.0 食品飲料 :10 非首單:26
女:17 北京市 : 4 1st Qu.: 101.5 電腦、辦公: 8 首單 :21
德州市 : 4 Median : 152.0 個護化妝 : 6 未知 : 0
福州市 : 4 Mean : 768.2 家用電器 : 6
成都市 : 3 3rd Qu.: 508.5 圖書 : 5
廣州市 : 3 Max. :6085.0 家居裝潢 : 3
(Other):18 (Other) : 9
可以看到男的有30個、女的有17個,包括GMV的均值是700多,最大值是6000多,購買食品飲料品類的使用者最多等資訊。但是summary函式的各列都是孤立存在的,如果想要很直觀的判斷幾個變數間的差異,需要藉助圖形。
下面利用ggplot2包進行分析:
library(ggplot2)
ggplot(data=t3)+geom_bar(aes(x=type,y=..count..,fill=sex),stat='count',position='dodge')+
labs(x='品類',y='個數')
可有看到食品飲料品類上,男女差異最大。
但是仔細看就會想起來,本身男性性別的觀測數量就比女性要多,所以應該看相對差異,也就是按照男女的資料條數進行權重彙總,然後重新進行柱狀圖的繪製,在這裡新建一列(應該會有更容易的做法),並彙總,用到sqldf包,如下程式碼:
library(sqldf)
t3$weightsex<-as.numeric(as.character(factor(t3$sex,labels=c(1,30/17))))
t4<-sqldf('select type,sex,weightsex,sum(weightsex) as weight from t3 group by type,sex')
ggplot(data=t4)+geom_bar(aes(x=type,y=weight,fill=sex),stat='identity',position='dodge')
首先載入sqldf這個sql包,然後把原來的那一列性別的轉化為數字,本例中通過summary函式可以看到有30個男性觀測資料,17個女性觀測資料,如果按照權重來看,男性如果為1,女性為30/17(每一條觀測都是如此),然後先對factor進行character的轉化,然後再轉化為數字,可計算;
接下來新建一個資料集,就是按照權重加總和品類的資料集,如下:
t4
type sex weightsex weight
1 個護化妝 女 1.764706 5.294118
2 個護化妝 男 1.000000 3.000000
3 醫藥保健 女 1.764706 1.764706
4 醫藥保健 男 1.000000 1.000000
5 圖書 女 1.764706 3.529412
6 圖書 男 1.000000 3.000000
7 家居裝潢 女 1.764706 3.529412
8 家居裝潢 男 1.000000 1.000000
9 家用電器 女 1.764706 5.294118
10 家用電器 男 1.000000 3.000000
11 手機 女 1.764706 1.764706
12 本地生活/旅遊出行 男 1.000000 2.000000
13 玩具樂器 男 1.000000 1.000000
14 生鮮 男 1.000000 1.000000
15 電腦、辦公 女 1.764706 5.294118
16 電腦、辦公 男 1.000000 5.000000
17 運動戶外 女 1.764706 1.764706
18 酒類 男 1.000000 1.000000
19 食品飲料 女 1.764706 1.764706
20 食品飲料 男 1.000000 9.000000
然後進行ggplot圖形的繪製,圖形如下:
按照這個圖形和上述圖形比較,其實電腦辦公品類上,加入了權重的影響後,看到男性的數量反而沒有女性多,但是食品飲料這個品類仍然差距最多;
在實際過程中,往往資料量很大,所以應該選擇差距最大的幾組資料,那麼另建一列並排序,進行篩選;這裡用到reshape包,但是我認為應該會有更簡單的方法。
library(reshape2)
t5<-cast(t4,type~sex,value='weight')
t5[is.na(t5)]<-0
t5$dif<-t5$男-t5$女
其中先把t4進行整形,然後新加一列,這一列計算同樣type的差值,然後發現會有NA值,把NA值變成0,t5如下:
t5
type 男 女 dif
1 本地生活/旅遊出行 2 0.000000 2.0000000
2 電腦、辦公 5 5.294118 -0.2941176
3 個護化妝 3 5.294118 -2.2941176
4 家居裝潢 1 3.529412 -2.5294118
5 家用電器 3 5.294118 -2.2941176
6 酒類 1 0.000000 1.0000000
7 生鮮 1 0.000000 1.0000000
8 食品飲料 9 1.764706 7.2352941
9 手機 0 1.764706 -1.7647059
10 圖書 3 3.529412 -0.5294118
11 玩具樂器 1 0.000000 1.0000000
12 醫藥保健 1 1.764706 -0.7647059
13 運動戶外 0 1.764706 -1.7647059
其中的dif就是差值,然後就可以針對差值最大的和最小的進行排序,篩選出最大和最小的5個,然後作圖,程式碼如下:
t6.1<-melt(head(t5[order(t5$dif,decreasing=T),],5),id.vars=type)
ggplot(t6.1)+geom_bar(aes(x=type,y=value,fill=sex),stat='identity',position='dodge')
t6.2<-melt(tail(t5[order(t5$dif,decreasing=T),],5),id.vars=type)
ggplot(t6.2)+geom_bar(aes(x=type,y=value,fill=sex),stat='identity',position='dodge')
如果我們認為食品飲料,生活旅行等是男女差異最大的話,結果是不是這樣呢?這裡需要進行統計學檢驗從而進行下一步分析;這裡採用方差分析。
第三步:方差分析
t6<-melt(t5,id.vars=type)
fit1<-aov(value~sex+type,data=t6)
summary(fit1)
看到
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 0.00 0.000 0.000 1.000
type 12 83.27 6.939 1.995 0.123
Residuals 12 41.73 3.477
P值均不小於0.1,說明針對性別和品類,購買頻率沒有顯著差異;其實到這裡,這個維度的分析已經結束,因為我們看到方差分析的結果是不同性別的購買頻次沒有差異,也就是很大程度上都是統計的隨機差異;
但是既然到這裡了,補充針對原始資料進行方差分析,看看gmv和各類城市的差異:
summary(fit2)
Df Sum Sq Mean Sq F value Pr(>F)
sex 1 1479816 1479816 140.6 3.17e-10 ***
city 17 77883546 4581385 435.3 < 2e-16 ***
type 10 18059262 1805926 171.6 < 2e-16 ***
order 2 19986472 9993236 949.4 < 2e-16 ***
Residuals 19 199989 10526
---
Signif. codes:
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
這塊看到雖然購物頻率沒有差異,但是GMV,也就是購買的金額,在城市、類別和是否為首次購買都有很大差異;
如果最終需要給業務部門提出建議,比如市場擴充在哪個城市,既然有顯著差異,那麼看看具體的解釋和應用:
第一種可能:提供兩兩比較的解釋
假設現在有兩個部門爭論不休,分別是北京和深圳,看需要哪裡的資源投入更大,需要看這兩個城市的消費潛力,通過如下程式碼:
fit4<-TukeyHSD(fit3)
fit4$city[which(row.names(fit4$city)=='深圳市-北京市'),]
上面是按照Tukey方法看均值差異,後面擷取深圳和北京的差異的一行,看到結果是:
diff lwr upr p adj
4.186917e+03 8.277443e+02 7.546089e+03 4.658191e-03
最後的調整P值看到北京和深圳的GMV有顯著差異,差異在diff下,是4200的GMV均值,最大可以達到7546的差異,所以既然深圳的GMV高於北京這麼多,如果投入相同的資源,也許深圳的GMV比北京發展要更好。
第二種可能:判斷市場方向:
判斷整個市場,就需要對所有的城市GMV進行比較,按照GMV的均值先排序看看:
attach(t2)
t2.1<-aggregate(gmv,by=list(city),FUN=mean)
t2.1[order(t2.1$x,decreasing=T),]
看到:
Group.1 x
13 深圳市 4269.6667
8 杭州市 3999.0000
7 廣州市 2036.0000
2 成都市 431.2000
14 瀋陽市 427.6364
4 德州市 405.7500
6 福州市 228.5000
12 上海市 158.0000
5 東莞市 125.0000
11 江門市 120.0000
18 重慶市 115.0000
16 遂寧市 104.0000
9 衡陽市 95.0000
1 北京市 82.7500
17 中山市 66.0000
15 蘇州市 60.0000
3 承德市 52.0000
10 黃石市 30.0000
深圳的GMV最高,那麼是不是有顯著差異呢?
library(multcomp)
fit5<-glht(fit3,linfct=mcp(city='Tukey'))
par(mar=c(5,4,6,2))
plot(cld(fit5,level=.05),col='grey')
利用multcomp包,對城市採用95%置信區間的均值比較,採用Tukey方法,結果如下:
圖形上方有相同的字母的組差異不顯著,看到深圳和廣州這個例子來看,深圳和上海差異不顯著,但是和北京、成都、瀋陽等差異均顯著;同時,廣州幾乎和所有城市差異均不顯著;
但是我們仍可以得出結論,深圳相對來說是一個比較良好的市場,使用者的GMV貢獻最多。
最後梳理下方法步驟:
**1. 清洗資料,處理缺失值、轉化因子等
2. 先看描述性統計結果,在不同的屬性下,看各類行為的表現,包含不限於和、頻率、均值、分位數等,儘可能掌握資料整體情況 ,並進行圖形化分析展示
3. 初步針對屬性對行為影響較高,或希望繼續分析的部分進行詳細分析,應用的方法包括不限於方差分析、t檢驗、迴歸模型等
4. 進行模型解釋,反饋到業務**
以上的方法適用於已經進行屬性分好類的情況,比如使用者已經分了男女、年輕層等,分類是個因子變數,從已經分好類上來看行為的差異,最後給出針對不同行為的分析,反饋業務;
但是現實過程中,很多屬性下的行為有一定的一致性,這就涉及到聚類、主成分提取等方法先確認分類,這塊有時間梳理清楚了再研究下。
相關文章
- css屬性的選擇對動畫效能的影響CSS動畫
- 巴克萊銀行:iPhone對中國出口額的影響分析iPhone
- 分析核親和性對高吞吐量的流的影響
- delete語句對索引的影響之分析delete索引
- 上海交大:新冠肺炎疫情對若干行業的影響分析行業
- 修改主機時區對Oracle的影響分析Oracle
- 人工智慧對於IT行業的從業者影響分析報告人工智慧行業
- 分析:你認為心態對運維人員影響大麼?運維
- mysql事務對效率的影響分析總結JILEMySql
- 區塊鏈技術對銀行業、金融業影響分析區塊鏈行業
- 表的storage (MINEXTENTS 屬性對truncate後表大小的影響
- 雲客服—對大學生工作就業的影響分析就業
- 小記: 關於CSS display 屬性對錶格語義的影響CSS
- 光大證券:疫情對食品飲料行業影響分析(附下載)行業
- offsetTop屬性值不受padding的影響padding
- 論資訊顯示對我生活的影響
- 網際網路對美國傳媒業影響分析
- 有關Oracle表分割槽進行(DML)維護後對索引的影響的分析Oracle索引
- 關於LOL成就係統對玩家影響的簡略分析
- 場景分析:遊戲關卡難度對玩家流失的影響遊戲
- MYSQL sync_relay_log對I/O thread的影響分析MySqlthread
- 分析依賴物件對當前失敗會話的影響物件會話
- 小議分析函式中排序對結果的影響(二)函式排序
- 小議分析函式中排序對結果的影響(一)函式排序
- 潛意識資訊對人的行為影響有多大?
- 大資料預測分析是否對企業有影響大資料
- 分析使用敏捷方法論開發遊戲的可行性敏捷開發遊戲
- 分析幼年菜鳥們的玩具對其日後發展的影響
- OpenRTMFP/Cumulus Primer(23)執行緒邏輯分析之二:RTMFPManager對RTMFPServer的影響執行緒Server
- Oracle效能優化方法論的發展之六:基於流程分析和響應時間分析的效能優化方法論Oracle優化
- 戳穿泡沫:對「資訊瓶頸」理論的批判性分析
- 分析建模中的行為分析
- 實驗總結分析報告 ——從系統的角度分析影響程式執行效能的因素
- margin為負值對佈局的影響
- 中金公司:疫情對市場及盈利的影響分析(附下載)
- 如何擺脫潛意識偏見對業務分析的影響? - modernanalystNaN
- Profitero:危機事件對消費者行為的影響報告事件
- 賽爾原創 | 使用者表示方法對新浪微博中使用者屬性分類效能影響的研究