fbpx
如何有效降低實驗組數?試試正交實驗設計!

Written by 下午 5:07 A/B Test

如何有效降低實驗組數?試試正交實驗設計!

資源有限的情況下,如何節省實驗組數?

想像一個情境:你是一位廣告投手,要針對不同的廣告圖片、廣告標題、CTA 來進行測試,看哪組的成效最好。在每一組項目中,都有三個內容要測試,如下:

項目測試 1測試 2測試 3
廣告圖片123
廣告標題123
CTA123
廣告測試內容

這時候想進行測試了解哪一組廣告的轉換率最好,一般情況下就需要做到 3x3x3,共 27 組廣告才能完成測試,但是當廣告預算有限、觸及人數不足時,有沒有其他更省成本的做法,了解到底哪一組是最佳廣告組合呢?

答案是:有的,你可以試試「正交實驗設計」

什麼是正交實驗設計?

正交實驗設計是一種透過科學方法來減少必要測試組數的實驗方式,我們可以透過已經被設計好的正交表找出具有代表性的廣告組合,移除不必要的組合,以此來減少實驗組數,同時又能監測每個因素對於結果的效果,找出最佳的實驗組合。

在上述的例子中,若要完整的做完實驗,則需要 27 組廣告,但若採用正交實驗設計,則僅需要利用 9 組具代表性的廣告就能找出最佳的廣告組合。這大幅地降低了實驗成本,提升了實驗測試的效率。

以上的說明相信還是會讓人一頭霧水,接下來就用案例來講解這種讓實驗組數從 27 組降到 9 組的實驗方式是怎麼做到的吧!

正交實驗設計的步驟

一般的正交實驗設計包含以下 4 個步驟:

  1. 確認測試的變數與水平。
  2. 選用並製作的正交實驗表。
  3. 進行實驗。
  4. 分析實驗結果。

以下我們就用前述提到的廣告測試,一一說明該如何進行證交實驗設計。

一、確認測試的因素與水平

在一個廣告測試中,會有三個變數,分別是:廣告圖片、廣告標題、CTA,而在每個變數中,又分別有 3 個測試內容,在這裡我們稱為水平,圖表如下:

  • 變數 A:廣告圖片(A1, A2, A3)
  • 變數 B:廣告標題(B1, B2, B3)
  • 變數 C:CTA(C1, C2, C3)

二、選用並製作的正交實驗表

可以透過網路搜尋、問 ChatGPT(但有時會唬爛,要注意)或是在 SPSSAU 這樣的網站中找到適合的正交表,正交表會列出所有具代表性的組合,讓實驗的水平分佈的很均勻,因此能反映整體的實驗結果。太細節的推導過程就不說,有興趣可以自行研究相關文章

在上述實驗中,我們有 3 個變數,每個變數有 3 個水平,因此可以選用 L9(3^3) 這個正交表,其中,L9(3^3) 的 L9 代表需要做 9 組實驗,3^3 則代表可以用來處理 3 個有 3 水平的變數,正交表L9(3^3) 長得如下:

變數 A變數 B變數 C
實驗 1111
實驗 2122
實驗 3133
實驗 4212
實驗 5223
實驗 6231
實驗 7313
實驗 8321
實驗 9332
正交表 L9(3^3)

一般來說,正交表需要滿足以下兩個特性:

  1. 每一列中不同數字的出現次數相同:以上述正交表為例,每一直列的 1、2、3 都平均的出現 3 次。
  2. 在任意兩直列的橫向數字中,每一對數字出現的次數相等:以上述正交表為例,若你選因素1 與因素 2 這兩列,則可以看到 9 對數字,包含 (1. 1)、(1. 2)、(1. 3)…,且每一對數字出現的次數都相同。若你選的是因素 2 與因素 3 這兩直列,也能看到相同的狀況。

在了解以上 2 個特性之後,我們也能自行檢查正交表設計是否正確。

三、進行實驗

現在你有了正交表,知道需要 9 組廣告就能進行測試,也知道每組廣告裡面要放哪些測試元素,就可以開始進行實驗了。這邊建議你在進行廣告測試時,要記得分別標記該廣告組合屬於實驗幾,才方便後續做分析時使用。

四、分析實驗結果

在進行實驗後,我們會得到 9 組的廣告轉換率,在時候可以利用 Python 快速找出最佳的廣告組合,可以使用以下的 code 來實現:

首先整理數據成 DataFrame:

import pandas as pd
# 變數與水平
factors = {
    '廣告圖片': ['A1', 'A2', 'A3'],
    '廣告標題': ['B1', 'B2', 'B3'],
    'CTA': ['C1', 'C2', 'C3'],
}
# 實驗後你得到的 9 組轉換率數據
action_rates = [0.12, 0.15, 0.10, 0.14, 0.13, 0.16, 0.11, 0.12, 0.15, 0.10, 0.14, 0.13, 0.16, 0.11, 0.12, 0.15, 0.10, 0.14]
# L9 正交表
l9_table = [
    ['A1', 'B1', 'C1'],
    ['A1', 'B2', 'C2'],
    ['A1', 'B3', 'C3'],
    ['A2', 'B1', 'C2'],
    ['A2', 'B2', 'C3'],
    ['A2', 'B3', 'C1'],
    ['A3', 'B1', 'C3'],
    ['A3', 'B2', 'C1'],
    ['A3', 'B3', 'C2']
]
# 整理成 DataFrame
data = pd.DataFrame(l9_table, columns=factors.keys())
data['轉換率'] = action_rates
print(data)

接著就可以計算每一個元素的效益:

# 計算每個因子的平均點擊率
effects = {}
for factor in factors.keys():
    effect = data.groupby(factor)['轉換率'].mean()
    effects[factor] = effect
for factor, effect in effects.items():
    print(f'因子: {factor}')
    print(effect)
    print()

最後再直接找出最佳廣告組合:

# 找出每個因子的最佳水平
best_combination = {factor: effect.idxmax() for factor, effect in effects.items()}
print('最佳組合:')
print(best_combination)

到這裡就差不多完成實驗了,你能夠在最省成本的狀況下用最少實驗組數找出轉換率最好的廣告組合。但以上的實驗都是建立在所有元素彼此獨立、不交互影響的前提下。因此若要檢查每個元素之間是否真的獨立,可以使用 ANOVA 來做,但在這裡我們就不贅述。

用簡單的案例驗證正交實驗設計的可用性

想找出最好吃的午餐組合,該怎麼做?

最後我們用一點簡單的小案例,來了解正交實驗設計背後的數學原理,以及每一種元素的效益是如何被計算出來的。

首先我們假設有不同的午餐組合,而目標是要找出最好吃的午餐組合:

  • 主食:飯、麵
  • 配菜:雞肉、魚
  • 飲料:果汁、汽水

在一般狀況下我們需要吃 2x2x2 共 8 種的午餐組合才能知道哪一組午餐組合最好吃,但透過上述正交實驗設計的邏輯,我們可以選出以下 4 組午餐組合來試吃,找出最好吃的午餐組合:

  • 飯 + 雞肉 + 果汁
  • 飯 + 魚 + 汽水
  • 麵 + 雞肉 + 汽水
  • 麵 + 魚 + 果汁

正交實驗設計的計算邏輯是什麼?

假設我們試吃了以上 4 組午餐組合,並且得到好吃分數如下:

  • 飯 + 雞肉 + 果汁 = 8 分
  • 飯 + 魚 + 汽水 = 6 分
  • 麵 + 雞肉 + 汽水 = 7 分
  • 麵 + 魚 + 果汁 = 5 分

這時候我們就可以去做各種元素的效果計算。

步驟一:計算每個元素的平均效果:

主食的平均效果

  • 飯的平均效果 = (8 + 6) / 2 = 7 分
  • 麵的平均效果 = (7 + 5) / 2 = 6 分

配菜的平均效果

  • 雞肉的平均效果 = (8 + 7) / 2 = 7.5 分
  • 魚的平均效果 = (6 + 5) / 2 = 5.5 分

飲料的平均效果

  • 果汁的平均效果 = (8 + 5) / 2 = 6.5 分
  • 汽水的平均效果 = (6 + 7) / 2 = 6.5 分

步驟二:計算整體組合的平均效果:

整體平均效果 = (8 + 6 + 7 + 5) / 4 = 6.5 分

步驟三:計算其他未實驗組合的計算結果

預測某個組合的效果,可以用以下公式:

預測效果=總體平均效果+(主食的平均效果−總體平均效果)+(配菜的平均效果−總體平均效果)+(飲料的平均效果−總體平均效果)

例如我們要預測「飯 + 雞肉 + 汽水」(未實驗的組合)的效果:

  1. 飯的效果修正
    • 飯的平均效果 – 總體平均效果 = 7 – 6.5 = 0.5
  2. 雞肉的效果修正
    • 雞肉的平均效果 – 總體平均效果 = 7.5 – 6.5 = 1
  3. 汽水的效果修正
    • 汽水的平均效果 – 總體平均效果 = 6.5 – 6.5 = 0

預測效果計算:

預測效果=6.5+0.5+1+0=8,所以「飯 + 雞肉 + 汽水」的預測效果是 8 分。

步驟4:驗證預測效果

可以透過用上述公式檢查有進行實驗的組合,以確保我們的方法是有效的:

  1. 飯 + 雞肉 + 果汁
    • 預測效果 = 6.5 + 0.5 + 1 + 0 = 8 (實際效果:8 分)
  2. 飯 + 魚 + 汽水
    • 預測效果 = 6.5 + 0.5 + (-1) + 0 = 6 (實際效果:6 分)
  3. 麵 + 雞肉 + 汽水
    • 預測效果 = 6.5 – 0.5 + 1 + 0 = 7 (實際效果:7 分)
  4. 麵 + 魚 + 果汁
    • 預測效果 = 6.5 – 0.5 – 1 + 1 = 5 (實際效果:5 分)

這些預測效果符合實際效果,證明我們做的正交實驗設計是有效的。

下次做實驗時,也試試看正交實驗設計吧!

這篇文章就差不多到這裡結束了,希望透過以上的案例說明,能幫助你更了解證交實驗設計背後的原理,也能讓你下一次進行實驗時,能更有效減少所需的實驗組數!當然,不只有廣告實驗時可以進行這樣的實驗設計,在需要多組實驗組合時都可以應用此觀念哦!

Close