在上一篇文章中,我們已經將電商的後台原始資料經過整理之後,找出了廣告樣本數最大的三個廣告分別為「自然流量」、「critei」以及「KDP」(如圖一所示),並將資料篩選至只包含這三種廣告的資料了(如圖二所示)。
複習一下上一篇文章吧:【無母數檢定應用 -資料量太少或資料非常態分佈嗎?! Python實戰:商務資料結構整理】(附Python 程式碼)
請務必不要將這些執行完的資料刪除,因為接下來就要將這些資料加以應用在統計檢定上了。
一、常態/非常態分佈檢查
記得昨日的文章中,我們提到無母數檢定是用在非常態分佈。因此在開始執行無母數檢定之前,我們需要檢查一下其資料的分佈狀態。
首先,先檢查看看這些資料的分布是否符合常態分配,因此先透過程式碼1將這三類廣告的資料各自取出,如下所示:
程式碼1:
ad1_list = data[data['廣告代號all'] == 'critei']['利潤'].tolist()
ad2_list = data[data['廣告代號all'] == 'KDP']['利潤'].tolist()
ad3_list = data[data['廣告代號all'] == '自然流量']['利潤'].tolist()
分別產出如(圖三、圖四、圖五):
接著將這三筆資料進行Shapiro常態測試後,可看到這三種廣告的P值都十分地微小,代表顯著不符合常態分配,如程式碼2所示。
程式碼2:
import scipy.stats
scipy.stats.shapiro(ad1_list)
scipy.stats.shapiro(ad2_list)
scipy.stats.shapiro(ad3_list)
產出:
ShapiroResult(statistic=0.9818183183670044,pvalue=1.2465230236902158e-11)
ShapiroResult(statistic=0.9621795415878296,pvalue=3.1705360319920887e-21)
ShapiroResult(statistic=0.9822685122489929,pvalue=2.279967656292392e-21)
二、非常態分佈
由於資料分佈不符合常態分佈,無法直接透過t檢定進行統計分析,因此必須透過無母數檢定來進行分析,如無母數檢定方式如程式碼3所示:
程式碼3:
# 進行Kruskal-Wallis test
from scipy.stats.mstats import kruskalwallis
kruskalwallis(ad1_list, ad2_list, ad3_list)
產出:
KruskalResult(statistic=4.584369300454998,pvalue=0.10104547153612356)
我們將不同廣告的利潤相互作比較,以利了解不同廣告之間所帶來的利潤是否有顯著差異,檢定結果P值約0.1左右,廣義而言不同廣告之間所帶來的利潤是有顯著差異的。
但光得出這樣的結果就足以收工,提交報告了嗎?
當然不夠。即使得出了不同廣告帶來的利潤有顯著差異,也得釐清哪個廣告表現較好、哪個廣告表現較差,才能幫助掌握後續該強化哪些廣告、捨棄哪些廣告。
二、視覺化分析結果
為了方便了解廣告成效差異,本單元將透過繪圖模組「plotly」將不同廣告帶來的「平均利潤」加以視覺化,如程式碼4所示,內部的設定分別為:
1. X:X軸放置的資料,本單元分別將三個廣告作為類別放入其中
2. Y:Y軸放置的資料,本單元放入的資料為平均利潤
3. Mode:可選擇呈現點座標(markers)、線(lines),或兩個都出現
4. Textfont:文字字體設定(字形、大小、顏色等)
5. Line:繪圖線的顏色、粗細
如下所示:
程式碼4:
import plotly.offline as py
import plotly.graph_objects as go
from numpy import mean
fig = go.Figure()
fig.add_trace(go.Scatter(
x= ['critei','KDP','自然流量'],
y= [mean(ad1_list), mean(ad2_list), mean(ad3_list)],
mode="lines+markers",
textfont=dict(
family="sans serif",
size=16,
color="royalblue"),
line=dict(color='royalblue', width=2),
))
再來,透過程式碼5,可進一步設定佈景主題,詳細設定如下:
1. Title:產出圖片的標題、座標位置等
2. xaxis、yaxis:X、Y軸座標名稱
3. width、height:圖片的寬度、高度
4. font:圖片以外的字形、大小、顏色設定
程式碼5:
fig.update_layout(
title={
'text': "<b>廣告效益分析</b>",
'y':0.95,
'x':0.5,
'xanchor': 'center',},
yaxis_title='平均消費金額',
xaxis={
'title': '廣告',
'tickmode': 'linear'
},
width=1800,
height=960,
font=dict(
family="Courier New, monospace",
size=20,
color="lightslategrey"
)
)
設定(程式碼5)完畢後,便可透過(程式碼6)產出,如以下(圖六)所示:
程式碼6:
# 另存互動式網頁檔案
py.plot(fig, filename='無母數檢定-廣告效益分析', auto_open=True)
# 另存圖檔
fig.write_image("C:/Users/user/Desktop/無母數檢定1.1/無母數檢定-廣告
益分析.png")
產出(如圖六):
從圖中可看到,廣告「critei」的平均利潤顯著地落後其他廣告的成效,甚至還小於「自然流量」(不推任何廣告)的利潤。
因此可以推論「critei」帶來的效果不盡理想,可考慮替換成其他廣告;相對地,「KDP」的成效大於「自然流量」,可持續保持推播。
善加運用無母數檢定,能讓您即使在資料量不足或是資料分布不規律的情況下,依然能產出具有價值的分析。
希望我的文章分享,能對您在資料分析上有幫助~
完整程式碼:https://reurl.cc/Q3XMz5
作者:徐子皓(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)