LabHub
Get started
배우기 러닝패스 코스

Founding as a Developer — Validate Before You Build

Decide the Price Test and Channel Budget by Contribution Margin

LabHub 에서 이어서 보기

한국어 원문으로 표시합니다.

목표

가격 실험을 공헌이익으로 판정하고, 구독 기록에서 이탈률·LTV·채널별 CAC·회수 기간·LTV/CAC 를 계산해 가격과 채널 예산을 미리 정한 규칙으로 결정한다.

왜 중요한가

전환율이나 매출로 가격을 정하고 CAC 만 보고 채널을 고르면, 비용과 이탈이 붙는 순간 성장할수록 현금이 빠지는 구조가 된다. 단위 경제는 고객 한 명이 남기는 돈과 그 고객을 데려오는 데 쓴 돈을 같은 기준으로 놓는 계산이다.

재료

정의

단계

  1. /root/founder/pricing/arms.json 에 가격 칸(A·B·C)마다 conversion·refund_rate·revenue_per_visitor(구매 × 가격 ÷ 방문자)와 best_by_conversion 을 쓴다.
  2. /root/founder/pricing/unit.pycontribution(price, costs) 를 만든다 — costs 는 costs.json 을 읽은 딕셔너리, 돌려주는 값은 월 공헌이익(실수).
  3. /root/founder/pricing/pervisitor.json 에 칸마다 contribution_per_visitorbest_by_contribution·best_by_revenue 를 쓴다.
  4. unit.pychurn(fix, month, channel=None) 를 더하고, /root/founder/pricing/churn.jsonmonthly(2026-01~06 각 달)와 average 를 쓴다.
  5. /root/founder/pricing/ltv.jsoncontribution(14,900원의 월 공헌이익), avg_churn, ltv, 그리고 흔한 실수로 낸 ltv_on_revenue(= 14900 ÷ 평균 이탈률)를 쓴다.
  6. /root/founder/pricing/cac.jsonby_channel(다섯 채널), blended(전체 광고비 ÷ 전체 신규), paid_only(광고비 > 0 인 채널의 광고비 ÷ 그 채널들의 신규)를 쓴다.
  7. /root/founder/pricing/channels.json 에 채널마다 churn(그 채널 고객만의 평균 이탈률)·ltv·payback_months·ltv_cac(광고비가 0 이면 null)를 쓴다.
  8. /root/founder/pricing/decision.jsonprice_arm(방문자당 공헌이익이 가장 큰 칸), scale(광고비 > 0 이고 LTV/CAC ≥ 3, 회수 기간 ≤ 12 인 채널, 정렬), cheapest_cac_paid(광고비 > 0 인 채널 가운데 CAC 가 가장 싼 채널), cheapest_is_scalable(그 채널이 scale 에 드는가)를 쓴다.

참고

전환율로만 보면

/root/founder/pricing/arms.json 에 A·B·C 의 conversion·refund_rate·revenue_per_visitor 와 best_by_conversion 을 쓴다.

conversion = 구매 ÷ 방문자, refund_rate = 환불 ÷ 구매, revenue_per_visitor = 구매 × 가격 ÷ 방문자.

고객 한 명의 월 공헌이익

/root/founder/pricing/unit.py 에 contribution(price, costs) 를 만든다.

부가세 포함 가격에서 공급가액(× 100/110)을 구하고, 수수료는 포함가에 비율을 곱해 고정액을 더합니다. 그다음 서버·상담 비용을 뺍니다.

방문자당 첫 달 공헌이익으로 다시 판정

/root/founder/pricing/pervisitor.json 에 칸마다 contribution_per_visitor 와 best_by_contribution·best_by_revenue 를 쓴다.

(구매 − 환불) × contribution(그 가격) ÷ 방문자. 매출 기준 승자와 공헌이익 기준 승자가 같은지도 보세요.

월 이탈률 — 분모는 지난달 결제자

unit.py 에 churn(fix, month, channel=None) 를 더하고 /root/founder/pricing/churn.json 에 monthly(2026-01~06)·average 를 쓴다.

'M 에 결제했다' 는 start ≤ M ≤ end(비면 2026-06). 분모는 M−1 에 결제한 고객, 분자는 그 가운데 M 에 결제하지 않은 고객입니다. 1월의 전달은 전년 12월입니다.

LTV — 분자는 매출이 아니라 공헌이익

/root/founder/pricing/ltv.json 에 contribution·avg_churn·ltv 와 비교용 ltv_on_revenue 를 쓴다.

LTV = 월 공헌이익(14,900원) ÷ 평균 이탈률. 비교용 값은 분자에 14,900 을 그대로 넣습니다. 이 모델이 이탈률 일정·할인 없음을 가정한다는 점을 기억하세요.

채널 CAC 와 혼합 CAC

/root/founder/pricing/cac.json 에 by_channel(다섯 채널)·blended·paid_only 를 쓴다.

광고비는 2026-01~06 합, 신규 고객은 같은 기간 start_month 인 고객입니다. 혼합 CAC 의 분모에는 광고비가 0 인 자연 유입 고객도 들어갑니다.

채널별 이탈·LTV·회수 기간

/root/founder/pricing/channels.json 에 채널마다 churn·ltv·payback_months·ltv_cac 를 쓴다(광고비 0 이면 ltv_cac 는 null).

채널 LTV 에는 그 채널 고객만으로 계산한 평균 이탈률을 씁니다. 회수 기간 = CAC ÷ 월 공헌이익.

미리 정한 규칙으로 결정한다

/root/founder/pricing/decision.json 에 price_arm·scale·cheapest_cac_paid·cheapest_is_scalable 을 쓴다.

규칙은 계산 전에 정한 것 그대로 — 광고비 > 0, LTV/CAC ≥ 3, 회수 기간 ≤ 12개월. CAC 가 가장 싼 유료 채널이 규칙을 통과하는지 따로 확인하세요.