Everybody wants some! ๐ŸŒŠ
[Braze] ๐Ÿ””ํ‘ธ์‹œ ์•Œ๋ฆผ์œผ๋กœ ํ”„๋กœ๋ชจ์…˜ ํ™๋ณดํ•˜๊ธฐ +์บ”๋ฒ„์Šค ๊ธฐํš์•ˆ ์˜ˆ์‹œ ์ž์„ธํžˆ๋ณด๊ธฐ

Marketing

A/B ํ…Œ์ŠคํŠธ์™€ ์‚ฌ์šฉ์ž ํ• ๋‹น equal/unequal allocation of A/B test

์—๋ธ”๋ฆฐ 2022. 3. 27. 00:57

A/B ํ…Œ์ŠคํŠธ์—์„œ์˜ ๊ท ๋“ฑ ํ• ๋‹น๊ณผ ๋ถˆ๊ท ๋“ฑ ํ• ๋‹น

A/B ํ…Œ์ŠคํŠธ์— ์žˆ์–ด์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ ‘๊ทผ์ด๋‹ค. ๊ท ๋“ฑ ํ• ๋‹น(Equal allocation)์€ ๊ฐ test variant์— ๋™์ผํ•œ ์ˆ˜์˜ ์œ ์ €๋ฅผ ๋ถ„๋ฐฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 50%์˜ ์œ ์ €๋Š” control group์—, 50%๋Š” variant์— ํ• ๋‹นํ•œ๋‹ค.

๋ถˆ๊ท ๋“ฑ ํ• ๋‹น(unequal allocation)์€ control group์ด๋‚˜ ํŠน์ • variant์— ๋” ์ ์€, ๋˜๋Š” ๋” ๋งŽ์€ ์œ ์ €๋ฅผ ํ• ๋‹นํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 20%๋Š” CG์—, 80%๋Š” variant์— ํ• ๋‹นํ•œ๋‹ค.

๋ถˆ๊ท ๋“ฑ ํ• ๋‹น์ด A/B ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

์œ ์ €๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ, ๋˜๋Š” ๋ถˆ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹นํ•ด๋„ ํ…Œ์ŠคํŠธ์˜ ๊ฒฐ๊ณผ๋Š” ๋˜‘๊ฐ™์„๊นŒ? ์–ด๋–ค ์˜ํ–ฅ์ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. 

ํ…Œ์ŠคํŠธ ๊ธฐ๊ฐ„ ๋‹จ์ถ•

๋ถˆ๊ท ๋“ฑ ํ• ๋‹น์„ ํ†ตํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ๋” ๋นจ๋ฆฌ ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์‚ฌ๋žŒ๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋‹ค. ํ†ต๊ณ„์  ์œ ์˜์„ฑ(statistical significance)๊ณผ ์‹ ๋ขฐ๊ตฌ๊ฐ„(confidence interval)์— ๋Œ€ํ•œ ๊ณ„์‚ฐ์€ ๊ฐ variant์— ํ• ๋‹น๋œ ์œ ์ €์— ๋งค์šฐ ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

ํšจ์œจ์„ฑ์— ๊ด€ํ•˜์—ฌ

์œ ์ €๋ฅผ ๋ถˆ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹น(์˜ˆ: 20-80)ํ•˜์—ฌ ์ง„ํ–‰ํ•œ ํ…Œ์ŠคํŠธ๋Š” ๊ท ๋“ฑ ํ• ๋‹น(50-50)ํ•œ ํ…Œ์ŠคํŠธ์™€ ํšจ์œจ์„ฑ ์ธก๋ฉด์— ์žˆ์–ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅผ๊นŒ? ๊ฒฐ๊ณผ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ๋‹ต์€ ๊ท ๋“ฑ ํ• ๋‹น๋ณด๋‹ค "ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค"์ด๋‹ค. ๋ถˆ๊ท ๋“ฑ ํ• ๋‹น์œผ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๊ฒ€์ •๋ ฅ(power)์ด ๋‚ฎ๊ฒŒ ์ธก์ •๋˜๊ฑฐ๋‚˜, ๋น„์Šทํ•œ ๊ฒฐ๊ณผ(๋น„์Šทํ•œ ์ •๋„์˜ ๊ฒ€์ •๋ ฅ)๋ฅผ ์–ป์œผ๋ ค๋ฉด ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.(์œ ์ €๊ฐ€ ๋” ๋งŽ์ด ํ•„์š”ํ•˜๋‹ค.)

์‹ค์ œ๋กœ ํ™•์ธํ•ด๋ณด๊ธฐ

R์„ ์ด์šฉํ•ด์„œ ๊ฒ€์ •๋ ฅ ๋ถ„์„(Power Analysis)์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์•„๋ž˜ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋”ฐ๋ผํ•˜์—ฌ R์„ ์„ค์น˜ํ–ˆ๋‹ค.

 

R์„ ์ด์šฉํ•ด์„œ ๊ฒ€์ •๋ ฅ๋ถ„์„(power analysis)์„ ํ•ด๋ณด์ž. -๊นœ์‹ ์˜ ํ†ต๊ณ„ ์ด์•ผ๊ธฐ-

๋“ค์–ด๊ฐ€๋Š” ๊ธ€ ๊ฒ€์ƒ‰์„ ํ†ตํ•ด ์ด ๊ธ€์„ ์ฝ์œผ์‹œ๋Š” ๋ถ„๋“ค์ด๋ผ๋ฉด ๊ฒ€์ •๋ ฅ ๋ถ„์„(power analysis)์ด ๋ฌด์—‡์ด๊ณ , ์™œ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•ด ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹œ๋ฆฌ๋ผ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜์ž๋ฉด, ์‹คํ—˜์˜ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ P ๊ฐ’

jinmedi.tistory.com

R ์„ค์น˜ ํ™”๋ฉด

์š”์•ฝ: http://www.r-project.org ์ ‘์† - CRAN ํด๋ฆญ - KOREA - ์›ํ•˜๋Š” ๋งํฌ(๋‹ค ๋˜‘๊ฐ™์Œ) ํด๋ฆญ - OS์— ๋งž์ถ”์–ด ์„ค์น˜

R์„ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ "WARNING: You're using a non-UTF8 locale, therefore only ASCII characters will work.~"์™€ ๊ฐ™์€ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๋–ด๋‹ค. ๊ตฌ๊ธ€๋งํ•˜๋‹ˆ ๊ฐ™์€ ์‚ฌ๋ก€๋ฅผ ๋ฐœ๊ฒฌํ•ด์„œ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ–ˆ๋‹ค. (์ฐธ๊ณ : https://stackoverflow.com/questions/9689104/installing-r-on-mac-warning-messages-setting-lc-ctype-failed-using-c

์•„๋ž˜๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ R์— ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

system("defaults write org.R-project.R force.LANG en_US.UTF-8")

์šฐ๋ฆฌ๊ฐ€ ํ…Œ์ŠคํŠธํ•ด ๋ณผ ๊ฒƒ์ฒ˜๋Ÿผ ํ‘œ๋ณธ ํฌ๊ธฐ๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด๋ฅผ pwr ํŒจํ‚ค์ง€๊ฐ€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์œ„ ๋ธ”๋กœ๊ทธ ๊ธ€์—์„œ๋Š” ๊ทธ๋ƒฅ R์— install.packages(“pwr”)๋ฅผ ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋œ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ๋‚˜์˜ ๊ฒฝ์šฐ๋Š” ๋˜์ง€ ์•Š์•„์„œ ์•„๋ž˜๋ฅผ ๋ถ™์—ฌ๋„ฃ์—ˆ๋”๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค. (์ฐธ๊ณ : https://github.com/heliosdrm/pwr)

install.packages("pwr", repos="http://cran.r-project.org")

์ž ๊ทธ๋Ÿผ 5๋งŒ ๋ช…์˜ ์œ ์ €๊ฐ€ ์žˆ๊ณ , ์ด ์œ ์ €๋“ค์„ ๊ท ๋“ฑ ๋ถ„๋ฐฐ(50-50)ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ์ „ํ™˜๋ฅ ์ด 15%์ด๊ณ , 90%์˜ ๊ฒ€์ •๋ ฅ๊ณผ 90%์˜ ์‹ ๋ขฐ๋„๋กœ ์ „ํ™˜๋ฅ ์ด 1%๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค๊ณ  ํ•  ๋•Œ์˜ ์‚ฌ๋ก€๋ฅผ ์•Œ์•„๋ณด์ž. (์ฐธ๊ณ : https://geoffruddock.com/run-ab-test-with-unequal-sample-size/#fn:2)

library(pwr)
n1 = 25000
n2 = 25000
p1 = 0.15
p2 = 0.16
h = abs(2*asin(sqrt(p1))-2*asin(sqrt(p2)))
 
pwr.2p2n.test(h, n1=n1, n2=n2, sig.level=0.10)
              h = 0.02763486
             n1 = 25000
             n2 = 25000
      sig.level = 0.1
          power = 0.9257466
    alternative = two.sided

R์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

์ด ๊ฒฝ์šฐ ๊ฒ€์ •๋ ฅ์ด 0.92 ์ด์ƒ์œผ๋กœ ๋‚˜์˜จ๋‹ค.

* h: ํšจ๊ณผ ํฌ๊ธฐ
* sig.level: significance level. ์œ ์˜ ์ˆ˜์ค€. 95%์˜ ์‹ ๋ขฐ๋„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค๋ฉด (1−0.95)์ธ 0.05๊ฐ’์ด ์œ ์˜์ˆ˜์ค€ ๊ฐ’์ด ๋œ๋‹ค.
* power: ๊ฒ€์ •๋ ฅ. ๋Œ€๋ฆฝ๊ฐ€์„ค์ด ์˜ณ์„ ๋•Œ, ๊ท€๋ฌด๊ฐ€์„ค์„ ์ฑ„ํƒํ•  ํ™•๋ฅ (=๋Œ€๋ฆฝ๊ฐ€์„ค์ด ์ฐธ์ผ ๋•Œ ๋Œ€๋ฆฝ๊ฐ€์„ค์„ ์ฑ„ํƒํ•  ํ™•๋ฅ ). ์‹ค์ œ๋กœ ํšจ๊ณผ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ๋ถ„์„์„ ํ†ตํ•ด ํšจ๊ณผ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ฆ๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ํž˜

๊ทธ๋Ÿฌ๋ฉด 10-90์œผ๋กœ ๋ถ„๋ฐฐํ•œ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–จ๊นŒ? ์ด ๊ฒฝ์šฐ์—๋Š” ๊ฒ€์ •๋ ฅ์ด 0.58 ์ˆ˜์ค€์œผ๋กœ ํฌ๊ฒŒ ๋–จ์–ด์ง„๋‹ค. 

library(pwr)
n1 = 5000
n2 = 45000
p1 = 0.15
p2 = 0.16
h = abs(2*asin(sqrt(p1))-2*asin(sqrt(p2)))
 
pwr.2p2n.test(h, n1=n1, n2=n2, sig.level=0.10)
              h = 0.02763486
             n1 = 5000
             n2 = 45000
      sig.level = 0.1
          power = 0.5829899
    alternative = two.sided

๊ทธ๋Ÿฌ๋ฉด 10-90๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ํ• ๋‹น๋œ ํ…Œ์ŠคํŠธ์—์„œ 50-50 ํ…Œ์ŠคํŠธ์™€ ๋น„์Šทํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ผ๋งˆ๋‚˜ ๋” ๋งŽ์€ ์œ ์ €๊ฐ€ ํ•„์š”ํ• ๊นŒ?

์œ„ ์Šคํฌ๋ฆฐ์ƒท์—์„œ ๋ณด๋‹ค์‹œํ”ผ ์•ฝ 3๋ฐฐ์˜ ์œ ์ €๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๊ฒ€์ •๋ ฅ์ด ์•ฝ 0.94๋กœ ์œ ์‚ฌํ•ด์ง„ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. 

๊ฒฐ๋ก 

A/B ํ…Œ์ŠคํŠธ์— ์œ ์ €๋ฅผ ๋ถˆ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹นํ•  ๊ฒฝ์šฐ ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹นํ•˜๋Š” ํ…Œ์ŠคํŠธ์™€ ์œ ์‚ฌํ•œ ์ˆ˜์ค€์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ๋งŽ์€ ์‹œ๊ฐ„/์œ ์ €๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

๋ง๋ถ™์—ฌ์„œ

๋‚˜์˜ ๊ฒฝ์šฐ, ์ด์ „์— ์ฝ์—ˆ๋˜ ์–ด๋Š ๋งˆ์ผ€ํŒ… ์ฑ…์—์„œ ๋Œ€ํ˜• ์„œ๋น„์Šค์˜ ๋งˆ์ผ€ํ„ฐ๊ฐ€ ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ถˆ๊ท ๋“ฑ ํ• ๋‹น A/B ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค๋Š” ์‚ฌ๋ก€๋ฅผ ์ฝ์—ˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ ‡๊ฒŒ ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ์— ํฐ ์˜๋ฌธ์„ ๊ฐ€์ง€์ง€ ์•Š๊ณ  ๋‚˜๋„ ๋”ฐ๋ผํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์œ ์ €๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹นํ•˜๋Š” ๊ฒฝ์šฐ์™€ ๋‹ค์†Œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋Š” ์ ์„ ์ด๋ฒˆ ๊ธฐํšŒ์— ์ž์„ธํžˆ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์ด "์™œ" ๊ถŒ์žฅ๋˜์ง€ ์•Š๋Š”์ง€๋ฅผ ์•Œ๊ฒŒ ๋˜์–ด์„œ ์†์ด ์‹œ์›ํ•˜๋‹ค๐Ÿ˜‚

์ง€๊ธˆ์€ ๊ทธ ์ฑ…์ด ์—†์–ด์„œ ์ •ํ™•ํžˆ ๋‹ค์‹œ ํ™•์ธํ•ด ๋ณผ ์ˆ˜๋Š” ์—†์ง€๋งŒ, ๋‚ด๊ฐ€ ์ฝ์—ˆ๋˜ ์ฑ…์—์„œ ์•„๋งˆ ๊ทธ ๋งˆ์ผ€ํ„ฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ์ด์œ ๋Š” ์•„๋ฌด๋ž˜๋„ ์„œ๋น„์Šค ๊ทœ๋ชจ์™€ ๊ด€๋ จ์ด ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. ๋ถˆ๊ท ๋“ฑํ•˜๊ฒŒ ํ• ๋‹น๋œ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•ด๋„ ์œ ์ € ์ˆ˜๊ฐ€ ๋งŽ์€ ์„œ๋น„์Šค์—ฌ์„œ ๋ชจ์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ๋งŽ์ด ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ์œ ์ € ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ณด๋‹ˆ ์ƒˆ๋กœ์šด ๋””์ž์ธ์ด ์ ์šฉ๋œ variant์— ํ• ๋‹น๋œ ์œ ์ €๋“ค์˜ CS๋„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ–ˆ์„ ๊ฒƒ์ด๊ณ ...๐Ÿค” ๋Œ€ํ˜• ์„œ๋น„์Šค์ด๋‹ค๋ณด๋‹ˆ ๋ณ€ํ™”์— ๋‹ค์†Œ ์กฐ์‹ฌ์Šค๋Ÿฌ์› ์„ ์ˆ˜๋„! A/B ํ…Œ์ŠคํŠธ์˜ ๋‹ค์–‘ํ•œ ์‚ฌ๋ก€์™€ ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ค์Œ์— ๋˜ ํฌ์ŠคํŒ…ํ•ด์•ผ๊ฒ ๋‹ค.

* ํ†ต๊ณ„๋ฅผ ์ „๊ณตํ•˜์ง€์•Š์€ ๋ฌธ๊ณผ ์ถœ์‹  ๋งˆ์ผ€ํ„ฐ๊ฐ€ A/B ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅ˜๊ฐ€ ์žˆ์œผ๋ฉด ์ •์ •ํ•ด์ฃผ์„ธ์š”!