日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

A/Btest (A/B测试)的营销策略效果分析

發(fā)布時(shí)間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 A/Btest (A/B测试)的营销策略效果分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 前言
  • 一、數(shù)據(jù)介紹
  • 二、觀察數(shù)據(jù)
    • 1.引入庫
    • 2.讀入數(shù)據(jù)
    • 3.觀察數(shù)據(jù)
  • 三、計(jì)算效果
    • 1.簡(jiǎn)單比對(duì)不同策略點(diǎn)擊率
    • 2.觀察樣本容量
    • 3.計(jì)算(以策略二組和對(duì)照組為例)
      • 3.1 設(shè)定假設(shè)
      • 3.2 計(jì)算方法
        • 3.2.1 方法一:公式計(jì)算
        • 3.2.2 方法二:Python函數(shù)計(jì)算
    • 4.擴(kuò)展
      • 4.1 擴(kuò)展一:策略一組和對(duì)照組對(duì)比
      • 4.2 擴(kuò)展二:策略二組和策略一組對(duì)比
  • 總結(jié)


前言

本文分析以支付寶營(yíng)銷活動(dòng)為例,通過廣告點(diǎn)擊率指標(biāo)比較兩組營(yíng)銷策略的廣告投放效果。


一、數(shù)據(jù)介紹

來自阿里天池:數(shù)據(jù)

用到的是:effect_tb.csv: Click/Non-click dataset.

這個(gè)csv文件主要用來記錄用戶是否對(duì)廣告進(jìn)行點(diǎn)擊。


二、觀察數(shù)據(jù)

1.引入庫

# import libraries import pandas as pd import numpy as nppd.set_option('float_format', lambda x: '%.4f' % x)

2.讀入數(shù)據(jù)

# load data data = pd.read_csv('effect_tb.csv',header = None) data.columns = ["試驗(yàn)后天數(shù)","用戶編號(hào)","是否點(diǎn)擊","試驗(yàn)組別"]

3.觀察數(shù)據(jù)

data.info()

# table summary data.describe()

# distinct count of columns data.nunique()

#把重復(fù)用戶的用戶編號(hào)變成一個(gè)list去觀察 dup_userid=data["用戶編號(hào)"].value_counts()[data["用戶編號(hào)"].value_counts()>1].index.tolist()#查看是否都全部字段都重復(fù)的記錄 data[data.duplicated()]


雖然有重復(fù)的用戶id,但是可能在不用的時(shí)間(試驗(yàn)后幾天)去做這個(gè)測(cè)試,也可能被放在不同的組別(實(shí)驗(yàn)組別)、有不同的結(jié)果(是否點(diǎn)擊),我們都去驗(yàn)證一下。

print("有重復(fù)用戶編號(hào)的記錄條數(shù):",data[data["用戶編號(hào)"].isin(dup_userid)].shape[0])print("用戶編號(hào)和【在第幾天試驗(yàn)】重復(fù)的記錄條數(shù):",data[data["用戶編號(hào)"].isin(dup_userid)].duplicated(["用戶編號(hào)","試驗(yàn)后天數(shù)"]).sum())print("用戶編號(hào)和【是否點(diǎn)擊】重復(fù)的記錄條數(shù):",data[data["用戶編號(hào)"].isin(dup_userid)].duplicated(["用戶編號(hào)","是否點(diǎn)擊"]).sum())print("用戶編號(hào)和【試驗(yàn)組別】重復(fù)的記錄條數(shù):",data[data["用戶編號(hào)"].isin(dup_userid)].duplicated(["用戶編號(hào)","試驗(yàn)組別"]).sum())print("用戶編號(hào)和【試驗(yàn)后天數(shù)】、【是否點(diǎn)擊】重復(fù)的記錄條數(shù):",data[data["用戶編號(hào)"].isin(dup_userid)].duplicated(["用戶編號(hào)","試驗(yàn)后天數(shù)","是否點(diǎn)擊"]).sum())print("用戶編號(hào)和【試驗(yàn)后天數(shù)】、【試驗(yàn)組別】重復(fù)的記錄條數(shù):",data[data["用戶編號(hào)"].isin(dup_userid)].duplicated(["用戶編號(hào)","試驗(yàn)后天數(shù)","試驗(yàn)組別"]).sum())


用戶ID和【試驗(yàn)后天數(shù)】、【試驗(yàn)組別】重復(fù)的記錄條數(shù): 0

意味著一個(gè)用戶在不同天用了不同版本,簡(jiǎn)而言之,沒有一個(gè)用戶在同一天用一個(gè)版本。

可以不刪除數(shù)據(jù),因?yàn)槿绻凑沼脩艟幪?hào)去重了,會(huì)對(duì)整個(gè)對(duì)比有影響。(之后討論)

data.pivot_table(index = "試驗(yàn)組別", columns = "是否點(diǎn)擊", values = "用戶編號(hào)",aggfunc = "count",margins = True)


三、計(jì)算效果

1.簡(jiǎn)單比對(duì)不同策略點(diǎn)擊率

#各組的點(diǎn)擊率: print("對(duì)照組點(diǎn)擊率:",data[data["試驗(yàn)組別"]==1]["是否點(diǎn)擊"].mean())print("一組試驗(yàn)點(diǎn)擊率:",data[data["試驗(yàn)組別"]==2]["是否點(diǎn)擊"].mean())print("二組試驗(yàn)點(diǎn)擊率:",data[data["試驗(yàn)組別"]==3]["是否點(diǎn)擊"].mean())


策略一組和策略二組都相對(duì)于對(duì)照組有提升,看起來策略二組提升得更多。

查看策略一組二組相對(duì)于參照組來說提升了多少

print("對(duì)照組點(diǎn)擊率:",data[data['試驗(yàn)組別']==1]['是否點(diǎn)擊'].mean())print("策略一相對(duì)對(duì)照組提升:",round((data[data['試驗(yàn)組別']==2]['是否點(diǎn)擊'].mean()-data[data['試驗(yàn)組別']==1]['是否點(diǎn)擊'].mean())*100,3))print("策略二相對(duì)對(duì)照組提升:",round((data[data['試驗(yàn)組別']==3]['是否點(diǎn)擊'].mean()-data[data['試驗(yàn)組別']==1]['是否點(diǎn)擊'].mean())*100,3))

策略一提升了0.279%,策略二提升了1.364。

假定我們希望新的營(yíng)銷策略能讓廣告點(diǎn)擊率至少提升1個(gè)百分點(diǎn)才算提升。那么這里策略一不算是提升。我們研究策略二組的點(diǎn)擊率是否在置信區(qū)間內(nèi)有顯著提升。

2.觀察樣本容量

在進(jìn)行A/B測(cè)試前,需檢查樣本容量是否滿足試驗(yàn)所需最小值。
這里借助Evan Miller的樣本量計(jì)算工具:

Evan Miller鏈接

已知對(duì)照組點(diǎn)擊率為1.26%,假定我們希望新的營(yíng)銷策略能讓廣告點(diǎn)擊率至少提升1個(gè)百分點(diǎn)才算提升,顯著性水平α取5%,則算得所需最小樣本量為:2167。

data["試驗(yàn)組別"].value_counts()


兩組營(yíng)銷活動(dòng)的樣本量都滿足最小樣本量需求。

3.計(jì)算(以策略二組和對(duì)照組為例)

3.1 設(shè)定假設(shè)

接下來需要進(jìn)行假設(shè)檢驗(yàn),這里先查看一組點(diǎn)擊率的提升是否顯著。

  • 零假設(shè)和備擇假設(shè)。記對(duì)照組點(diǎn)擊率為p0,策略二組點(diǎn)擊率為p2,則:
    零假設(shè) H0: p0 ≥ p2 (對(duì)照組的點(diǎn)擊率大于等于策略一組)
    備擇假設(shè) H1: p0 < p2 (對(duì)照組的點(diǎn)擊率小于策略一組)

  • 分布類型、檢驗(yàn)類型和顯著性水平樣本服從二點(diǎn)分布,獨(dú)立雙樣本,樣本大小n>30,總體均值和標(biāo)準(zhǔn)差未知,所以采用Z檢驗(yàn)。顯著性水平α取0.05。顯著性水平α取0.05的單尾檢測(cè)(左側(cè))對(duì)應(yīng)的z值 = -1.64。

  • z值可以用python得出或者查看z-score表:

    from scipy.stats import norm z_alpha = norm.ppf(0.05) # 若為雙側(cè),則norm.ppf(0.05/2)

    結(jié)果為z_alpha=-1.6448536269514729,統(tǒng)計(jì)上一般取-1.645,拒絕域?yàn)閧z <z_alpha }

    3.2 計(jì)算方法

    獨(dú)立雙樣本,樣本大小n>30,總體的均值和標(biāo)準(zhǔn)差未知的Z檢驗(yàn)的檢驗(yàn)統(tǒng)計(jì)量公式如下:

    3.2.1 方法一:公式計(jì)算

    # 用戶數(shù) n_old = len(data[data["試驗(yàn)組別"] == 1]) # 對(duì)照組 n_two = len(data[data["試驗(yàn)組別"] == 3]) # 策略二組# 點(diǎn)擊數(shù) c_old = len(data[data["試驗(yàn)組別"] == 1][data["是否點(diǎn)擊"] == 1]) c_two = len(data[data["試驗(yàn)組別"] == 3][data["是否點(diǎn)擊"] == 1])# 計(jì)算點(diǎn)擊率 r_old = c_old / n_old r_two = c_two / n_two#點(diǎn)擊率標(biāo)準(zhǔn)差 std_old=np.std(data[data["試驗(yàn)組別"] == 1]["是否點(diǎn)擊"]) std_two=np.std(data[data["試驗(yàn)組別"] == 3]["是否點(diǎn)擊"])# 總和點(diǎn)擊率 r = (c_old + c_two) / (n_old + n_two)print("轉(zhuǎn)化率的聯(lián)合率::", r)''' 結(jié)果: 轉(zhuǎn)化率的聯(lián)合率: 0.014429896833357214 '''

    按照公式計(jì)算:

    z_two = (r_old - r_two) / np.sqrt(r * (1 - r)*(1/n_old + 1/n_two)) print("檢驗(yàn)統(tǒng)計(jì)量z:", z_two)''' 結(jié)果: 檢驗(yàn)統(tǒng)計(jì)量z: -59.66600946268368 '''

    z_one = -59.66600946268368 < -1.64,符合拒絕域?yàn)閧z<z_alpha}。

    所以我們可以得出結(jié)論:原假設(shè)(對(duì)照組的點(diǎn)擊率大于策略一組)不成立,策略二點(diǎn)擊率的提升在統(tǒng)計(jì)上是顯著的。

    3.2.2 方法二:Python函數(shù)計(jì)算

    直接用python statsmodels包計(jì)算z值和p值。

    proportions_ztest官方鏈接

    難點(diǎn):

    alternativestr The alternative hypothesis, H1, has to be one of the
    following

    • ‘two-sided’: H1: difference in means not equal to value (default)
    • ‘larger’ : H1: difference in means larger than value
    • ‘smaller’ : H1: difference in means smaller than value
    import statsmodels.stats.proportion as spz_two_score, p = sp.proportions_ztest([ c_two,c_old],[ n_two,n_old], alternative = "la") print("檢驗(yàn)統(tǒng)計(jì)量z_two:",z_two_score,",p值:", p)#alternative 默認(rèn) ='two-sided' #alternative='smaller'代表左尾 #用p值判斷與用檢驗(yàn)統(tǒng)計(jì)量z判斷是等效的''' 結(jié)果: 檢驗(yàn)統(tǒng)計(jì)量z_two: -59.66600946268368 ,p值: 0.0 '''

    p值約等于0,p < α,與方法一結(jié)論相同,拒絕原假設(shè)。

    4.擴(kuò)展

    4.1 擴(kuò)展一:策略一組和對(duì)照組對(duì)比

    策略二組點(diǎn)擊率的提升是否顯著。

    p1為策略一組,p0為對(duì)照組

    • 零假設(shè) H0: p1 < p0 (策略二組相比于對(duì)照組無提升)
    • 備擇假設(shè) H1: p1 ≥ p0 (策略二組相比于對(duì)照組有提升)
    # 用戶數(shù) n_old = len(data[data["試驗(yàn)組別"] == 1]) # 對(duì)照組 n_one = len(data[data["試驗(yàn)組別"] == 2]) # 一組# 點(diǎn)擊數(shù) c_old = len(data[data["試驗(yàn)組別"] == 1][data["是否點(diǎn)擊"] == 1]) c_one = len(data[data["試驗(yàn)組別"] == 2][data["是否點(diǎn)擊"] == 1])# 計(jì)算點(diǎn)擊率 r_old = c_old / n_old r_one = c_one / n_one# 總和點(diǎn)擊率 r = (c_old + c_one) / (n_old + n_one)print("轉(zhuǎn)化率的聯(lián)合率:", r)z_one_score, p = sp.proportions_ztest([c_old, c_one],[n_old, n_one], alternative = "smaller") print("檢驗(yàn)統(tǒng)計(jì)量z_one:",z_one_score,",p值:", p)''' 結(jié)果: 轉(zhuǎn)化率的聯(lián)合率:0.01298700183320143 檢驗(yàn)統(tǒng)計(jì)量z_one: -14.362726203811503 ,p值: 4.433468512724253e-47(P值約等于0) '''

    z_one < -1.64,,p < 0.05,拒絕原假設(shè),即策略一組相比于對(duì)照組有提升。

    4.2 擴(kuò)展二:策略二組和策略一組對(duì)比

    那么策略一和策略二相比呢?
    p1為策略一組,p2為策略二組

    因?yàn)閺闹暗慕Y(jié)果看起來策略二組比策略一組提升更多,那么我們先假設(shè)是這樣。

    • 零假設(shè) H0: p2 <≥ p1 (策略二組相比于策略一組有提升)
    • 備擇假設(shè) H1: p2 ≥ p1 (策略二組相比于策略一組無提升)

    看一下樣本容量,算出這兩組對(duì)比所需最小樣本量為:2580。

    這兩組樣本的容量符合要求。

    z_one_two_score, p = sp.proportions_ztest([ c_two,c_one],[ n_two,n_one], alternative = "smaller") print("檢驗(yàn)統(tǒng)計(jì)量z:",round(z_one_two_score,4),",p值:", round(p,4))''' 結(jié)果: 檢驗(yàn)統(tǒng)計(jì)量z: 32.818 ,p值: 1.0 '''

    p值約等于1,p > α(0.05),符合原假設(shè),即策略二組相比于策略一組有提升。


    總結(jié)

    • 策略一和策略二都相對(duì)于對(duì)照組對(duì)廣告點(diǎn)擊率有顯著提升效果。
    • 策略二相對(duì)于策略一對(duì)廣告點(diǎn)擊率有顯著提升效果。

    總結(jié)

    以上是生活随笔為你收集整理的A/Btest (A/B测试)的营销策略效果分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。