卡方檢定 — Python實戰:男女大不同,掌握不同廣告的效益(附Python程式碼)

行銷資料科學
12 min readNov 20, 2020

--

在上一篇文章中,我們將資料經過了一系列的處理後,成功地準備好了一份可供卡方檢定使用的要素交叉頻率表(如圖1所示),接下來將通過該資料進行卡方檢定,並進一步思考背後是否具有決策參考價值。

還請得上一篇文章的資料前處理的內容嗎?!
複習一下吧~
卡方檢定 — Python實戰:商務資料結構整理

圖 1 廣告-性別交叉比較表

一、卡方檢定

本次檢定的目標為「了解針對男女投放不同種類廣告對於銷量是否會有顯著影響」。

因此會個別將每一支熱門廣告的男女銷量列為觀察值(observed),並進一步將觀察值作為卡方檢定的比較標的。

透過程式碼1,將資料集「chi_table」內的資料透過「iloc」的方式選取,「iloc」是pandas.DataFrame的一款附加功能,可用於抓出特定位置的資料,公式如下:

資料集.iloc[第幾列,第幾欄](若使用:符號,代表全選)

運用此技巧,陸續抓出了前三名廣告的男女消費量,並轉換成可供卡方檢定形式的資料格式-array,如下所示:

程式碼1:

import numpy as np
obs = np.array([chi_table.iloc[0,:].tolist(),
chi_table.iloc[1,:].tolist(),
chi_table.iloc[2,:].tolist(),])

產出:

array([[4676, 3180],
[1273, 3236],
[ 978, 1292]])

有了觀察值(obs)後,便可將它代入至卡方檢定中,查看結果,如程式碼2所示:

程式碼2:

import scipy.stats
scipy.stats.chi2_contingency(obs, correction = False)

產出:

(1144.4903264056986,
2.9997380034408637e-249,
2,
array([[3718.38141442, 4137.61858558],
[2134.18811069, 2374.81188931],
[1074.43047489, 1195.56952511]]))

卡方檢定產出的值從頭到尾分別為:檢定值、P值、自由度、檢測內容。如果要判斷廣告跟性別之間所產生的銷售頻率是否有顯著影響的話,只要透過P值觀察是否在顯著區間內即可。利用程式碼3,可將串列中的第二個數值-pvalue取出,取得分析成果。

程式碼3:

p_value = scipy.stats.chi2_contingency(obs, correction = False)[1]

產出:

2.9997380034408637e-249

檢定的結果為P值趨近於0,符合顯著水準內的0.05,因此可以從檢定結果推論出廣告跟性別之間對於銷售量會產生顯著地影響。

但光有這樣的結論,就足以提供給管理當局明確的管理決策參考了嗎?

當然不夠,即使得到了廣告及性別不同對於銷量有顯著影響的結論,但我們仍不知道:

  1. 對於每個廣告來說,性別的影響力有多大?
  2. 該廣告對於哪個性別來說影響力更好?

二、事後檢定

這時,我們就必須透過事後檢定,讓其可以更加清楚地掌握對於不同廣告來說,性別對於銷量的影響力使否顯著,而其顯著程度又有多大,如程式碼4所示:

程式碼4:

from scipy.stats import chisquarechisquare(chi_table.iloc[0,:].tolist())[1]chisquare(chi_table.iloc[1,:].tolist())[1]chisquare(chi_table.iloc[2,:].tolist())[1]

產出:

6.489739323992124e-647.28785639051024e-1884.384215086093996e-11

透過事後檢定查看個別廣告的男女性別,對銷量影響的顯著程度有多大,結果回報為三則廣告的p值皆趨近於0,符合廣義顯著範圍的0.05內。因此三則廣告對於男女的銷售量都有顯著的影響。接下來,將透過資料視覺化的方式,讓我們更清楚地掌握資料之間的影響關係。

三、視覺化呈現

得出了每個廣告之間對於性別的顯著程度後,接下來必須提供給管理當局可以一目瞭然的決策參考。此時視覺化呈現就是最好用的幫手,透過製作視覺化圖表可以有效地協助達到目的。

本篇文章使用的繪圖套件為plotly,若對該套件使用方式尚未熟悉者,可參考第三單元的繪圖教學。

透過程式碼5,先輸入基本資料:

程式碼5:

import plotly.offline as py
import plotly.graph_objects as go
fig = go.Figure()
# 男性分布圖
fig.add_trace(go.Scatter(
x= ad_name,
y= chi_table.iloc[:,0].tolist(),
mode="lines+markers",
textfont=dict(
family="sans serif",
size=16,
color="royalblue"),
line=dict(color='royalblue', width=2),
name = '男性'
))
# 女性分布圖
fig.add_trace(go.Scatter(
x= ad_name,
y= chi_table.iloc[:,1].tolist(),
mode="lines+markers",
textfont=dict(
family="sans serif",
size=16,
color="firebrick"),
line=dict(color='firebrick', width=2),
name = '女性'
))

緊接著,透過程式碼6,將佈景主題設定完成。

程式碼6:

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"
)
)

設定完畢後,便可以將產出圖片另存了。

程式碼7:

# 產出另存html檔
py.plot(fig, filename='廣告-性別交叉比較圖', auto_open=True)
# 產出另存png檔
fig.write_image("C:/Users/user/Desktop/卡方檢定/廣告-性別交叉比較圖.png")

產出(如圖2所示):

圖 2 廣告-性別交叉比較圖

圖片中的橫軸為不同的熱門廣告,線條的顏色根據性別有所差異,而縱軸便是這些廣告在不同的性別下所對應的銷售頻率高低。

管理當局可以透過產出圖片以及檢定的結果,明確地了解每支廣告所觸及到的性別是否符合期待,或者也可以利用該分析結果,了解將來若須加強推廣男性或女性族群時,選擇那一些廣告,或者是相似度較高的廣告類型。

四、管理決策表

除了提供直觀的圖表呈現以外,條理整齊的表格也適合做為提供給管理階層的產出結果。

透過程式碼8,將每一個熱門廣告的男女銷售量透過for迴圈逐一代入卡方檢定,如果檢定結果P值不小於0.05的話,則會提供「男女推廣效果均勻」結論;若P值小於0.05的話,則會根據男女消費量的大小,做出「針對男性族群推廣較有效」、「針對女性族群推廣較有效」的結論,並回存至交叉比較表「chi_table」中,如下所示:

程式碼8:

# 判斷廣告比重
weight = []
for i in range(0,chi_table.shape[0]):
p = chisquare(chi_table.iloc[i,:].tolist())[1]
if p >= 0.05:
weight.append('男女推廣效果均勻')
else:
a = chi_table.iloc[i,0] # 男性消費量
b = chi_table.iloc[i,1] # 女性消費量
if a>b:
weight.append('針對男性族群推廣較有效')
else:
weight.append('針對女性族群推廣較有效')
# 將結果存至比較表中
chi_table['加強推廣族群'] = weight

產出:

圖 3 管理決策表

從表中可以讓管理者清楚看到不同情況下的銷售量為何,並提供檢定結果提供的結論是對於哪個性別族群的影響較大,以利管理者透過該表格輕鬆了解廣告成效。

最後,透過程式碼9,將管理決策表另存成csv檔案後,本次的卡方檢定就完成了。

程式碼9:

chi_table.to_csv("C:/Users/user/Desktop/卡方檢定/廣告-性別交叉比較表.csv", encoding='utf-8-sig')

善用卡方檢定,可以幫助了解不同變異數之間的關係。舉凡促銷時間跟上架位至對銷量的差異、不同校系的應屆畢業生英文能力差易等,皆可做為應用,是個非常實用的工具。

希望我的文章對您在統計方法應用於程式及商務分析有所幫助~

喜歡我的文章,請給我掌聲~
您的掌聲是我下一篇文章的動力來源~~

完整程式碼:https://reurl.cc/Y6VOr4

作者:徐子皓(臺灣行銷研究特邀作者)、鍾皓軒(臺灣行銷研究有限公司創辦人)

歡迎加入我們的Telegram獲取即時訊息!https://t.me/marketingdatascience
歡迎加入我們的Line@獲取即時訊息!https://line.me/R/ti/p/%40cde8265r

現在報名課程享56折起優惠!

🔸單堂 92折
🔸兩堂以上88折
11/18前報名課程最低享原價56折!
🛒現領折扣碼:https://bit.ly/2UlfocK

您可能有興趣:

📢熱騰騰~最新募資上架【TMR最新募資課程】

《Python行銷資料科學-基礎語法入門最前線》

🔹募資上線時間:11/05 (四) 中午12:00
🔹募資價格: 950(原價1480) 👉超值划算價:836 (原價56折起!)
🔹課程網址:https://hahow.in/cr/basic-

❗募資價再下殺❗
🔸拿折扣最低只要 $836
🔸最低享原價56折
💡現領折扣碼:https://bit.ly/2UlfocK

👉 Python基礎結合數據處理,快速熟練基本語法運用
👉 基礎動態繪圖製作,利用視覺工具清楚呈現分析結果
👉 銷售資料處理實戰練習,透過實作有效提昇學習效果
👉 Python語法結合商業案例,了解基本語法的商務應用

【課程簡介】
📌python簡介與環境安裝
📌python基礎+商務常用語法更精練
📌動態圖形製作:長條圖/折線圖/朝陽圖
📌銷售資料與實戰練習

📢趕快加入募資的行列吧~
🏃‍♂前往報名:https://hahow.in/cr/basic-python

— — — — — — — — — — — — — —

📢【TMR 已上架課程】

👨‍🎓TMR為您量身打造「全方位數據課程」

熱門Python程式語言結合全新商業思維,快來終生學習不間斷!

《 Python 0到1 基礎商業數據分析實戰 》

💥 價格 :3188 👉超值划算價:2806 (享88折優惠!)
👉 從0開始:手把手從頭學習,適合完全沒學過的學員
👉 商業應用全台最多:傳授市面上少見的Python實務應用
👉 網路輿情爬蟲演練:網路輿情商務爬蟲技法
👉 競品分析:競爭價值定位圖找出藍海策略
👉 貨架陳列視覺化:解析行銷策略及廣告預算配置方法
🛒 前往購買:https://hahow.in/cr/python0-1

《 顧客分類大師:Python x RFM 會員經營新觀點 》

💥 價格 :2388 👉超值划算價:2101 起(享88折優惠!)

🎯 Python X RFM最佳拍檔,輕鬆鎖定潛(錢)在顧客
不需要出門,在家也能學習專業課程,讓你擁有會員經營的新思維!

本課程以五個面向為您的企業,做更深入的健診:
👉 市場面:以最基本的顧客消費資料(頻率、購買次數),將現有顧客區隔分類。
👉 財務面:計算出在每個顧客身上所賺得毛利,在不同客群中的獲利。
👉 行銷面:藉由 RFM 的分析進行行銷預算重新分配。
👉 產品面:觀察在不同客群中,各個產品的銷售狀況。
👉 顧客回購面:分析顧客的購買週期後,進行精準推薦。
🛒 前往購買:https://hahow.in/cr/rfm-model

--

--

行銷資料科學
行銷資料科學

Written by 行銷資料科學

Marketing data science. 台灣第一個行銷資料科學(MDS)知識部落,本粉絲專頁在探討行銷資料科學之基礎概念、趨勢、新工具和實作,讓粉絲們瞭解資料科學的行銷運用,並開啟厚植數據分析能力之契機。粉絲專頁:https://www.facebook.com/MarketingDataScienceTMR

No responses yet