‹ 종합자료 홈
🎯 SSV 100회 미만 유저 체크
2026.09.24 10:41 KST 집계 · 운영 DB eletpxdmbyeocxbrsiwb · users × ad_events(verified=true) · status active 986
🔄 5일마다 자동 갱신 — 다음 예정 2026.09.29 (KPI 일일 파이프라인)
전체 유저 986
SSV 50회 미만 904 (91.7%)
SSV 100회 미만 962 (97.6%)
100회 이상 24 (2.4%)
결론
- SSV 100회 미만 유저는 962명(97.6%), 50회 미만은 904명(91.7%)임. SSV 0회(광고 보상을 한 번도 안 받은 계정) 164명을 빼면 각각 798명(80.9%) · 740명(75.1%)임.
- 100회 미만 962명 중 최근 7일 가입이 685명(71.2%)임. 가입 30일이 지났는데도 100회 미만인 "정착 저활동" 유저는 9명(0.9%)임.
- SSV 총량 15,281건 중 100회 이상 24명(2.4%)이 27.8%(4,248건)를 만들고, 500회 이상 1명이 3.8%임. 1~49회 구간 740명은 45.4%임.
임계값별 유저 수
SSV 50회 미만
904명
91.7% · 0회 제외 740명(75.1%)
SSV 100회 미만
962명
97.6% · 0회 제외 798명(80.9%)
SSV 0회
164명
16.6% · 최근 7일 가입 127명
SSV 100회 이상
24명
2.4% · SSV의 27.8% 생산
| 구간 | 유저 수 | 비율 | 0회 제외 | 비율 | 정의 |
| SSV 50회 미만 | 904 | 91.7% | 740 | 75.1% | 0 ≤ 횟수 ≤ 49 |
| SSV 50 ~ 99회 | 58 | 5.9% | 58 | 5.9% | 50 ≤ 횟수 ≤ 99 |
| SSV 100회 미만 | 962 | 97.6% | 798 | 80.9% | 0 ≤ 횟수 ≤ 99 (위 두 줄 합) |
| SSV 100회 이상 | 24 | 2.4% | 24 | 2.4% | 횟수 ≥ 100 |
| 전체 | 986 | 100% | 822 | 83.4% | users 전체 / SSV 1회 이상 |
SSV 횟수 분포 (유저별 누적)
| 구간 | 유저 | 비율 | 분포 | 가입 30일+ | 최근 7일 가입 | 최근 7일 SSV 있음 | SSV 합계 | SSV 비중 |
| 0회 | 164 | 16.6% |
| 3 | 127 | 0 | 0 | 0.0% |
| 1 ~ 9회 | 515 | 52.2% |
| 4 | 371 | 393 | 1,952 | 12.8% |
| 10 ~ 19회 | 108 | 11.0% |
| 1 | 82 | 96 | 1,432 | 9.4% |
| 20 ~ 29회 | 62 | 6.3% |
| 0 | 41 | 61 | 1,496 | 9.8% |
| 30 ~ 49회 | 55 | 5.6% |
| 0 | 33 | 54 | 2,051 | 13.4% |
| 50 ~ 99회 | 58 | 5.9% |
| 1 | 31 | 58 | 4,102 | 26.8% |
| 100 ~ 199회 | 19 | 1.9% |
| 1 | 7 | 19 | 2,549 | 16.7% |
| 200 ~ 499회 | 4 | 0.4% |
| 0 | 0 | 4 | 1,119 | 7.3% |
| 500회 이상 | 1 | 0.1% |
| 1 | 0 | 1 | 580 | 3.8% |
| 합계 | 986 | 100% | | 11 | 692 | 686 | 15,281 | 100% |
- SSV 1회 이상 유저 822명 기준 중앙값 6회 · 평균 18.6회 · 최대 580회임. 평균이 중앙값의 3.1배 — 소수 헤비 유저가 평균을 끌어올리는 롱테일 분포임.
- "가입 30일+" 열은 가입 후 30일이 지난 유저 수, "최근 7일 SSV 있음" 열은 최근 7일 내 SSV가 1건이라도 있는 유저 수임.
왜 100회 미만이 97.6%인가 — 해석
- 가입 흐름: 최근 7일 가입 692명(전체의 70.2%), 최근 30일 가입 975명(98.9%)임. 신규 유저는 SSV를 쌓을 시간이 아직 없었음 — 최근 14일 일별 가입은 아래 표.
- 정착 저활동 유저: 100회 미만 962명 중 가입 30일이 지난 유저는 9명(0.9%), 50회 미만 904명 중에서는 8명(0.9%)임. 이 코호트가 "오래됐는데 안 하는" 실제 이탈·저활동 후보임.
- 0회 164명의 성격: 127명(77.4%)이 최근 7일 가입 → 온보딩 직후 이탈 후보임. 가입 30일+ 인데 0회는 3명 → 가입만 하고 광고를 한 번도 안 본 휴면 계정임.
- 활동 밀도: 100회 미만 962명 중 662명(68.8%)은 최근 7일 안에 SSV가 있음. 100회 이상 24명은 24명(100.0%)이 최근 7일 활동 중임.
- 구조적 상한: 운영 config 기준 하루 SSV 상한은 제작 광고 20회(사료·장난감 합산, 쿨타임 30초) + 매일뽑기 2회 + 황금상자 3회(9·15·20시 정시) = 최대 25회임. 100회는 매일 상한을 꽉 채워도 4일, 실제 사용 강도(1회 이상 유저 중앙값 6회 누적)로는 몇 주가 걸리는 숫자라, 캐시쉐이크(흔들기 상한이 훨씬 높음)와 같은 잣대로 비교하면 안 됨.
| 가입일 (KST) | 09/11 | 09/12 | 09/13 | 09/14 | 09/15 | 09/16 | 09/17 | 09/18 | 09/19 | 09/20 | 09/21 | 09/22 | 09/23 | 09/24 |
| 가입 수 | 1 | 3 | 8 | 21 | 77 | 95 | 124 | 110 | 109 | 106 | 87 | 89 | 91 | 22 |
주의 — SSV 횟수는 계정 생성 이후 누적값이라 가입 시점에 따라 자연히 다름. "100회 미만"을 이탈 신호로 읽으려면 가입 30일+ AND 100회 미만(9명) 또는 최근 7일 SSV 없음(300명 = 962 − 662) 같은 시간 조건을 붙여야 함.
SSV 구성 (참고)
| 맥락 (event_type) | 건수 | 비중 | 유저 (distinct) | 기간 |
| craft_toy (장난감 제작) | 4,170 | 27.3% | 541 | 07/26 ~ 09/24 |
| craft_food (사료 제작) | 4,084 | 26.7% | 448 | 07/25 ~ 09/24 |
| goldenbox (황금상자) | 4,055 | 26.5% | 768 | 08/07 ~ 09/24 |
| gacha (매일 뽑기) | 2,972 | 19.4% | 652 | 07/25 ~ 09/24 |
| 합계 | 15,281 | 100% | 822 | |
갱신 이력 (5일 주기)
| 집계일 | 전체 유저 | 0회 | 50회 미만 | 100회 미만 | 100회 이상 | SSV 총량 | 중앙값(1회+) |
| 2026-09-24 | 986 | 164 | 904 (91.7%) | 962 (97.6%) | 24 | 15,281 | 6 |
| 2026-09-19 | 526 | 80 | 499 (94.9%) | 520 (98.9%) | 6 | 6,499 | 6 |
집계 방법
- SSV 1회 = AdMob 서버가
admob-ssv Edge Function 을 호출해 서명 검증을 통과하고, settle_ad_reward RPC 가 ad_events 에 verified=true 로 INSERT 한 행 1건.
- 유저 모수 =
users 전체(status 무관)(고아 SSV 행 0건은 제외).
- "미만"은 0회를 포함함. 0회를 뺀 값은 별도 열로 병기했음.
- KPI 일일 파이프라인(GitHub Actions)이 매일 돌며 마지막 집계로부터 5일이 지났을 때만 이 페이지를 다시 생성함(
fetch-ssv.mjs, PostgREST 읽기 전용). 집계 시각 이후에도 행이 실시간으로 늘어남.
with per_user as (
select u.id, u.created_at as joined_at,
coalesce(t.cnt, 0) as ssv_cnt, t.last_ssv
from public.users u
left join (select user_id, count(*) cnt, max(created_at) last_ssv
from public.ad_events where verified = true group by user_id) t
on t.user_id = u.id)
select count(*) filter (where ssv_cnt < 50) as ssv_lt_50,
count(*) filter (where ssv_cnt < 100) as ssv_lt_100,
count(*) filter (where ssv_cnt = 0) as ssv_0,
count(*) as total
from per_user;