涉及字段如下:
- dmp_id:營(yíng)銷(xiāo)策略編號(hào)(源數(shù)據(jù)文檔未作說(shuō)明,這里根據(jù)數(shù)據(jù)情況設(shè)定為1:對(duì)照組,2:營(yíng)銷(xiāo)策略一,3:營(yíng)銷(xiāo)策略二)
- user_id:支付寶用戶(hù)ID
- label:用戶(hù)當(dāng)天是否點(diǎn)擊活動(dòng)廣告(0:未點(diǎn)擊,1:點(diǎn)擊)
一. 數(shù)據(jù)清洗(python)
1. 導(dǎo)入常用庫(kù)并導(dǎo)入數(shù)據(jù)
import pandas as pd
import numpy as np
data = pd.read_csv('E:\datalist\zf/effect_tb.csv')
data.columns = ['dt','user_id','label','dmp_id']
# 日志天數(shù)屬性用不上,刪除該列
data = data.drop(columns = 'dt')
data.head()

image.png
2. 重復(fù)值處理
data.shape
data.nunique()

image.png
- 數(shù)據(jù)行數(shù)與獨(dú)立用戶(hù)數(shù)不統(tǒng)一,檢查是否存在重復(fù)行.
data[data.duplicated(keep = False)].sort_values(by = ['user_id'])

image.png
- 不難看出user_id有重復(fù)行.
data.drop_duplicates()
data[data.duplicated(keep = False)]

image.png
- 刪除重復(fù)值,并展示.
3. 空值及數(shù)據(jù)類(lèi)型
data.info(null_counts = True)

image.png
- 數(shù)據(jù)集無(wú)空值且數(shù)據(jù)類(lèi)型正常,無(wú)需進(jìn)行處理。
4. 保存數(shù)據(jù)
data.to_csv("./output.csv", index = False)

image.png
二. 【A/B測(cè)試】(mysql)
1. 導(dǎo)入數(shù)據(jù)
-
目前的數(shù)據(jù)的保存格式為csv,需要先將數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫(kù)當(dāng)中才能執(zhí)行查詢(xún),第一部選擇一個(gè)庫(kù)右鍵選擇導(dǎo)入向?qū)?
image.png -
第二步選擇導(dǎo)入類(lèi)型,直接選擇CSV文件.
image.png -
第三步為選擇數(shù)據(jù)源的路徑,我們找到對(duì)應(yīng)的數(shù)據(jù)后,勾選需要導(dǎo)入的表.
image.png - 完成前文的操作之后便可以點(diǎn)擊">>"跳至最后的步驟,中間的步驟由于數(shù)據(jù)十分工整,不需要進(jìn)行額外操作.
- 到達(dá)下圖的界面,按照指引直接點(diǎn)擊"開(kāi)始",導(dǎo)入成功,會(huì)在日志蘭中顯示Finished successfully,如下圖所示.

image.png
2. 假設(shè)檢驗(yàn)
- 通過(guò)營(yíng)銷(xiāo)策略編號(hào)分組,求出點(diǎn)擊率.
select dmp_id,avg(label) 點(diǎn)擊率
from output
group by dmp_id;

image.png
- 首先假定我們希望新的營(yíng)銷(xiāo)策略能讓廣告點(diǎn)擊率至少提升1個(gè)百分點(diǎn).
- 可以看到策略一和策略二相較對(duì)照組在點(diǎn)擊率上都有不同程度提升。
- 其中策略一提升0.2個(gè)百分點(diǎn),策略二提升1.3個(gè)百分點(diǎn),只有策略二滿(mǎn)足了前面我們對(duì)點(diǎn)擊率提升最小值的要求。
- 接下來(lái)需要進(jìn)行假設(shè)檢驗(yàn),看策略二點(diǎn)擊率的提升是否顯著。
a. 零假設(shè)和備擇假設(shè)
- 記對(duì)照組點(diǎn)擊率為p1,策略二點(diǎn)擊率為p2,則:
- 零假設(shè) H0: p1 ≥ p2
- 備擇假設(shè) H1: p1 < p2
b. 分布類(lèi)型、檢驗(yàn)類(lèi)型和顯著性水平
- 樣本服從二點(diǎn)分布,獨(dú)立雙樣本,樣本大小n>30,總體均值和標(biāo)準(zhǔn)差未知,所以采用Z檢驗(yàn)。顯著性水平α取0.05。
2.1 用戶(hù)數(shù)
- 后續(xù)的查詢(xún)都是基于篩選后的數(shù)據(jù),因此這里新建一個(gè)表user_num去儲(chǔ)存查詢(xún)結(jié)果.此處用到了聯(lián)合查詢(xún)(union).
create table user_num as
(select dmp_id,count(dmp_id) 用戶(hù)數(shù)
from output where dmp_id=1
union
select dmp_id,count(dmp_id)
from output where dmp_id=3);

image.png
2.2 點(diǎn)擊數(shù)
- 同上新建表click.
create table click as
(select dmp_id,count(dmp_id) 點(diǎn)擊數(shù)
from output where dmp_id=1 and label=1
union
select dmp_id,count(dmp_id)
from output where dmp_id=3 and label=1);

image.png
2.3 計(jì)算點(diǎn)擊率
- 新建表rate.
create table rate as
(select a.dmp_id,b.`點(diǎn)擊數(shù)`/a.`用戶(hù)數(shù)` as 點(diǎn)擊率
from user_num a
join click b on a.dmp_id = b.dmp_id);

image.png
2.4 總和點(diǎn)擊率
select sum(b.`點(diǎn)擊數(shù)`)/sum(a.`用戶(hù)數(shù)`) 總和點(diǎn)擊率
from user_num a
join click b on a.dmp_id = b.dmp_id;

image.png
- 得出總和點(diǎn)擊率為0.014.
2.5 計(jì)算統(tǒng)計(jì)量Z
select (list1.`差`)/sqrt(c.`總和點(diǎn)擊率`*(1-c.`總和點(diǎn)擊率`)*(list2.`和`)) 值
from
(select a.`點(diǎn)擊率`-b.`點(diǎn)擊率` 差
from rate a ,rate b where b.dmp_id =3 and a.dmp_id =1) list1,
(select sum(`點(diǎn)擊數(shù)`)/sum(`用戶(hù)數(shù)`) 總和點(diǎn)擊率
from user_num join click on user_num.dmp_id = click.dmp_id) c,
(select (1/d.`用戶(hù)數(shù)`)+(1/e.`用戶(hù)數(shù)`) 和
from user_num d ,user_num e where d.dmp_id = 3 and e.dmp_id =1) list2;

image.png

image.png
- z_alpha = -1.645, 檢驗(yàn)統(tǒng)計(jì)量z = -59.566,該檢驗(yàn)為左側(cè)單尾檢驗(yàn),拒絕域?yàn)閧z<z_alpha}。
- 所以我們可以得出結(jié)論:原假設(shè)不成立,策略二點(diǎn)擊率的提升在統(tǒng)計(jì)上是顯著的。
總結(jié)
- 綜上所述,兩種營(yíng)銷(xiāo)策略中,只有策略二對(duì)廣告點(diǎn)擊率有顯著提升效果,相較于對(duì)照組點(diǎn)擊率提升了近一倍,因而在兩組營(yíng)銷(xiāo)策略中應(yīng)選擇第二組進(jìn)行推廣。


