實驗一直是 Big Tech 用以推動產品迭代的重要步驟,好的實驗可以驗證產品的改變是否對使用者來說有正面的效益,公司也才會有信心將這個功能正式上線,而對於一個網路產品來說最常用的手法即是 A/B testing。然而,在講求快速迭代的產品開發過程當中,A/B testing 的實驗週期通常不會太長,也就很難透過 A/B testing 衡量長期效益。舉例來說,Netflix 想要加強推廣旗下的遊戲產品,於是試圖在 App 上新增廣告欄位,透過實驗發現遊戲的下載數確實因為廣告而有所提升,但我們卻很難回答:長期來看這個功能是否使得使用者更喜歡 Netflix?更願意留在產品內並提供營收?
於是 Netflix 希望建立一個自動化的流程,將短期兩個月的效果投射到以年為單位的長期指標,各個功能也就會有一個較公平的比較基礎,或可以進行更長期的產品規劃以及量化各功能的優先程度。(我猜的)
考慮一個一年的衡量尺度,並且將時間單位設定月,我們僅針對 1 月的世代進行實驗,並且觀察其 1、2 月的表現,若進一步定義第 i 個 cohort 在第 j 期的處置效果 (Treatment Effect)為 $\tau_{ij}$,則我們只會觀察到 $\tau_{11}, \tau_{12}$,剩下的 $\tau$ 們是觀察不到的,因為根本就還沒發生,於是在效果的評估上我們需要解決:
- 未被觀察到的時期(水平):$\tau_{1j}, \forall j = 3 \ldots 12$
我們在 1, 2 月進行實驗,並且觀察處置效果,那 3~12 月的效果是還沒發生的,也就不會被觀察到。 - 未被觀察到的世代(垂直):$\tau_{ij}, \forall i = 2 \ldots 12, j = 2 \ldots 12 \text{ and } j \geq i $
我們對 1 月加入 Netflix 的用戶進行實驗,那麼 2~12 月用戶所帶來的效果是觀察不到的。
如 Netflix 的示意圖所示,其實就是有一個 $12 \times 12$ 的上三角矩陣,而我們只有 2 個 entry,就要把剩下的矩陣估完,聽起來就好難!
未被觀察到的世代(垂直)
我們先解決比較簡單的部分「未被觀察到的世代(垂直)」,Netflix 認為不同世代之間有 transportability,也就是說在不同 population 當中 $\tau$ 在不同時期的表現是一致的。在回到矩陣的例子當中,每一條從左上到右下的對角線都會共用同一個 $\tau$,於是我們只要估好第一條 row $\tau_{1j}, \forall j = 3 \ldots 12$,剩下的元素也就都知道了,在這邊我們進一步化簡 notation,第 $i$ 個 column 為起點的對角線會共用 $\tau_i$ 這一個 treatment effect。
未被觀察到的時期(水平)
Netflix 認為短期的 treatment effect 會反應在用戶留存上,而用戶留存更會直接影響到營收(Treatment effect → Retention → Revenue),Netflix 便運用了「Beta 存活模型」與「代理指標」來處理水平維度的效果投射。
代理指標:Surrogate Index
一般來說,Treatment Effect 會是一個較短期的指標,當然我們也可以考慮把實驗的週期拉長,這樣會獲得一個長期效果的指標,不過實務上這樣做的成本太高了,於是與其透過 Treatment 去評估一個 Long-term effect,不如考慮一個代理指標,這個代理指標不僅與 shot-term effect 有關,也可以藉由這個代理指標去估計 long-term effect。
對於 Netflix 來說,Retention → Revenue 這一段建模應該是合理的,畢竟訂閱制的盈利模式相對簡單,一個客戶流失與否會強力地影響到他下次是否續訂並提供營收,而這段模型也不用實驗的參與,用 observational data 就可以處理了。
如 Fig. 1 所示,透過代理指標去估計 long-term effect,不僅 unbiased,相較於直接估計的 estimator 來說其變異更小,詳見 。
Beta 存活模型:Beta Survival Models
Netflix 在前幾年分享了他們用來預測使用者留存的存活模型 ,這個模型的特點是他考慮了使用者的異質性,根據使用者不同的特徵會有不同的存活時間分佈,想像一下活躍用戶與非活躍用戶離開 Netflix 的機率應該不會一樣。
這邊會從傳統存活分析的 Likelihood 開始,再走到 Netflix 如何透過 Beta distribution 來賦予存活時間的異質性。
$$ L = \prod_{\forall i, c_i = 0} \Pr(T = t_i \mid f(x_i)) \prod_{\forall i, c_i = 1} \Pr(T > t_i \mid f(x_i)),$$
$t_i$ 表示存活時間 (time-to-event),$x_i$ 表示用戶特徵,$c_i = 0$ 代表在我們觀察的時間點當下,那個樣本已經離開(發生)了,所以他的存活時間就會是被記錄下來的時間($T_i = t_i$);反之,如果 $c_i = 1$,代表那個樣本還沒死掉(某個事件還沒發生),所以他的存活時間會大於被記錄到的時間 ($T_i > t_i$),於是我們可以透過 $L$ 來表示這一個 right-censored data 的 likelihood。這個式子在存活分析裡面很經典,值得花一點時間理解一下,而透過某些分佈假設也可以用 MLE 求解。
為了讓 $f(x)$ 也能發揮表現異質性的功用,Netflix 假設在每個離散的時間點上用戶離開的機率是 $\theta \in [0, 1]$,所以 $T$ 可以被幾何分佈描述 (geometric distribution):
$$P(T=t \mid \theta)=(1-\theta)^{t-1}\theta,$$
也就是說在 $1 \ldots t-1$ 個時間點用戶都沒有離開,而在第 $t$ 個時間點用戶離開了,而 $\Pr(T > t \mid \theta) = 1 – \sum_{i=1}^{t} \Pr(T = i \mid \theta)$,也可以很自然地推導出來。
而對於 $\theta$,我們假設他的先驗分佈為 Beta Distribution$(\alpha(x)$, $\beta(x))$,其中兩個參數更是被用戶的特徵參數化,總結一下:
$$\begin{aligned}
\theta \mid \alpha(x), \beta(x) &\sim Be(\alpha(x), \beta(x)) \\
T &\sim G(\theta) \\
\Pr(T=t \mid \alpha(x), \beta(x)) &= \int_0^1 \Pr(T=t \mid \theta)f(\theta \mid \alpha(x), \beta(x)) d\theta \\
&= \int_0^1 (1-\theta)^{t-1}\theta \frac{\Gamma(\alpha(x) + \beta(x))}{\Gamma(\alpha(x)) \Gamma(\beta(x))} \theta^{\alpha(x) – 1} (1-\theta)^{\beta(x) – 1} d\theta \\
&= \int_0^1 \frac{\Gamma(\alpha(x) + \beta(x))}{\Gamma(\alpha(x)) \Gamma(\beta(x))} (1-\theta)^{t+\beta(x) – 2} \theta^{\alpha(x)} d\theta \\
&= \frac{\Gamma(\alpha(x) + \beta(x))}{\Gamma(\alpha(x)) \Gamma(\beta(x))} \frac{\Gamma(t+\beta(x) – 1) \Gamma(\alpha(x) + 1)}{\Gamma(\alpha(x) + \beta(x) + t)}
\end{aligned}
$$
我們可以再進一步獲得:
$$\begin{aligned}
\frac{\Pr(T=t \mid \alpha(x), \beta(x))} {\Pr(T=t-1 \mid \alpha(x), \beta(x))}
&= \frac{\Gamma(t+\beta(x) – 1) \Gamma(\alpha(x) + \beta(x) + t- 1)}{\Gamma(\alpha(x) + \beta(x) + t)\Gamma(t+\beta(x) – 2)} \\
&= \frac{t+\beta(x) – 2}{\alpha(x) + \beta(x) + t – 1} \\
\Pr(T = 1 \mid \alpha(x), \beta(x)) &= \frac{\alpha(x)}{ \alpha(x) + \beta(x)}
\end{aligned}
$$
在得到這個遞迴關係之後,終於可以把 $L$ 裡面的 $\Pr(T = t \mid f(x))$ 換成 $\Pr(T=t \mid \alpha(x), \beta(x))$:
$$\begin{aligned}
\max_{\alpha(x), \beta(x)} \quad &L(\alpha(x), \beta(x)) \\
= &\prod_{\forall i, c_i = 0} \Pr(T = t_i \mid \alpha(x_i), \beta(x_i)) \prod_{\forall i, c_i = 1} \Pr(T > t_i \mid \alpha(x_i), \beta(x_i))
\end{aligned}
$$
至於 $\alpha(\cdot), \beta(\cdot)$ 的選擇就與如何運用那些用戶特徵們有關,當然這也會影響到 loss function ($-\ln L$) 的梯度,反正只要算的出來梯度,就可以用 SGD, GBDT 等方式來解這個最佳化的問題。另外,因為我們把 $\theta$ 積掉了,所以這更偏向一個 Empirical Bayes 或是 Type-II MLE 的問題。
另外補充一下,如果有兩類用戶 $u, v$,而我們想要比較哪一類的用戶比較容易流失的話可以看 $\Pr(\theta_u > \theta_v)$,如果這個值 > 0.5 的話,可以想像 u 類用戶比 v 類用戶更容易流失,而且比起直接計算 $\Pr(\theta_u > \theta_v)$,我們可以利用文中提出的定理:
$$\Pr(\theta_u > \theta_v) > 0.5 \Leftrightarrow I^{-1}(0.5, \alpha_u, \beta_u) > I^{-1}(0.5, \alpha_v, \beta_v), $$
其中 $I^{-1}$ 是 incomplete beta function 的反函數,$ I^{-1}(0.5, \alpha_u, \beta_u)$ 也就是 $Be(\alpha_u, \beta_u)$ 的中位數,所以說我們只要根據中位數就可以幫個不同的 $x$ 排名了,挺漂亮的。
小結
雖然 Netflix 在 中沒有詳細提到作法,但我猜想就是透過 treatment effect 去預測 retention,而這邊的 treatment effect 可以反映在參數化的 $\alpha, \beta$ 裡面,retention 作為一個代理指標再去預估更長期的 revenue。當然實務上還有許多值得留意的事,例如:
- 不同世代之間是否有 transportability:可以看過去類似的實驗是不是有這個效果,也可以透過長期的 A/B testing 來檢驗。
- 代理指標中 causal path 是否合理:除了訂閱制這種相對簡單的盈利模式之外,在不同的情境底下可能要考慮數個代理指標來建構長期指標的估計。
- 長短期是相對的:Netflix 考慮短期為月,長期為年,但對於某些消費頻率更頻繁的服務來說,也許月相對於日就已經夠長了。
最後,我們的確花費了很大的篇幅來描述存活模型,一來是將用戶特徵考慮進存活模型很實用,也很漂亮;二來光是 $\theta$ 就可以給出很多不同的估計了,如 $\mathbb{E}_\theta\left[\mathbb{E}[\text{revenue} \mid \theta]\right]$ 就有點 CLTV 的味道了。甚至觀察 $\theta$ 或 $\alpha, \beta$ 的變化也可以了解整體用戶的流失情形與速度。可能存活模型還比原本的正文重要(?)