지면 등급 개인화 — 플로우 기획서

스마트 유닛 관리 시스템 · 광고주별 지면 등급 개인화 프로세스

버전작성일작성자변경 내용
v0.3.02026.08.18전태호 광고주 그룹화(EM) 방식 폐기, 광고주별 지면등급 조정(셀 단위 통계 게이트) 방식으로 전면 변경 · 정책 기획서 반영

01개요

광고주별로 지면 등급을 개인화하되, 기존 지면 등급·서열화 체계는 그대로 두고 송출 시점에 후처리 조정 등급을 우선 적용한다.

02배경 및 목적

현재 지면 등급은 KPI(CVR), 디바이스, 노출형태 기준으로 전체 광고주에게 동일하게 적용된다. 그런데 동일 지면이라도 광고주별 실제 CVR은 편차가 존재하며, 전체 기준으로는 낮은 등급(예: 7등급)인 지면이 특정 광고주 기준으로는 훨씬 높은 등급(예: 3등급) 수준의 성과를 보이는 사례가 확인되었다.

타겟팅/시간 등급은 광고주별 영향도가 크지 않다고 판단되어, 개인화 대상은 지면 등급으로 한정한다.

광고주 단위로 지면 등급을 개인화하여, 보다 정교한 지면 배분 및 효율 예측을 가능하게 하는 것이 본 정책의 목적이다.

03기존 vs 신규 로직

2.1 기존 로직

  • KPI(CVR) + 디바이스 + 노출형태 기준으로 지면 등급(1~12등급 + 99등급, 총 13개 등급) 산정
  • 전체 광고주 데이터로 산정되며, 서열화가 고정되어 모든 광고주에게 동일하게 적용됨

2.2 신규 로직

  • 기존 지면 등급 및 서열화 체계는 그대로 유지 (변경 없음)
  • (광고주, 지면) 셀 단위로 통계적 검정을 거쳐 확실한 것만 지면 등급을 후처리로 재산정한 개인화 조정 테이블을 별도 생성
  • 송출 시 개인화 테이블을 우선 조회하고, 존재하면 무조건 그 값을 사용, 없으면 기존 지면 등급 사용

04광고주 개인화 기준

그룹으로 묶는 방식이 아니라, (광고주, 지면) 조합 하나하나를 통계적으로 검정해 확실한 것만 개인화하는 방식이다. 광고주 노출·소진 조건으로 대상을 추리고, 표본·안정성 2개 게이트(AND)를 통과한 셀만 유의성 검정(게이트③)을 거쳐 등급을 재산정하며, 쇼핑/APP ROAS 세그먼트는 추가로 ROAS 기준 ±1칸 미세조정을 거친다. 상세 로직은 "광고주 개인화" 탭 참고.

#단계구분설명
10단계 — 대상 선정확정광고주 노출 하한(배너 10,000·아이커버 1,500) + 소진 상위 300 지면 + 기존 등급 있는 지면만 대상
21단계 — 셀 게이트 ①②③확정표본(클릭·전환) → 월별 안정성, 이 둘을 통과해야 진행. 이후 기존 등급 대비 유의성(Wilson 구간)을 검정하되, 여기서 벗어나지 못해도(겹침/보류) 탈락 처리하지 않고 기존 등급을 유지한 채 다음 단계(2단계)로 진행
32단계 — ROAS 미세조정확정쇼핑/APP ROAS 세그먼트 한정, 상대 배수 2.0배 이상/0.5배 이하 시 ±1칸
4데이터 집계 기간확정최근 6개월 (기존 지면 등급 기준과 동일)
5개인화 대상 지면확정소진액 기준 상위 300개 지면 (동점 시 지면번호 오름차순)
광고주 제외 목록(CPS 계정 등)은 집계 전에 적용해야 지면 기준선이 오염되지 않는다. 상세 파라미터·게이트 로직은 "광고주 개인화" 탭 참고.

05운영 원칙

4.1 서열화 불변 원칙

  • 기존 지면 등급의 서열화는 절대 변경하지 않으며, 개인화는 후처리 방식으로만 반영한다
서열화를 직접 바꾸는 방식(지면×광고주 조합으로 재산정)은 매일 등급이 뒤바뀌는 변동성 문제가 있어 배제하였다.

4.2 개인화 등급 무조건 사용 원칙

  • 개인화 테이블에 해당 광고주×지면 데이터가 존재하면, 별도 조건 없이 무조건 해당 등급으로 송출한다
  • 존재하지 않는 경우에만 기존 지면 등급을 사용한다

4.3 데이터 보관 원칙

  • 개인화 조정 테이블은 일자별로 배치 생성되며, 각 행에 적용일시(해당 개인화 등급이 실제로 적용된 일시 · 배치 완료 직후)를 기록해야 한다
  • 보관 기간은 30일로 확정 (빌링팀 최소 요구사항인 14일을 상회하도록 송출팀에 30일 제안 · 협의 완료)

06처리 흐름

1
송출 요청 발생광고주 · 지면 · 타겟팅 · 시간대 조합에 대한 유닛 송출 요청
2
개인화 테이블 조회개인화 대상 지면에 한해 광고주×지면 데이터 존재 여부 확인
3
분기 — 개인화 테이블에 데이터가 존재하는가?존재 여부만으로 분기 (추가 조건 없음)
Y → 개인화 조정 등급으로 무조건 송출
N → 기존 지면 등급으로 송출
4
송출 로그 · 통계 테이블 기록송출 시 개인화 지면 등급인지 기존 지면 등급인지를 기록
5
빌링 데이터 적재개인화 등급으로 송출된 경우, 유닛 데이터는 해당 개인화 등급에 해당하는 유닛에 적재

07남은 확인 / 보완 필요 사항

현재 지면 등급 배치만으로도 약 1시간 소요되는데, 개인화 배치가 추가되면 소요 시간이 더 늘어날 것으로 예상되어 송출팀과의 성능 검증이 필요하다.
  • 개인화 대상 지면 개수: 300개로 확정. 추후 확대 가능성 있어 확대 시 배치 성능 재검증 필요
  • 배치 처리 성능: 셀(광고주×지면) 단위 계산량에 따른 배치 소요 시간 검증
  • 빌링 데이터 적재 검증: 송출된 등급 기준 그대로 정확히 적재되는지 확인 필요
  • 99등급 산정 기준 보완: 세션 전환 5회 미만 기준의 역설 문제 (별도 트랙에서 검토)

일배치 광고주 개인화 지면 등급 산출 플로우

그룹으로 묶지 않고, (광고주, 지면) 셀 단위로 통계적 검정을 거쳐 확실한 것만 개인화 (배치는 송출팀에서 진행)

1

개인화 대상 지면 선정

소진액 기준 상위 300개 지면으로 확정 (향후 개수 확대 가능성 있음)

2

셀(광고주×지면) 게이트 검정

광고주 노출 하한 통과 + 표본·안정성 게이트(①②) 통과 셀만 유의성 검정(③)까지 진행
집계 기간: 최근 6개월 (기존 지면 등급 기준과 동일)

3

개인화 등급 산정

셀 실측 CVR 기준으로 해당 지면의 등급을 재산정 (기존 13개 등급 체계, CVR 기준 동일 적용) + ROAS 미세조정 반영

4

조정 확정 셀만 테이블 저장

advertiser_id + 지면ID + 조정등급(grade_new) + 기존등급(g_glob) 구조로 신규 테이블에 저장 (일배치)

보관 정책 · 개인화 지면 등급 조정 테이블(배치 데이터)은 최소 14일 이상 보관 필요. 빌링팀의 마이그레이션을 위한 최소 보관 일자 정책이 14일이기 때문.

기존 지면 등급 산정과의 관계

기존 지면 등급 산정

KPI(CVR) + 디바이스 + 노출형태 기준, 전체 광고주 데이터로 산정 · 서열화 유지

개인화 등급(후처리)

선정된 지면 한정, 셀(광고주×지면) 단위 CVR로 별도 산정 · 서열화에 영향 없음

두 테이블은 독립적으로 유지되며, 송출 시점에만 조회 우선순위로 결합됩니다. (다음 탭 참고)

실시간 송출 유닛 송출 시 등급 조회 로직

개인화 테이블에 데이터가 존재하는 지면은 별도 조건 없이 무조건 사용, 없으면 기존 지면 등급 사용

YES NO 참조
개인화 테이블에
데이터가 존재하는가?

송출 요청 발생

광고주 · 지면 · 타겟팅 · 시간대 조합에 대한 유닛 송출 요청

개인화 테이블 조회

개인화 대상 지면(상위 300)에 한해 광고주×지면 데이터 존재 여부 확인

개인화 조정 등급으로 무조건 송출
예: 전체 기준 7등급 → 이 광고주에겐 3등급으로 취급

기존 지면 등급으로 송출

최종 등급 확정 → 유닛 결정

확정된 지면 등급 × 타겟팅 × 시간대 조합으로 최종 송출 유닛 결정

송출 로그 · 통계 테이블 기록

송출 시 개인화 지면 등급인지 기존 지면 등급인지를 기록

빌링 데이터 적재

개인화 등급으로 송출된 경우, 유닛 데이터는 해당 개인화 등급에 해당하는 유닛에 적재

광고주별 지면등급 조정

"그룹으로 묶기"가 아니라, 광고주 하나하나에 대해 "이 지면에서는 이 광고주만 등급을 다르게 줘도 될 만큼 데이터가 확실한가?"를 통계적으로 검정하는 방식으로 변경.

한 줄 요약 · 지면 등급은 지금 모든 광고주에게 동일하다. (광고주, 지면) 조합 중 통계적으로 확실한 것만 골라 그 광고주에게만 다른 등급을 주는 개인화 등급 목록을 만든다. 목록에 없는 조합은 원래 등급을 그대로 쓴다. 기존 등급 산출 로직 자체는 건드리지 않는다.
원본 문서링크
개발 명세서 (Notion)app.notion.com/p/enliple/3b9907ce77c780c1a76be2e730f81aaa
참고 대시보드advertiser-media-personalization.pages.dev

용어

용어쉬운 설명
셀 (cell)판정의 최소 단위. (광고주, 지면) 한 쌍. "이 광고주가 이 지면에서 보인 실적"을 의미
세그먼트판정을 독립적으로 돌리는 묶음. KPI_SETUP_TOP_CODE(쇼핑ROAS/DB전환/APP ROAS) + KPI_SETUP_PRDT_CODE(KPI 세부 코드) + ADVRTS_PRDT_CODE(배너/아이커버) + PLTFOM_TP_CODE(웹/모바일), 총 4개 키 조합. KPI가 2개 코드(TOP+PRDT)로 나뉘어 있어 4개가 됨. 세그먼트마다 별도로 계산이 돌아간다고 이해하면 됨
판정기간실적을 집계하는 최근 개월 수. 기본값 6개월
기존 업종 등급 (g_glob)지금 쓰고 있는, 모든 광고주에게 동일한 그 지면의 등급. DB SMART_UNIT_MEDIA_GRADE 테이블에서 조회. 이 값은 이 로직에서 계산하지 않고 그대로 읽어서 비교 기준으로만 사용
조정 확정검정을 통과하고, 최종 등급이 기존 등급과 실제로 다른 셀. 이것만 결과로 산출됨

전체 흐름 (한눈에)

0
0단계 — 대상 선정노출이 너무 적은 광고주 제외, 소진 상위 300개 지면만 대상, 기존 등급이 없는(NA) 지면 제외
1
1단계 — 셀 게이트 ①②③표본 충분한가 → 월별로 안정적인가, 이 둘을 통과해야 진행. 이후 기존 등급 대비 유의미하게 다른지 검정하되, 벗어나지 못해도 탈락 없이 기존 등급으로 다음 단계 진행
2
2단계 — ROAS 미세조정WEB>매출(쇼핑ROAS) / APP>매출(쇼핑ROAS) 세그먼트에 한해, 1단계를 통과한 셀의 등급을 ROAS 기준으로 ±1칸만 추가 보정
3
3단계 — 조정 확정 판정최종 등급이 기존 등급과 다른 셀만 결과로 산출. 같으면(되돌림) 버림
게이트①② 중 하나라도 실패하면 그 즉시 기존 업종 등급을 그대로 유지하고 끝. 게이트③은 등급을 실측치로 바꿀지(g_obs) 기존 등급을 유지할지(g_glob)만 결정할 뿐, 여기서 벗어나지 못해도(겹침/보류) 다음 단계(2단계)로는 그대로 진행됨.

0단계 — 대상 선정 (필터링)

필터조건비고
① 광고주 제외CPS 계정 · 수동 제외 목록 · 특정 조합 한정 제외 규칙에 해당하는 광고주 제거집계 전에 적용 — 집계 후에 빼면 지면 기준선(b) 자체가 오염됨
② 광고주 게이트최근 6개월(판정기간) 노출 합계 ≥ 배너 10,000 / 아이커버 1,500노출 너무 적은 광고주는 통째로 제외
③ 지면 기준선①·②를 통과한 광고주만으로 지면별 평균 CVR(b(u)) 계산이 값이 "이 지면의 기준선"이 됨
④ 대상 지면 선정소진액(비용) 상위 300개 지면만 (동점이면 지면번호 오름차순)전체 지면 대비 상위 300개로 계산량 통제. 소진 300등에 동점 지면이 많아 2차 정렬 키 필수
⑤ 기존 등급 조회DB에 등급이 없거나(NA/GRADE=99) 조인 실패 시 제외비교 기준 자체가 없으면 판정 불가

1단계 — 셀 게이트 ①②③ (셀 하나당 순서대로 검정)

게이트 ① 표본 — "데이터가 충분한가"

클릭 수가 일정 기준 이상이고, 전환이 최소 1건은 있어야 함. 기준선 CVR이 낮은 지면일수록 더 많은 클릭이 필요함 (예: 기준 CVR 0.1%면 클릭 3,838개 필요, 1.0%면 380개면 충분).

실패 → 게이트 종료, 기존 등급 유지

게이트 ② 안정성 — "달마다 CVR이 들쭉날쭉하지 않은가"

활성 월 수(실적 있는 달의 개수)에 따라 처리가 갈림:

활성월 1개탈락 (판정 근거 부족)
활성월 2개검정 없이 통과 (자유도 부족해서 검정해도 의미 없음)
활성월 3개 이상카이제곱(X²) 검정으로 월별 변동이 과도한지 확인 → 과도하면 탈락

게이트 ③ 유의성 — "기존 등급과 통계적으로 확실히 다른가"

셀의 실측 CVR로 Wilson 95% 신뢰구간을 구하고, 이 구간 전체가 기존 등급의 CVR 밴드를 완전히 벗어나야만 조정. 구간이 기존 밴드와 조금이라도 겹치면 "표본잡음과 구별 안 됨"으로 보고 조정하지 않음 (보류).

확신 상향가장 보수적으로 잡은 CVR 하한조차 기존 등급 밴드 상한보다 높음 → 등급 상향
확신 하향가장 후하게 잡은 CVR 상한조차 기존 등급 밴드 하한보다 낮음 → 등급 하향
보류그 외 (밴드와 겹침) → 조정 안 함
게이트①②를 통과한 셀만 대상. 이후 게이트③(유의성) 결과에 따라 "실측 CVR로 계산한 새 등급(grade_obs)" 또는 "기존 등급(g_glob) 유지"가 결정되며, 게이트③에서 벗어나지 못해도(겹침/보류) 탈락 처리되지 않고 다음 단계(2단계 ROAS 미세조정)로 그대로 진행됨.

2단계 — ROAS 미세조정 (WEB>매출(쇼핑ROAS) / APP>매출(쇼핑ROAS) 세그먼트)

DB전환 KPI는 대상 아님. 게이트 ①②를 통과한 셀만 대상 (③ 통과 여부는 무관 — ③에서만 걸린 셀도 여기 들어옴)

  • 그 광고주의 전체 ROAS 대비 이 지면의 ROAS가 몇 배인지(상대 배수) 계산 — 절대 ROAS를 안 쓰는 이유: 광고주마다 객단가가 달라서 절대값으로 비교하면 지면 차이가 아니라 광고주 차이가 돼버림
  • 전환 ≥ 10건 이고 상대 배수 ≥ 2.0배 → 등급 1칸 상향
  • 전환 ≥ 10건 이고 상대 배수 ≤ 0.5배 → 등급 1칸 하향
  • 그 외 → 변화 없음
등급표 끝(최상위/최하위)에 이미 있는 셀은 조건을 충족해도 실제로는 등급이 안 움직임 (클램프). 정상 동작이며 버그 아님.

3단계 — 조정 확정 판정

1단계 또는 2단계에서 등급이 한 번이라도 바뀌었는데, 최종 등급이 기존 등급과 실제로 다른 경우만 "조정 확정"으로 결과에 산출한다.

2단계가 등급을 원래대로 되돌린 경우 → "되돌림" 처리, 결과에서 제외
즉 1단계가 등급을 올렸는데 2단계 ROAS 검정에서 다시 원래 등급으로 내려버리면, 그 셀은 최종적으로 "조정 없음"과 동일하게 취급되어 산출되지 않는다.

산출 결과에 담기는 값

컬럼설명
세그먼트 4개 키 + 광고주 + 지면그 셀의 식별자 (KPI, 상품유형, 플랫폼, 광고주ID, 지면ID)
부여 등급 (grade_new)이 광고주에게만 적용될 새 등급
기존 업종 등급 (g_glob)원래 등급. 롤백하거나 역추적할 때 반드시 필요
근거 클릭 · 전환 (n, k)판정에 쓰인 실적 (감사·검증용)
기존 업종 등급을 결과에 함께 남기지 않으면, 나중에 어느 셀이 무엇에서 무엇으로 바뀐 건지 추적이 안 됨 — 반드시 같이 저장.

실제 산출 규모 예시 (6개월 · 소진 상위 300 · 게이트② 적용 기준)

KPI · 세그먼트조정 셀광고주 수지면 수
쇼핑 ROAS · 배너·WEB66419762
쇼핑 ROAS · 아이커버·WEB1,00218062
쇼핑 ROAS · 배너·MOBILE700117201
쇼핑 ROAS · 아이커버·MOBILE70716155
DB 전환 · 배너·WEB2815845
DB 전환 · 아이커버·WEB26716
DB 전환 · 배너·MOBILE1434071
DB 전환 · 아이커버·MOBILE221110
APP ROAS · 배너·MOBILE44411212
단순 합3,989734
유일 지면 수 (중복 제거)518

참고 대시보드: advertiser-media-personalization.pages.dev

전환 하한(k) 비교 송출팀 의견 필요

셀 = (광고주, 지면) 조합 하나. 현재 게이트①은 전환 하한 k≥1을 기본으로 하고 있으나, k≥0(전환 없어도 표본 조건만 맞으면 통과)으로 완화할 경우 조정 규모(셀 수)가 어떻게 달라지는지 비교. 등급 이동폭(칸수) 하한별로 값을 나눠 확인 가능. 적절한 k값은 송출팀에서 의견 제시 필요

칸수 하한전환 하한 k≥1 (현재 기본)전환 하한 k≥0
상위 300 조정 셀상위 300 유일 지면상위 300 조정 셀상위 300 유일 지면
≥ 1칸3,9895187,303586
≥ 2칸3,4374656,533537
≥ 3칸3,0844326,039505
≥ 4칸2,4143804,904455
≥ 5칸1,6853083,658392
≥ 6칸1,0322482,394324
≥ 7칸6571861,632248
≥ 8칸3541081,007155
≥ 9칸2205975997
≥ 10칸662228946
≥ 11칸19911418

k≥0으로 완화하면 조정 셀·지면 수가 전 구간에서 약 1.8~2.6배 늘어남. 전환이 아예 없는 셀까지 조정 대상에 포함되는 셈이라, 표본 신뢰도와 조정 규모 사이의 트레이드오프를 검토해 k값을 확정할 필요가 있음.

핵심 파라미터 요약

파라미터의미
노출 하한배너 10,000 / 아이커버 1,500광고주 게이트 (상품별로 다름)
M (대상 지면 수)300소진 상위 절단 개수 (상한, 실제는 min(300, 집행 지면 수))
전환 하한 (게이트①)≥ 1표본 게이트
최소 활성월 (게이트②)2이보다 적으면 탈락
검정 최소 활성월3이 이상일 때만 카이제곱 검정 수행
신뢰수준양측 95% (z=1.96)Wilson 구간·과분산 검정 공통
전환 하한 (2단계)≥ 10ROAS 미세조정 적용 최소 전환
ROAS 상대 배수 임계상향 2.0배 / 하향 0.5배2단계 ±1칸 이동 기준
판정기간6개월 (기본)기존 지면 등급 집계 기간과 동일

개발 시 유의사항

  • 기존 업종 등급(g_glob)은 이 로직에서 계산하지 않음 — 별도 파이프라인 산출물을 DB에서 읽기만 함
  • 광고주 제외 목록(CPS 등)은 매 실행 시 쿼리로 갱신 — 하드코딩 금지 (조회 시점마다 달라짐)
  • 판정기간 내 언제 집행했는지는 보지 않음 — 조정 확정 셀의 약 13%는 최근 3개월 집행 이력이 없는 셀. 최신성이 필요하면 게이트가 아니라 판정기간 자체를 줄이는 방향으로 검토
  • 2단계(ROAS)는 1단계(CVR) 판정의 보강 증거가 아니라 자기 근거로 별도 작동 — 두 신호가 엇갈리면 순 이동이 줄어드는 게 정상
  • 등급표 조회는 딱 두 군데뿐: 실측 CVR → 등급 변환 시, DB에서 읽은 기존 등급의 CVR 밴드 조회 시

셀 하나가 거치는 판정 흐름

(광고주, 지면) 셀 하나가 시작부터 최종 등급 확정까지 거치는 전체 판정 경로

판정 흐름도

요구사항 정리 — 필수 / 검토 / 선택

개인화 플로우 구현을 위해 확정되어야 할 항목과 우선순위

구분항목
필수지면 등급 테이블에 advertiser_id 추가된 신규(개인화 조정) 테이블 설계
필수송출 로직에 "조정 테이블 우선 조회 → 없으면 기존 지면등급" 구조 반영
필수빌링팀 데이터 적재 검증 (송출된 등급 기준 그대로 정확히 적재되는지)
필수개인화 지면 등급 조정 테이블(배치 데이터) 30일 보관 (빌링팀 최소 요구 14일 상회하도록 송출팀과 협의 확정)
필수지면 등급 생성 데이터 집계 기간은 기존 지면 등급 기준과 동일하게 최근 6개월로 적용
필수개인화 조정 테이블에 적용일시 컬럼 추가 (해당 개인화 등급이 실제로 적용된 일시 · 배치 완료 직후 기록)
검토개인화 대상 지면 개수 300개로 확정 · 추후 확대 가능성 있어 확대 시 배치 성능 재검증 필요
검토개인화 지면 등급 여부를 키값으로 추가할 경우 송출 테이블 전체 재설계 필요 — 기존 데이터 마이그레이션 및 클릭 데이터 관련 이슈 우려
검토99등급 산정 기준 보완 방식 (세션 전환 5회 미만 기준의 역설 문제)
검토배치 처리 성능 — 셀(광고주×지면) 단위 계산량에 따른 배치 소요 시간 검증
검토히스토리 테이블 DDL 검토 및 쿼리 설계 과정에서 빌링팀 추가 요구사항 발생 가능성 있음 (빌링팀 요청)
선택광고주 규모/지면 등급별 차등 최소 보유 기간 (신규 vs 기존 광고주 구분 등)
선택개인화 등급 변경 이력 로그/알림 기능

송출팀 우려사항 리스크

1현재 지면 등급 배치만으로도 약 1시간 소요 — 개인화 배치 추가 시 소요 시간 추가 증가 예상
2현재 스마트 유닛 인프라도 간신히 안정화한 상태 (과거 유사 기능 추가 시 인프라 이슈 이력 있음)