추천 프로그램 평가의 주요 문제는 자가 선택의 내생성입니다. 높은 참여를 가진 사용자는 이미 더 높은 LTV를 가지고 있으며 친구를 자주 초대하여 채널의 높은 효율성에 대한 환상을 만듭니다. 정확한 평가를 위해 우리는 인과 추론 방법을 사용합니다: Propensity Score Matching (PSM)을 사용하여 관찰 가능한 특징에 대한 편향을 제거하거나, 무작위 도구(예: 배너 랜덤 노출)가 있는 경우 Instrumental Variables (IV)를 사용합니다.
초대 전송과 추천인 전환 사이의 시간 지연을 고려하기 위해 Survival Analysis (Kaplan-Meier 모델 또는 Cox 비례 위험 모델)을 사용합니다. 이는 사용자의 일부가 아직 생애 주기를 완료하지 않았을 때 왼쪽 절단(right-censoring)된 데이터 처리를 정밀하게 수행할 수 있습니다. LTV는 할인과 함께 유지율 곡선을 적분하거나 BTYD (Pareto/NBD) 방법으로 향후 거래를 예측하여 계산합니다.
맥락: 모바일 음식 배달 애플리케이션에서 양방향 보너스가 있는 추천 프로그램을 시작했습니다. 분기 후 Tableau 보고서에 따르면 추천 링크를 활성화한 사용자의 LTV는 플랫폼 평균보다 40% 더 높았습니다. 제품 관리자는 예산 확장을 요구했지만, 분석 팀은 차이가 프로그램이 아니라 슈퍼 사용자 기반의 특성에 의해 발생했다고 의심했습니다.
문제: 진정한 증분 효과를 참여도와 구분할 수 없었습니다. 그룹 비교를 위한 간단한 SQL 쿼리 적용은 혼란 요인(주문 빈도, 제품 내 시간)으로 인해 편향된 평가를 제공했습니다. 정확한 평가 없이 비즈니스는 부정적이거나 거의 제로인 마진으로 채널에 대해 과도한 비용을 지불할 위험이 있었습니다.
해결책 1: SQL을 통한 코호트 직접 비교
"초대한 사용자"(treatment)와 "초대하지 않은 사용자"(control) 코호트를 BigQuery에서 집계하여 ARPU 및 90일 차 유지율을 계산했습니다.
장점: 즉각적인 구현, 이해하기 쉬운 시각적 자료, 낮은 리소스 요구.
단점: 자가 선택 편향과 생존자 편향 비극적인 오류. 제품에 남을 계획이 있는 사용자는 초대 프로그램을 자주 사용합니다. 결과는 부풀려져 있어 의사결정에 적합하지 않습니다.
해결책 2: 역사적 데이터에 대한 Propensity Score Matching
Python (scikit-learn)에서 로지스틱 회귀 모델을 구축하여 pre-treatment 특성(계정 생성 연령, 주문 이력, 평균 청구서)에 기반하여 프로그램 참여 확률을 평가했습니다. 그런 다음 Nearest Neighbors를 적용하여 1:1 쌍 비교를 하고 비교 가능한 하위 그룹에서만 LTV를 비교했습니다.
장점: 관찰 가능한 변수에 대한 편향을 제거하고 실험 없이 회고적 데이터에서 작동합니다. ATT(평균 치료 효과가 치료된 경우)를 빠르게 얻을 수 있습니다.
단점: 외향성이나 사회적 자본과 같은 관찰되지 않는 특성을 제거하지 않습니다. 데이터가 불균형(초대한 사용자가 적을 경우)일 경우 일반적 지원(common support) 문제에 직면하고 샘플의 일부가 제외되어 파워가 감소합니다.
해결책 3: 도구 변수와 Survival Analysis
자연 실험을 발견했습니다: 50%의 사용자가 메인 화면에서 추천 프로그램 배너를 무작위로 보았고(도구 Z) 이는 참여 확률(X)에는 영향을 미쳤지만 LTV에는 직접적인 영향을 미치지 않았습니다(Y). Python에서 linearmodels 라이브러리를 사용하여 2SLS (Two-Stage Least Squares)를 통해 효과를 평가하고 LATE(지역 평균 치료 효과)를 얻었습니다. 지연을 고려하기 위해 Survival Analysis를 적용했습니다: 추천인의 첫 주문까지의 시간에 대한 위험 모델(hazard function)을 구축하고 각 시점의 전환 확률로 LTV를 조정했습니다.
장점: IV 방법은 관찰된 및 관찰되지 않는 혼란 요인을 모두 제거하여 인과 관계 평가를 제공합니다. 생존 분석은 불완전 데이터를 정확하게 처리하며 시간 동태를 모델링할 수 있습니다.
단점: 유효한 도구(관련성과 외생성)가 필요하며 이는 증명하기 어렵습니다. IV 평가의 통계적 파워가 감소하며(신뢰구간이 넓음) LATE의 해석은 ATE(평균 효과)와 다릅니다("compliers"만을 위한).
선택된 해결책:
혼합 접근법을 선택했습니다: IV 평가를 위한 배너 무작위화를 사용하여 순수 참여 효과를 평가한 후, 추천인의 전환 시점을 고려한 예상 LTV를 계산하기 위해 비선형 Survival Analysis (Cox 모델과 시간 변동 공변량)을 적용했습니다. 이는 프로그램의 효과를 자기 선택 효과와 분리하는 데 도움이 되었습니다.
결과:
진정한 증분 효과는 compliers 그룹에 대해 LTV에 +12%를 주었으며, 초기 보고서의 +40%와 같지 않았습니다. 지연 분석에 따르면 추천인의 85% 전환이 클릭 후 첫 14일 내에 발생하여 효율성 평가 기준이 90일에서 30일로 단축되었습니다. 비즈니스는 유닛 경제를 재조정하여 긴 유지 대기시간을 포기함으로써 CAC(고객 확보 비용)를 18% 줄였습니다.
질문 1: 추천 프로그램에서 SUTVA 가정(단위 간 개입 없음)을 어떻게 검증합니까? 초대인之间의 네트워크 효과가 존재하는 경우에는?
SUTVA는 사회적 원 내 초대 밀도가 전환 확률에 영향을 미칠 경우(예: 과포화 또는 바이럴 효과) 위반됩니다. 검증을 위해 클러스터링을 사용합니다: 사용자를 지리적 클러스터 또는 사회적 그래프를 기반으로 세분화하여 Graph Analysis (NetworkX)를 통해 진행합니다.
그런 다음 높은 및 낮은 추천링크 침투의 클러스터를 비교하여 Difference-in-Differences를 적용합니다. 밀도가 높은 클러스터에서 효과가 유의미하게 다른 경우(과포화로 인해 낮거나 사회적 증거로 인해 높음), SUTVA는 위반되고 그룹 간 상호 작용(spatial models)을 포함하는 모델을 사용하거나 분석을 제한된 сегмента로 해야 합니다.
질문 2: 사용자 중 일부가 아직 churn을 수행하지 않은 경우 채널의 정규 선형 회귀(OLS)를 사용하여 LTV를 예측할 수 없는 이유는 무엇입니까?
OLS는 현재 LTV를 최종 LTV로 간주하여 오른쪽 절단(right-censoring) 사실을 무시합니다. 이는 "젊은" 사용자에 대한 평가를 체계적으로 낮춥니다. 대신 Survival Analysis를 사용하여 유지율 곡선을 평가하고 ( S(t) )을 적분하여 예상 생애 가치를 얻습니다.
또한 BTYD와 같은 반복 구매의 확률 모델을 사용하며, 이는 Pareto/NBD 또는 Gamma-Gamma와 같은 것으로, Python의 lifetimes 라이브러리에 구현되어 있습니다. 이 모델들은 구매 사이의 빈도와 시간에 대한 확률 분포를 통해 아직 보이지 않는 거래를 고려하며, 활동적인 사용자에 대한 미래 LTV의 불편한 추정치를 제공합니다.
질문 3: 인크리멘탈 인바이트(프로그램 덕분에 일어난 초대)와 유기적 인바이트(자극 없이 발생할 수 있었던 초대)의 차이를 효과 평가 시 어떻게 구분합니까?
Principal Stratification 프레임워크를 사용하여 인구집단을 네 개 그룹(strata)으로 나누어 분류합니다: Always-takers(항상 초대할 사용자는), Compliers(프로그램 덕분에만 초대할), Never-takers 및 Defiers. 이진 도구를 사용하여 IV 분석를 통해 LATE를 평가합니다, 이는 Compliers에 대한 효과입니다.
더 자세한 세분화를 위해 Causal Machine Learning(Python에서 EconML, CausalML) 방법, 예를 들어 Causal Forest 또는 Meta-learners(S-Learner, T-Learner)를 적용하여 다양한 세그먼트의 Conditional Average Treatment Effect (CATE)를 평가합니다. 이로 인해 어떤 사용자(예: 낮은/높은 청구서)에게 프로그램이 인크리멘탈 초대를 생성하는지를 이해할 수 있습니다.