比例類數據的差別性檢驗與AB測試的終止點

在實際業務中,咱們常常會遇到頻率類事件的假設檢驗,這類數據包括:留存率、點擊率、轉化率。咱們甚至能夠把大多數AB測試類的場景都理解爲「頻率的假設檢驗」。本文試圖建立一個通常性的頻率假設檢驗工具的EXCEL實現,並介紹其工做原理。文件參考這裏(https://github.com/threecifanggen/data-science-tools/blob/master/excel/%E4%BA%8C%E9%A1%B9%E5%88%86%E5%B8%83%E6%A3%80%E9%AA%8C.xlsx)python

定義問題

其實,在具體工做中,咱們都會遇到比例數據來做爲指標衡量一個數據,能夠大體將這些指標抽象成三類數據:正事件觸發次數/用戶數觸發正事件的人數/人數正事件觸發次數/總事件發生次數。咱們在文章中將以「平均發生次數」(Average Count)、「轉化率」(Transfer Rate)、「發生率」(Positive Rate)來表述這三類指標。git

名稱 平均發生次數 轉化率 發生率
例子 人均成單量、人均點擊量 留存率、成單轉化率 按鈕點擊率、流程退出率
定義 正事件觸發次數/用戶數 觸發正事件的人數/用戶數 正事件觸發次數/總時間發生次數
建議場景 單次觸發具備實際意義;
和收入相關的內容;
較爲綜合的衡量產品的指標
與用戶運營相關的指標;
評價用戶粘性
判斷某個功能好壞;
與產品細節優化相關
數據分佈 指數分佈爲主,小几率爲泊松分佈 二項分佈(Beta分佈) 二項分佈(Beta分佈)

問題抽象

事實上,咱們單純從數學抽象上說,上面的比例數據,事實上能夠抽象爲兩類問題,一個是「每一個用戶具備一個觀測量」,比例事實上反應的是這個觀測量的平均值;另外一類則是「頻率」,反應的是一個事件發生的機率(只是這個頻率的維度是以事件爲主仍是用戶爲主)。咱們本文就限定在「頻率」這個抽象問題的範圍內,考慮如何比較兩組頻率的差別。理解了這個抽象,咱們能夠同時分析次留、轉化率、AB測試的數據。特別的,咱們採用的統計工具在如下場合,會比直接比較兩組的頻率更有效:github

  1. 當抽樣數據太小時或極度不平衡時。譬如在產品僅在冷啓動時期,這時候的流量相對較小,單純比較頻率容易有抽樣偏差;
  2. 快速決策的時候,特別地,須要決定什麼時候終止比較的時候。譬如,在每單位時間成本極大的時候,若是進行AB測試,須要很快獲得結果,終止測試。若是使用直接比較頻率,咱們每每沒法作出什麼時候終止測試的判斷,下面的方法(特別是基於貝葉斯的方法)能夠很快地在驗證成功以後終止測試。

數學工具

首先,咱們能夠假設一個事件的發生頻率爲算法

$$f = X/N$$dom

其中,$X$爲正例發生次數,$N$則爲事件發生總次數。譬如,在留存率(次留)中,$X$表示第二日使用產品的用戶數,$N$表示計算當日的註冊用戶數。工具

咱們很容易地能夠作出假設:$X$屬於二項分佈,即:測試

$X \sim B(N, p)$優化

咱們如今能夠將其轉化爲兩組二項數據的比較。spa

方案一:假設檢驗

這是最簡單能夠想到的方案。咱們假設兩組數據其參數分別爲$p_1$,$p_2$。則能夠創建以下假設:設計

  • H0: $p_1 = p_2$
  • H1: $p_1 \ne p_2$

則統計量$z$ 知足

$$z = \frac{\hat{p_1} - \hat{p_2}}{\sqrt{\hat{p}(1 - \hat{p})(\frac{1}{N_1} + \frac{1}{N_2})}}$$

其中,$\hat{p} = \frac{N_1\hat{p_1} + N_2\hat{p_2}}{N_1 + N_2}$

由於$z \sim N(0, 1)$,咱們就能夠基於這個計算出相應的顯著性值並進行比較。

能夠在Excel的這部分看到結果,其中顯著性大小咱們這裏分爲0*,************五檔,能夠基於不一樣的數據量調整判斷標準。

image-20210105112517589.png

方案二: 貝葉斯估計

在大多數場合下,特別是指數分佈族內的分佈中,咱們通常會使用$Beta(\alpha, \beta)$分佈做爲先驗分佈,固然這麼選擇會有不少好處,首先:

  1. 當$\alpha$,$\beta$足夠大時,$Beta(\alpha, \beta) \rightarrow B(\alpha + \beta, \frac{\alpha}{\alpha + \beta})$。這樣咱們就能夠刻畫出以二項分佈擴展的任何分佈。
  2. 其次,當先驗分佈爲$Beta(\alpha, \beta)$,且新的觀察量$N$中,有$k$個正例。則其後驗分佈能夠算出爲$Beta(\alpha + k, \alpha + N - k)$,計算很是簡單。
  3. $Beta(1, 1)$爲均勻分佈,很是方便的能夠做爲無信息的先驗分佈。

接下來,咱們能夠基於兩組數據,來求出兩個$Beta$分佈,而後基於這兩個$Beta$分佈進行抽樣,抽樣的具體結果在Excel的這個位置:

image-20210105112617849.png

而後抽樣結果的彙總數據,包括,每一個例子的值還有分佈,展現在這裏:

image-20210105112714510.png

最後咱們能夠在這裏看結果,這裏提供如下指標,就是兩個比例的抽樣均值,還有就是給出兩組數據之間差值正負的比例($P(A>B)$、$P(B \ge A)$這兩項),差值的相關信息(包括平均數、方差、中位數)。基於這些量,咱們就能很容易作出兩組數據何者更好的

image-20210105112753093.png

AB測試的一個動態推廣

示例能夠參考這裏: https://github.com/threecifan...

AB測試的時候,咱們很想很快知道測試結果,由於某些測試自己可能會影響到功能、收入等狀況,這時候,咱們就須要知道什麼時候終止測試。而上面的貝葉斯的方案,能夠給咱們提供一個解決這一問題的發想。

首先,咱們要把AB測試的數據結果當作兩(或多)組時間序列數據,在快速測試時,咱們可能使用按分鐘的維度來監控這兩組數據。譬如咱們如今要測試兩個按鈕設計的點擊率,則須要統計每一分組內,每一個按鈕點擊次數和未點擊次數,譬如生成下列數據,一個是0.62機率一個0.65,咱們生成100個時間段的數據,且故意讓兩個數據很接近並且抽樣很是不平均。

import numpy as np
from scipy.stats import binom, beta
from plotnine import *
from itertools import accumulate
import pandas as pd


n1, p1 = 10000, 0.62
n2, p2 = 10000, 0.65
seed_a = binom.rvs(1, p1, size=2000)
seed_b = binom.rvs(1, p2, size=10000)

np.random.shuffle(a)
np.random.shuffle(b)
a = [(sum(i==1), sum(i==0)) for i in np.array_split(seed_a, 100)]
b = [(sum(i==1), sum(i==0)) for i in np.array_split(seed_b, 100)]

而後,咱們主要經過$max(P(p_a > p_b), P(p_a \le p_b))$,來判斷是否是具備顯著的差別。顯然,當這個值越接近於1,表示這抽樣數據裏面兩個組的數據有差異的可能性越大,咱們就能夠基於此來判斷是否能夠終止實驗。核心的抽樣算法實現以下,其中beta.rvs(a, b, size=n)就表示生成n個beta分佈的數據。而後咱們能夠應用貝葉斯的方法,很快地隨着每批數據進來快速地產生新的後驗機率並基於此抽樣。

def gennerate_avg(n=100000):
    def helper(row):
        res = np.sum(
            beta.rvs(row['a_x'] + 1, row['a_y'] + 1, size=n) >
            beta.rvs(row['b_x'] + 1, row['b_y'] + 1, size=n)
        ) / n
        return res if res >= 1 - res else 1 - res
    return helper

最後,咱們就能夠實時地展現兩幅圖,來動態判斷是否是有把握能夠終止實驗,作出判斷了。第一幅是兩個點擊率隨數據進來後,漸漸趨於穩定的比較圖,這張圖主要展現,此時a、b組點擊率的變化。只有當a、b組點擊率不發生明顯波動時,咱們才能作出判斷。這個是防止咱們過早地終止實驗。其次,這張圖也必定程度直觀告訴咱們,兩個點擊率哪一個大哪一個小。

image-20210105144846253.png

第二幅圖則是$max(P(p_a > p_b), P(p_a \le p_b))$的演化圖,它衡量的是兩組數具備差別的可能性。咱們能夠添加咱們能容忍錯誤的可能性,好比下圖的綠線表示咱們的容忍底線0.999,即咱們保證抽樣的99.9%的數據都顯示出有一組大於另外一組的差別時,咱們就能夠終止實驗了。好比次例子中,咱們大體在第60分鐘時,就能夠終止實驗,而不須要積累大量數據。

image-20210105150006274.png

相關文章
相關標籤/搜索