Meta MMM Robyn Walkthrough 06 - 로빈 모델 원페이저 해석 Part 2
원페이저 해석을 위해 설명할 내용이 많아서 글을 두 개로 나눴습니다. 지난 글에선 원페이저에 대한 개요와 종합적인 결론을 해석 했었습니다. 이번엔 각 상세 그래프들을 살펴보고 더 깊이 있는 의미를 파악해 보겠습니다.
특정 모델의 원페이저 해석 Part 2
지난 글에 이어서 3_204_6 모델에 대한 원페이저를 해석하는 과정이며, 8개의 개별 그래프들의 의미와 통찰을 살펴봅니다.
Response Decomposition Waterfall by Predictor
각 매체들이 얼마만큼 수익에 기여했는지를 보여줍니다. MMM을 사용한 광고주가 아마도 가장 보고 싶어했을 데이터일 것입니다. 특히 아래 차트는 광고주 입장에선 논쟁거리를, 모델러 입장에서는 실험과 개선의 여지를 남겨놓았습니다.
- Intercept와 competitor_sales_B가 전체 수익의 86.5%에 기여했습니다.
- paid marketing은 9.1% 수준의 기여도를 보입니다.
Intercept는 회귀 모델에서 '절편'을 말합니다. 다른 매체들에 $0를 투자했을 때 발생하는 예상 수익이라고 봐야 합니다. 즉 가만히 있어도 자연 발생하는 baseline 수익을 말합니다. competitor_sales_B는 인풋 데이터에 있었던 수치로 해당 기간 경쟁사 매출액입니다. 경쟁사가 비즈니스를 잘 하는 것이 우리 비즈니스의 수익도 견인한다는 결과로 해석할 수 있습니다.
광고주라면 여러가지 걱정과 우려를 제기할만한 결과입니다. 모델러라면 더 나은 결과를 도출하기 위한 방법을 생각해봐야 할 것입니다. 모델이 데이터에 대한 설명력이 떨어지는 것 인지를 검증하기 위해 다른 독립 변수들의 데이터를 찾아서 학습을 시켜봐야 하지 않을까 싶습니다.
Actual vs. Predicted Response
데이터셋에 있는 실제 수익, 그리고 학습을 거친 모델이 예측한 수익 둘 사이의 상관관계를 볼 수 있는 그래프입니다. 이 모델은 학습, 검증, 테스트 모든 구간에서 예측을 상당히 잘 했네요.
한 가지 주목할 것은, 어떤 특정 구간에서 실제와 모델의 격차가 크다면, 모델이 그 시기의 데이터를 잘 설명하지 못한다라고 볼 수 있다는 것입니다. 그래서 그 시기가 언제이고 어떤 특별한 이벤트가 있었는지를 파악한다음, 그것을 잘 설명할 수 있는 데이터를 추가하는 것이 모델의 성능을 높일 수 있는 방법입니다.
Share of Total Spend, Effect & ROAS in Modeling Window
각 paid 매체별로 모델링된 effect와 ROAS를 볼 수 있는 그래프입니다. paid 만을 대상으로 하기에 마케팅 현업이 더 관심을 가지고 볼만한 수치입니다. effect는 이 매체가 기여한 수익에 대한 영향력을 의미합니다. 어떤 매체가 effect가 높다면 더 투자할만한 가치가 있다고 볼 수 있습니다.
In-cluster 2 (16 IDs) bootstrapped ROAS [95% CI & mean]
이 모델이 속한 클러스터에 있는 모든 모델들(이 예제에선 16개)을 대상으로 부트스트래핑을 적용해서 산출한 매체별 ROAS 분포와 평균값을 보여주는 차트입니다. 개인적으로 확인하는 재미가 있는 데이터였습니다.
가장 특이해보이는 facebook_S 매체 데이터만 볼까요? 이 클러스터에 있는 16개 모델이 예측한 이 매체의 ROAS 편차가 큽니다. 평균은 15인데 최소는 6.2 최대는 24로, 다른 매체들에 비해 구간이 넓게 분포되어있죠. 모델이 다른 매체들의 ROAS 예측은 작은 분포 안에서 하고 있는 것과 대조적입니다. 다른 매체들은 일관성 있는 예측 결과가 나오지만 facebook_S에 대해서는 그렇지 않습니다.
이는 여러가지로 해석할 수 있습니다.
- 입력된 facebook_S 데이터에 문제가 있을 가능성
- facebook_S라는 매체의 특성을 모델이 반영하지 못하고 있을 가능성
- facebook_S라는 매체의 근본적인 특성 자체가 이런 것일 가능성
제가 언젠가 링크드인에 한번 언급했던 것 처럼, MMM은 도메인 지식이 가장 중요합니다. 나와있는 데이터에 대해 가장 바람직한 해석, 그것이 무엇일지를 판단하는 것이 MMM에서 가장 어렵고 중요하고 핵심입니다. 이 판단을 내리기 위해서 필요한 단 하나가 비즈니스에 대한 도메인 지식입니다.
Geometric Adstock: Fixed Rate Over Time
마땅한 번역어가 없는 Adstock이란 단어를 이해해야만 이 데이터를 올바르게 해석할 수 있습니다. Adstock은 carryover와 사실상 동일한 의미입니다. 광고의 효과가 즉시 나타날 수도 있지만 이월되어 나타날 수도 있다는 것이 핵심입니다. 광고가 노출된 매체의 특성에 따라서 이 정도에 차이가 있고(결국 유저가 매체를 접하고 매체에 몰입하는 양상이 다르므로), 이번 로빈 튜토리얼에선 그 정도를 geometric 으로 계산하고 있습니다.
예를 들어 tv_S는 31.5%라는 수치를 보이고 있죠? 이는 tv_S가 한 주에 사용한 비용의 31.5%는 그 영향력이 다음 주로 이월되어 나타난다고 모델이 해석했음을 의미합니다. 반면 search_S는 0.6%네요. 이는 이 매체에 사용한 비용은 절대 다수가 해당 주차 내에 유저에게 직접적인 영향을 주며 0.6%만 이월됨음을 의미합니다.
모델 파라미터를 세팅했던 지난 글에서 아래와 같이 _thetas 파라미터를 설정했었습니다. 코드를 보면 tv_S_thetas = c(0.3, 0.8) 로 설정이 되어있죠. 이 의미는 'tv_S 매체는 30% ~ 80% 사이에서 이월율이 정해진다'입니다. 이 설정을 기반으로 이번 모델이 tv_S의 이월율을 31.5%로 정한 것입니다.
hyperparameters <- list(
facebook_S_alphas = c(0.5, 3),
facebook_S_gammas = c(0.3, 1),
facebook_S_thetas = c(0, 0.3),
print_S_alphas = c(0.5, 3),
print_S_gammas = c(0.3, 1),
print_S_thetas = c(0.1, 0.4),
tv_S_alphas = c(0.5, 3),
tv_S_gammas = c(0.3, 1),
tv_S_thetas = c(0.3, 0.8),
search_S_alphas = c(0.5, 3),
search_S_gammas = c(0.3, 1),
search_S_thetas = c(0, 0.3),
ooh_S_alphas = c(0.5, 3),
ooh_S_gammas = c(0.3, 1),
ooh_S_thetas = c(0.1, 0.4),
newsletter_alphas = c(0.5, 3),
newsletter_gammas = c(0.3, 1),
newsletter_thetas = c(0.1, 0.4),
train_size = c(0.5, 0.8)
)
위 세팅은 Meta의 튜토리얼이 정해준 대로 했었던 것인데요, 각 브랜드마다 내부적으로 각 매체의 이월효과 수준을 이 세팅과는 다르게 평가하고 있다면 다음 모델링에선 _thetas 값을 수정하고 결과를 확인하면 좋습니다. 도메인 지식이 얼마나 중요한지 다시 한번 강조하게 되네요.
Immediate vs. Carryover Response Percentage
그렇다면 그 이월효과라는 것이 유저가 만들어낸 response 중에서 어느 정도 비율을 차지하고 있는지도 봐야 하겠죠. 바로 다음 그래프가 보여주고 있습니다.
우선 데이터 자체만 보면 ooh_S 매체만 다른 양상을 보입니다. 이 매체가 만들어낸 수익 중 무려 68%가 이월효과에 의해 발생했다고 모델이 해석하고 있네요. 이게 좋은 걸까요 아닐까요? 이 데이터는 앞에서 본 매체별 이월효과 비율과 함께 봐야 하겠습니다.
- tv_S 이월효과와 이월효과가 기여수익에서 차지하는 비율 - 31.5% : 9%
- ooh_S의 이월효과와 이월효과가 기여수익에서 차지하는 비율 - 32.6% : 68%
두 매체의 이월효과 고정비는 매우 비슷하지만, 그 이월효과가 만들어내는 수익비는 엄청난 차이를 보입니다. 이런 특징이 있을 수 있다는 것을 아는 것 만으로도 도움이 될 것 같습니다. 그리고 이런 현상과 상관관계가 있을 수 있는 데이터가 그 다음 그래프에 있습니다.
Response Curves and Mean Spends by Channel
각 매체별로 응답 곡선과 평균 비용을 보여주는 그래프입니다. 이 두 데이터를 같이 표시하는 이유는 매체의 포화도, 많이 사용하는 말로는 saturation을 보여주기 위해서 입니다. 물에 소금을 넣으면서 녹이다보면 더 이상 소금이 용해되지 않고 물 속에서도 고체 상태를 유지하는 지점이 옵니다. 이 때 포화도가 상한에 도달한 것입니다.
매체에 예산을 배분하는 것에도 포화도 개념을 적용합니다. 매체 예산을 늘려나가다 보면 더 이상 ROAS에 긍정적인 영향을 주지 않는 않는 지점이 있을 것입니다. 매체 예산을 과대투자 하지 않으면서 매체로부터 얻는 수익을 극대화하는 optimal한 지점, 여기가 어디인지 알아내고 싶은 것이 광고주의 마음이죠. MMM의 궁극적인 목적이 '각 매체별 예산을 최적화 하는 것'임을 상기한다면 이 데이터가 주는 임팩트는 큽니다.
y 축은 수익, x 축은 매체 비용 입니다. 이 외에 몇 가지 짚어야 할 것은 다음과 같습니다.
- 각 라인 위에 점과 숫자가 있습니다. 이는 해당 매체의 주간 평균 지출을 말합니다.
- 점이 찍혀 있는 위치가 있죠. 그 위치, 그리고 라인의 '변곡점'이 생기는 위치 이 두 가지를 함께 봐야합니다.
- 라인 안쪽의 회색 음영은 이월효과가 영향을 준 부분입니다. 이전 그래프에서도 봤듯이 ooh_S의 이월효과가 워낙 컸죠. 다른 매체의 이월효과도 있는데 이 영역에 겹쳐버리는 바람에 그래프에 제대로 표시가 안되었을 것입니다.
위 2번에서 언급한 '변곡점'을 먼저 이야기 해보죠. 변곡점이란 그 라인의 추세가 달라지는 지점입니다. 로그 함수라면 갈수록 평평해지는 추세가 시작되는 곳, 지수 함수라면 갈수록 위로 솟구치는 추세가 시작되는 곳 모두 변곡점 입니다.
- 그래프를 보면 ooh_S 매체의 라인은 로그 함수 같이 위가 평평한 모양입니다. 평균적으로 78.1k를 지출하는데, 그 지점에서 얻는 수익은 약 100k 정도입니다. 만약 이 매체에 100k를 지출하면 100k ~ 110k 사이의 수익을 얻을 것으로 모델은 판단하고 있죠. 가성비가 안나오는 구간까지 예산을 쓰고 있다고 봐야합니다.
- 이번엔 tv_S의 라인을 보겠습니다. 지수 함수 모양입니다. 평균 23.9k를 매체비로 쓰는데 이 지점에서 얻는 수익은 20k에 못미칩니다. 예산을 50k로 늘리면 70k 정도 수익을 얻을 것으로 보이죠. 예산을 늘려야 한다는 것이 결론입니다.
- print_S를 볼까요? 라인 모양이 S자입니다. 초반엔 지수 함수 같다가 예산이 늘어나면서 로그 함수처럼 변합니다. 이런 식으로 로그 함수처럼 평평한 추세가 나타나는 변곡점부터 가성비가 떨어지는, 즉 포화도가 한계에 도달하는 지점으로 봐야 할 것입니다.
매체 지출 평균값이 위치한 지점이, 라인이 로그 함수 모양으로 변곡점이 나타나는 지점보다 뒤쪽이면 예산을 과대투자 하는 것이고 앞쪽이면 과소투자 하는 것으로 봐야 하겠습니다. 이 사이에 optimal point가 있겠죠.
한 가지 더, 앞의 Immediate vs. Carryover Response Percentage 그래프에서 ooh_S의 이월효과에게 기여된 수익이 유난히 많았는데요, 이것은 어쩌면 saturation을 초과한 과대투자의 결과로 나타난 현상일지 모른다는 생각이 듭니다. 이것은 가설이라서 더 검증을 해봐야 합니다.
Fitted vs. Residual
마지막 그래프는 모델의 잔차를 확인할 수 있는 그래프입니다. 잔차는 예측값과 실제값의 차이를 말합니다. 잔차가 0이라면 모델이 예측을 잘 한 것으로 볼 수 있습니다.
x축은 모델이 예측한 수익 값을 의미합니다. 0을 기준선으로 했을 때, 수익 값이 작은 구간에선 점들이 0과 가까운 곳에 분포하고 수익 2.5M 이상의 구간에선 점들과 기준선 사이의 거리가 길어지는 패턴이 보입니다. 그렇다고 하더라도 전반적으로 전 구간에서 잔차가 크지 않고 수평을 유지하고 있어서 모델의 예측이 안정적이라고 평가할 수 있습니다.
마치며 - 다음 단계
초기 모델의 원페이저 전체를 아주 자세하게 뜯어 봤습니다. 다음에 할 작업은 이 모델을 이용해서 마케팅 예산 할당을 해보는 것입니다.