Personalized PageRank의 시드에 결제력을 주입해 비결제 유저의 매출 기여도를 점수화한다
요약
- "High PageRank 유저"는 알고리즘의 결과가 아니라 입력(시드)이다.
- 일반 PageRank는 모든 노드 동등 시작이라 매출 기여도가 안 나온다. Personalized PageRank의 teleport vector에 결제력을 주입해야 비결제 유저로 점수가 흐른다.
- 시드 정의는 보통
log(1 + 최근 90일 결제액)을 쓴다.
본문
문제 상황
매칭 기반 양면 시장에서 광고 ROAS를 계산할 때, 단순 결제 금액만 광고 채널에 귀속하면 매출 기여 일부를 놓친다. 예: 매칭 상대로 자주 등장해서 헤비 결제 유저가 떠나지 않게 만드는 비결제 유저. 이 유저가 사라지면 헤비 유저의 결제도 줄지만, 매출 분자에는 잡히지 않는다. 비결제 행동의 매출 기여를 점수화할 수단이 필요하다.
왜 일반 PageRank가 아니라 Personalized PageRank인가
표준 PageRank는 teleport(랜덤 점프) 시 모든 노드를 균등하게 본다. 그러면 "그래프 중심에 가까운 유저"가 높은 점수를 받을 뿐이고, 매출과는 무관하다.
Personalized PageRank는 teleport vector 가 균등분포가 아니라 임의 분포다. 이 에 "결제력"을 주입하면, 결제력 큰 유저에서 출발한 random walk가 도달하는 비결제 유저에게 점수가 흘러간다.
여기서 를 어떻게 정의하느냐가 곧 "결제력 큰 유저"의 정의다. 즉 "High PageRank 유저"라는 표현은 결과처럼 들리지만 실제로는 입력 설계다.
시드 정의 옵션
| 방식 | 특징 | 문제 |
|---|---|---|
| 결제액 그대로 | 정보 손실 없음 | 고래 1명에 점수가 쏠려 그 사람 친구만 점수 폭등 |
log(1 + 결제액) |
실무 디폴트, 고래 영향 완화 | 임계가 없어 잔돈 결제자도 시드에 포함 |
| 상위 X% 이진 | 깔끔, 해석 쉬움 | X% 임계가 자의적, 경계 유저 정보 손실 |
시간 윈도우는 보통 최근 30~90일 결제액을 쓴다. 너무 길면 churn된 과거 헤비 유저가 시드에 남고, 너무 짧으면 노이즈가 커진다.
함정 3가지
-
결제 유저는 점수가 곧 시드값이다. PageRank의 부가가치는 결제하지 않은 유저의 상대 점수에서만 나온다. 평가도 비결제 유저 집합에서 해야 의미 있다.
-
Homophily ≠ 인과. 결제력 큰 유저끼리 자주 매칭되는 경향이 있으면, PageRank는 그 사이에 낀 비결제 유저에게 높은 점수를 준다. 하지만 그 비결제 유저가 빠져도 헤비 유저끼리 다른 경로로 매칭될 수 있다. 인과 검증이 빠진 상관 점수다. 이 한계를 보완하려면 Shapley value가 더 정직하다 — "그 사람이 빠졌을 때 한계 손실"을 직접 측정하므로. PageRank는 빠른 근사, Shapley는 비싼 정답에 가깝다.
-
검증 방법은 반사실 시뮬레이션이다. PageRank 점수 자체는 검증되지 않은 가설이다. "그 유저를 제거하면 매칭 시장 매출이 얼마나 떨어지는가"의 counterfactual 시뮬레이션 순위와 PageRank 순위의 상관을 봐야 시드 정의가 맞았는지 알 수 있다. 점수 자체로 의사결정하기 전에 반드시 이 검증을 거쳐야 한다.
실무 출발점
시드: v_u = log(1 + 90일 결제액_u), L1 정규화
엣지: w(A,B) = 90일 매칭 시간 합 또는 양방향 만족 신호 평균
damping: 0.85 기본. 시드 영향력을 강하게 보려면 0.5~0.7
평가: 비결제 유저의 PageRank 점수 vs 반사실 매출 감소량 순위 상관