1. 數(shù)據(jù)分析之AB testing實戰(zhàn)(附Python代碼)

        共 9793字,需瀏覽 20分鐘

         ·

        2020-08-31 00:36

        作者 | Huang supreme
        編輯 | JackTian
        微信公眾號 | 杰哥的IT之旅(ID:Jake_Internet)

        作者介紹:


        大家可以叫我黃同學(博客名:Huang Supreme),一個應用統(tǒng)計碩士,愛好寫一些技術博客,志在用通俗易懂的寫作風格,幫助大家學到知識,學好知識!

        目錄

        后臺回復:AB testing實戰(zhàn),獲取完整代碼

        1、增長黑客

        1)前言
        說到 AB testing,就不得不說到增長黑客,這個詞大約在 2015 年就引入到中國了,但是在 2018 年開始火熱起來。那么互聯(lián)網(wǎng)公司想要增加活躍用戶、增加收入,現(xiàn)在的產品運營還是采用增長黑客這樣一種運營方式,并不是產品經理一拍腦袋就可以想到,或者老板直接拍板決定就可以做到的。
        大家現(xiàn)在的玩兒法都是“數(shù)據(jù)驅動”,使用數(shù)據(jù)驅動方式來幫助運營更好的產品。
        那什么是“增長黑客”呢?通俗的說就是“樹挪死,人挪活”,互聯(lián)網(wǎng)公司想要成長,想要變成一個巨頭,也需要挪一挪、變一變,不斷變換自己的產品,升級自己的產品,否則將會在這樣一個弱肉強食、競爭激烈的生態(tài)中,被干掉。
        我們有時候會覺得互聯(lián)網(wǎng)公司就是【融資、燒錢、拉新、融資、燒錢、拉新…上市(倒閉)】這樣一個流程,運氣好的話就上市了,運氣不好的話就倒閉了。但其實很多互聯(lián)網(wǎng)公司內部,即使是燒錢,燒錢的方式也是有很多講究的,并不是老板、產品經理或某個總監(jiān)拍頭決策的。
        2)運用分析指標框架,驅動互聯(lián)網(wǎng)產品和運營
        具體可以看看,增長黑客,怎么運用分析指標框架,驅動互聯(lián)網(wǎng)產品和運營?

        現(xiàn)在分享一個鏈接,供大家了解:

        http://www.woshipm.com/data-analysis/439849.html

        整個互聯(lián)網(wǎng)內部,無論是產品、營銷、銷售等,現(xiàn)在基本都是采用“數(shù)據(jù)驅動”這樣一個方式來進行運作的,這也就是“數(shù)據(jù)分析行業(yè)”在最近幾年為什么這么火熱的原因。“增長黑客”很多人用 AARRR 去總結了一下,如上圖所示,下面我們來對上圖做一個文字說明。
        首選是“獲取用戶”(Acquisition),怎么樣使用一種比較高效的方式(APP、網(wǎng)站、百度或淘寶買一些廣告、)來獲取到用戶,增加用戶數(shù)。接著是“增加活躍”(Activation),對于獲取到的用戶,怎么去激活他們,使得他們變得活躍。
        然后是“提高留存”(Retention),我好不容易通過各種渠道,將用戶拉到我的產品中,怎么讓他們成為我們這個產品的忠實用戶。再接著就是“實現(xiàn)收益”(Revenue),公司運營需要生存,就必須要賺錢獲取收益,那么怎么樣獲取更多的收益?是訂閱更多的VIP用戶,還是賣給用戶更多的產品或者廣告來獲取收益?
        最后一個是“裂變傳播”(Referral),如果我們前面的過程做的好的話,用戶是不是會幫助我們做裂變傳播,他們自己會口口相傳(微信、朋友圈等),幫助我們做宣傳,幫助我們拓展更多的用戶。

        這樣上述幾個部分就形成了一個良好的閉環(huán),不斷地去良性的發(fā)展。

        3)增長黑客大致分為如下幾個步驟
        首先是“分析現(xiàn)狀”,分析現(xiàn)在的產品有哪些問題?在哪方面可以提高?
        然后是“設置目標”,你想干什么?像愛奇藝、騰訊視頻等,就是想增加VIP的數(shù)量;像淘寶的話,如何更多地增加廣告收入;像抖音的話,如何增加日活,怎么樣讓用戶每天不停地去刷抖音,這樣我會有更多的廣告,更多的活躍用戶數(shù),更多的收入。
        接著是“提出改進方案”,提出方案后,是不是你的方案就是最優(yōu)的呢?其實并不是,這就是下面所說的需要進行“小規(guī)模測試”。
        再接著是“開始小規(guī)模測試”,拿出一部分測試用戶,讓他們去看是否滿意,是不是反饋的比較好。怎么知道反饋的好不好呢?就是下面要說的采集分析。
        再接著是“采集分析”,對測試用戶得到的數(shù)據(jù)進行數(shù)據(jù)分析,如果反饋效果好,就調整流量,不斷擴大規(guī)模去測試。如果反饋效果不好,就停止或者是修改方案(回到前面的步驟),這是一個反復迭代的過程,這個過程也就是“AB testing”。
        “AB testing”就是來幫助我們,通過數(shù)據(jù)分析的方式,來優(yōu)化增長黑客這樣一個流程,使用數(shù)據(jù)驅動的方式,來幫助分析我們的產品,分析我們的用戶反饋。

        2、AB testing介紹

        1)AB testing對比方案圖示展示

        圖示一:天貓兩個網(wǎng)頁的改版

        圖示二:微信兩個版本的改版

        產品經理改了一個新的版本,那它到底好不好呢?可不可以一拍腦袋說,覺得哪個好就用哪個呢?萬一反饋不是很好,萬一下降了活躍用戶數(shù)量,減少了用戶收入,其實對于大公司來說,都是巨大的損失,誰都承擔不起。所以需要使用像 AB testing 這樣數(shù)據(jù)分析的方式,去把這個風險降到最低。
        還有一個例子就是 Facebook,他們有一個級別非常高的高管,推動他們的產品,覺得某個產品這么好、那么好,所有 Facebook 產品的發(fā)布和版本的迭代都需要使用 AB testing,小范圍用戶測試的時候,如果發(fā)現(xiàn)用戶反饋不好,變得不怎么活躍了,覺得非常難用了,即使這個高管再推動呢,也是不行的,必須使用數(shù)據(jù)說話,這個產品不好,就放棄這個版本,去研發(fā)下一個版本或者尋找另外的突破口。
        這個東西在國內的好多公司基本都是這么玩兒的,比如說上述微信 1.0 版本和微信 2.0 版本,也不是說隨隨便便拍拍腦袋就發(fā)給大家使用的,其實也是運用 AB testing,很多時候讓大家看到不同的頁面,找到一部分小流量用戶,幫助我們去測試,看看他們的反饋。
        2)什么是反饋呢?
        上面很多次我們都提到了“用戶反饋”,那么什么是“反饋”呢?
        其實就是這部分用戶的使用時長呀,產生的收益呀,像百度這樣的廣告(他有沒有點廣告呀),像愛奇藝這樣的付費網(wǎng)站(他有沒有從一個普通用戶變?yōu)橐粋€ VIP 用戶呀),這些指標等都可以驗證你新的版本是不是好。
        3)如何選取這樣一批小流量用戶呢?
        最重的就是隨機性。我們不能僅僅選擇深圳市的某個地方的一些用戶,作為測試用戶。我們也不能僅僅選擇年齡在 25-30 這樣的限定范圍的一些用戶,作為測試用戶。應該是在你的用戶中隨機抽取比如說 1% 的用戶,作為小流量用戶去進行版本測試,看看他們的反饋。
        如果反饋好,我們考慮擴大流量用戶,抽取 2%、5%、10%、20%、50% 甚至是 100%。
        如果反饋不好,我們選擇是終止此次實驗,尋找新的突破口,還是選擇改進自己的版本。
        4)到底什么是AB testing?
        簡單地說:確定兩個元素或版本( A 和 B )哪個版本更好!
        5)如何做AB testing?
        在產品正式迭代發(fā)版之前,為同一個目標制定兩個(或以上)方案;
        • 提出想法,設定假設;

        • 預估成本,設定優(yōu)先級;

        • 設計方案;

        日常中我們總在說 AB testing,做的是兩個版本的對比,其實也可以是 ABCD testing,四個版本的對比,只不過實際中我們做得更多的就是 AB testing。再有一個,就是預估成本,這個是很有必要的,如果你切了 50% 的流量(或者更大的流量),將你的新版本上線跑了一周,假如情況非常糟糕,對于大公司來說,可能損失幾個億,或者是幾十個億,因此再進行實驗之前,一定要好好預算一下,你究竟可以承擔多大的風險,最后在設定你的方案。
        將用戶流量對應分成幾組,在保證每組用戶特征相同的前提下,讓用戶分別看到不同的方案設計;
        注意幾個術語,這個在后面的實戰(zhàn)代碼中有用。在做 AB testing 的時候,一般分為 control 組和 treatment 組,其中 control 組看到的是老頁面(old page),treatment 組看到的是新頁面(new page)。

        根據(jù)幾組用戶的真實數(shù)據(jù)反饋,科學的幫助產品進行決策;

        通過分析用戶使用的日志數(shù)據(jù),來決定是擴大實驗,還是繼續(xù)修改方案,重新迭代。如果判定實驗成功,則擴大實驗范圍。如果判定實驗失敗,終止本次實驗,繼續(xù)修改方案。

        3、AB testing 實戰(zhàn)

        1)AB testing 的統(tǒng)計學基礎(獨立雙樣本的假設檢驗)
        關于假設檢驗這個知識點,我在前面的文章中已經詳細介紹過,這里就不一一說明,截取了幾張圖片供大家參考。

        大家如果感興趣,可以看一下這篇文章:https://blog.csdn.net/weixin_41261833/article/details/104623377




        2)AB testing 演示的 python 代碼
        在進行代碼演示之前,我們先對每個字段做一個說明:user_id 是用戶的 id;timestamp 是用戶訪問頁面的時間;group 表示把新的落地頁分到 treatment 組、把舊的落地頁分到了 control 組;landing_page 表示的是落地頁;converted 表示的是否轉化,1 表示轉化(通俗的說:拿愛奇藝會員來說,普通用戶是否轉換為了 VIP 用戶,1 表示轉換了,0 表示未轉換);
        import pandas as pd
        ---------------------------------------------------------
        # 讀取數(shù)據(jù),查看前5行
        df = pd.read_csv("ab_test.csv")
        df.head()
        ---------------------------------------------------------
        # 數(shù)據(jù)預覽,查看數(shù)據(jù)有多少行、多少列
        df.shape
        ---------------------------------------------------------
        # 查看數(shù)據(jù)中是否有空值
        df.isnull().any()
        df.info()
        ---------------------------------------------------------
        # 查看數(shù)據(jù)中的錯誤行
        print((True) != (True))
        print((True) != (False))
        print((False) != (True))
        print((False) != (False))
        """
        true  != true   fasle    treatment  new_page
        true  != false  true     treatment  old_page
        false != true   true     control    new_page
        false != false  false    control    old_page
        """

        # 下面這句代碼,展示的就是group=treatment且landing_page=old_page和group=control且landing_page=new_page,這樣的錯誤行;
        num_error = df[((df.group == "treatment")!=(df.landing_page == "new_page"))].shape[0]
        num_error
        ---------------------------------------------------------
        # 去掉錯誤行后,再次查看是否還存在錯誤行
        print("沒有刪除錯誤行之前的記錄數(shù):", df.shape[0])
        df2 = df[~((df.landing_page == "new_page")&(df.group == "control"))]
        df3 = df2[~((df2.landing_page == "old_page")&(df2.group == "treatment"))]
        print("刪除錯誤行之后的記錄數(shù):", df3.shape[0])
        print("錯誤行共有",str(df.shape[0]-df3.shape[0]),"條記錄")
        num_error2 = df3[((df3.group == "treatment")!=(df3.landing_page == "new_page"))].shape[0]
        num_error2
        ---------------------------------------------------------
        # 查看是否有重復行
        print("數(shù)據(jù)的記錄數(shù)為:", df3.user_id.shape[0])
        print("將user_id去重計數(shù)后的記錄數(shù)為:", df3.user_id.nunique())
        """
        通過上述分析,可以看出:user_id中有一條記錄數(shù)是重復的。接下來,我們可以找出這條重復的記錄,并去重。
        """

        ---------------------------------------------------------
        # 查看重復的行
        df3[df3.user_id.duplicated(keep=False)]
        #  去除重復的行
        df4 = df3.drop_duplicates(subset=["user_id"],keep="first")
        df4.shape[0]
        ---------------------------------------------------------
        # 我們來看一下control組的轉化率
        control_converted = df4.query('group=="control"').converted.mean()
        control_converted
        # 再來看一下treatment組的轉化率
        treatment_converted = df4.query('group=="treatment"').converted.mean()
        treatment_converted
        """
        自己下去思考一下:根據(jù)上述結果,老頁面的轉化率比新頁面的轉換率好,是不是就可以說明老頁面好呢?
        """

        ---------------------------------------------------------
        # 進行獨立兩樣本的假設檢驗
        import statsmodels.stats.proportion as ssp

        converted_old = df4[df4.landing_page == "old_page"].converted.sum()
        converted_new = df4[df4.landing_page == "new_page"].converted.sum()
        n_old = len(df4[df4.landing_page == "old_page"])
        n_new = len(df4[df4.landing_page == "new_page"])
        data = pd.DataFrame({"converted":[converted_old, converted_new],
                             "total":[n_old ,n_new]})
        display(data)
        z_score, p_value = ssp.proportions_ztest(count=data.converted, nobs=data.total, alternative="smaller")
        print("Z值為:", z_score)
        print("P值為:", p_value)
        ---------------------------------------------------------

        結果如下:

        結果分析:

        通過上述的結果發(fā)現(xiàn),P 值為 0.9,遠大于 0.05,也就是說,我們沒有理由拒絕原假設,即只能接受原假設,也就是新老版本之間沒有太大的差別。我們接下來要做的就是終止這次試驗,繼續(xù)優(yōu)化自身的方案。
        3)AB testing 拓展
        關于 AB testing 的相關知識,我們就簡單說到這里。
        下面再次提供幾個鏈接供大家參考學習:

        Reference

        http://www.woshipm.com/data-analysis/439849.html
        https://blog.csdn.net/weixin_41261833/article/details/104623377
        http://m.blog.itpub.net/31555699/viewspace-2653832/
        https://www.jianshu.com/p/61e6c34d0704


        本公眾號全部博文已整理成一個目錄,請在公眾號后臺回復「m」獲?。?/span>
            
        作者往期精彩文章:
        1、精心整理的 52 頁 Python 操作 excel、word、pdf 文件【附獲取方式】
        2、520情人節(jié),不懂送女朋友什么牌子的口紅?沒關系!Python 數(shù)據(jù)分析告訴你。
        3、“羅永浩抖音首秀”銷售數(shù)據(jù)的可視化大屏是怎么做出來的呢?
        4、利用 Python 進行多 Sheet 表合并、多工作簿合并、一表按列拆分
        5、Python 自動化辦公之"你還在手動操作“文件”或“文件夾”嗎?"
        關注微信公眾號『杰哥的IT之旅』,后臺回復“1024”查看更多內容,回復“微信”添加我微信。

        好文和朋友一起看~
        瀏覽 47
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 男人的天堂va | 操逼视频毛片 | 丰满美女又嫩又大爽A片 | 黄色香蕉网站 | 我疯狂挺进她身体口述故事 |