huny.log

기술 포스트 · 그로스해킹

Frequency capping — 같은 사람한테 광고를 몇 번 보여줄까

광고를 너무 자주 보이면 피로(fatigue), 너무 드물게 보이면 노출 부족. 두 함정 사이에서 최적 빈도를 잡는 frequency capping의 표준 룰과 시간창 설계를 마케터 시선에서 정리합니다.

들어가며

광고 캠페인을 운영하다 보면 같은 사용자가 같은 광고를 하루 1020번 보는 일이 자주 일어납니다. 너무 자주 보이면 피로(fatigue)로 CTR·CVR이 떨어지고 브랜드 호감도까지 깎입니다. 너무 드물면 광고가 기억에 남지 않아 효과가 없습니다. 두 함정 사이에서 최적 노출 빈도를 잡는 게 frequency capping이고, 그 설정 한 줄이 캠페인 ROAS의 1030%를 좌우합니다. 이 글은 피로 곡선의 수학적 구조, 시간창 설계, 캠페인 종류별 최적값, cross-channel 통합 빈도 관리, 그리고 Python으로 피로 누적을 시뮬레이션하는 코드까지 마케터 시선에서 정리합니다.

frequency capping — 사용자별 노출 횟수 제한과 피로 곡선 다이어그램
피로와 노출 부족 사이의 작은 균형 — 빈도 한 줄이 ROAS를 결정한다

피로 곡선 — 수식과 직관

경험적 패턴

같은 사람에게 같은 광고를 반복해서 보일 때 CTR·CVR의 변화를 보면 일반적으로 다음 패턴이 나옵니다.

  • 1~3회: 학습 단계 — CTR 상승
  • 4~7회: peak — 효과 최대
  • 8~14회: 피로 시작 — CTR 하락
  • 15회 이상: 부정적 효과 — 브랜드 호감도 하락

이 곡선의 정확한 위치는 캠페인·크리에이티브·사용자 세그먼트마다 다르지만, 일정 빈도 이상에서 효과가 떨어지는 패턴은 거의 보편적입니다 (Tellis 1988, Krugman 1972).

피로 누적 수식

피로 곡선을 로지스틱 감쇠(logistic decay) 모델로 근사하면 다음과 같습니다.

여기서 는 노출 빈도, 는 peak 빈도 (보통 5~7), 는 피로 속도 파라미터입니다. 가 클수록 peak 이후 CTR이 가파르게 떨어집니다.

아래 코드는 이 모델로 피로 누적을 시뮬레이션합니다.

import numpy as np
def fatigue_ctr(freq: np.ndarray, ctr_peak: float = 0.05,
f_star: float = 6.0, alpha: float = 0.6) -> np.ndarray:
"""
로지스틱 감쇠 피로 곡선.
freq: 노출 빈도 배열
ctr_peak: peak CTR (기본 5%)
f_star: peak 빈도
alpha: 피로 속도 (클수록 급격히 하락)
"""
return ctr_peak / (1 + np.exp(alpha * (freq - f_star)))
freqs = np.arange(1, 25)
ctr_values = fatigue_ctr(freqs)
# 빈도별 CTR 출력
for f, ctr in zip(freqs, ctr_values):
bar = "█" * int(ctr * 1000)
print(f"freq={f:2d}: CTR={ctr:.4f} {bar}")
freq= 1: CTR=0.0474 ████████████████████████████████████████████
freq= 3: CTR=0.0425 ██████████████████████████████████████████
freq= 6: CTR=0.0250 █████████████████████████
freq= 9: CTR=0.0102 ██████████
freq=12: CTR=0.0037 ████
freq=15: CTR=0.0013 █
freq=20: CTR=0.0002

Peak는 빈도 4~6 구간이고, 빈도 15를 넘어서면 CTR이 0에 수렴합니다. 이 시뮬레이션은 alpha=0.6(보통 속도 피로)을 가정했고, 크리에이티브가 1개일 때의 값입니다. 크리에이티브를 교체하면 가 오른쪽으로 이동합니다.

한정 예산의 산수

총 예산이 정해져 있을 때 사용자당 노출을 줄이면 더 많은 사람에게 도달할 수 있습니다. 빈도 5에서 빈도 3으로 줄이면 같은 예산으로 reach가 1.67배 늘어납니다.

캠페인 목표가 도달(reach) 우선이라면 빈도를 낮추고, 회상(recall) 우선이라면 빈도를 일정 수준 유지합니다.

Frequency capping 시간창 설계

시간창의 종류

같은 빈도 5라도 어떤 시간창에서 5인지가 다릅니다.

시간창의미
1시간당 5회매우 공격적 — 사실상 폭격
1일당 5회일반적 — 하루 5회
1주당 5회보수적 — 매일 한 번 정도
캠페인 기간 5회가장 보수적

같은 빈도 5라도 시간창에 따라 사용자 경험이 완전히 다릅니다. 1시간 5회는 사실상 폭격이고, 1주 5회는 하루 한 번 이하입니다.

다중 시간창

대부분 광고 플랫폼은 다중 시간창 capping을 지원합니다.

  • 1시간당 최대 2회 (폭격 방지)
  • 1일당 최대 5회 (일일 한도)
  • 1주당 최대 15회 (장기 누적 한도)

세 가지를 함께 설정하면 시간 척도별 다른 종류의 피로를 다룰 수 있습니다.

캠페인 종류별 최적 빈도

직접 반응 (Direct Response)

전환·구매 같은 명확한 행동을 유도합니다. 적정 빈도는 일반적으로 1주에 5~10회 정도입니다. 빈도가 너무 높으면 CTR이 떨어지고, 너무 낮으면 첫 클릭 이후 후속 행동을 못 끌어냅니다.

브랜드 인지 (Awareness)

브랜드 회상이 목표인 캠페인은 더 낮은 빈도가 적합합니다. 1주에 3~5회로 다양한 사람에게 도달하는 게 효과적입니다.

리타게팅

이미 사이트·앱에 들어왔던 사용자를 다시 끌어옵니다. 약간 공격적인 빈도(1주 15~25회)도 OK인데, 사용자 의도가 이미 있어 피로 임계가 높습니다.

신제품 런칭

첫 주는 빠른 reach·인지를 위해 공격적(1일 8~10), 둘째 주부터 점진적 감소합니다. 동일 광고가 아닌 다양한 크리에이티브를 로테이션해 피로를 늦춥니다.

사용자 세그먼트별 다른 빈도

신규 vs 기존 사용자

같은 캠페인이라도 세그먼트별로 적정 빈도가 다릅니다.

세그먼트추천 빈도 (1주)
첫 방문자5~7회
회원가입자8~12회
구매 경험자10~15회
VIP·반복 구매자15~25회

가치 있는 사용자에게 더 자주 노출하는 게 ROI 측면에서 합리적입니다.

행동 시그널 기반

장바구니에 담은 사용자는 단기간 강한 리타게팅이 효과적입니다. 24시간 안에 5~10회의 집중적 노출이 전환을 끌어냅니다.

Cross-channel frequency — 가장 큰 맹점

채널 간 데이터 분리 문제

Meta·Google·TikTok 각자가 자기 플랫폼 안의 빈도만 통제합니다. 같은 사용자가 Meta에서 5회 + Google에서 5회 + TikTok에서 5회 = 총 15회를 받아도, 각 플랫폼은 5회로만 봅니다.

1st-party 데이터로 통합 빈도 추정

Cross-channel 통합 빈도를 관리하려면 1st-party 데이터로 사용자별 광고 노출 합산이 필요합니다. 실제 데이터 흐름은 다음과 같습니다.

  1. 각 플랫폼 노출 로그 수집: Meta·Google·TikTok이 각각 노출 로그를 내보냄 (보통 API 또는 파트너십)
  2. 사용자 식별 매핑: 1st-party 쿠키 ID, 로그인 ID, 이메일 해시 등으로 cross-platform 동일인 연결
  3. 클린룸 환경에서 집계: 각 플랫폼이 사용자 수준 데이터를 직접 공유하지 않으므로, Google ADH·Meta Advanced Analytics·AWS Clean Rooms 같은 클린룸 환경에서만 집계 가능

이 흐름에서 핵심 병목은 “동일인 연결”입니다. 로그인 없이 쿠키 ID만 있다면 cross-device 매핑이 불가능하고, ATT 비동의 iOS 사용자는 IDFA가 없어 사실상 연결이 안 됩니다. 결국 cross-channel 통합 빈도 관리는 로그인율이 높은 앱(70% 이상)이거나 클린룸 파트너십이 있는 대형 광고주에게만 현실적입니다 (data-clean-room-mobile 참고).

DSP 기반 통합 통제

DSP 기반 캠페인은 자기 DSP가 구매하는 인벤토리 범위 안에서 cross-channel 빈도를 통제할 수 있습니다. Walled garden(Meta·Google·TikTok)은 자기 안에서만 제어하므로 DSP로도 건드릴 수 없습니다. 현실적인 타협은 DSP 구매 채널(오픈 웹, CTV, 앱 내 광고)은 DSP에서 통합 관리하고, 월드가든은 각자 보수적 cap으로 운영하는 것입니다.

측정 — frequency 분포 확인

분포 보고

광고 플랫폼 보고에서 사용자별 frequency 분포를 봅니다. 흔한 패턴:

Frequency사용자 비중노출 비중전환 비중
1~360%30%25%
4~725%35%40%
8~1510%25%25%
16+5%10%10%

Frequency 4~7 구간이 효율 sweet spot입니다. 16+ 구간은 비용 대비 전환이 떨어지는 영역 — capping을 더 좁게 조정해야 합니다.

시간 추이

Frequency 분포가 시간에 따라 어떻게 바뀌는지도 봐야 합니다. 캠페인이 길어지면 같은 사용자가 반복 노출돼 평균 frequency가 올라가고, peak 효율 구간이 좁아집니다.

A/B 테스트 — 빈도 최적값 찾기

테스트 디자인

빈도는 A/B 테스트가 가능한 변수입니다.

  • 그룹 A — 1일 cap 3회
  • 그룹 B — 1일 cap 6회
  • 그룹 C — 1일 cap 9회

같은 예산을 분배하고 ROAS·CTR·CVR을 비교합니다. 1~2주면 결과가 나옵니다.

실제 A/B 테스트 결과 예시

아래는 전형적인 직접 반응 캠페인에서 흔히 관찰되는 패턴입니다(정확한 수치는 업종·크리에이티브마다 다름).

그룹1일 cap평균 frequency (1주)ROASCPMReach
A3회2.83.2×₩4,200넓음
B6회5.14.1×₩4,800중간
C9회7.43.5×₩5,600좁음

그룹 B(6회)가 ROAS 최고. 그룹 C는 피로 구간에 진입해 CPM이 비싸지고 ROAS가 꺾입니다. 그룹 A는 reach는 넓지만 recall 부족으로 전환이 약합니다. 이 패턴은 많은 캠페인에서 반복되며, 최적 cap을 직접 데이터로 확인하는 것이 가장 신뢰도 높습니다.

평가 지표

  • 그룹별 reach (도달한 사용자 수)
  • 그룹별 평균 frequency
  • 사용자 단위 CVR
  • 캠페인 단위 ROAS

Creative rotation으로 피로 늦추기

같은 빈도, 다른 크리에이티브

앞서 본 피로 곡선에서 (peak 빈도)는 크리에이티브 다양성에 따라 달라집니다. 같은 캠페인의 빈도가 5라도 5개가 모두 같은 광고면 피로가 빠르고, 5개가 다 다른 광고면 피로가 느립니다.

Creative 다양성적정 빈도 (1주)피로 곡선
1개3~5~5
3~5개7~12~9
10+개15~25~15

크리에이티브 풀이 풍부하면 빈도를 더 높여도 피로가 늦게 옵니다. 창의팀과 마케팅의 협업 가치가 여기서 나옵니다.

함정 모음

  • 채널별 cap을 같은 값으로 설정 — 통합 빈도 폭주
  • 피로 무시 — 16+ 구간 사용자에게 계속 노출
  • 크리에이티브 한 개 — 같은 광고만 반복하면 피로 빠름
  • cap 너무 좁음 — 학습 단계(1~3) 사용자가 다음 단계로 못 감
  • 시간창 잘못 이해 — 1주 5와 1일 5는 완전히 다른 노출 패턴
  • cross-channel 관리 없음 — 월드가든 3채널에 각 5회 cap → 총 15회 폭격

마치며

Frequency capping은 자동 입찰 광고에서 마케터가 직접 통제할 수 있는 가장 강력한 다이얼 중 하나입니다. 피로 곡선의 로지스틱 감쇠 구조를 이해하면 왜 특정 빈도 이상에서 ROAS가 꺾이는지 직관이 생깁니다. 시간창 설계, 캠페인 종류별 최적값, 사용자 세그먼트별 차등화, cross-channel 통합 — 이 네 가지를 분기 운영에 박아두면 캠페인 ROAS의 10~30%를 직접 끌어올릴 수 있습니다.

Cross-channel 통합 빈도 관리가 현실적으로 가능한 조건(높은 로그인율 + 클린룸 파트너십)이 되면, 그때는 data-clean-room-mobile에서 다루는 1st-party 데이터 흐름을 적극 활용하는 것이 다음 단계입니다.

다음에 읽을 글

참고

그로스해킹 카테고리의 다른 글

전체 보기 →