Jul 26, 2020 โ€ข6 min read โ˜•

๐Ÿงช [์ฑ… ์š”์•ฝ] Trustworthy Online Controlled Experiments - ch4 Experimentation Platform and Culture

Trustworthy Online Controlled Experiments: A Practical Guide to A/B Testing๋ผ๋Š” ์ฑ…์„ ์ฝ๊ณ  ์š”์•ฝํ•˜๊ณ  ์žˆ๋‹ค. ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” 4์žฅ: Experimentation Platform and Culture์— ๋Œ€ํ•ด ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค.

๊ธ€์—์„œ ์–˜๊ธฐํ•˜๋Š” ์‹คํ—˜์€ online controlled experiment๋ฅผ ์˜๋ฏธํ•œ๋‹ค. online controlled experiment์€ ๋•Œ๋กœ A/B ํ…Œ์ŠคํŠธ๋ผ๊ณ ๋„ ๋ถˆ๋ฆฐ๋‹ค.

๐Ÿ“• 2์žฅ์—์„œ๋Š” ์‹คํ—˜์„ design - run - analyzeํ•  ๋•Œ ์ง€์ผœ์•ผํ•  ๊ธฐ๋ณธ ์›์น™๋“ค์„ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ์‚ดํŽด๋ดค๋‹ค. 3์žฅ์€ ํ†ต๊ณ„์ ์ธ ์šฉ์–ด๋“ค์ด ๋งŽ์ด ๋‚˜์˜ค๋Š”๋ฐ (SRM ๊ฒ€์ฆ, p-value๋ฅผ ์ธก์ •ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ”ํ•œ ์˜คํ•ด ๋“ฑ๋“ฑ), ํ†ต๊ณ„์  ์šฉ์–ด๋“ค์ด๋‚˜ ๊ธฐ๋ฒ•๋“ค์— ๋Œ€ํ•ด ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ 3์žฅ์— ๋Œ€ํ•œ ์š”์•ฝ์€ skipํ–ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ๊ฒŒ ๋  4์žฅ์€ ์‹คํ—˜ ํ”Œ๋žซํผ์˜ ๋‹จ๊ณ„์™€ ์‹คํ—˜ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์š”์†Œ๋“ค์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ๋‹ค. ๊ฒฌ๊ณ ํ•˜๊ณ  ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š”(trustworthy) ์‹คํ—˜ํ”Œ๋žซํผ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ ์–˜๊ธฐํ•˜๋Š” ์š”์†Œ๋“ค์ด ๋‹ด๊ฒจ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๐Ÿงช Experimentation Maturity Models

์‹คํ—˜์˜ ์„ฑ์ˆ™๋„ ๋ชจ๋ธ(Experimentation Maturity Model)์€ ๋ฐ์ดํ„ฐ ๋“œ๋ฆฌ๋ธ ์กฐ์ง์ด ๋˜๊ธฐ ์œ„ํ•ด ๊ฑฐ์ณ์•ผํ•  ๋‹จ๊ณ„๋“ค์— ๋Œ€ํ•ด ์„ค๋ช…์„ ํ•œ๋‹ค. ์„ฑ์ˆ™๋„๋Š” ์ด 4๊ฐ€์ง€์˜ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์ง„๋‹ค:

maturitymodel

1. Crawl

์ด ๋‹จ๊ณ„์—์„œ์˜ ๋ชฉํ‘œ๋Š” ์‹คํ—˜์— ํ•„์š”ํ•œ ์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋“ค์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ„๋‹จํ•œ ์‹คํ—˜์„ design, run, analysis๋ฅผ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๋ช‡ ๊ฐœ์˜ ์‹คํ—˜์„ ์„ฑ๊ณต์ ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉด ๊ทธ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ข‹์€ ๋ชจ๋ฉ˜ํ…€์ด ๋œ๋‹ค.

(์•ฝ, ์‹คํ—˜ 1๊ฐœ/์›”)

2. Walk

์ด ๋‹จ๊ณ„์—์„œ๋Š” ํ‘œ์ค€ metrics๋ฅผ ์ •์˜ํ•˜๊ณ  ๋” ๋งŽ์€ ์‹คํ—˜์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค. A/A ํ…Œ์ŠคํŠธ, SRM(Sample Ratio Mismatch)์™€ ๊ฐ™์€ ํ…Œ์ŠคํŠธ๋“ค์„ ์ง„ํ–‰ํ•ด์„œ ์‹คํ—˜์˜ ์‹ ๋ขฐ๋„๋ฅผ ๋†’ํ˜€์•ผ ํ•œ๋‹ค.

(์•ฝ, ์‹คํ—˜ 1๊ฐœ/์ฃผ)

3. Run

๋Œ€๊ทœ๋ชจ์˜ ์‹คํ—˜์„ ํ•  ์ˆ˜ ์žˆ์„ ๋•Œ ์ด ๋‹จ๊ณ„์— ๋„๋‹ฌํ–ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” metrics๋“ค์„ ๋” ํ™•์žฅํ•˜๋˜ ์—ฌ๋Ÿฌ metrics๊ฐ„ tradeoff๋ฅผ ๊ณ ๋ คํ•ด์„œ OEC๋ฅผ ์ฒด๊ณ„ํ™”ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค. ์กฐ์ง์€ ์ƒˆ๋กœ์šด feature์ด๋‚˜ ๋ณ€ํ™”๋ฅผ ์ค„ ๋•Œ ์‹คํ—˜์„ ํ†ตํ•ด ํ‰๊ฐ€๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค.

(์•ฝ, ์‹คํ—˜ 1๊ฐœ/์ผ)

4. Fly

์ด์ œ ๋ชจ๋“  ๋ณ€ํ™”์— ์‹คํ—˜์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฐ ํŒ€๋“ค์€ DS์˜ ๋„์›€ ์—†์ด๋„ ์‹คํ—˜์„ ์‹คํ–‰ํ•˜๊ณ  ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋”์šฑ ํ™•์žฅ์„ฑ ์žˆ๊ฒŒ ์‹คํ—˜์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ์ž๋™ํ™”๋ฅผ ๊ณ ๋ คํ•˜๊ฒŒ ๋œ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ์‹คํ—˜์˜ ์ˆ˜๋Š” ์•ฝ 4~5๋ฐฐ ๋งŽ์•„์ง„๋‹ค.

์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋ณ„ ์‹คํ—˜ํ”Œ๋žซํผ์šธ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์–˜๊ธฐํ•˜๊ธฐ ์ „์— ๋‹จ๊ณ„์— ์ƒ๊ด€ ์—†์ด ์กฐ์ง์ด ๊ด€์‹ฌ์„ ๊ฐ–์–ด์•ผ ํ•  ๋ถ€๋ถ„๋“ค์„ ๊ฐ•์กฐํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

๐Ÿ‘‘ Leadership

์ œํ’ˆ์„ ๊ตฌ์ถ•ํ•  ๋•Œ ์‹คํ—˜์„ ํ•˜๊ฒŒ๋” ๋งŒ๋“œ๋Š” ๋ฌธํ™”๋ฅผ ์ •์ฐฉ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋ฆฌ๋”์‹ญ์ด ํ•ด์•ผํ•  ์ค‘์š”ํ•œ ์ž„๋ฌด ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ์ผ๋“ค์„ ํ•ด์•ผ ํ•œ๋‹ค:

  • OEC๋ฅผ ํ™•๋ฆฝํ•˜๊ธฐ
  • Feature X์—์„œ Y๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๊ฐ€ ์•„๋‹Œ metric์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋ชฉํ‘œ ์„ธ์šฐ๊ธฐ. Metrics๋ฅผ ๋–จ์–ดํŠธ๋ฆฌ์ง€ ์•Š๋Š” ์‹คํ—˜์„ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ •์˜๋œ metrics๋ฅผ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์‹คํ—˜์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธํ™”๋ฅผ ๋งŒ๋“ค๊ธฐ
  • ๋น ๋ฅด๊ฒŒ ์‹คํŒจํ•˜๋Š” ๋ฌธํ™” ๋งŒ๋“ค๊ธฐ. Key metrics๋ฅผ ํ˜์‹ ์‹œํ‚ค๊ณ  ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํŒ€๋“ค์„ ์ง€์›ํ•˜๊ธฐ.
  • ๋งŽ์€ ์‹คํ—˜๋“ค์ด ์‹คํŒจํ•œ ๋‹ค๋Š” ๊ฒƒ์„ ์ธ์‹์‹œํ‚ค๊ธฐ. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์‹คํŒจ๋กœ๋ถ€ํ„ฐ ๋ฐฐ์›Œ์„œ ํ˜์‹ ์„ ์ง€์†ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๊ธฐ.
  • ๋†’์€ ๋ฐ์ดํ„ฐ์˜ ํ€„๋ฆฌํ‹ฐ ์œ ์ง€ํ•˜๊ธฐ

๋“ฑ๋“ฑ

๋ฆฌ๋”๋“ค์€ ๋‹จ์ˆœํžˆ ์‹คํ—˜ํ”Œ๋žซํผ์„ ๊ตฌ์ถ•ํ•˜๊ณ  ํˆด์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋๋‚ด๋ฉด ์•ˆ๋œ๋‹ค. ๋ฆฌ๋”๋“ค์€ ์–ธ์ œ๋‚˜ ์กฐ์ง์ด ์˜ฌ๋ฐ”๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์‹คํ—˜์„ ์ง„ํ–‰ํ•ด์„œ ๋ฐ์ดํ„ฐ ๋“œ๋ฆฌ๋ธ ์˜์‚ฌ๊ฒฐ์ •์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ด์•ผ ํ•œ๋‹ค. ํŠนํžˆ, Crawl, Walk ๋‹จ๊ณ„์— ์žˆ์„ ๋•Œ ์กฐ์ง์˜ ๋ชฉํ‘œ๋ฅผ ์„ธ์šฐ๊ณ  ์‹คํ—˜์„ ์žฅ๋ คํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

๋˜ํ•œ, ์‹คํ—˜์ด ์„ฑ๊ณตํ•˜๊ณ  ๋” ํ™•์žฅ๋˜๋ ค๋ฉด ์‹คํ—˜์˜ ์ž„ํŒฉํŠธ์— ๋Œ€ํ•ด ํˆฌ๋ช…์„ฑ์ด ๋ณด์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • ์‹คํ—˜ ๋Œ€์‹œ๋ณด๋“œ ๊ฐ™์€ ๊ณณ์— OEC๋‚˜ ์ค‘์š”ํ•œ metric๋“ค์ด ๊ณ„์‚ฐ๋ผ์„œ ๋ณด์—ฌ์ ธ์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํŒ€๋“ค์ด ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•  ๋•Œ ์ฒด๋ฆฌํ”ฝ(cherry-pick)ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋†€๋ผ์šด ์‹คํ—˜ ๊ฒฐ๊ณผ(์„ฑ๊ณต ํ˜น์€ ์‹คํŒจ)์ด ์žˆ์œผ๋ฉด ์ด๋ฉ”์ผ์ด๋‚˜ ๋‰ด์Šค๋ ˆํ„ฐ๋ฅผ ๋ณด๋‚ด์„œ ์•Œ๋ ค์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์˜ ๋ชฉํ‘œ๋Š” ๋‹ค๋ฅธ ํŒ€๋“ค์ด ์‹คํ—˜์„ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • Treatment๊ฐ€ metrics์— ๋‚˜์œ ์ž„ํŒฉํŠธ๋ฅผ ๋ผ์น ๋•Œ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์›Œ๋‹์„ ์ค„ ์ˆ˜๋„ ์žˆ๊ณ , ์‹ค์ œ๋กœ ๋ฐฐํฌ๋ฅผ ๋ฉˆ์ถ”๋Š” ๊ฒƒ๊นŒ์ง€ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‹คํŒจํ•œ ์•„์ด๋””์–ด์—์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์•„์ด๋””์–ด๋Š” ๋งํ•œ๋‹ค, ํ‚ค๋Š” ์‹คํŒจ์—์„œ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ›  Infrastructure and Tools

์‹คํ—˜์„ design - deploy - analyzeํ•˜๋ ค๋ฉด ์‹คํ—˜ํ”Œ๋žซํผ์—์„œ ๋‹ค์Œ ์š”์†Œ๋“ค์„ ๊ฐ–์ถฐ์•ผ ํ•œ๋‹ค

  1. ์‹คํ—˜ Management
  2. ์‹คํ—˜ Deployment
  3. ์‹คํ—˜ Instrumentation
  4. ์‹คํ—˜ Analytics

architecture

์‹คํ—˜ํ”Œ๋žซํผ ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ ์˜ˆ์‹œ.

1. ์‹คํ—˜ ์ •์˜, ์„ค์ • ๋งค๋‹ˆ์ง€๋จผํŠธ

์‹คํ—˜์„ ๋งŽ์ด ์ง„ํ–‰ํ•˜๋ ค๋ฉด, ์‹คํ—˜์„ ์‰ฝ๊ฒŒ ์ •์˜ํ•˜๊ณ  ์„ค์ •์„ ํ•˜๊ณ  ๋งค๋‹ˆ์ง•์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค. ์‹คํ—˜์„ ์ •์˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ์˜ ๋‚ด์šฉ๋“ค์ด ํ•„์š”ํ•˜๋‹ค:

  • ์‹คํ—˜ owner
  • ์‹คํ—˜ ์ด๋ฆ„
  • ์‹คํ—˜ ์„ค๋ช…
  • ์‹คํ—˜์˜ ์‹œ์ž‘ ์‹œ๊ฐ„๊ณผ ๋๋‚˜๋Š” ์‹œ๊ฐ„
  • ๊ทธ ์™ธ ๋‹ค๋ฅธ ํ•„๋“œ๋“ค

๋˜ํ•œ, ์‹คํ—˜ํ”Œ๋žซํผ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค:

  • ์‹คํ—˜ ์„ค์ •์— ๋Œ€ํ•œ draft(์ดˆ์•ˆ)์„ ์ž‘์„ฑ ๋ฐ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
  • ํ˜„์žฌ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ์‹คํ—˜์˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์–ด๋–ค ์ ์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์ฐจ์ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ
  • ์‹คํ—˜์˜ ํƒ€์ž„๋ผ์ธ ํ˜น์€ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ (์–ธ์ œ ์‹คํ—˜์ด ์–ด๋–ป๊ฒŒ ์„ค์ •์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ๋ณด๊ธฐ ์œ„ํ•ด)
  • ์ž๋™์œผ๋กœ ์‹คํ—˜ id, ๋ณ€์ˆ˜ ๋“ฑ์„ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
  • ์‹คํ—˜ ์„ค์ •์— ์—๋Ÿฌ๊ฐ€ ์—†์Œ์„ ๊ฒ€์ฆํ•˜๋Š” ๊ธฐ๋Šฅ (์‹คํ—˜ ์ด๋ฆ„์ด ์˜ฌ๋ฐ”๋ฅธ์ง€, ์‹คํ—˜์˜ ํƒ€๊ฒŸ์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ๋“ฑ)
  • ์‹คํ—˜์˜ ์ƒํƒœ(์‹œ์ž‘ํ–ˆ๋Š”์ง€, ์ข…๋ฃŒ๋˜์—ˆ๋Š”์ง€)๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ. ์‹คํ—˜์„ ์ฆ‰์‹œ ์ค‘๋‹จ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ.

์‹คํ—˜์ด ์‹œ์ž‘๋˜๋ฉด ์‹ค์ œ๋กœ ์œ ์ €๋“คํ•œํ…Œ ์ž„ํŒฉํŠธ๊ฐ€ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹คํ—˜์ด ์ž˜๋ชป ์„ค์ •๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ตœ๋Œ€ํ•œ ๋ฐฉ์ง€ํ•ด์•ผ ํ•œ๋‹ค.

2. ์‹คํ—˜ ๋ฐฐํฌ

์‹คํ—˜์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •์ด ๋˜์—ˆ๋‹ค๋ฉด ์œ ์ €๋“ค์—๊ฒŒ ์ ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ์‹คํ—˜ ๋ฐฐํฌ๋Š” 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค:

  1. ์‹คํ—˜ ์ •์˜ ๋ฐ ์–ด๋–ค ์œ ์ €๋“คํ•œํ…Œ ์ด ์‹คํ—˜์„ ํ• ๋‹นํ• ์ง€์— ๋Œ€ํ•œ ์‹คํ—˜ ์ •๋ณด์˜ ๋ฐฐํฌ
  2. ์‹ค์ œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ ์œ ์ €๊ฐ€ ์‹คํ—˜์˜ ์–ด๋–ค ๊ทธ๋ฃน์— ํ• ๋‹น๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ์ฝ”๋“œ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐฐํฌ

๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์œ ์ €๋“ค์„ ์‹คํ—˜์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ•์€ user ID๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. user ID๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์ €๊ฐ€ ์–ด๋–ค ๊ทธ๋ฃน์— ํ• ๋‹น ๋˜์—ˆ๋Š”์ง€์— ๋Œ€ํ•œ ๊ฐ’์„ ๋ฐ›์•˜๋‹ค๋ฉด ์‹ค์ œ ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์•„ํ‚คํ…์ฒ˜๋กœ ์‹คํ—˜์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋‹ค:

  • userID ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์ €๊ฐ€ ์–ด๋–ค ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ฐ›์€ ๋‹ค์Œ์—, ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
variant = getVariant(userID)
if (variant == Treatment) {
   buttonColor = red
} else {
   buttonColor = blue
}
  • ์ฝ”๋“œ ๋‚ด์—์„œ ๋ฐ”๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹คํ—˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
variant = getVariant(userID)
if (variant == Treatment) {
   buttonColor = variant.getParam("buttonColor")
} else {
   buttonColor = blue
}

// ํ˜น์€
variant = getVariant(userID)
...
buttonColor = variant.getParam("buttonColor")
  • ์„ธ๋ฒˆ์งธ ์•„ํ‚คํ…์ฒ˜๋Š” ์œ ์ €๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ถ€๋ถ„๋„ ์•„์˜ˆ config์™€ ๊ฐ™์€ ๊ณณ์— ์˜ฎ๊ฒจ๋†“๊ณ  ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ์—์„œ๋Š” config์—์„œ ๋ฐ›์€ ๊ฐ’์œผ๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
buttonColor = config.getParam("buttonColor")

์œ„์— ์ œ์‹œํ•œ ๋ชจ๋“  ์•„ํ‚คํ…์ฒ˜์—์„œ ๊ธฐ๋ณธ ๊ฐ’์€ ํ•ญ์ƒ ์„ค์ •๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค (์œ„ ์˜ˆ์ œ์—์„œ๋Š” blue๊ฐ€ ๊ธฐ๋ณธ ๊ฐ’), ๊ทธ๋ฆฌ๊ณ  ์œ ์ €๊ฐ€ Treatment(์‹คํ—˜๊ตฐ)์— ์†ํ–ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๋„๋ก ๋˜์–ด์•ผ ํ•œ๋‹ค.

์œ„์—์„œ ๋ฐ‘์œผ๋กœ ์ฝ”๋“œ์˜ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜๋ก ๊ธฐ์ˆ ์  ๋ถ€์ฑ„๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์ด๋‹ค. ๋ฌผ๋ก , ์–ด๋–ค ์•„ํ‚คํ…์ฒ˜๋ฅผ ์„ ํƒํ•˜๋˜ ๊ฐ„์— ์ผ๋‹จ ์‹คํ—˜์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ˜„์žฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด์„œ ์–ด๋–ค ๋ฐฉ์‹์„ ์ ์šฉํ•ด์•ผ cost๋ฅผ ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์ €์šธ์งˆ์„ ํ•ด๋ด์•ผ ํ•œ๋‹ค.

3. ์‹คํ—˜ instrumentation

์œ ์ €์˜ ํ–‰๋™์ด๋‚˜ ์‹œ์Šคํ…œ์˜ ํผํฌ๋จผ์Šค๋Š” ํ•ญ์ƒ ๋กœ๊น…์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ์‹คํ—˜์— ์žˆ์–ด์„œ ํŠน์ • ์œ ์ €๊ฐ€ ์–ด๋–ค ๊ทธ๋ฃน์— ์†ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ์–ด๋–ค ํ–‰๋™์„ ํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ๋งŒ, ์‹คํ—˜์˜ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ์ •ํ™•ํ•œ ๋ถ„์„์„ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

4. ์‹คํ—˜ ๋ถ„์„

์‹คํ—˜ํ”Œ๋žซํผ์ด ๋” ๊ณ ๋„ํ™”๋˜๋ ค๋ฉด ์‹คํ—˜ ๋ถ„์„๋„ ์ž๋™ํ™”๊ฐ€ ๋˜์–ด์•ผ ํ•œ๋‹ค. ์‹คํ—˜ ๋ถ„์„ ์ž๋™ํ™”๋ฅผ ํ†ตํ•ด์„œ ํŒ€๋“ค์ด ๋ถ„์„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๊ณ , ๋ชจ๋‘๊ฐ€ ๊ฐ™์€ ๋ถ„์„ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ์‹คํ—˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์‹ ๋ขฐํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

๋ถ„์„ ์ž๋™ํ™” ๊ฐ€์žฅ ๋จผ์ € data processing์„ ์š”๊ตฌ๋กœ ํ•œ๋‹ค. ์‹คํ—˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜•ํƒœ๋กœ ์ •์ œํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์•ผ ๊ณ„์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๊ณ  ์‹œ๊ฐํ™”๊นŒ์ง€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

data processing์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค๋ฉด ๋‹ค์Œ์œผ๋กœ ์ฑ™๊ฒจ์•ผํ•  ๊ฒƒ์€ metrics๋“ค์— ๋Œ€ํ•œ data computation์ด๋‹ค. Segment๋ณ„(์˜ˆ, ๊ตญ๊ฐ€๋ณ„, ์–ธ์–ด๋ณ„, ํ”Œ๋žซํผ๋ณ„) metric ๊ณ„์‚ฐ์ด๋‚˜, p-value ๊ณ„์‚ฐ, SRM ๊ฒ€์ฆ๊ณผ ๊ฐ™์€ ๊ณ„์‚ฐ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ ์ค‘ ์‹คํ—˜ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ์˜ ์‹ ๋ขฐ์„ฑ์„ ๋†’ํ˜€์ค„ ์ˆ˜ ์žˆ๋Š” ๊ณ„์‚ฐ์„ ๊ฐ€์žฅ ์šฐ์„ ์‹œ ํ•ด์•ผ ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ๋Š” data visualization์ด ํ•„์š”ํ•˜๋‹ค. ์‹œ๊ฐํ™”๋ฅผ ์‹คํ—˜์˜ ๊ฒฐ๊ณผ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. Metrics๋“ค์ด ๋ณด์—ฌ์ง€๊ณ , ์‹คํ—˜ ๊ฒฐ๊ณผ๊ฐ€ ํ†ต๊ณ„์ ์œผ๋กœ ์œ ์˜๋ฏธํ•œ์ง€ ๋ณด์—ฌ์ค˜์•ผ ํ•œ๋‹ค. ์‹คํ—˜ํ•˜๋Š” ๋ฌธํ™”๋ฅผ ์ž๋ฆฌ ์žก๋Š” ์‹œ๊ธฐ์—๋Š” ์ด ๊ฒฐ๊ณผ๋“ค์„ ์‚ฌ๋‚ด ๊ตฌ์„ฑ์›๋“ค์ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

โœ๏ธ ๋‹ค์Œ ํฌ์ŠคํŠธ๋Š” Speed Matters์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ์š”์•ฝํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

ยฉ 2022 Dojin Kim, Built with Gatsby