광고가 진짜 만든 매출을 재는 법
강남에서 피자가게 하시는 사장님이 지난 주에 소셜 광고를 한 번 꺼봤어요. 매주 돌리던 광고였고, 리포트엔 "매주 100만원씩 가져온다"고 찍혀 있었거든요.
그런데 막상 꺼보니까, 매출은 40만원밖에 안 빠졌어요.
사장님이 당황하시죠. "그래서 광고가 실제로 만든 매출이 100만원이야, 40만원이야? 아니면 또 다른 숫자야?"
광고 측정은 결국 이 질문에서 시작해요.
지난 글 짧게 복습
이 글은 지난 글에서 자연스럽게 이어져요. 아직 안 보셨으면 먼저 한 번 보고 와주세요. 지난 글이 "왜 재야 하나"였다면 이 글은 "어떻게 재나"예요. 가볍게만 복습하고 넘어갈게요.
핵심은 이거였어요. 광고 효과를 제대로 재려면 반사실(counterfactual), 그러니까 "그 광고가 없었다면 이 사람들 매출이 얼마였을까" 하는 상상 속 세계를 그려야 돼요.
그런데 그 평행우주가 원래 존재하질 않잖아요. 그래서 꺼낸 해법이 복권 박스예요. 복권 1,000장을 섞어서 두 박스에 500장씩 나누면, 한 장 한 장은 달라도 두 박스의 평균 당첨 확률, 평균 상금, 평균 발행 순서가 거의 똑같아져요. 사람도 똑같아요. 많이 섞어서 쪼개면 두 그룹의 평균 나이, 평균 소득, 평균 구매 성향, 심지어 우리가 측정조차 못 하는 변수들까지 평균이 비슷해져요. 그 상태에서 한쪽에만 광고(= 처치)를 걸면 그 다음 매출 차이를 광고 효과로 볼 수 있다, 이게 1편의 아이디어였어요.
근데 현실에선 "진짜 평행우주 = 완벽히 똑같은 두 집단"을 만들 수가 없어요. 복권 박스 비유가 아무리 좋아도, 유저 1,000명을 완벽하게 쪼개는 것 자체가 광고판에선 어려워요 (이유는 뒤에서 자세히). 그래서 우리는 "완벽한 측정은 애초에 못 하니까, 최대한 덜 틀린 쪽으로 가자"는 타협으로 넘어가요. 이 글은 그 "덜 틀린" 쪽으로 가는 구체적인 도구들을 하나씩 보는 거예요. 각자 완벽은 아니지만, 아무것도 안 하는 것보단 훨씬 진실에 가까운 추정을 뽑아내는 방법들이요.
그래서 이번 글은 그 "비슷한 두 그룹을 어떻게 만드느냐" 얘기예요.
길은 크게 두 갈래예요
광고 효과 재는 길은 크게 두 갈래예요.
첫 번째, 실험으로 만들기. 처음부터 두 그룹을 랜덤으로 나누고 한쪽에만 광고를 보여줘요. 제일 깨끗해요. 다만 뒤에 보시면 알겠지만, 이게 생각보다 녹록지 않아요.
두 번째, 과거 데이터로 만들기. 랜덤 실험 돌리기가 생각보다 어려워요. 캠페인이 이미 몇 달째 돌고 있어서 지금 와서 못 끄는 경우도 있고, 끌 수는 있어도 그 기간 매출 포기가 아까운 경우도 있고요. 이럴 땐 이미 쌓인 과거 데이터에서 "비슷한 짝"을 찾아 비교해요. 돈은 덜 드는데 깔끔함도 덜해요.
이 두 갈래가 세상의 모든 방법은 아니에요. 각 갈래 안에 세부 변형도 많고요. 다만 지금은 가장 자주 쓰는 대표적인 두 길로 깔끔하게 나눠 가볼게요.
방법 1. 랜덤 배정 실험 (RCT)
체육 시간 피구팀 생각해 보세요. 선생님이 "너네끼리 나눠봐" 하면 친한 애들끼리 뭉쳐서 팀 실력이 벌어져요. "주사위 던져서 홀짝"으로 나누면 양쪽에 고르게 섞여서 비슷해지죠. 이걸 광고에 그대로 가져온 게 랜덤 배정 실험(Randomized Controlled Trial, 줄여서 RCT)이에요.
유저 1,000명 모아놓고 한 명 한 명 동전 던지기. 앞면 500명은 A그룹(광고 봄), 뒷면 500명은 B그룹(광고 안 봄). 2주 뒤 두 그룹 매출 비교. 끝이에요.
왜 깨끗한가 하면 복권 박스를 떠올려 보세요. 복권 1,000장을 한 통에 쏟아부어 섞은 뒤 두 박스에 500장씩 나눠 담는다고 쳐요. 한 장 한 장은 서로 다르지만, 평균 상금, 평균 당첨 확률, 평균 발행 순서는 두 박스가 거의 똑같이 나와요. 유저 1,000명을 동전으로 쪼개도 똑같아요. 나이, 소득, 구매 성향, 심지어 우리가 모르는 변수까지 평균적으로 균형이 맞춰져요. 그래서 2주 뒤 매출이 다르다면, 그 차이의 설명은 딱 하나밖에 안 남아요. 광고. 다른 변명이 안 통하죠.
하나 조심할 점. "진짜 랜덤"이어야 돼요. 이게 생각보다 쉽지가 않아요. 예를 들어 "유저 ID 홀짝으로 나누자" 하면 랜덤 같지만, 가입 시기나 플랫폼이 ID를 부여하는 방식에 패턴이 묻어 있을 수 있거든요. "월요일 유입은 A, 화요일 유입은 B" 이것도 랜덤 아니에요. 요일별로 유저 성격이 다를 수 있으니까요. 진짜 랜덤이 되려면 유저 한 명 한 명 그 자리에서 동전을 던지는 수준이어야 해요. 랜덤처럼 보이지만 실제론 아닌 함정, 꽤 많아요.
신약 임상시험이랑 완전 똑같은 방식이에요. 새 약 받은 그룹이랑 가짜 약(위약) 받은 그룹을 랜덤으로 나누고 몇 주 뒤 결과 비교. 과학자들이 수십 년째 이렇게 해왔어요.
지금 우리가 쓸 수 있는 측정 방법 중에 광고의 진짜 효과에 제일 가까이 가는 건 RCT예요. 뒤에 나올 다른 방법들은 전부 "RCT를 못 돌릴 때 어쩔 수 없이 꺼내는 플랜 B"라고 보시면 돼요.
그런데 광고에선 돌리기가 정말 어려워요
문제는 그 "실험만 돌릴 수 있으면"이란 조건이 광고판에선 거의 성립을 안 한다는 거예요. 이유가 한두 개가 아니거든요.
이유 1, 매출 포기. 500명한테 2주 동안 광고를 안 보여준다는 건, 그 2주 치 매출을 포기한다는 얘기잖아요. 운영자 입장에선 "이번 분기 숫자 접고 실험부터 돌립시다" 결정이 쉽지가 않죠. 월말에 대표님이 숫자 들고 오라고 하는데 "저 지금 실험 중이에요" 하긴 어렵잖아요.
이유 2, 광고는 애초에 "타겟팅"이 깔려 있어요. 솔직히 이게 제일 커요. 광고 플랫폼이 유저 한 명 한 명 보면서 "얘한테 광고 보여줄까?"를 알고리즘이 정하거든요. 기준은요, "살 것 같은 사람". 살 것 같은 사람한텐 광고 밀어주고, 아닐 것 같은 사람한텐 안 밀어줘요.
그래서 "광고 본 사람 vs 안 본 사람"을 뽑아놓으면, 이건 동전으로 나뉜 두 그룹이 아니에요. 알고리즘이 "너는 살 것 같아, 받아 / 너는 안 살 것 같아, 패스" 이렇게 미리 쪼개둔 두 그룹이거든요. 이 상태에서 매출 차이를 보면 뭐가 섞여 나오냐면요, 광고 효과가 아니라 "원래부터 살 사람 vs 안 살 사람의 차이"가 섞여요. 광고가 잘 돼서 매출이 오른 건지, 원래 살 사람들만 모아둔 건지 구분이 안 되는 거죠.
(타겟팅 문제는 광고 측정의 거의 모든 함정이 걸려있는 지점이에요. 나중에 글 하나 통째로 아주 구체적으로 다룰게요.)
이유 3, 플랫폼 제약. RCT로 광고 실험을 돌리려면 광고 플랫폼이 두 가지를 다 열어줘야 해요. 하나, 유저를 진짜 랜덤으로 두 그룹에 배정해주는 기능 (위에서 말한 함정에 안 걸리게 엄밀한 랜덤이어야 돼요). 둘, 한 그룹한테만 광고 보여주고 다른 그룹엔 완전히 안 보여주는 기능. 이 두 개가 다 깔려 있어야 실험이 성립해요. 대형 플랫폼이 제공하는 공식 리프트 테스트 (예: Conversion Lift)가 대표적인데, 그 외 플랫폼은 거의 이런 기능을 안 열어줘요.
이 세 가지가 겹쳐서 매번 RCT를 돌리는 건 사실상 불가능해요. 그래서 "사람 랜덤" 말고 "지역 랜덤"으로 가보자는 아이디어가 나와요.
방법 2. 지역 실험 (Geo Experiment)
이번엔 사람 단위가 아니라 지역 단위로 쪼개요. 생각보다 똑똑한 접근이에요.
쌍둥이 지역을 하나 찾아요. 수원이랑 용인처럼 바로 옆에 붙어 있고, 인구도 비슷하고, 소비 패턴도 비슷한 두 지역. 한쪽은 광고 끄고, 다른 쪽은 그대로 두고. 2달 뒤 두 지역의 전체 매출을 비교해요. "광고 본 사람 매출"만 보는 게 아니라, 그 지역 사람들이 어떤 경로로든 (광고 보고, 자연 검색으로, 그냥 생각나서) 산 매출을 전부 합한 지역 총매출이에요.
유명한 eBay 실험이 바로 이 방식이에요. 미국 210개 지역 중에 68개를 랜덤으로 뽑아서 광고를 완전히 끄고, 나머지 142개는 그대로. 2달 뒤 매출 비교. 결과, 거의 차이 없었죠. (원 논문은 Blake, Nosko, Tadelis가 2015년 Econometrica에 실은 거예요.)
왜 사람 랜덤보다 쉽나
유저 500명한테 2주간 광고 안 보여주려면 플랫폼이 그런 유저 그룹을 뽑아주는 기능을 열어줘야 해요. 근데 지역 단위는 달라요. 광고 플랫폼의 지역 타겟팅 기능을 끄기만 하면 되거든요. "용인 지역엔 광고 안 보여주기" 설정 한 번이면 끝. 큰 플랫폼이 아니어도 돼요.
근데 완벽하진 않아요
지역 실험도 두 가지 약점이 있어요.
하나, 쌍둥이 지역이 진짜 쌍둥이는 아니에요. 수원이랑 용인이 진짜로 똑같나요? 인구, 소득, 평균 연령, 소비 패턴, 브랜드 선호. 다 미묘하게 달라요. 그래서 "두 지역 매출 차이 = 광고 효과"라고 딱 잘라 말하기엔 좀 찜찜해요.
그래도 위안거리는 있어요. 지역 단위엔 그 안에 수십만, 수백만 명이 들어 있거든요. 샘플이 많으면 들쭉날쭉이 알아서 평균으로 눌려요. 유저 500명 vs 500명 비교에선 "운 좋게/나쁘게 뽑힌 거 아냐?" 걱정이 큰데, 수원 120만 vs 용인 112만 평균은 그 안의 자잘한 변동이 상쇄돼서 "지역 평균 특성"이 꽤 안정적으로 나와요.
둘, 지역 안에서도 알고리즘은 사람을 골라줘요. 아까 사람 단위 실험에서 짚었던 타겟팅 함정이, 지역 단위로 올라가도 완전히는 사라지지 않아요. 수원 안에서도 알고리즘은 수원 사람 전부에게 광고를 뿌리는 게 아니라 "살 것 같은 일부"만 골라서 광고를 보여줘요. 그 외 수원 사람들은 광고를 못 봐요.
그래도 Geo 방식은 지역 전체 매출을 보기 때문에 그 편향이 많이 희석돼요. 알고리즘이 광고를 밀어준 '살 성향 높은 일부'의 매출 보너스가, 수원 120만 명 전체 매출 안에 녹아들어 아주 작게 묻히거든요.
리포트가 하는 식으로 "광고 클릭한 사람 매출만 합산"하면 그 편향이 그대로 드러나죠 (1편에서 다룬 "광고 매출 10억" 함정이 바로 이거). Geo는 그걸 피해요.
근데 실험을 매번 돌릴 순 없죠
여기까지가 "실험으로 만드는" 쪽이에요. 깨끗한 건 좋죠. 근데 운영자 입장에선 이런 상황이 훨씬 많아요.
- 캠페인은 이미 몇 달 전부터 돌고 있고요. 이제 와서 못 꺼요.
- 광고 끄면 매출 포기해야 하는데, 이번 분기 숫자 압박이 커요.
- 실험 돌릴 인프라도 없고, 플랫폼이 그런 기능을 안 열어주고요.
그럼 어떡해요. "측정 못 함"으로 포기해요? 그러긴 아깝죠. 이럴 때 꺼내는 게 과거 데이터로 짝 찾기예요.
방법 3. 매칭 (Matching)
캠페인은 이미 돌고 있고, 과거 데이터는 쌓여 있어요. 광고 본 사람 N명, 안 본 사람 M명. 이 중에서 비슷한 사람끼리 짝 지어주기. 짝 지은 두 그룹의 매출을 비교하면 광고 효과가 나와요.
그럴듯해 보이죠. 근데 문제가 하나 있어요.
"비슷함"을 뭘로 정하죠?
예를 들어볼게요. 사라는 핸드폰 하루 2시간 쓰고 연봉 3,000만원이에요. 광고 안 본 사람 중에서 사라랑 비슷한 사람을 찾으려고 해요. 후보는 둘.
- 알렉스, 하루 1시간, 연봉 3,200만원
- 크리스, 하루 14시간, 연봉 3,100만원
둘 중에 누가 사라랑 더 비슷해요?
숫자 차이만 더하면 크리스가 더 비슷하다고 나와요. 폰 사용시간 차이 12시간, 연봉 차이 100만원. 더하면 112. 알렉스는 폰 차이 1시간, 연봉 차이 200만원. 합이 201. 크리스가 숫자상 "더 가까워" 보이는 거죠.
근데 상식으로 보면 완전 아니잖아요. 하루 2시간 쓰는 사람이랑 하루 14시간 쓰는 사람이 비슷하다니. 폰 중독 수준이 완전 다른데요.
왜 이런 왜곡이 생기냐면요. 연봉이랑 폰 사용시간은 숫자 자리수가 완전 달라요. 연봉은 "3,000"처럼 네 자리짜리 숫자고, 폰 사용시간은 "2"처럼 한 자리짜리거든요. 그래서 연봉 차이가 "100"으로 찍히면 큰 숫자처럼 보이지만 실제론 월 10만원도 안 되는 차이예요. 반대로 폰 사용시간 차이 "12"는 숫자 자체는 작아 보여도, 하루 2시간이랑 14시간 격차는 엄청나죠. 생활 패턴이 아예 다른 사람들이잖아요.
그런데 두 숫자를 그냥 더해버리면? 연봉이 자리수가 커서 비교를 삼켜버려요. 사람의 "비슷함" 판단을 연봉 혼자 지배하는 거죠. 비유하자면 "사과 3개랑 사과 4개" 차이 1이랑, "가격 3만원이랑 4만원" 차이 1을 그냥 더하는 거랑 똑같아요. 둘 다 "1"로 찍히지만 의미는 완전 다르잖아요. 사과 1개 더 있는 거랑 돈 만원 더 있는 걸 1 + 1 = 2라고 하면 이상하죠.
참고로 통계책에서는 이걸 유클리드 거리(Euclidean distance)의 scale 문제라고 해요. 이름이 거창한데, 핵심은 지금 말한 "숫자 자리수 큰 애가 비교를 삼켜버리는 함정"이에요. 그게 다예요.
방법 3-1. PSM, 소개팅 앱이 하는 그거랑 똑같아요
사라-알렉스-크리스에서 봤던 함정, 어떻게 피할까요? 소개팅 앱이 쓰는 방식 그대로 쓰면 돼요.
소개팅 앱 생각해보세요. 사람마다 키, 나이, 직업, 취미, 성격, 라이프스타일. 조건이 수없이 많잖아요. 아까처럼 하나씩 숫자로 비교하면 "숫자 자리수 지배" 함정에 걸려요. 그래서 소개팅 앱은 뭘 하냐면요, 그 많은 조건을 모델이 알아서 압축해서 "호감도 점수" 하나로 뱉어줘요. 그다음 점수 비슷한 사람끼리 짝. 끝이에요.
광고 측정도 완전 같은 방식이에요. 소개팅 앱이 "호감도 점수"를 뱉어주듯, 광고 모델도 사람마다 점수 하나를 뱉어줘요 (대략 "이 사람이 광고 받을 만한 사람인지" 점수요). 폰 사용시간, 연봉, 성별, 나이, 과거 구매 이력, 뭐든 다 넣어서 모델이 압축한 결과예요. 사라 0.30, 알렉스 0.35, 크리스 0.90, 이런 식으로 나와요.
그다음은 소개팅이랑 똑같아요. 광고 본 사람과 안 본 사람 중에 점수 비슷한 쌍끼리 짝. 짝 없는 사람(크리스처럼 극단적인 사람)은 버리고요.
그래서 그다음은 어떻게 비교하냐면요. 짝 지은 쌍마다 매출을 하나씩 비교해요. 숫자로 보면 이렇게요.
- 사라 (광고 봄, 매출 20,000원) ↔ 알렉스 (광고 안 봄, 매출 15,000원) → 이 짝의 광고 효과 추정 +5,000원
- 제이크 (광고 봄, 30,000원) ↔ 마이크 (광고 안 봄, 28,000원) → +2,000원
- 리아 (광고 봄, 50,000원) ↔ 엠마 (광고 안 봄, 42,000원) → +8,000원
이 짝별 차이의 평균 ((5,000 + 2,000 + 8,000) / 3 = 5,000원)이 PSM이 추정한 광고 효과예요. 짝 못 지은 크리스는 아예 안 들어가요.
왜 이렇게 하냐면요. 점수가 비슷하다 = 원래 비슷한 사람 둘이란 뜻이거든요. 그중 한 명은 우연히 광고를 봤고 한 명은 못 봤어요. 그러면 둘 사이 매출 차이는 "원래 다른 사람이었어서"가 아니라 "광고를 봤냐 안 봤냐" 때문이라고 볼 수 있어요. 랜덤 실험을 과거 데이터로 흉내 낸 거죠.
이 방법엔 이름이 있어요. Propensity Score Matching, 줄여서 PSM(피에스엠). 한국어로 옮기면 "성향 점수 매칭"이에요. 이름은 좀 거창한데, 안은 지금 설명한 그대로예요. 소개팅은 그 점수가 "호감도"고 광고에선 "광고 받을 만한 사람 점수"일 뿐이에요.
왜 똑똑하냐면요
- 여러 변수를 점수 하나로 압축하니까 아까 "숫자 자리수 지배" 문제가 사라져요. 연봉이든 사용시간이든 모델이 알아서 "폰 14시간 쓰는 사람은 완전 다른 성향이다"는 걸 점수에 넣어주거든요.
- 짝을 못 찾은 사람(크리스처럼 극단적인 사람)은 그냥 버려요. 억지로 짝 안 짓고요. 정직하죠.
- 과거 데이터만 있으면 돼요. 실험 안 돌려도 되고, 매출 포기도 안 해도 되고요.
1983년에 Rosenbaum이랑 Rubin이라는 두 통계학자가 처음 꺼낸 아이디어예요. 그 뒤로 의료든 교육이든 정책이든 광고든 다 써요. 실험 못 돌릴 때 꺼내는 기본 카드죠.
그래도 조심할 점
PSM 쓰려면 약점을 두 개 알고 있어야 해요.
약점 하나, 모델 설계가 전부예요. 그 "호감도 점수"를 모델이 얼마나 잘 만드냐에 결과가 통째로 달려 있어요. 엉성하게 짜이면 "점수가 비슷하다"고 나온 두 사람이 실제론 전혀 안 비슷할 수 있거든요. 소개팅 앱 비유로 돌아가 보죠. 호감도 점수가 "키"에만 과하게 반응하도록 설계됐다고 쳐요. 그럼 "키 비슷하다고 매칭했는데 성격은 극과 극"인 커플이 나오겠죠. PSM도 똑같아요. "비슷하다"고 자신 있게 매칭했는데 사실 비슷한 척만 하고 있었을 수 있어요. 더 무서운 건, 매칭이 얼마나 비슷한 척에 그쳤는지 분석하는 사람도 쉽게 못 알아차린다는 거예요. 이게 PSM의 숨은 함정이에요.
약점 둘, 모델에 안 넣은 변수는 못 잡아요. 소개팅으로 다시 가볼게요. 소개팅 앱이 키, 나이, 직업만 보고 호감도 점수를 뽑는다고 쳐요. 근데 사실 커플 성사엔 "유머 코드"가 제일 중요한데 앱이 유머 코드 데이터를 아예 안 갖고 있다면? 아무리 똑똑해도 반영을 못 하잖아요. "점수 비슷한 커플"이라고 매칭됐는데 실제론 유머 코드가 완전 다른 사람 둘일 수 있는 거죠.
광고에서도 똑같아요. 폰 사용시간, 연봉, 나이, 과거 구매 이력을 모델에 다 넣었어도, 사실 매출을 가장 많이 흔드는 변수가 "요즘 이사했는지"라고 쳐봐요 (이사한 사람은 TV, 가전, 가구를 한꺼번에 많이 사거든요). 근데 이 "이사 여부" 데이터가 없어서 모델에 안 들어갔어요. 그러면 PSM이 "이사 안 한 사람"과 "이사한 사람"을 점수 비슷하다고 짝지어버릴 수 있어요. 그 두 사람 매출 차이는 "광고 때문"이 아니라 "이사 때문"인데, PSM은 그걸 광고 효과로 잘못 세는 거죠.
중요한 변수를 하나라도 빼먹으면 PSM 결과가 통째로 틀어질 수 있어요. 그래서 PSM 쓸 때 가장 먼저 하는 질문이 "매출에 영향을 주는 변수는 다 모델에 들어가 있나?"예요. 근데 세상에 데이터가 다 있을 리 없으니, 완벽히 확신하긴 어렵죠.
그래서 솔직히 PSM은 랜덤 실험만큼 깨끗한 방법이 아니에요. 쓰기 쉽고 재료(과거 데이터)가 많다는 장점은 있지만, 결과를 그대로 믿기는 꽤 조심스러워요. 다음에 나올 RD나 DiD처럼 상황에 따라 PSM보다 더 깨끗한 선택지가 있기도 하고요.
방법 4. 커트라인 전후 비교 (Regression Discontinuity)
PSM 말고도 과거 데이터로 광고 효과를 재는 방법이 더 있어요. 그중에 제일 직관적인 게 Regression Discontinuity, 줄여서 RD예요. 한국어로 옮기면 "회귀 불연속". 이름은 또 거창한데 아이디어는 어이없을 정도로 단순해요.
수능 커트라인을 한 번 떠올려 보세요. 어느 대학 커트라인이 85점이라고 쳐요. 85.0점 맞으면 합격, 84.9점 맞으면 불합격이에요. 자, 이 두 학생을 보세요. 실력이 과연 "다르다"고 할 수 있을까요?
0.1점 차이는 사실 그날 컨디션, 찍은 문제가 운 좋게 맞은 거, 그런 수준이거든요. 두 학생 실력은 거의 똑같다고 봐야 해요. 그런데 결과는 완전히 갈려요. 한 명은 그 대학 가고, 한 명은 다른 대학 가요. 몇 년 뒤 두 사람 연봉을 비교하면, 그 차이는 "그 대학에 간 것 자체의 효과"로 봐도 돼요. 입학 전엔 실력이 거의 같았으니까요. 다른 변수(가정 환경, 성격, 재능)도 두 집단에서 평균적으로 비슷해요. 커트라인 바로 전후니까요. 그러니까 차이의 설명은 "대학에 갔냐 안 갔냐"밖에 안 남는 거죠.
광고에 어떻게 쓰냐면요. 광고 집행 룰 중에 "어떤 조건을 넘은 유저한테만 광고 보여주기" 패턴이 꽤 있어요. 예시,
- "앱 설치하고 7일 넘긴 유저한테만 리타겟팅 광고"
- "지난달 구매액이 10만원 넘긴 유저한테만 프리미엄 상품 광고"
- "가입 후 30일 지난 유저한테만 재구매 유도 광고"
여기 전부 "뚜렷한 경계선"이 있잖아요. 7일, 10만원, 30일. 그 경계선 바로 전후 유저를 비교하는 거예요.
예를 들어 "앱 7일 넘긴 유저한테만 리타겟팅"이 있다고 쳐요. 그러면 사용 6일 유저 vs 사용 7일 유저를 비교하면 돼요. 두 집단은 "하루 차이"일 뿐이라 성격이 거의 똑같거든요. 비슷한 시기 가입했고, 비슷하게 앱 썼고, 구매 성향도 비슷해요. 다른 건 딱 하나, 광고를 봤냐 안 봤냐. 그러니까 두 집단 매출 차이는 광고 효과로 볼 수 있어요. 수능 커트라인 예시랑 똑같은 논리예요.
RD의 매력, 엄청 직관적이에요. "경계선 바로 전후 두 집단은 거의 같다"는 상식 하나로 깨끗한 비교가 돼요. 과거 데이터만 있으면 되니까 실험도 안 돌려도 되고요. "숨은 변수" 함정도 PSM보다 적어요. 경계선 바로 전후는 대부분 변수에서 자동으로 비슷하거든요.
RD의 한계, 광고 집행 룰에 "뚜렷한 커트라인"이 있어야 해요. 알고리즘이 애매하게 "얘한테 보여줄 확률 73%" 이런 식으로 돌면 RD 못 써요. 그리고 경계선 주변 사람만 보니까 전체 유저에 대한 효과가 아니라 "경계선 주변 사람 한정 효과"예요. 결과를 전체 유저로 그대로 확대 해석하면 틀려요.
방법 5. 변화의 차이 (Difference-in-Differences)
자주 쓰는 거 하나 더 있어요. Difference-in-Differences, 줄여서 DiD(디프 인 디프). 번역하면 "변화의 차이"예요.
바로 광고 예시로 가볼게요. 수원 지점은 10월부터 신규 광고를 돌리기로 했어요. 용인 지점은 그대로 두고요. 광고 돌리기 전후 두 지역 매출을 뽑아봤어요.
- 수원 (광고 ON), 광고 전 1,000만원 → 광고 후 1,080만원 (+8%)
- 용인 (광고 OFF), 광고 전 1,000만원 → 광고 후 1,020만원 (+2%)
수원이 8% 올랐으니 "광고가 매출을 8% 올렸다"일까요? 아니에요. 그 사이에 동네 전체 소비가 2% 올랐을 가능성이 있잖아요. 용인이 그걸 보여주고 있고요. 광고 안 돌린 용인이 자연히 2% 올랐으면, 수원도 광고가 없었어도 2%는 올랐을 거예요. 그러면 광고가 순수하게 추가로 만든 효과는 8% - 2% = 6%예요.
이게 DiD의 핵심이에요. 용인의 2% 상승이 "광고 없었으면 수원도 자연히 얼마나 올랐을까"를 대신 보여주는 거예요. 그걸 수원의 8%에서 빼면 광고가 만든 추가분이 남아요.
숫자로 다시 정리해보면, (여기서 "9월"은 광고 시작 전 달, "11월"은 광고 시작 후 달이에요. 두 지역 다 같은 두 달의 매출을 보는 거고, 그 사이 10월에 수원만 광고를 켰다는 게 유일한 차이예요.)
| 9월 매출 | 11월 매출 | 변화 | |
|---|---|---|---|
| 수원 (10월부터 광고 ON) | 1,000만원 | 1,080만원 | +8% |
| 용인 (내내 광고 OFF) | 1,000만원 | 1,020만원 | +2% |
| 광고 효과 | 8% - 2% = 6% |
이게 이름 그대로예요, Difference-in-Differences, 차이(수원 변화) - 차이(용인 변화). 두 변화의 차이가 처치 효과.
DiD의 매력, Geo 실험 못 돌리고 PSM도 애매할 때 자주 꺼내요. "자연 변동을 통제군이 대신 빼준다"는 아이디어가 직관적이에요.
DiD의 한계, "자연 변동이 두 그룹에서 똑같이 일어난다"는 가정이 필요해요. 광고 켠 지역에만 갑자기 경쟁사가 치고 들어오거나, 두 지역 소비 패턴이 원래 다르게 움직였다면, 그런 건 못 잡아요.
아, 그런데 이 다섯 개가 전부는 아니에요
지금까지 본 다섯 가지가 현장에서 제일 자주 꺼내는 카드예요. 근데 광고 효과 측정의 세계는 더 넓어요. 몇 개 더 짧게만 소개할게요. 한 줄씩만 보고 넘어가도 돼요.
-
합성 통제군 (Synthetic Control), "쌍둥이 지역이 하나도 없을 때" 꺼내요. 광고 안 돌린 여러 지역을 적당히 섞어서 "가상의 쌍둥이"를 조립하는 방법. 쌍둥이가 없으면 레시피로 만들어서라도 쓰는 거예요.
-
도구 변수 (Instrumental Variable), "우연한 자연 실험"을 데이터에서 찾아내는 방법이에요. 예를 들어 어느 지역에서 통신 장애 때문에 광고 송출이 며칠 끊긴 적이 있다고 쳐요. 그 "통신 장애"는 광고 노출만 흔들었지 매출을 직접 흔들진 않았거든요. 자연이 돌려준 랜덤 실험처럼 써서 광고 효과를 뽑아내는 거예요.
-
베이지안 구조 모델 (Bayesian structural model), "데이터가 부족할 때" 꺼내요. "과거 비슷한 캠페인 효과가 대충 이 범위였다"는 사전 경험을 숫자에 녹여서 추정하는 방법. 데이터만으론 모자랄 때 과거 경험이 거드는 거죠.
세 개 다 "실험도 안 되고 PSM/RD/DiD도 안 될 때 꺼내는 특수 도구"예요. 하나씩 파고 들면 글 한 편 분량이라, 지금은 이름이랑 아이디어만 짚고 넘어갈게요.
그래서 어떻게 골라요?
다섯 가지 방법, 각자 쓰임새가 달라요.
실전에서 많이 쓰는 조합은 이래요.
- 큰 플랫폼 자체 광고 (대형 플랫폼), Conversion Lift 같은 공식 RCT 기능 쓰기
- 지역 캠페인이나 off-platform, Geo Experiment
- 과거 데이터만 있고 실험 못 돌림, PSM
- "조건 넘긴 유저한테만 광고" 설정이 있을 때, RD
- "광고 시작 전후" 데이터가 있을 때, DiD
두세 가지 방법을 동시에 돌리는 큰 회사도 있어요. 다른 각도로 재서 숫자가 비슷하게 나오면 "아, 진짜 효과에 가깝구나" 신뢰도가 올라가거든요. "방법 하나만 믿지 말고 여러 방법으로 수렴시키기", 이게 요즘 측정 베스트 프랙티스예요.
근데 어쨌든 RCT가 최선이에요. 한 번 더 강조할 가치가 있어요. RCT 말고 다른 방법들(Geo, PSM, RD, DiD, 그 외 세 개까지)은 전부 "왜 이 데이터에 이 방법을 써도 되는가"를 매번 증명해야 하는 방법들이에요. "두 지역이 평균적으로 비슷하다고 가정할 수 있나?", "모델이 뽑은 점수가 진짜 비슷함을 반영하나?", "경계선 전후 집단이 정말 다른 조건에선 같나?" 데이터 상황이 바뀔 때마다 매번 이런 가정을 증명해야 하거든요. 그 증명이 쉽지도 않고요. 반면 RCT는 설계 자체가 증명을 끝내버려요. 랜덤이면 끝. 그래서 "RCT가 가능한 상황인데 굳이 다른 방법을 쓰는 경우"는 거의 없어요. 다른 방법들은 "RCT가 불가능할 때 어쩔 수 없이" 꺼내는 플랜 B라는 걸 기억하세요.
반사실을 완벽하게 못 만들어도, 덜 틀리게는 돼요
1편 마지막 줄 그대로 가져올게요.
인과를 완벽하게 짚을 수 있다고 말하는 사람은 거짓말쟁이, 망상가, 아니면 신이에요. 우리는 셋 다 아니에요. 그래서 "완벽을 포기하고 똑똑한 타협을 받아들이기"가 더 나은 길이에요.
이 글의 다섯 방법, 전부 "덜 틀린" 측정 도구예요. 어느 것도 평행우주를 직접 열어주진 못해요. 그래도 대시보드에서 그냥 뽑은 숫자보단 훨씬 진실에 가까워요. 그 정도면 쓸만하잖아요.
맨 앞 피자가게 사장님으로 돌아가볼게요. 리포트는 100만원이라고 썼는데, 꺼보니 매출은 40만원만 빠졌어요. 사장님이 던진 질문, "100만원이야, 40만원이야, 아니면 또 다른 숫자야?"
솔직히 말하면, 딱 40만원도 아니에요. 40만원은 한 주 광고를 꺼서 나온 한 번의 측정값일 뿐이거든요. 그 한 주에 유독 비가 많이 왔거나, 옆 가게가 신메뉴를 내놨거나, 여러 다른 요인이 섞여 있을 수 있어요. "진짜 효과"는 영원히 평행우주 안에 있어서 끝내 손에 못 잡아요.
그래도 100만원엔 세 종류 매출이 섞여 있어요. (a) 광고 때문에 산 매출, (b) 광고 봤지만 어차피 샀을 매출, (c) 광고 보고 원래보다 조금 더 산 추가분. 광고가 진짜로 만든 건 (a)와 (c)의 추가분이고요. 광고 끄고 100만원 중 40만원만 빠졌다는 건, 큰 몫이 (b)와 (c)의 원래분, 광고 없었어도 어차피 들어왔을 매출이었다는 신호예요.
그러니까 이 글이 끌어낼 수 있는 가장 정직한 답은 "리포트의 100만원 전부가 광고 공은 아니다. 진짜 효과는 그보단 훨씬 작다." 정확한 숫자는 한 번 꺼본 걸로는 모르고요. 다섯 방법은 그 "얼마쯤"을 좁혀주는 도구예요.
이후에는 광고판에서 RCT가 왜 그렇게 어려운지, 그리고 실제로 우리가 돌리고 있는 광고 실험들이 왜 생각보다 많이 틀리는지 더 구체적으로 다룰까 생각 중이에요. 이번 글 내내 "RCT가 최선"이라고 여러 번 말했는데, 그 "최선"조차 광고판에선 왜 쉽게 깨지는지. 그 뒤는 "그래서 현실적으로 우리는 어떻게 하고 있고, 또 어떻게 해야 하는지"예요. Marketing Mix Modeling (MMM) 이나 Multi-Touch Attribution (MTA) 같은 걸로 업계가 어떻게 풀고 있는지도 하나씩 뜯어보고 싶고요.
마지막 한 줄. 반사실은 영원히 상상 속에 있어요. 그래도 상상의 질은 올릴 수 있어요. 이 글의 다섯 방법이 하는 일이 결국 그거예요, 더 그럴듯한 상상 하나 짓는 일.