Supermartech
Ad Measurement
광고 효과 측정 5편

룰만 바꿔도 승자가 바뀌어요

지난 글에서 피자 가게 사장님이 매체 네 곳 대시보드를 열어본 장면을 봤어요. AppLovin, TikTok, Pinterest, Snapchat 네 곳이 각자 "우리 광고 보고 앱 깐 사람 수"를 내려줬는데, 넷을 합치니 448건. 그런데 앱 스토어엔 180건만 깔려 있었어요. 실제 180건이 매체들 보고 과정에서 448건으로 2.5배 가까이 뻥튀기된 거죠. 한 사람이 네 매체에서 전부 광고를 본 뒤에 설치하면, 네 매체가 각자 "내 광고 덕분"이라고 같이 세는 바람에 설치 한 건이 여러 번 세어진 거였어요.

이 문제를 풀려고 광고 산업이 데려온 게 공통 심판이에요. 매체 바깥에 서서, 같은 룰로 중복을 걸러낸 하나의 숫자를 광고주와 매체 모두에게 돌려주는 전문 사업자죠. 업계에서는 MMP(Mobile Measurement Partner, 모바일 측정 파트너)라고 불러요. 심판들이 공통으로 쓰는 룰은 라스트터치예요.

지난 글에선 다른 룰들, 퍼스트터치/선형/시간 가중/포지션 기반/데이터 드리븐을 이름 정도만 짚고 넘어갔어요. 이번 글은 그 룰들을 하나씩 뜯어보면서 같은 설치 1건을 두고 룰에 따라 어떤 매체가 승자로 올라오는지 쉽게 풀어볼게요.

본격 투어 전에 이 글 내내 계속 쓸 용어 하나부터 정리할게요. 크레딧이에요. 유저 1명이 설치하기까지 광고를 월요일에 인스타그램에서 보고, 화요일에 유튜브에서 또 보고, 수요일에 구글 검색하다가 다시 보고, 그날 저녁에 앱을 깔았다고 쳐볼게요. 설치는 1건이에요. 이 설치 1건의 공을 월/화/수 광고에 어떤 비율로 쪼개 줄까, 이게 크레딧이에요. 크레딧 1은 "그 광고가 설치 1건을 통째로 가져감", 크레딧 0.2는 "설치 1건 중 0.2 몫을 가져감", 크레딧 0은 "그 광고는 설치에 기여한 게 없다고 처리"라는 뜻이에요. 어느 룰이든 그 유저가 본 모든 광고의 크레딧을 다 더하면 1(= 설치 1건)이 돼요. 글에선 가끔 %로도 쓸게요. 크레딧 0.2 = 20%, 크레딧 1 = 100%, 같은 숫자의 다른 표기예요.

설치 1건의 공을 광고들이 나눠 갖는다 인스타그램 월요일 유튜브 화요일 구글 검색 수요일 → 설치 1건 0.2 0.3 0.5 크레딧 합 = 0.2 + 0.3 + 0.5 = 1(= 설치 1건). 나누는 비율은 룰마다 달라요. 설치 1건의 공을 광고들이 나눠 갖는다 인스타그램 월요일 유튜브 화요일 구글 검색 수요일 → 설치 1건 0.2 0.3 0.5 크레딧 합 = 0.2 + 0.3 + 0.5 = 1(= 설치 1건) 나누는 비율은 룰마다 달라요

처음엔 설치 1건을 숫자로 쪼개는 게 좀 어색할 수 있어요. 유저 1명의 설치에 광고 다섯 개가 각 0.2씩 나눠 받으면, 광고 하나당 "설치 0.2건"이 기록돼요. 유저 1명이 설치한 건 1번이지만 광고 입장에선 "내 몫은 0.2건"으로 집계되는 거죠. 매체별 성과는 이렇게 쪼개진 0.2건들을 한 달치, 분기치 쌓아서 합산한 숫자예요(유저별 → 매체별 합산 흐름은 글 뒷부분 "유저 한 명에서 매체 성과로" 섹션에서 그림으로 다시 짚어요).

이 글에 깔릴 큰 메시지 하나만 미리 짚어둘게요. 어트리뷰션 룰은 숫자를 뽑는 계산 도구처럼 보이지만 실은 의사결정 레버예요. 왜 라스트터치가 지금 산업 표준이 됐는지, 다른 룰들은 각자 뭘 보려는 건지, 어느 상황에 어느 룰이 쓸 만한지 하나씩 보면서 "그래서 내 상황엔 어느 룰이 적합하지"에 답할 수 있는 감을 만들어 봐요.

룰은 "가정"이에요

용어 하나 짚어둘게요. 어트리뷰션 룰은 유저가 광고를 여러 번 보고 나서 전환(설치나 결제처럼 광고주가 성과로 보는 유저 행동)을 했을 때 각 광고에 크레딧을 얼마씩 나눠줄지 정하는 규칙이에요. 이 글에서는 특별히 다른 말이 없으면 전환 = 설치로 두고 볼게요. 광고를 딱 하나만 보고 전환했으면 그 광고가 크레딧 1을 가져가니 어떤 룰을 쓰든 결과가 같아요. 룰이 달라서 숫자가 달라지는 건 유저가 광고를 여러 개 거쳐서 전환했을 때예요.

여기에 깔아둬야 할 전제가 두 가지 있어요.

첫째, 유저가 본 광고 중 적어도 하나는 설치에 영향을 줬다. 광고가 전혀 영향 없었을 가능성은 이 글의 룰들이 고려하지 않아요.

둘째, 그 설치는 전부 광고들 덕분이다. 설치 한 건의 공을 광고들끼리 100% 나눠 가져요. "광고를 봤긴 봤는데 어차피 깔았을 사람" 몫은 따로 떼지 않고 전부 광고로 돌려요. 꽤 거친 가정이에요.

두 전제가 애초에 맞는지 되묻는 작업, 즉 "광고가 없었어도 유저가 설치했을까"를 따지는 질문은 이 글의 룰들로 답할 수 없어요. 어트리뷰션 룰은 두 전제를 전부 참으로 두고, 그 위에서 광고들끼리 공을 나누는 데만 집중해요. 두 전제를 되묻는 작업은 다음 글에서 따로 다룰 예정이고, 이름은 인크리멘털리티(증분 효과)예요. 이번 글은 그 질문을 옆에 치워두고 "두 전제가 참이라고 치면 광고들끼리 크레딧을 어떻게 나눌지"만 봐요.

그 두 전제 위에서 모든 어트리뷰션 룰은 결국 "어느 광고에 얼마만큼 크레딧을 줄까"에 대한 하나의 가정이에요. 룰이 다르다는 건 가정이 다르다는 뜻일 뿐, 어느 쪽이 "진짜"에 더 가까운지는 룰만 봐서는 알 수가 없어요. 예를 들어 라스트터치는 "마지막에 본 광고가 설치 결정에 가장 큰 영향을 줬다"는 가정, 퍼스트터치는 거꾸로 "맨 처음 유저에게 브랜드를 알린 광고가 흐름의 출발점이자 가장 큰 공"이라는 가정이에요. 두 룰이 같은 설치 한 건 안에서 승자를 완전히 다른 매체로 뽑지만, 어느 쪽이 더 "진실"인지는 어느 쪽도 증명할 수가 없어요.

그래서 룰 선택은 결국 비즈니스 결정이에요. 서비스마다 "우리 유저가 광고에 어떻게 반응해서 설치까지 가는지"에 대한 감각이 다르니까요. 유저가 광고를 보고 바로 결정하는 서비스에선 "설치 직전 광고가 결정적"이라는 가정이 그럴듯할 수 있고, 몇 달에 걸쳐 고민하는 서비스에선 "앞 광고도 충분히 크레딧을 나눠 받는 게 공정해 보일" 수 있어요. 어느 룰을 쓸지는 결국 "우리 유저가 설치를 결정할 때 어느 광고의 영향이 더 크다고 믿느냐"에 답하면서 정해져요.

지금부터 룰들을 하나씩 볼게요. 크게 세 묶음으로 나뉘어요. 싱글터치(한 광고가 다 가져감), 멀티터치 룰 베이스(여러 광고가 사람이 정한 비율로 나눠 가짐), 멀티터치 데이터 드리븐(여러 광고가 컴퓨터가 뽑은 비율로 나눠 가짐). "싱글터치, 멀티터치"는 정확히는 싱글터치 어트리뷰션, 멀티터치 어트리뷰션인데 글에선 줄여 쓸게요.

먼저 싱글터치. 유저가 설치 전에 광고를 여러 번 봤어도 그중 딱 하나에게 크레딧 1을 통째로 몰아주는 방식이에요. 광고 다섯 개가 각 0.2씩 나눠 받는 게 아니라, 어느 한 광고가 설치 1건을 통째로 가져가고 나머지는 크레딧 0. 라스트터치(마지막 광고가 다), 퍼스트터치(첫 광고가 다)가 여기 속해요.

그다음 멀티터치, 룰 베이스. 광고 여러 개가 크레딧을 나눠 가지되, 그 비율을 사람이 미리 정해놓는 방식. 선형, 시간 가중, 포지션 기반이 여기예요.

마지막 멀티터치, 데이터 드리븐. 광고 여러 개가 크레딧을 나눠 가지되, 그 비율을 사람이 정하지 않고 컴퓨터가 과거 유저 데이터를 보고 뽑아요. 섀플리 밸류, 마르코프 체인, 어텐션 기반이 여기예요.

이 글에서 볼 여덟 룰, 세 묶음 싱글터치 한 광고가 다 가져감 라스트터치 퍼스트터치 멀티터치, 룰 베이스 여러 광고가 사람이 정한 비율로 나눠 가짐 선형 시간 가중 포지션 기반 멀티터치, 데이터 드리븐 여러 광고가 컴퓨터가 뽑은 비율로 나눠 가짐 섀플리 밸류 마르코프 체인 어텐션 기반 이 글에서 볼 여덟 룰, 세 묶음 싱글터치 한 광고가 다 가져감 라스트터치 퍼스트터치 멀티터치, 룰 베이스 여러 광고가 사람이 정한 비율로 나눠 가짐 선형 시간 가중 포지션 기반 멀티터치, 데이터 드리븐 여러 광고가 컴퓨터가 뽑은 비율로 나눠 가짐 섀플리 밸류 마르코프 체인 어텐션 기반

한 광고가 다 가져가는 룰(싱글터치)

라스트터치(마지막 광고가 다), 퍼스트터치(첫 광고가 다)가 여기 속해요. 가장 간단해서 산업에서 지금까지 가장 많이 쓰이는 묶음이에요.

라스트터치, 마지막이 전부

유저가 설치 직전에 본 가장 최근 광고 하나가 설치의 방아쇠였다는 가정 위에 서 있는 룰이에요. 지난 글에서 공통 심판(MMP)의 기본 룰로 소개한 바로 그 방식이고요. 유저가 본 광고들 중 가장 최근(마지막)에 본 광고 하나만 꺼내서 크레딧 1을 몰아줘요. 월요일 소셜, 화요일 유튜브, 수요일 검색 순으로 보고 그날 설치했다면 수요일 검색이 크레딧 1을 다 가져가고 월요일/화요일은 크레딧 0. 지금 산업 표준이고 MMP 대시보드 기본값도 이 룰이에요.

설계상 마지막 광고에 다 몰아주기 때문에 앞 광고들이 쌓아둔 영향은 숫자에 전혀 반영되지 않아요. 유저가 일주일 전 유튜브에서 광고를 보고 며칠 전 인스타에서 또 봤어도 그 둘은 전부 크레딧 0, 설치 직전에 본 수요일 검색이 크레딧 1을 가져가는 식이에요. 룰의 결함이 아니라 의도된 설계인데, 그 설계가 우리 유저 행동과 맞느냐가 핵심이에요. 유저가 광고 보고 설치까지 하루 이틀 안에 가는 서비스에서는 이 가정이 꽤 잘 맞고, 몇 달에 걸쳐 설치를 고민하는 서비스에서는 앞 광고를 모두 0으로 처리하는 게 큰 왜곡이 될 수도 있어요.

퍼스트터치, 처음이 전부

유저가 본 광고들 중 시간상 가장 처음 본 하나에 크레딧 1을 몰아주는 룰이에요. 월요일 소셜 / 화요일 유튜브 / 수요일 검색이면 월요일 소셜이 크레딧 1을 다 가져가고 나머지는 크레딧 0. 라스트터치를 시간축으로 완전히 뒤집은 룰이죠. "처음 유저에게 브랜드를 알린 광고가 설치 결정의 가장 큰 공"이라는 가정에서 출발해요.

첫 광고 외의 이후 터치는 전부 크레딧 0으로 깎이는 설계라, 리타게팅이나 퍼포먼스 매체가 과소평가되기 쉬워요. 유저를 브랜드로 처음 데려온 첫 광고의 역할이 가장 무겁다고 보는 쪽에서 써요.

싱글터치, 거친 룰이 산업에서 살아남은 이유

라스트터치든 퍼스트터치든 "그 광고 하나만 100%, 나머지는 영향 0"이라는 가정은 액면으로만 보면 좀 어색해요. 유저가 설치까지 거쳐온 여러 광고가 티끌만큼이라도 뭔가 작용했다고 보는 게 더 자연스럽잖아요. 뉴스 페이지 옆에 스쳐간 브랜딩 배너, 피드 내리면서 반쯤 지나친 영상이 무의식중에 브랜드 로고를 익숙하게 만들었을 수도 있고요.

그럼에도 싱글터치가 지금까지 산업 표준으로 살아남은 이유는, "완벽한 숫자"를 뽑으려 한 게 아니라 "모두가 동의할 수 있는 단순한 룰 하나로 집계하자"는 선택이었기 때문이에요. 라스트터치가 그 선택지를 차지했고, 산업 전체가 그걸 공식 숫자로 삼으면서 심판(MMP) 체계가 돌아가게 됐어요. 다른 룰들은 라스트터치 자리를 밀어내려는 게 아니라, 라스트터치가 내려주는 공식 숫자 옆에 "다른 각도로 하나 더"를 보여주는 보조 지표로 쓰여요.

같은 유저, 다른 판정 유저가 본 광고 월 소셜 첫 광고 화 유튜브 중간 광고 수 검색 마지막 광고 → 설치 라스트터치의 판정 수요일 검색이 100% 검색 1.0 (월/화 광고는 크레딧 0) 퍼스트터치의 판정 월요일 소셜이 100% 소셜 1.0 (화/수 광고는 크레딧 0) 같은 유저, 다른 판정 유저가 본 광고 월 소셜 첫 광고 화 유튜브 중간 광고 수 검색 마지막 광고 → 설치 라스트터치의 판정 수요일 검색이 100% 검색 1.0 (월/화 광고는 크레딧 0) 퍼스트터치의 판정 월요일 소셜이 100% 소셜 1.0 (화/수 광고는 크레딧 0)

같은 유저, 같은 세 광고. 룰 하나만 바꿨는데 "이 설치의 승자"가 완전히 다른 매체가 돼요. 광고주 입장에선 "어느 매체에 돈을 더 쓸까"가 룰 선택에 따라 뒤집히는 거죠.

여러 광고가 크레딧을 나눠 가지는 룰(멀티터치, 룰 베이스)

싱글터치의 공통된 아쉬움은 "광고 하나만 챙기는 게 좀 야박하다"는 거예요. 유저가 설치 전에 광고 다섯 개를 봤는데 그중 하나만 크레딧 1을 가져가면 나머지 네 개 광고의 노출은 아예 성과 집계에 안 들어오잖아요. 그래서 광고 여러 개가 크레딧을 나눠 가지는 룰이 등장해요. 이걸 멀티터치 어트리뷰션(Multi-Touch Attribution), 줄여서 MTA라고 불러요.

이 묶음은 "유저가 본 광고들한테 이런 비율로 크레딧을 주자"라는 분배 룰을 사람이 미리 정해놓는 쪽이에요. 세 가지가 가장 흔해요.

선형, 모두 똑같이

유저가 본 광고 전부가 같은 비율로 크레딧을 받아요. 다섯 번 봤으면 각자 20%, 세 번 봤으면 각자 약 33%. 다른 룰들이 "마지막이 중요" / "처음이 중요" 같은 방향성을 적극적으로 걸고 있다면, 선형은 방향성을 아예 안 걸고 모두 똑같이 분배하는 쪽이에요. "어느 광고가 더 중요한지 미리 재지 않겠다"는 중립 선언에 가깝죠. 어떤 쪽에선 "브랜드를 처음 알린 광고"와 "설치 직전 리타게팅 광고"가 같은 비율을 받는 게 공정해 보이고, 어떤 쪽에선 "그 둘의 영향이 같을 리가 없다"는 반론이 나올 수 있어요. 룰의 가정이 어느 쪽에 더 그럴듯한지는 서비스마다 다른 판단이에요.

어느 매체가 유저 여정에 조금이라도 끼어 있었는지를 중립적으로 뽑고 싶을 때 써요.

시간 가중, 가까울수록 크게

설치 시점에 가까운 광고일수록 더 큰 비율을 받는 룰이에요(영어로는 time decay). 유저가 설치까지 광고 다섯 개를 시간 순서로(첫 번째 → 마지막) 봤다면 각각 1%, 4%, 10%, 25%, 60%처럼 최근으로 올수록 급격하게 커지는 분배(숫자는 예시).

"얼마나 가까울수록 얼마나 커야 하는지" 구체 비율은 결국 서비스마다 결정할 몫이에요. 실무에서 흔히 쓰는 대표적인 룰이 하나 있긴 한데("7일 지나면 비중이 반으로 줄어든다" 식), 숫자 자체보다는 "설치에 가까울수록 더 큰 비중"이라는 큰 방향만 잡아두면 충분해요.

라스트터치는 "마지막이 1, 앞은 전부 0"인 극단적인 분배, 시간 가중은 그 모양을 부드럽게 다듬은 쪽이에요. 마지막이 가장 크지만 앞 광고도 작게나마 크레딧을 받아요. 다만 "가까울수록 중요"가 늘 참인 건 아니에요. 몇 달 전 유튜브에서 본 브랜딩 배너가 사실은 유저 마음을 이미 돌려놨다고 해볼게요. 그 뒤에 매체 알고리즘이 "이 유저 반응 있네"라고 판단해 리타게팅 광고를 계속 쏘고, 설치 직전에 그 리타게팅이 마지막 광고로 찍혀요. 시간 가중은 설치 직전 리타게팅에 가장 큰 크레딧을 몰아주지만, 사실 유저를 설득한 건 몇 달 전 유튜브 배너예요. 시간 가중은 그 앞 광고의 역할을 작게 보게 돼요.

라스트터치를 좀 부드럽게 쓰고 싶을 때 자주 써요.

포지션 기반, 양끝 크고 가운데 작게

유저를 처음 끌어온 광고와 마지막에 설치까지 끌어온 광고, 양쪽이 가장 중요하고 가운데 광고들은 보조라는 가정이에요.

가장 흔한 분배는 첫 광고 40%, 마지막 광고 40%, 가운데 광고들이 나머지 20%를 나눠 가지는 식이에요. 광고 3개면 첫 40% / 가운데 1개 20% / 마지막 40%, 광고 5개면 첫 40% / 가운데 3개가 20%를 3등분해서 각 약 6.7% / 마지막 40%. 그래프로 그리면 양끝이 높고 가운데가 낮은 U자 모양이라서 "U-shape 어트리뷰션"이라고도 불러요.

"양끝이 중요하다"는 전제는 그럴듯해 보이지만 40/20/40(첫/가운데/마지막)이라는 숫자 자체는 정해진 규칙이 아니라 흔히 쓰는 관행이에요. 35/30/35든 45/10/45든 같은 논리로 고를 수 있어요. 결국 내 서비스에 맞게 조정하는 쪽이고, 핵심은 "처음 알린 자리"와 "마지막 결정하는 자리" 둘 다 보상한다는 가정을 깔고 간다는 거예요.

룰 베이스 세 가지, 크레딧 분배 차이 선형 모두 똑같이 20% 각 20% 첫 광고 → 마지막 광고 시간 가중 가까울수록 큼 1% 4% 10% 25% 60% 첫 광고 → 마지막 광고 포지션 기반(U) 양끝 크고 중간 작게 40% 각 6.7% 40% 첫 광고 → 마지막 광고 룰 베이스 세 가지, 크레딧 분배 차이 선형 모두 똑같이 20% 각 20% 첫 광고 → 마지막 광고 시간 가중 가까울수록 큼 1% 4% 10% 25% 60% 첫 광고 → 마지막 광고 포지션 기반(U) 양끝 크고 중간 작게 40% 40% 각 6.7% 첫 광고 → 마지막 광고

세 룰 모두 "광고 n개면 이런 비율로 나눠라"를 사람이 미리 정해놓은 쪽이에요. 각자의 가정이 명확하고 간단해요.

문제는 그 가정 중 어느 쪽이 "객관적 진실"인지를 증명할 방법이 없다는 거예요. "선형이 맞다"고 확정 지으려면 "모든 광고가 똑같이 중요하다"가 우리 캠페인에서 참이어야 하는데, 그걸 데이터로 입증할 길이 없어요. 감각으로 "우리 서비스엔 이게 더 그럴듯하다"는 고를 수 있지만, "이게 진짜 맞다"는 확정은 못 짓는 거예요. 그래서 다음 묶음이 등장해요. 비율을 사람이 정하지 말고, 과거 유저들이 실제로 어떤 광고를 보고 설치했는지 그 패턴을 컴퓨터한테 통째로 보여준 뒤, 비율을 알아서 뽑게 하자는 접근이에요.

컴퓨터가 비율을 정하는 룰(멀티터치, 데이터 드리븐)

이 묶음은 사람이 아니라 컴퓨터가 과거 데이터를 보고 비율을 뽑아내는 쪽이에요. 룰 베이스보다 돌리기는 복잡하지만, "우리 앱에서 실제로 유저들이 어떤 광고 조합을 거쳐 설치했는지"라는 실제 데이터를 반영한다는 차이가 있어요. 다만 그 숫자도 결국 "과거 우리 데이터에 비추어 보면 이렇다"는 전제 안에서만 유효해요. "더 많은 데이터를 쓴다 = 진실에 더 가깝다"는 뜻은 아니에요.

세 가지가 가장 많이 나와요. 섀플리 밸류, 마르코프 체인, 2017년 이후 뜨는 어텐션 기반 방식. 하나씩 자세히 볼게요.

세 룰 안으로 들어가기 전에, 지금까지 본 룰 베이스와 이 세 룰이 뭐가 다른지부터 한 장으로 짚고 가요. 압축하면 "비율을 누가 정하나" 한 질문이에요. 룰 베이스는 사람이 비율을 손으로 정하고 끝. 데이터 드리븐은 과거 데이터를 보고 컴퓨터가 매번 비율을 뽑아줘요.

비율을 누가 정하나 룰 베이스 묶음 👤 사람 비율 지정 (예: 40/20/40) 사람이 미리 정하고 끝 데이터 드리븐 묶음 💾 과거 데이터 컴퓨터 계산 → 비율 추출 컴퓨터가 매번 데이터 돌려서 비율 뽑음 VS 비율을 누가 정하나 룰 베이스 묶음 👤 사람 비율 지정 (예: 40/20/40) 사람이 미리 정하고 끝 VS 데이터 드리븐 묶음 💾 과거 데이터 컴퓨터 계산 → 비율 추출 컴퓨터가 매번 데이터 돌려서 비율 뽑음

세 룰 안에서도 결이 또 갈려요.

섀플리와 마르코프는 사람이 글로 쓸 수 있는 명시적 레시피를 짜요. "그 광고가 빠졌을 때 설치율이 얼마나 떨어졌는지를 평균 내라" 같은 한 줄짜리 규칙이에요. 그 규칙에 데이터를 집어넣으면 숫자가 나오고, "왜 이 숫자가 나왔나"를 사람이 수식으로 되짚을 수 있어요.

어텐션은 달라요. 사람이 주는 건 "각 광고에 중요도 숫자를 매긴다"는 방향 하나뿐. 그 숫자를 어떻게 매길지는 모델이 과거 수십만 건 데이터(유저가 본 광고 기록과 설치/비설치)를 보며 스스로 익혀요. 그래서 결과를 봐도 "왜 이 광고가 더 중요했는지"를 사람이 수식으로 되짚기가 어려워요.

섀플리 밸류, 빠졌을 때 vs 있을 때 차이

어떤 광고의 크레딧을 "그 광고가 없었더라면 설치율이 얼마나 떨어졌을까"로 재는 방식이에요. 단 한 번만 재는 게 아니라, 그 광고가 포함된 모든 광고 조합 각각에서 "있을 때 vs 없을 때" 차이를 다 재서 평균 내요. 아래에서 구체적인 예시로 설명할게요.

섀플리 밸류(Shapley value)는 1953년 수학자 로이드 섀플리(Lloyd Shapley)가 게임이론에서 제안한 개념이에요. 원래는 "팀 프로젝트에서 각 팀원에게 상금을 공정하게 나누는 법"에 답하려는 아이디어였어요.

비유, 세 명이 한 팀 프로젝트

A, B, C 셋이 팀 프로젝트로 100만원 상금을 받았다고 쳐볼게요. 셋이 공정하게 나눠 가지려면 어떻게 할까요?

"A가 얼마나 공을 세웠나"를 재보고 싶은데, A는 혼자서도 뭔가 해낼 수 있고, B랑 둘이 짝지어 하면 더 큰 걸 해낼 수도 있고, 셋이 다 모이면 또 다르게 해낼 수도 있잖아요. "A 혼자일 때 성과" 하나만 봐서는 B/C와 함께 있을 때 A가 추가로 얼마나 보태는지 알 수가 없어요. 그래서 A가 들어갈 수 있는 팀 조합을 전부 생각하고, 각각에서 "A 있을 때 성과"에서 "같은 조합에서 A만 뺀 성과"를 빼서 평균을 내요. 아래 숫자로 바로 따라가 볼게요.

A가 들어갈 수 있는 팀 조합은 네 개예요: A 혼자 / A+B / A+C / A+B+C. A는 무조건 들어 있고, 나머지 B와 C가 각각 "있다 / 없다" 둘 중 하나씩 선택되니까 2 × 2 = 4 조합. 네 조합 각각에서 "같은 팀에서 A만 뺀 조합"과 성과를 비교해요.

예시 숫자로 봐요. 과거 팀 프로젝트 기록을 봤더니 각 조합이 받았던 평균 상금이 이렇게 나왔다고 쳐볼게요.

팀 조합 받은 상금
아무도 안 함 0만원
A 혼자 10만원
B 혼자 20만원
C 혼자 30만원
A + B 40만원
A + C 50만원
B + C 70만원
A + B + C 100만원

A의 몫 구하기. A가 들어간 조합 네 개 각각에서 "A 있는 쪽 상금"에서 "A 뺀 쪽 상금"을 빼면 돼요.

A가 들어간 조합 그 조합의 상금 A만 뺀 조합 뺀 조합의 상금 A가 보탠 폭
A 혼자 10만원 아무도 없음 0만원 +10만원
A + B 40만원 B 혼자 20만원 +20만원
A + C 50만원 C 혼자 30만원 +20만원
A + B + C 100만원 B + C 70만원 +30만원

A가 보탠 폭 네 개의 평균 = (10 + 20 + 20 + 30) ÷ 4 = 20만원. 이게 A의 공정한 몫이에요. B와 C도 각자 자기가 들어간 네 조합을 같은 방식으로 돌리면 B = 35만원, C = 45만원(세 명 합치면 100만원).

이 "모든 조합에서 빠졌을 때 vs 있을 때 차이를 다 재서 평균 낸다"가 섀플리의 핵심이에요.

광고에 그대로 적용

광고가 팀원, 설치율이 팀 성과예요. 각 광고의 크레딧은 "그 광고가 들어갈 수 있는 모든 광고 조합에서, 그 광고가 조합에서 빠지면 설치율이 얼마나 떨어지는지"의 평균이에요.

숫자 예시. 과거 유저 데이터를 뒤져서, 유저들이 검색/디스플레이/이메일 세 광고를 어떤 조합으로 봤는지에 따라 설치율이 어떻게 나왔는지 뽑았어요(가상 숫자). 표에서 "설치율"은 "그 조합을 본 유저 100명 중 몇 명이 설치했나"라는 뜻이에요. 아래에서 %p(퍼센트포인트)라는 단위가 나오는데, 설치율 10%에서 20%가 되면 그 올라간 폭 "10"을 가리켜요.

유저가 본 광고 조합 설치율
아무것도 안 봄 0%(기준선)
검색만 10%
디스플레이만 5%
이메일만 15%
검색 + 디스플레이 20%
검색 + 이메일 30%
디스플레이 + 이메일 20%
검색 + 디스플레이 + 이메일 40%

위 표에서 검색이 포함된 조합은 네 개. 그 네 조합 각각을 "같은 조합에서 검색만 뺀" 쪽과 짝지어서 비교.

검색이 포함된 조합 그 조합의 설치율 검색만 뺀 조합 뺀 조합의 설치율 검색이 보탠 폭
검색 혼자 10% 아무것도 안 봄 0% +10%p
검색 + 디스플레이 20% 디스플레이만 5% +15%p
검색 + 이메일 30% 이메일만 15% +15%p
검색 + 디스플레이 + 이메일 40% 디스플레이 + 이메일 20% +20%p

네 값의 평균(10 + 15 + 15 + 20) ÷ 4 = 15%p가 검색의 몫. 디스플레이와 이메일도 같은 방식으로 각각 7.5%p, 17.5%p가 나와요.

세 숫자 합이 15 + 7.5 + 17.5 = 40%p로, 셋 다 본 유저의 설치율 40%와 딱 맞아떨어져요. 여기서 "설치율 40%"는 위 표 맨 아래 줄 "검색 + 디스플레이 + 이메일 셋 다 본 유저 100명 중 40명이 설치했다"는 뜻이에요(앱 전체 설치율이 아니라, 셋 다 본 유저 그룹의 설치율이라는 점이 핵심). 즉 각 광고가 "끌어올린 폭"을 다 더하면, 세 광고 전부 본 유저 그룹의 설치율과 정확히 같아진다는 성질이 있어요. 섀플리 공식이 그렇게 떨어지도록 수학적으로 설계된 룰이거든요.

매체끼리 "전체 중 몇 %를 책임지나"로 비교하려면 세 숫자의 합을 1(= 100%)로 맞추는 게 편해요. 그래서 위에서 계산한 각 매체 몫(%p)을 전체 설치율(40%p)로 나눠서 매체별 분배 비율로 환산해요. 검색 15 ÷ 40 = 0.375, 디스플레이 7.5 ÷ 40 = 0.1875, 이메일 17.5 ÷ 40 = 0.4375. 세 비율의 합 = 1. 이게 섀플리가 뽑은 매체별 분배 비율이에요.

그럼 설치가 100건이면 어떻게 나누나?

섀플리는 유저 한 명의 광고 기록을 뜯어서 "이 유저 설치는 이렇게, 저 유저 설치는 저렇게" 식으로 돌지 않아요. 그 대신 과거 데이터 전체를 한 번 돌려서 매체별 분배 비율 한 세트(0.375 / 0.1875 / 0.4375)를 뽑아두고, 그 비율을 그 기간의 모든 설치에 그대로 곱해요. 설치 100건이면 검색 37.5건, 디스플레이 18.75건, 이메일 43.75건. 설치 1,000건이면 검색 375, 디스플레이 187.5, 이메일 437.5. 섀플리는 매체 단위에서 각 매체가 끌어올린 폭에 비례해 설치를 나눠주는 룰이에요.

섀플리 밸류, 설치 1건의 크레딧 분배 검색 0.375 (= 37.5%) 디스플레이 0.1875 (= 18.75%) 이메일 0.4375 (= 43.75%) 세 광고 크레딧 합 = 1(= 100%, 설치 1건을 통째로 나눔) 섀플리 밸류, 설치 1건의 크레딧 분배 검색 0.375 (= 37.5%) 디스플레이 0.1875 (= 18.75%) 이메일 0.4375 (= 43.75%) 세 광고 크레딧 합 = 1(= 100%, 설치 1건을 통째로 나눔)

구글 애널리틱스 4(GA4)의 "데이터 드리븐 어트리뷰션"도 같은 질문을 던져요. Google 공식 문서도 이걸 "이 광고가 없었다면 결과가 어떻게 됐을까"를 따져보는 접근이라고 설명하는데, 섀플리의 질문과 정확히 같아요.

문제는 광고 개수가 늘면 봐야 할 조합 수가 감당 안 될 만큼 빨리 커진다는 거예요. 광고 3개면 각 광고마다 "봤다 / 안 봤다" 두 상태 → 2 × 2 × 2 = 8가지 조합. 위 표 여덟 줄이 바로 이 여덟 조합이에요. 광고 10개면 2를 열 번 곱해서 1,024가지, 20개면 100만 가지가 훌쩍 넘어요. 광고가 한 개 늘어날 때마다 조합이 두 배씩 뛰거든요.

실제 커머스 앱에서는 유저 한 명이 설치까지 여러 매체에서 광고를 꽤 많이 보기도 해요. 광고가 20개만 돼도 조합이 100만 개를 넘어요. 그런데 섀플리를 돌리려면 조합 하나하나마다 "그 조합을 본 유저가 몇 % 설치했나"를 뽑아야 하거든요. 조합이 100만 개인데 유저가 100만 명이면 산술적으로 조합당 평균 1명. 그 1명이 설치했으면 설치율 100%, 안 했으면 0%. 조합마다 극단적인 숫자가 튀는 거라 통계적으로 신뢰할 수가 없어요. 현실로 가면 더 안 좋고요. 그 100만 조합 중 상당수는 아예 유저가 한 명도 없어서 설치율 자체를 계산할 길이 없어요.

그래서 실무에선 전수 돌리지 않고 대표 조합만 뽑아서 섀플리 공식을 돌리는 방식을 써요. 통계에서 흔히 쓰는 샘플링이에요. 광고 20개 케이스에서 조합 100만 개 전수가 아니라, 그중 랜덤하게 5만 개 조합만 골라서 섀플리 공식을 돌리면 계산량이 20배 가벼운데 결과는 전수와 거의 비슷하게 나와요. 이렇게 샘플링으로 돌려도 과거 유저 데이터가 수만~수십만 명치는 쌓여 있어야 하기 때문에, 섀플리는 큰 광고주나 대형 플랫폼 수준에서 돌리는 룰이에요.

마르코프 체인, 흐름도에서 매체 하나 뺐을 때

많은 유저가 광고를 보고 설치까지 가는 길을 하나의 흐름도로 합쳐 그린 뒤, 매체 하나를 흐름도에서 통째로 뺐을 때 전체 설치율이 얼마나 떨어지는지로 그 매체의 크레딧을 재는 룰이에요.

섀플리와 비슷하면서도 결이 달라요. "뭘 뺐을 때 얼마나 떨어지는지 본다"는 뼈대는 똑같은데, 어디서 빼는지가 달라요. 섀플리는 광고 조합(검색만 / 검색+디스플레이 / ...)에서 하나씩 뜯어보면서 평균을 뽑았고, 마르코프는 많은 유저의 설치 흐름을 한 장 흐름도에 합쳐 놓고 매체 하나를 지웠을 때 전체 설치율이 얼마나 떨어지나를 봐요. 여기서 "흐름도"는 유저가 어떤 순서로 광고를 거쳐 설치까지 갔는지를 네트워크 다이어그램으로 그린 그림이에요. 아래 1단계 그림이 바로 그 예시예요.

손으로 따라갈 수 있게 유저 100명 가상 예시로 단계별로 가볼게요.

1단계, 과거 유저 100명이 광고를 거쳐 설치한 흐름 집계

우리 앱에 광고를 보고 유입된 유저 100명이 있다고 해볼게요. 각 유저가 설치 전에 어떤 매체 광고를 거쳤는지 데이터가 쌓여 있어요. 유저 한 명 한 명 기록을 뒤져서 "어떤 매체 광고를 봤던 유저인가, 그중 설치까지 간 사람은 몇 명인가"를 집계하면 아래처럼 나왔다고 할게요.

(설명을 쉽게 하기 위한 가상 시나리오예요. 유저 한 명이 주로 한 매체 광고만 봤다고 가정했어요. 실제로는 유저가 여러 매체를 번갈아 거치는데 그 상황은 섹션 끝에서 다시 언급해요.)

  • 100명 중 50명은 검색 광고를 봤던 유저, 그중 9명이 설치, 41명은 안 함
  • 100명 중 30명은 디스플레이 광고를 봤던 유저, 그중 6명이 설치, 24명은 안 함
  • 100명 중 20명은 이메일 광고를 봤던 유저, 그중 5명이 설치, 15명은 안 함

전체 설치자 = 9 + 6 + 5 = 20명, 전체 설치율 20%. 아래 그림이 이 흐름을 한 장 흐름도로 요약한 거예요.

1단계, 유저 100명 흐름도(원본) 광고를 한 번이라도 본 유저 100명 기준, 설치자 20명(설치율 20%) 시작 100명 검색 50명 디스플레이 30명 이메일 20명 설치함 20명 설치 안 함 80명 50명 30명 20명 9 설치 6 설치 5 설치 왼쪽 화살표: 100명이 각 메인 매체로 흩어진 비율. 오른쪽 녹색: 각 매체에서 설치까지 간 사람 수 1단계, 유저 100명 흐름도(원본) 광고를 한 번이라도 본 유저 100명 기준, 설치자 20명(설치율 20%) 시작 100명 검색 50명 디스플레이 30명 이메일 20명 9명 설치 6명 설치 5명 설치 설치함 20명 설치 안 함 80명 위: 100명이 각 메인 매체로 흩어짐. 초록 선: 각 매체에서 설치까지 간 사람

위 흐름도 그림을 잠깐 짚고 갈게요. 왼쪽 "시작(100명)"은 어떤 매체든 광고를 한 번이라도 본 유저 100명을 기준으로 잡은 거예요. 광고를 아예 안 본 유저는 이 흐름도에 안 들어와요. 이 100명이 각자 본 광고에 따라 세 그룹으로 나뉘어요. 검색 그룹 50명, 디스플레이 그룹 30명, 이메일 그룹 20명. 각 그룹에서 설치한 사람 수(9명 / 6명 / 5명)가 오른쪽 "설치함(20명)"으로 모이고, 나머지는 "설치 안 함(80명)"으로 가요.

2단계, 검색 광고 그룹을 흐름도에서 지워본다

이제 실험. 검색을 흐름도에서 아예 지워봐요. 검색 그룹 50명은 "검색 광고를 봤던 유저"로 묶인 사람들. 검색이 사라지면 이 50명은 전부 "설치 안 함" 쪽으로 간다고 두는 거예요. 실제론 그중 일부가 다른 매체 광고를 거쳐 설치할 수도 있지만, 지금 시나리오에선 그 가능성은 빼고 봐요.

그러면 남는 설치자는 디스플레이 그룹 6명 + 이메일 그룹 5명 = 11명. 설치율이 20명/100명에서 11명/100명으로, 20%에서 11%로 떨어진 거예요. 떨어진 폭 9%p(= 20 − 11)가 검색의 몫이에요. 이걸 제거 효과(영어로는 removal effect)라고 불러요.

2단계, 검색을 흐름도에서 뺐을 때 설치자 20명 → 11명(−9명, 설치율 20% → 11%) 시작 100명 검색 디스플레이 30명 이메일 20명 설치함 11명 설치 안 함 89명 50명 끊김 30명 20명 6 설치 5 설치 검색 그룹 50명의 설치 경로가 끊김. 설치자 = 6 + 5 = 11명 2단계, 검색을 흐름도에서 뺐을 때 설치자 20명 → 11명 (−9명, 설치율 20% → 11%) 시작 100명 검색 50명 끊김 디스플레이 30명 이메일 20명 6명 설치 5명 설치 설치함 11명 설치 안 함 89명 검색 그룹 50명의 설치 경로가 끊김. 설치자 = 6 + 5 = 11명

3단계, 다른 매체도 똑같이 지워본다

디스플레이를 지워봐요. 디스플레이 그룹 30명이 설치 못 하게 되니까, 남은 설치자 = 검색 9명 + 이메일 5명 = 14명. 설치율 14%, 떨어진 폭 6명(6%p)이 디스플레이의 몫.

이메일을 지워봐요. 이메일 그룹 20명이 설치 못 하게 되니까, 남은 설치자 = 검색 9명 + 디스플레이 6명 = 15명. 설치율 15%, 떨어진 폭 5명(5%p)이 이메일의 몫.

표로 정리.

흐름도에서 뺀 매체 원래 설치자 남은 설치자 설치율 떨어진 폭(= 몫)
검색 20명 11명 20% → 11% 9명(9%p)
디스플레이 20명 14명 20% → 14% 6명(6%p)
이메일 20명 15명 20% → 15% 5명(5%p)

4단계, 매체별 분배 비율로 환산

세 매체의 떨어진 폭 합 9 + 6 + 5 = 20, 원래 설치자 수 20명과 딱 맞아요. 우연이 아니에요. 우리 시나리오는 한 유저가 딱 한 광고 그룹에만 속하는 구조라, 매체 하나를 지우면 그 그룹 설치자(9명/6명/5명)가 그대로 빠지거든요. 세 매체를 각각 지운 폭 합이 그래서 전체 설치자 수와 같아져요.

이걸 매체별 분배 비율로 환산하면 검색 9/20 = 0.45, 디스플레이 6/20 = 0.30, 이메일 5/20 = 0.25. 섀플리와 똑같이 매체별로 비율 한 묶음을 뽑은 거예요. 그 기간 설치가 100건이면 검색 45건, 디스플레이 30건, 이메일 25건이 매체별 성과로 반영돼요. 섀플리는 광고 조합에서 뺐고, 마르코프는 흐름도에서 뺐어요. "어디서 뺄지"는 다르지만, "빼서 비율 뽑고 매체별로 곱한다"는 뼈대는 같아요.

지금까지는 설명을 쉽게 하려고 "한 유저가 한 매체만 봤다"고 둔 시나리오였어요. 현실의 멀티터치는 한 유저가 검색 → 이메일 → 디스플레이 식으로 여러 매체를 번갈아 거치는 흐름이 더 많아요. 실제 마르코프 체인은 이 흐름까지 반영해요.

예를 들어 유저가 원래 검색 → 이메일 → 설치 흐름을 거쳤다 치면, 검색이 사라져도 이 유저가 이메일만으로 설치까지 갈 가능성이 어느 정도 남아 있잖아요. 마르코프는 그 "남은 설치 가능성"을 숫자로 계산에 녹여요. "검색 지우면 그 유저 100% 설치 안 함" 같은 극단적 가정 대신, 다른 매체 경로로 넘어가서 설치하는 비율까지 반영하는 거죠. R 패키지 ChannelAttribution 같은 공개 도구가 이런 계산을 자동으로 처리해줘요. 다만 아이디어는 그대로예요. 매체 하나 뺐을 때 설치율이 얼마나 떨어지는지를 재고, 그 폭을 매체별 크레딧으로 쓰는 것.

다만 마르코프에도 한계가 있어요. 매체 사이 이동은 반영하지만 같은 매체를 몇 번 봤는지는 거의 반영되지 않아요. 예를 들어 "소셜 광고를 세 번 보고 검색으로 넘어온 유저"와 "소셜을 딱 한 번 보고 검색으로 온 유저"가 마르코프 모델 안에선 똑같이 "소셜 → 검색 이동 한 번"으로 묶여요. 소셜 반복 노출이 결정에 큰 역할을 했어도 그 공이 숫자에 덜 담겨요.

그래도 마르코프는 흐름도로 시각화가 되고, 섀플리처럼 조합이 폭발하지 않아서 매체 수가 많아도 돌아가요. 데이터가 아주 많지 않아도 ChannelAttribution 같은 공개 패키지 하나로 분석팀이 바로 돌릴 수 있고요. 라스트터치가 놓치는 "매체별 끌어올림"을 흐름도로 보여주고 싶을 때 자주 써요.

어텐션(Attention) 기반, 어텐션 모델이 광고마다 중요도를 매김

비율을 사람이 미리 정하지도 않고(룰 베이스), 광고 조합마다 뺐을 때 효과를 재지도 않고(섀플리/마르코프), 과거 데이터로 훈련한 어텐션 모델이 설치 하나하나에 대해 "이 설치에서 어느 광고가 더 중요했는지"를 숫자로 찍어내는 방식이에요. 그 숫자가 각 광고의 크레딧이 돼요.

어텐션은 "모델이 주어진 입력 중에 어디에 집중할지를 스스로 뽑아내는 메커니즘"이에요. 지금 우리가 매일 쓰는 ChatGPT, Claude 같은 LLM(Large Language Model, 대규모 언어 모델)이 바로 이 어텐션을 근본 원리로 돌아가요.

ChatGPT는 어떻게 답을 만드나

ChatGPT한테 "어제 식당에서 피자를 시켰는데 너무 짰어, 한 번 더 가볼까?"라고 물으면 답을 만들어내잖아요. 이 질문 안에는 10개 단어가 있어요. ChatGPT가 답을 만들려면 질문에 들어 있는 단어마다 얼마나 비중 있게 참고할지를 내부적으로 정해야 해요. "짰어", "가볼까" 같은 단어는 핵심이니까 비중 크게, "어제", "한 번" 같은 단어는 참고만 하면 되니까 비중 작게. 이 "단어별 중요도 숫자"를 바탕으로 ChatGPT가 다음 답변을 만들어내요. 이 중요도 숫자 자체가 어텐션(attention, 한글로 "집중도")이에요.

여기서 핵심은 ChatGPT가 "짰어가 중요하다"를 사람이 미리 정해준 게 아니라는 거예요. 과거에 수조 개 문장을 학습하면서 "어떤 단어가 답을 결정하는 데 더 큰 영향을 주더라"라는 패턴을 스스로 익혔고, 새 질문이 들어올 때마다 그 익힌 패턴에 따라 "이번 문장에선 어디에 집중할지"를 다시 계산해요.

이 방식을 광고에 가져가기

ChatGPT한테 "문장 속 단어들"이 입력이었다면, 어텐션 기반 어트리뷰션에서는 "유저가 설치 전에 본 광고들"이 입력이에요. 어텐션 모델에게 유저가 본 광고 기록(월 소셜 → 화 검색 → 수 디스플레이)을 입력으로 넣으면, 어텐션이 세 광고 각각에 "이 설치에서 얼마나 중요했나"를 숫자로 찍어줘요. ChatGPT가 문장을 읽고 단어마다 중요도를 매기는 것과 똑같아요. 예를 들어 월 소셜 30%, 화 검색 50%, 수 디스플레이 20% 식으로 숫자가 나오고, 이 세 숫자가 그대로 각 광고의 크레딧이 돼요.

같은 원리, 다른 입력 ChatGPT(문장) 입력: "어제 식당에서 피자를 시켰는데 너무 짰어, 한 번 더 가볼까?" 어텐션이 매긴 중요도: 짰어 40%, 가볼까 35%, 식당 15%, 나머지 10% → 어텐션이 중요하다고 본 단어를 중심으로 답변 생성 어트리뷰션(광고) 입력: 월 소셜 → 화 검색 → 수 디스플레이 → 설치 어텐션이 매긴 중요도: 화 검색 50%, 월 소셜 30%, 수 디스플레이 20% → 이 중요도 숫자를 각 광고의 크레딧으로 씀 같은 원리, 다른 입력 ChatGPT(문장) 입력: "어제 식당에서 피자를 시켰는데 너무 짰어, 한 번 더 가볼까?" 어텐션이 매긴 중요도: 짰어 40%, 가볼까 35% 식당 15%, 나머지 10% → 어텐션이 중요하다고 본 단어를 중심으로 답변 생성 어트리뷰션(광고) 입력: 월 소셜 → 화 검색 → 수 디스플레이 → 설치 어텐션이 매긴 중요도: 화 검색 50% 월 소셜 30%, 수 디스플레이 20% → 이 중요도 숫자를 각 광고의 크레딧으로 씀

어텐션은 이 중요도를 어떻게 알아내나

그럼 어텐션 모델은 "월 소셜 30%, 화 검색 50%" 같은 숫자를 어떻게 얻을까요. 그 방식은 이래요. 과거 유저 수십만 명의 광고 기록 + 설치 결과를 모델에게 통째로 보여주면, 모델은 그 안에서 "어느 자리에 어느 광고가 있을 때 설치가 잘 터지더라"라는 패턴을 반복해서 봐요. 그렇게 본 패턴을 모델 내부에 숫자로 저장해 두는 게 학습이에요. 새 유저의 광고 기록이 들어오면 모델이 학습해둔 숫자를 바탕으로 "이번 유저의 월 소셜은 30%, 화 검색은 50% 정도 역할을 했다"라고 매기는 거예요. ChatGPT가 "짰어"를 중요한 단어로 매긴 것과 똑같은 구조, 입력만 "문장 속 단어들"에서 "유저가 본 광고들"로 바뀐 거예요.

엄밀히 말하면 어텐션도 수식 자체는 있어요. 다만 섀플리/마르코프는 수식에 데이터만 넣으면 숫자가 바로 나오는 쪽이에요. "조합마다 빠졌을 때 차이를 평균 낸다"나 "흐름도에서 매체 뺐을 때 설치율 변화" 같은 규칙에 유저 데이터를 대입하면 결과가 나오고, 그 과정을 사람이 종이와 펜으로 따라갈 수 있어요. 반면 어텐션은 수식 안에 "어느 광고가 더 중요하다"를 결정하는 내부 숫자들(수십억 개 모델 파라미터)이 들어 있고, 그 숫자들을 사람이 정해두는 게 아니라 과거 데이터를 보면서 모델이 조정해요. 그래서 같은 유저 기록을 넣어도 모델이 얼마나 학습됐냐에 따라 매번 다른 결과가 나와요. 수학 계산 자체는 기계적으로 따라갈 수 있지만, 수십억 개 내부 숫자가 서로 얽혀 돌아가서 "왜 이 광고가 더 중요하게 잡혔는지"를 사람 말로 풀어내기가 어려운 거예요. 광고 개수가 많아도 그대로 처리하고, 광고를 본 순서까지 반영해요. "월 소셜 → 화 검색"과 "화 검색 → 월 소셜"(순서만 바뀜)에 서로 다른 중요도 숫자가 나와요.

어텐션 메커니즘은 요즘 LLM, AI 에이전트 전반을 이해하려면 빠질 수 없는 기초라, 이후 토픽에서 제대로 다뤄볼게요. 이 글에서는 "어트리뷰션에 어텐션이 이렇게 쓰이는구나" 정도까지만 잡고 넘어가요.

어텐션이 뽑은 "집중도" = 각 광고의 크레딧 유저가 본 광고(모델 입력) 월 소셜 화 검색 수 디스플레이 → 설치 어텐션 모델 어텐션이 뽑은 "집중도"(= 각 광고의 크레딧) 월 소셜 30% 화 검색 50% 수 디스플레이 20% 같은 광고들이어도 어텐션 모델이 어디에 집중할지는 과거 데이터에서 학습된 결과예요. 어텐션이 뽑은 "집중도" = 각 광고의 크레딧 유저가 본 광고(모델 입력) 월 소셜 화 검색 수 디스플레이 → 설치 어텐션 모델 어텐션이 뽑은 "집중도"(= 각 광고의 크레딧) 월 소셜 30% 화 검색 50% 수 디스플레이 20% 같은 광고들이어도 어텐션 모델이 어디에 집중할지는 과거 데이터에서 학습된 결과예요.

공개된 상용 사례는 아직 많지 않아요. 가장 알려진 쪽이 LinkedIn이 2025년에 공개한 LiDDA(LinkedIn Data Driven Attribution). 공개 논문에 따르면 어텐션을 뼈대로 쓰는 모델이에요. 유저가 LinkedIn에서 본 광고 기록 + 플랫폼 전체 집계 성과 + 경기 상황 같은 외부 요인까지 전부 하나의 모델에 넣어서 광고별 중요도를 뽑아내는 식이에요.

한계는 두 가지. 첫째, 과거 데이터가 아주 많이 쌓여야 돌아가요. 수십만 명 이상 유저 기록이 없으면 모델이 학습할 재료 자체가 부족해요. 둘째, 앞에서 본 결과 해석 불가 문제가 실무에선 특히 크게 걸려요. 임원이 "왜 화요일 검색이 그렇게 커?"라고 물으면 "모델이 그렇게 매겼어요"가 사실상 전부예요. 섀플리와 마르코프는 "뺐을 때 이만큼 떨어졌으니까"라고 숫자를 풀어서 설명할 수 있는 데 비해, 어텐션은 그 설명 경로가 사실상 막혀 있어요.

여기서 섀플리/마르코프와 결정적으로 다른 점이 하나 있어요. 섀플리와 마르코프는 매체별로 한 묶음의 비율을 뽑아 그걸 모든 설치에 똑같이 곱했어요. 어텐션은 각 유저의 설치마다 서로 다른 중요도 숫자를 뽑아내요. 유저 A의 설치에선 "화 검색 50%", 유저 B의 설치에선 "월 소셜 60%"처럼, 각 설치마다 모델이 매번 다시 계산하는 거예요. 매체별 성과는 그 설치별 숫자들을 한 달치, 분기치 쌓아서 합산한 결과예요. 설치 100건이 쌓였다고 하면, 100개의 설치마다 나온 서로 다른 중요도 숫자들을 매체별로 쭉 모아서 "이번 달 검색은 총 몇 건, 소셜은 총 몇 건" 식으로 집계하는 거죠.

그래서 내 상황엔 뭘 쓰지

본질은 비즈니스 결정이에요. 글 앞에서 깔아둔 것처럼 "라스트터치 가정이 우리 유저 여정에 그럴듯한가" 같은 질문에 답하면서 고르는 거예요. 다만 그 결정을 가로막는 현실적 제약이 하나 있어요. 바로 데이터 규모. 섀플리 가정이 우리 서비스에 잘 맞는다 해도, 하루 설치가 수백 건이면 조합 수가 확보가 안 돼서 섀플리를 돌리는 것 자체가 불가능해요. 그래서 "어느 룰의 가정이 우리 서비스에 더 그럴듯한가"를 먼저 감 잡고, 그중 "현실적으로 돌릴 수 있는 룰"을 데이터 규모로 걸러내는 순서가 자연스러워요. 아래는 그 두 번째 단계(데이터 규모로 어느 룰까지 돌릴 수 있는지)에 대한 감이에요.

  • 하루 설치가 수백 건 이하인 경우. 데이터 드리븐 계열을 돌릴 데이터가 없어요. MMP가 자동으로 내려주는 라스트터치를 공식 숫자로 쓰면서, 필요에 따라 퍼스트터치, 선형, 시간 가중, 포지션 기반 중 서비스 성격에 맞는 룰 하나를 보조로 함께 보는 정도가 현실적이에요.
  • 하루 설치가 수천 건 수준인 경우. 위 룰 베이스 보조에 더해서 마르코프 체인까지 보조로 돌려볼 만해요. R 공개 패키지 ChannelAttribution 하나로 분석팀이 자체적으로 돌릴 수 있고요. 다만 매체를 3~4개로 좁혀서 돌려야 신뢰할 숫자가 나와요.
  • 하루 설치가 수만~수십만 건 이상인 경우. 대형 글로벌 광고주 수준의 보기 드문 규모예요. 여기부터 섀플리나 어텐션까지 돌릴 데이터가 돼요. 예전엔 전담 머신러닝 팀이 꼭 필요했는데, 요즘은 LLM이 분석팀의 코딩/데이터 정리/결과 해석을 상당 부분 거들어줘서 진입 장벽이 한참 낮아지고 있어요.

어떤 규모든 라스트터치가 MMP 기본 공식 숫자 자리에서 밀려날 가능성은 당분간 거의 없어요. 산업 전체가 "다 같은 룰 하나로 집계하자"는 체계 위에서 돌아가거든요. 다른 룰들은 그 공식 숫자 옆에서 "다른 각도로 하나 더 보는" 용도예요. 결정 자체가 뒤집히기보다, 결정에 쓰는 근거가 하나에서 둘, 셋으로 늘어나는 식이에요.

유저 한 명에서 매체 성과로

지금까지 본 룰은 결과물을 매체 레벨로 모으는 방식이 두 가지로 갈려요.

  • 유저 여정별로 쪼개서 쌓는 쪽, 라스트터치/퍼스트터치/선형/시간 가중/포지션 기반 + 어텐션. 유저 여정 하나씩(그 설치까지 본 광고 시퀀스)을 보고 광고별로 쪼갠 뒤, 수백~수만 건치를 매체 기준으로 합쳐요.
  • 매체별 비율 한 묶음을 뽑아 곱하는 쪽, 섀플리/마르코프. 유저별로 안 돌고 과거 데이터 전체에서 매체마다 비율을 하나씩(예: 검색 45%, 디스플레이 30%, 이메일 25%) 뽑아요. 그 비율을 전체 설치 수에 곱해서 매체별 몫을 계산해요(설치 100건이면 검색 45건, 디스플레이 30건, 이메일 25건).

둘 다 결과물이 모이는 곳은 같아요. "이번 달 검색 매체가 세운 설치 몇 건" 같은 매체 레벨 성과.

유저별 크레딧 분배 → 매체별 합산 유저별 크레딧(예시 숫자) 유저 A: 검색 0.5, 소셜 0.5 유저 B: 검색 1.0 유저 C: 소셜 0.3, 이메일 0.7 ... (수만 명) 합산 매체별 성과(합계) 검색: 1.5 설치 소셜: 0.8 설치 이메일: 0.7 설치 "매체 성과"는 결국 유저별 크레딧을 다 더한 결과 유저별 크레딧 분배 → 매체별 합산 유저별 크레딧(예시 숫자) 유저 A: 검색 0.5, 소셜 0.5 유저 B: 검색 1.0 유저 C: 소셜 0.3, 이메일 0.7 ... (수만 명) 합산 매체별 성과(합계) 검색: 1.5 설치 소셜: 0.8 설치 이메일: 0.7 설치 "매체 성과"는 결국 유저별 크레딧을 다 더한 결과

합산 결과에서 중요한 건 룰에 따라 매체별 성과 순위가 뒤바뀔 수 있다는 점이에요. 같은 기간에 라스트터치로 돌렸을 때 1위 매체와 섀플리로 돌렸을 때 1위 매체가 서로 달라질 수 있고, 그 1위 매체에 다음 분기 예산이 더 가요. 룰은 숫자 뽑는 도구처럼 보이지만 실무에선 예산 결정 레버로 작동해요.

어트리뷰션으로 못 푸는 질문들

여기까지 다룬 여덟 룰은 전부 "유저가 설치하기까지 본 광고들 사이에 크레딧을 어떻게 나눌지"라는 한 질문에 답해 왔어요. 근데 광고 측정엔 이 글에서 소개한 룰들로는 답하기 어려운 질문이 몇 가지 더 있어요. 다음 글들에서 하나씩 뜯어볼 주제라 여기선 이름만 짚어 둘게요.

광고가 진짜 원인이었나. 앞서 소개한 룰들은 "유저가 광고를 봤고 설치했다, 그러니 광고에 크레딧을 어떻게든 나눠주자"라는 가정에서 출발해요. 근데 유저가 광고를 보고 들어오긴 했어도, 그 광고가 설치에 별 영향을 안 줬을 수도 있잖아요. 예를 들어 친구 추천으로 이미 깔기로 마음먹은 유저가 앱 이름을 검색하다가 맨 위 검색 광고를 눌러 설치했다고 해볼게요. 라스트터치는 이 설치 1건을 검색 광고에 전부 줘요. 그런데 광고가 없었어도 이 유저는 바로 아래 검색 결과를 눌러 어차피 깔았을 거예요. 광고는 사실 크레딧을 받을 자격이 없었던 셈이죠. 넓게 보면 이 질문도 어트리뷰션의 한 갈래로 볼 수 있지만, 접근 자체가 이 글의 룰들과 많이 달라서 따로 묶여요. 이름이 인크리멘털리티(incrementality, 증분 효과, 쉽게 말해 "광고 덕분에 추가로 생긴 설치가 얼마인지")고, 다음 글에서 자세히 다룰게요.

유저 단위 추적이 안 되는 매체 + 그게 점점 넓어지는 환경. 앞서 소개한 룰들은 "어떤 유저가 어떤 광고를 봤는지"가 데이터로 남아 있어야 돌아가요. 그런데 추적이 원래 안 되는 매체(TV, 옥외 광고)가 있고, 거기에 iOS ATT(App Tracking Transparency, 앱 추적 투명성, 2021년 Apple 도입) 이후로는 iPhone에서 "인스타그램에서 이 광고를 본 사람"과 "앱을 설치한 사람"이 같은 사람인지 확인하는 것 자체가 어려워졌어요. 유저가 추적을 허용하지 않으면 둘을 이어줄 단서가 사라지거든요. 두 상황 다 "유저 단위로는 못 재는데 매체 성과는 알아야 한다"는 같은 문제로 모이고, 두 가지 접근이 자주 같이 언급돼요. MMM(Marketing Mix Modeling, 마케팅 믹스 모델링, 매출-지출 집계로 매체 효과 추정)과 iOS 전용 대안 체계인 SKAN(SKAdNetwork, 설치가 일어나면 Apple이 "이 광고에서 설치가 1건 나왔다"는 신호만 매체에 보내주고, 누가 깔았는지는 알려주지 않는 체계. 2018년 도입)과 그 후속으로 2024년 발표된 AdAttributionKit(SKAN의 기본 기능에 리타게팅 측정까지 추가해서 확장한 체계). 다음 글들에서 차례로 다룰게요.

마무리

같은 데이터, 다른 결정 같은 데이터 → 설치 라스트터치 예산 검색 소셜 ROI A 다른 룰 예산 검색 소셜 ROI B ≠ 룰을 바꾸면, 예산도 ROI도 바뀐다 같은 데이터, 다른 결정 같은 데이터 → 설치 라스트터치 예산 검색 소셜 ROI A 다른 룰 예산 검색 소셜 ROI B ≠ 룰을 바꾸면, 예산도 ROI도 바뀐다

실무에서 할 수 있는 건 "어느 룰이 맞다"가 아니라 "지금 내 비즈니스 질문에 어떤 룰이 가장 답하기 좋은가"를 고르는 쪽이에요. 매체 정산은 산업 표준인 라스트터치로 두되, 신규 유저 획득 평가는 퍼스트터치로 한 번 다시 돌려보기. 공식 지표는 라스트터치, 내부 분석은 섀플리나 마르코프로 교차 검증하기. 숫자 옆에 다른 룰 숫자를 하나 더 두고 비교해 보는 건 각자 할 수 있는 영역이에요.

이 선택을 잘하려면 하나 짚어둘 게 있어요. "데이터 드리븐"이라고 이름이 멋지거나 더 복잡한 계산이 들어간다고 해서 자동으로 더 나은 선택이 되는 건 아니에요. 중요한 건 내 서비스에 맞는 룰을 고르는 쪽이에요. 잘 고른다는 건 그 숫자로 다음 마케팅 의사결정을 더 정확하게 내려서, 결과적으로 광고 효율을 끌어올리고 비즈니스 ROI(Return On Investment, 투자 대비 수익)를 뽑아낸다는 뜻이에요.

그리고 룰을 잘 고르는 것만큼, 나온 숫자를 그대로 믿지 않고 읽어내는 것도 중요해요. 예를 들어 라스트터치에서 검색 광고가 1위로 나왔다고 해볼게요. 그런데 그 설치 중 상당수는 유튜브 광고를 보고 이미 깔기로 마음먹은 유저가 앱 이름을 검색하다 맨 위 검색 광고를 누른 것일 수 있어요. 유저를 데려온 건 유튜브인데, 크레딧은 검색이 가져간 거죠. 라스트터치 리포트에는 "검색 광고 설치 몇 건"만 찍히고, 그 유저가 그 전에 유튜브 광고를 봤는지는 안 나와요. 하지만 "유튜브 광고를 껐더니 검색 설치도 같이 줄었다"는 걸 직접 겪어본 담당자라면 검색 1위라는 숫자를 그대로 믿지 않아요. 결국 리포트 숫자에 이런 경험을 겹쳐 봐야 해요. 그래야 "검색이 1위니까 검색 예산을 늘리자"로 바로 가지 않고, 유튜브 예산부터 지켜야 하는 건 아닌지 한 번 더 따져볼 수 있어요. 이런 판단이 쌓이다 보면, 우리 서비스에는 어떤 룰을 지표로 쓰는 게 맞는지도 점점 알게 돼요.