欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

通過Python實現(xiàn)一個A/B測試詳解

 更新時間:2023年01月30日 08:47:37   作者:小F  
A/B測試,通過分析兩種不同的營銷策略,以此來選擇最佳的營銷策略,可以高效地將流量轉(zhuǎn)化為銷售額。本文主要介紹了如何通過Python實現(xiàn)一個A/B測試,感興趣的可以了解一下

A/B測試,通過分析兩種不同的營銷策略,以此來選擇最佳的營銷策略,可以高效地將流量轉(zhuǎn)化為銷售額(或轉(zhuǎn)化為你的預(yù)期目標(biāo))。

有助于找到更好的方法來尋找客戶、營銷產(chǎn)品、擴(kuò)大影響范圍或?qū)⒛繕?biāo)客戶轉(zhuǎn)化為實際客戶。

A/B測試是每個學(xué)習(xí)數(shù)據(jù)分析同學(xué),都應(yīng)該知道且去學(xué)習(xí)的概念。

/ 01 / AB測試

舉個例子,我在短視頻App上購買流量推廣我的視頻(掛小黃車買課程),一共推了兩次,其中兩次的目標(biāo)受眾各不相同。

在分析了兩次活動的結(jié)果后,我可能傾向于選擇第二次的活動目標(biāo)受眾,因為它比第一次活動能夠帶來更好的銷售額或漲粉或播放量。

我們的目標(biāo)可以是提高銷售額、粉絲數(shù)或流量等等。

當(dāng)我們根據(jù)以前的營銷活動結(jié)果選擇最佳的營銷策略時,這就是A/B測試。

本次使用的數(shù)據(jù)集是開源數(shù)據(jù)集,?LKER YILDIZ在Kaggle上提交的A/B測試的數(shù)據(jù)集。

下面是數(shù)據(jù)集中的所有特征:

1. Campaign Name: 活動名稱

2. Date: 記錄日期

3. Spend: 活動花費(單位:美元)

4. of Impressions: 廣告在整個活動中的展示次數(shù)

5. Reach: 廣告在整個活動中的展示人數(shù)(唯一)

6. of Website Clicks: 通過廣告獲得的網(wǎng)站點擊次數(shù)

7. of Searches: 在網(wǎng)站上執(zhí)行搜索的用戶數(shù)量

8. of View Content: 查看網(wǎng)站內(nèi)容產(chǎn)品的用戶數(shù)量

9. of Add to Cart: 將產(chǎn)品添加到購物車的用戶數(shù)量

10. of Purchase: 購買次數(shù)

一共是進(jìn)行了兩種類型的宣傳營銷活動:

1. Control Campaign: 對照活動

2. Test Campaign: 測試活動

通過執(zhí)行A/B測試找到最適合的營銷策略,以此來吸引獲得更多的客戶。

下面小F就帶大家一起來學(xué)習(xí)下。

/ 02 / 使用Python進(jìn)行AB測試

先安裝相關(guān)的Python可視化庫plotly,在使用的時候發(fā)現(xiàn)報錯,所以還要安裝statsmodels庫。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple statsmodels
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple plotly

然后導(dǎo)入Python庫,讀取兩種活動的數(shù)據(jù)文件。

import pandas as pd
import datetime
from datetime import date, timedelta
import plotly.graph_objects as go
import plotly.express as px
import plotly.io as pio
pio.templates.default = "plotly_white"


# 設(shè)置value的顯示長度為200,默認(rèn)為50
pd.set_option('max_colwidth', 300)
# 顯示所有列,把行顯示設(shè)置成最大
pd.set_option('display.max_columns', None)
# 顯示所有行,把列顯示設(shè)置成最大
pd.set_option('display.max_rows', None)

# 加載數(shù)據(jù)
control_data = pd.read_csv("control_group.csv", sep=";")
test_data = pd.read_csv("test_group.csv", sep=";")

來看看這兩個數(shù)據(jù)集的情況。

# 打印對照活動數(shù)據(jù)
print(control_data.head())

對照活動數(shù)據(jù)的情況如下。

打印測試活動數(shù)據(jù)。

# 打印測試活動數(shù)據(jù)
print(test_data.head())

測試活動數(shù)據(jù)的情況如下。

/ 03 / 數(shù)據(jù)準(zhǔn)備

發(fā)現(xiàn)數(shù)據(jù)集的列名不太規(guī)范,所以對列名進(jìn)行修改。

# 更改列名
control_data.columns = ["Campaign Name", "Date", "Amount Spent",
                        "Number of Impressions", "Reach", "Website Clicks",
                        "Searches Received", "Content Viewed", "Added to Cart",
                        "Purchases"]

test_data.columns = ["Campaign Name", "Date", "Amount Spent",
                     "Number of Impressions", "Reach", "Website Clicks",
                     "Searches Received", "Content Viewed", "Added to Cart",
                     "Purchases"]

現(xiàn)在讓我們看看數(shù)據(jù)集是否有空值。

# 查看空值
print(control_data.isnull().sum())
print(test_data.isnull().sum())

發(fā)現(xiàn)對照活動的數(shù)據(jù)集有數(shù)據(jù)缺失,可以用每列的平均值來填充這些缺失值。

# 數(shù)據(jù)清洗
control_data["Number of Impressions"].fillna(value=control_data["Number of Impressions"].mean(),
                                             inplace=True)
control_data["Reach"].fillna(value=control_data["Reach"].mean(),
                             inplace=True)
control_data["Website Clicks"].fillna(value=control_data["Website Clicks"].mean(),
                                      inplace=True)
control_data["Searches Received"].fillna(value=control_data["Searches Received"].mean(),
                                         inplace=True)
control_data["Content Viewed"].fillna(value=control_data["Content Viewed"].mean(),
                                      inplace=True)
control_data["Added to Cart"].fillna(value=control_data["Added to Cart"].mean(),
                                     inplace=True)
control_data["Purchases"].fillna(value=control_data["Purchases"].mean(),
                                 inplace=True)

通過合并兩個數(shù)據(jù)集來創(chuàng)建一個新的數(shù)據(jù)集。

# 合并數(shù)據(jù)
ab_data = control_data.merge(test_data,
                             how="outer").sort_values(["Date"])
ab_data = ab_data.reset_index(drop=True)
print(ab_data.head())

查看數(shù)據(jù)集中,兩種活動的樣本數(shù)量是否相同。

# 類型計數(shù)
print(ab_data["Campaign Name"].value_counts())

可以看出,每種活動都有30個樣本數(shù)據(jù),滿足樣本均衡的條件。

/ 04 / AB測試找到最佳營銷策略

01  展示次數(shù)-活動花費

首先分析兩種活動中「展示次數(shù)」和「活動花費」之間的關(guān)系。

figure = px.scatter(data_frame = ab_data, 
                    x="Number of Impressions",
                    y="Amount Spent", 
                    size="Amount Spent", 
                    color= "Campaign Name", 
                    trendline="ols")
figure.show()

發(fā)現(xiàn)在花費相同的情況下,「對照活動」的展示次數(shù)更多。

02  搜索量

兩種類型活動的網(wǎng)站總搜索量對比。

label = ["Total Searches from Control Campaign",
         "Total Searches from Test Campaign"]
counts = [sum(control_data["Searches Received"]),
          sum(test_data["Searches Received"])]
colors = ['gold', 'lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])
fig.update_layout(title_text='Control Vs Test: Searches')
fig.update_traces(hoverinfo='label+percent', textinfo='value',
                  textfont_size=30,
                  marker=dict(colors=colors,
                              line=dict(color='black', width=3)))
fig.show()

在網(wǎng)站的搜索量上,「測試活動」略多于對照活動。

03  點擊量

兩種類型活動的網(wǎng)站總點擊量對比。

label = ["Website Clicks from Control Campaign",
         "Website Clicks from Test Campaign"]
counts = [sum(control_data["Website Clicks"]),
          sum(test_data["Website Clicks"])]
colors = ['gold', 'lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])
fig.update_layout(title_text='Control Vs Test: Website Clicks')
fig.update_traces(hoverinfo='label+percent', textinfo='value',
                  textfont_size=30,
                  marker=dict(colors=colors,
                              line=dict(color='black', width=3)))
fig.show()

在網(wǎng)站的點擊量上,「測試活動」略多于對照活動。

04  內(nèi)容產(chǎn)品查看量

兩種類型活動的網(wǎng)站內(nèi)容和產(chǎn)品的查看量對比。

label = ["Content Viewed from Control Campaign",
         "Content Viewed from Test Campaign"]
counts = [sum(control_data["Content Viewed"]),
          sum(test_data["Content Viewed"])]
colors = ['gold', 'lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])
fig.update_layout(title_text='Control Vs Test: Content Viewed')
fig.update_traces(hoverinfo='label+percent', textinfo='value',
                  textfont_size=30,
                  marker=dict(colors=colors,
                              line=dict(color='black', width=3)))
fig.show()

可以看出「對照活動」的內(nèi)容產(chǎn)品查看量比測試活動多。

雖然差距不是很大,但是由于對照活動的網(wǎng)站點擊率相對較低,這便意味著「對照活動的用戶參與度(粘性)高于測試活動。

05  加購物車量

兩種類型活動,將產(chǎn)品添加到購物車的數(shù)量。

label = ["Products Added to Cart from Control Campaign", 
         "Products Added to Cart from Test Campaign"]
counts = [sum(control_data["Added to Cart"]), 
          sum(test_data["Added to Cart"])]
colors = ['gold','lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])
fig.update_layout(title_text='Control Vs Test: Added to Cart')
fig.update_traces(hoverinfo='label+percent', textinfo='value', 
                  textfont_size=30,
                  marker=dict(colors=colors, 
                              line=dict(color='black', width=3)))
fig.show()

盡管「對照活動」的點擊率相對較低,但是卻有更多的產(chǎn)品被添加到購物車中。

06  活動花費

兩種類型的活動花費對比。

label = ["Amount Spent in Control Campaign", 
         "Amount Spent in Test Campaign"]
counts = [sum(control_data["Amount Spent"]), 
          sum(test_data["Amount Spent"])]
colors = ['gold','lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])
fig.update_layout(title_text='Control Vs Test: Amount Spent')
fig.update_traces(hoverinfo='label+percent', textinfo='value', 
                  textfont_size=30,
                  marker=dict(colors=colors, 
                              line=dict(color='black', width=3)))
fig.show()

在測試活動上的花費要高于對照活動。

基于上面的分析,對照活動帶來了更多的內(nèi)容瀏覽量和產(chǎn)品添加到購物車,「對照活動」比測試活動更有效。

07  銷售額

兩種類型活動的銷售情況對比。

label = ["Purchases Made by Control Campaign", 
         "Purchases Made by Test Campaign"]
counts = [sum(control_data["Purchases"]), 
          sum(test_data["Purchases"])]
colors = ['gold','lightgreen']
fig = go.Figure(data=[go.Pie(labels=label, values=counts)])
fig.update_layout(title_text='Control Vs Test: Purchases')
fig.update_traces(hoverinfo='label+percent', textinfo='value', 
                  textfont_size=30,
                  marker=dict(colors=colors, 
                              line=dict(color='black', width=3)))
fig.show()

在這兩種廣告活動當(dāng)中,消費者的購買量僅相差1%左右。

由于對照活動能以更少的營銷支出獲得了更多的銷售,所以在營銷策略上,我們可以選擇對照活動類型。

最后讓我們分析其它指標(biāo),看看哪種廣告活動的轉(zhuǎn)化率更高。

08  內(nèi)容產(chǎn)品查看量和點擊量

兩種類型活動網(wǎng)站內(nèi)容查看和點擊量的關(guān)系。

figure = px.scatter(data_frame=ab_data,
                    x="Content Viewed",
                    y="Website Clicks",
                    size="Website Clicks",
                    color="Campaign Name",
                    trendline="ols")
figure.show()

在測試活動中,雖然網(wǎng)站點擊率高,但是內(nèi)容查看量少,所以優(yōu)先選擇「對照活動」。

09  內(nèi)容產(chǎn)品查看量和添加購物車

分析網(wǎng)站內(nèi)容查看和添加購物車之間的關(guān)系。

figure = px.scatter(data_frame=ab_data,
                    x="Added to Cart",
                    y="Content Viewed",
                    size="Added to Cart",
                    color="Campaign Name",
                    trendline="ols")
figure.show()

再一次的,「對照活動」的效果還是很好,加入購物車的意向較高。

10  添加購物車和銷售額

分析添加到購物車的產(chǎn)品數(shù)量和銷售額之間的關(guān)系。

figure = px.scatter(data_frame=ab_data,
                    x="Purchases",
                    y="Added to Cart",
                    size="Purchases",
                    color="Campaign Name",
                    trendline="ols")
figure.show()

雖然對照活動帶來了更多的加購物車行為,但「測試活動」的結(jié)算率會更高。

/ 05 / 結(jié)論

通過A/B測試,我們發(fā)現(xiàn)對照活動帶來了更多的銷售行為和訪問者的參與。

用戶會從對照活動中查看了更多的產(chǎn)品,使得購物車中有更多的產(chǎn)品和更多的銷售額。

但在測試活動中,用戶購物車產(chǎn)品的結(jié)算率會更高。

測試活動是根據(jù)內(nèi)容查看和添加到購物車會有更多的銷售。而對照活動則是整體銷量的增加。

因此,測試活動可以用來向特定的受眾推銷特定的產(chǎn)品,而對照活動可以用來向更廣泛的客戶推銷多種產(chǎn)品。

到此這篇關(guān)于通過Python實現(xiàn)一個A/B測試詳解的文章就介紹到這了,更多相關(guān)Python A/B測試內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實現(xiàn)識別手寫數(shù)字 python圖像識別算法

    python實現(xiàn)識別手寫數(shù)字 python圖像識別算法

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)識別手寫數(shù)字,python圖像識別算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • pyQt5實時刷新界面的示例

    pyQt5實時刷新界面的示例

    今天小編就為大家分享一篇pyQt5實時刷新界面的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python數(shù)據(jù)寫入列表并導(dǎo)出折線圖

    python數(shù)據(jù)寫入列表并導(dǎo)出折線圖

    這篇文章主要介紹了python數(shù)據(jù)寫入列表并導(dǎo)出折線圖,文章以舉例展開對文章主題的介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-01-01
  • Python利用for循環(huán)打印星號三角形的案例

    Python利用for循環(huán)打印星號三角形的案例

    這篇文章主要介紹了Python利用for循環(huán)打印星號三角形的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 詳解Python靜態(tài)網(wǎng)頁爬取獲取高清壁紙

    詳解Python靜態(tài)網(wǎng)頁爬取獲取高清壁紙

    這篇文章主要介紹了Python爬取高清壁紙,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Pytorch如何切換 cpu和gpu的使用詳解

    Pytorch如何切換 cpu和gpu的使用詳解

    這篇文章主要介紹了Pytorch如何切換 cpu和gpu的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 學(xué)會這個炫酷圖表利器pyecharts,還怕不被公司重用?

    學(xué)會這個炫酷圖表利器pyecharts,還怕不被公司重用?

    前段時間,公司高層要看上半年度項目組業(yè)績數(shù)據(jù)分析,沒辦法,硬著頭皮也要上!說到數(shù)據(jù)分析,肯定離不開數(shù)據(jù)的可視化,畢竟圖表比冷冰冰的數(shù)字更加直觀,Boss只想一眼就能看出趨勢和結(jié)論.今天我們就聊一聊 pyecharts 中幾種常用的圖表, ,需要的朋友可以參考下
    2021-06-06
  • Python讀取分割壓縮TXT文本文件實例

    Python讀取分割壓縮TXT文本文件實例

    今天小編就為大家分享一篇Python讀取分割壓縮TXT文本文件實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python 實現(xiàn)查找文件并輸出滿足某一條件的數(shù)據(jù)項方法

    python 實現(xiàn)查找文件并輸出滿足某一條件的數(shù)據(jù)項方法

    今天小編就為大家分享一篇python 實現(xiàn)查找文件并輸出滿足某一條件的數(shù)據(jù)項方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 簡單易懂Pytorch實戰(zhàn)實例VGG深度網(wǎng)絡(luò)

    簡單易懂Pytorch實戰(zhàn)實例VGG深度網(wǎng)絡(luò)

    這篇文章主要介紹了簡單易懂Pytorch實戰(zhàn)實例VGG深度網(wǎng)絡(luò),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08

最新評論