1:1로 설정해 클릭률이나 전환당 비용을 비교합니다.
이 페이지는 A2 안의 광고 항목 구성을 비교하는 실험을 다룹니다. 기존 시스템과 A2 사이에서 요청을 나누는 방식, 기존 시스템의 결과를 합쳐 비교하는 방식은 적용 전에 별도로 정합니다.
시작하기 전에
- 접속 정보: API 주소와 액세스 토큰을 준비합니다. 실험 조회·지표 조회에는 실험 읽기 권한, 생성·수정·삭제에는 쓰기 권한이 필요합니다.
- 대상과 광고 항목: 운영 담당자와 비교할 광고 단위 및 광고 항목을 준비하고 각각의 ID를 확인합니다. 광고 항목이 해당 광고 단위에서 송출 가능한지도 확인합니다. 용어와 관계는 주요 개념에서 확인합니다.
- 사용자 ID: 광고 요청에 같은 사용자의 ID를 일관되게 전달합니다. 요청 필드는 광고 요청 API에서 확인합니다.
- 데이터 전달: 상품 카탈로그, 사용자 행동 로그, 광고 이벤트 추적의 전달 상태를 확인합니다.
비교 기준 정하기
실험을 만들기 전에 운영 담당자와 다음 항목을 정합니다.
클릭률을 비교하려면 두 버킷에서 노출과 클릭을 같은 조건으로 기록합니다. CPA를 비교하려면 같은 전환 정의를 사용하고 비용이 집계되는지 확인합니다. 매출을 비교하려면 전환의
conversion_data.sales도 전달합니다.
주요 지표는 결과를 판단하기 위한 기준입니다. 실험 생성 요청에 별도의 KPI 필드를 넣지 않습니다.
지표별 필요한 데이터
같은 광고 단위·기간에서 비교하고, 비교하려는 설정 외의 조건은 유지합니다. 운영 중 설정을 바꾸면 변경 시각을 기록해 변경 전후 결과를 구분합니다.
사용자 배정
A2는 실험 ID와 광고 요청의 사용자 ID를 사용해 버킷을 결정합니다. 실험의 버킷 구성이 같다면 같은 사용자는 같은 버킷에 배정됩니다. 요청마다 버킷을 다시 무작위로 고르는 방식으로 구현하지 않습니다.- 같은 사용자의 ID를 요청마다 바꾸지 않습니다.
- 사용자 ID가 없는 요청에는 버킷 배정이 적용되지 않습니다. 실험의 광고 항목이 일반 광고 경쟁에 포함되어 송출될 수 있으며, 이 요청의 성과는 실험 버킷 지표에 집계되지 않습니다.
- 실험 도중 버킷 비중이나 구성을 바꾸면 같은 사용자의 배정이 달라질 수 있으므로 변경 시점과 내용을 기록합니다.
line_item_rotate: "random"은 배정된 버킷 안에서 광고 항목을 고르는 설정입니다. 사용자 버킷 배정과는 별개입니다.
proportion은 상대 비중입니다. 1:1은 두 버킷에 같은 비중으로 사용자를 배정한다는 뜻이며, 실제 노출·클릭 수가 정확히 반씩 나뉜다는 뜻은 아닙니다.
설정 필드
실험
버킷 buckets[]
각 광고 항목에는 다음 값을 넣습니다.
버킷의
gating, gating_policy와 광고 항목의 gating 등 고급 설정은 실험 생성 API의 스키마를 확인합니다. 비교하려는 설정 외의 조건은 동일하게 유지합니다.
API로 실험 만들기
1
요청 본문 작성
아래 내용을
experiment-create.json으로 저장합니다. 광고 단위 ID, 두 광고 항목 ID, 이름과 기간을 실제 값으로 바꿉니다. 생성 요청에는 실험 ID와 버킷 ID를 넣지 않습니다.2
실험 생성
생성 API를 호출합니다. HTTP
201 응답에서 실험의 id와 buckets[].id를 보관합니다. 생성한 실험은 inactive 상태입니다.3
설정 확인
조회 API로 대상, 기간, 버킷별 광고 항목과 비중을 확인한 뒤 실험을 시작합니다.
experiment-create.json
<experiment_id>를 응답의 실험 ID로 바꾸어 조회합니다.
실험 시작과 종료
상태는inactive → active → completed 순서로 변경합니다. active 상태이면서 현재 시각이 시작·종료 기간 안에 있을 때 실험이 적용됩니다. 같은 대상(target_type과 target_id의 조합)에는 active 실험을 하나만 둘 수 있습니다.
광고 단위 실험과 상위 게재 위치(placement) 실험은 대상이 달라 동시에 활성화될 수 있습니다. 같은 요청에 적용 가능한 실험이 겹치면 A2는 실험 UUID가 가장 작은 하나만 적용합니다. 비교할 트래픽에 상위 게재 위치 실험이 겹치지 않는지도 확인합니다.
수정 API는 전체 설정을 받습니다. status만 보내지 않고 이름, 대상, 기간, 전체 버킷 구성을 함께 보냅니다. 다음은 앞선 실험에서 반환된 버킷 ID가 1, 2인 경우의 시작 요청입니다. 실제 응답에서 받은 ID와 설정으로 바꿉니다.
experiment-update.json
- 종료: 최신 설정을 조회한 뒤
status를completed로 바꾸어 전체 설정을 다시 보냅니다. 종료 시각이 지나면 트래픽에 적용되지 않지만 상태가 자동으로completed로 바뀌지는 않습니다. - 재시작: 종료한 실험을 다시 시작할 수 없습니다. 새 비교는 새 실험으로 만듭니다.
- 버킷 수정: 기존 버킷 ID를 유지합니다. 삭제할 버킷은 본문에서 빼지 않고
is_deleted: true로 보냅니다. 새 버킷은 ID를 생략합니다. 삭제한 ID를 포함해 한 실험에서 발급할 수 있는 버킷 ID는 총 15개입니다. - 실험 삭제:
inactive실험만 삭제할 수 있습니다. 삭제 API가 성공하면 HTTP204를 반환합니다.
실험 적용 확인
실험 설정을 저장한 뒤에는 실제 서비스 요청에서 광고가 반환된 응답으로 배정 결과를 확인합니다. 요청에는 같은 사용자의 ID를 일관되게 넣습니다. 광고가 반환되지 않는 경우에는 광고 송출 (고급)의 광고 없음 확인 항목을 먼저 확인합니다.
같은 사용자·실험·버킷 구성에서 같은 버킷이 반환되는지 확인합니다. 응답 구조는 광고 요청 API를 참고합니다. 배정 정보가 없으면 사용자 ID·상태·기간·대상을, 다른 실험 ID가 보이면 광고 단위와 상위 게재 위치의 실험 중첩을 확인합니다.
이 정보는 요청에 배정된 실험과 버킷을 확인하는 수단입니다. 광고 선택 결과나 노출·클릭·전환의 최종 집계까지 증명하지는 않으므로 아래 버킷 지표도 대조합니다.
on_ad_response에서 확인용 요청을 추가하면 노출도 기록되므로 실제 서비스 요청 기록을 기준으로 확인합니다.
결과 조회
실험 버킷 지표 API로 같은 기간의 버킷별 성과를 조회합니다. 다음 내용을experiment-metrics.json으로 저장하고 실험 ID와 기간을 바꿉니다.
experiment-metrics.json
응답의
total은 조회 기간의 버킷별 합계이며, timeseries는 시간 구간별 지표와 광고 항목별 내역입니다. bucket_id를 실험 설정의 버킷 ID와 연결합니다.
전환은 노출·클릭보다 늦게 발생할 수 있으므로 전환의 발생 시각과 조회 기간도 함께 확인합니다. 버킷 지표를 해당 기간에 노출된 사용자의 모든 후속 전환을 포함하는 누적값으로 해석하지 않습니다. 실험 기간 밖에서 발생한 전환까지 측정해야 한다면 원래 실험의 지표에 포함되는 범위를 별도로 확인합니다.
실험 전 정한 주요 지표로 비교하되, 같은 기간의 노출·클릭·전환과 버킷 비중도 함께 확인합니다. A2는 통계적 유의성을 계산하거나 성과가 좋은 버킷을 자동으로 선택하지 않습니다. 결과를 바탕으로 다음 적용 범위와 설정을 정합니다.
실험이 적용되지 않을 때
- 실험 상태가
active이고 현재 시각이 설정한 기간 안인지 확인합니다. - 광고 요청의 광고 단위 ID와 실험의
target_id가 같은지 확인합니다. - 광고 요청에 사용자 ID가 포함되어 있는지 확인합니다. ID가 없으면 실험 광고 항목도 일반 경쟁으로 송출될 수 있지만 버킷 지표에는 집계되지 않습니다.
- 광고 단위와 상위 게재 위치의 실험이 겹치는지 확인합니다. 요청에 적용 가능한 실험 중 UUID가 가장 작은 하나만 적용됩니다.
- 버킷 비중과 광고 항목, 해당 광고 단위의 송출 조건을 확인합니다.
- 지표가 비어 있다면 조회 기간·시간대와 광고 이벤트 추적을 확인합니다. 설정 조회 성공만으로 실제 트래픽 적용과 집계까지 확인한 것은 아닙니다.
