본문 바로가기
SingleStoreDB/엔지니어링

중복 광고 타겟팅으로 전환 수 늘리기

by 에이플랫폼 [Team SingleStore Korea] 2019. 8. 23.

디지털 광고는 수십억 개 이상의 상호작용을 통해 이루어지는 숫자 게임입니다. 광고주와 출판사는 트래픽을 사고팔기 위한 예측 모델을 구축한 다음, 그러한 모델을 반복해서 적용합니다. 심지어 모델에 대한 작은 변화, 즉 전환율을 1%의 비율로 바꾸는 변화는 10억 건의 거래 과정에서 수익에 지대한 영향을 미칠 수 있다.


타겟팅된 광고를 게재하려면 관심 분야 및 인구 통계 정보로 분류된 사용자 데이터베이스가 필요합니다. 세분화를 통해 보다 효과적인 타겟팅이 가능합니다. 예를 들어 일반적인 음악 팬 목록보다 락앤롤, 재즈 및 클래식 음악을 좋아하는 사용자 목록이있는 경우 더 관련성 높은 광고를 선택할 수 있습니다.

여러 사용자 세그먼트 간의 중복을 알면 타겟팅에 대한 새로운 기회가 열립니다. 예를 들어, 사용자는 클래식 음악의 팬이고 샌프란시스코 만 지역에 살고 있다는 것을 알면 샌프란시스코 심포니 티켓 광고를 낼 수 있습니다. 이 광고는 대다수의 청중과 관련이 없지만, 이 특정 "중복" 부문에 대해 높은 비율로 전환될 수 있습니다. 비슷하게, 당신은 남부 캘리포니아의 클래식 팬들에게 LA 필하모닉 티켓을 제공할 수 있습니다. 아웃사이드 랜즈 티켓은 베이 지역의 락앤롤 팬에게 제공합니다.

최근까지 기술적인 문제로 인해 중복 타겟팅이 어려워졌습니다. Ad Exchange의 원래 백엔드인 기존 OLTP 데이터베이스는 실시간으로 오버랩 분석을 수행하기 위한 쿼리 성능을 제공할 수 없습니다. 반면, 사전 계산 세그먼트 겹침은 너무 많은 세그먼트 조합(예 : 클래식 및 SF, 록 및 SF, 재즈 및 SF,…, 클래식 및 LA, 록 및 LA 등)을 저장해야하며 계산 및 저장량이 증가합니다. 더 많은 세그먼트 유형을 결합하기 시작할 때 더 빠릅니다.

SingleStore는 단일 데이터베이스에서 실시간 데이터 수집 및 세그먼트 분석을 통합하여 보다 간단한 접근 방식을 가능하게 합니다. 이 게시물에서는 SingleStore를 사용하여 대상 세그먼트 겹침을 실시간으로 계산하는 시스템을 구축하는 방법에 대해 설명합니다.

데이터의 크기와 모양

20 억 명의 사용자 (인터넷의 모든 사용자)가 있고 그 사용자가 10 만 개의 정의된 범주 또는 "세그먼트"의 구성원일 수 있다고 가정합니다. 클릭 수는 세 가지를 기록됩니다 (user_id, segment_id, 타임 스탬프). 테이블 정의에 다음 DDL을 사용합니다.

CREATE TABLE user_groups

(

user_id BIGINT ,

segment_id INT,

ts TIMESTAMP ,

shard key(user_id) ,

key segment (segment_id) using clustered columnstore

)

이 데이터는 고유하지 않으므로 여러 번 다른 사용자와 그룹이 여러 번 출력될 수 있습니다.

이제 매달 약 1,000 억 건의 클릭(클릭)을 수집한다고 가정 해보십시오. 새로운 데이터를 지속적으로 로드하면서도 2 초 이상의 두 세그먼트 이상에 걸친 Union 및 Intersection을 계산하는 것은 레거시 기술로는 불가능했습니다.

SingleStore는 대용량 저장소를 효율적으로 저장하고 검색 할 수 있도록 Columntore 인덱스를 제공합니다 . SingleStore Columnstore 테이블은 압축률이 높은 형식으로 디스크에 유지됩니다. 2 천억 개의 클릭 레코드는 1TB 미만의 압축 데이터와 같습니다.

데이터 로딩 및 정렬 순서 유지

한 달에 1,000 억 개의 레코드가 하루에 약 30 억 개의 레코드로 작동합니다. 이러한 수준의 수집을 제공하기 위해 SingleStore는 SingleStore Loader라는 오픈 소스 도구를 도입하여 AWS, S3, HDFS 또는 로컬 파일 시스템에서 빠른 속도로 대량 데이터를 로드할 수 있습니다. 데이터가 로드되면 SingleStore는 새 데이터를 백그라운드에서 기존 데이터와 정렬하고 병합합니다. 비용이 많이 드는 완벽한 정렬 순서를 유지하는 대신 SingleStore는 이 설명서 페이지에 설명된 대로 데이터 세트를 "거의 정렬 된" 상태로 유지합니다. 데이터 로드 중에 어느 정도의 정렬 순서를 유지하는 것이 Union 및 Intersection에서 1 초 미만의 쿼리 성능을 제공하는 데 중요합니다.

데이터 로드는 완전히 트랜잭션 방식이며 다른 쿼리를 방해하지 않습니다. 레거시 데이터웨어 하우스와 같이 데이터를 "비울" 필요가 없습니다. SingleStore는 자동으로 데이터를 정렬하며 SHOW COLUMNAR MERGE STATUS 명령을 사용하여 진행 상황을 모니터링 할 수 있습니다.

복합 세그먼트 찾기 및 타겟팅

단일 테이블에있는 모든 사용자 데이터를 사용하면 SQL을 통해 사용자 세그먼트 간의 관계를 쉽게 분석하고 분석 할 수 있습니다.

다음 쿼리는 세그먼트 1 (s1)과 세그먼트 2 (s2)의 그룹 통합을 계산합니다.

SELECT

distinct segment_id

FROM

user_groups

WHERE

세그먼트 Intersection을 계산하는 방법에는 여러 가지가 있습니다. 직관적으로 쿼리를 자체 조인으로 작성하는 단계로 넘어갈 수 있지만 실제로는 내장 함수를 영리하게 사용하여 더 간단하게 작성할 수 있습니다. 다음 쿼리는 s1과 s2의 교차점을 계산합니다 (예 : s1과 s2의 모든 사용자).

SELECT

user_id,

(max(segment_id = s2) and max(segment_id =s1)) both_segments

FROM

user_groups

WHERE

segment_id IN(s1, s2)

GROUP BY

user_id

HAVING

both_segments = true

이 쿼리에서 표현식 (max (segment_id = s2) 및 max (segment_id = s1))은 user_id로 식별 된 지정된 사용자가 세그먼트 s1과 세그먼트 s2에 속하는지 테스트합니다. segment_id = s2는 segment_id가 s2와 일치하면 1 (true)을 반환하고 그렇지 않으면 0 (false)을 반환합니다. query의 프로젝션에서 max (segment_id = s2)는 segment_id가 s2와 일치하면 1을 반환하고 그렇지 않으면 0을 반환합니다. "이 user_id는 두 세그먼트에 속합니다."와 같이 전체 표현식은 변수 both_segments로 요약됩니다.

약간의 조정만으로 이와 같은 쿼리를 사용하여 다른 세그먼트 겹침 질문에 답변할 수 있습니다. 예를 들어 다음 쿼리를 사용하여 s1이 아닌 s1의 모든 사용자를 찾을 수 있습니다.

SELECT

user_id,

(max(segment_id = s1) and min(segment_id !=s2)) s1_only

FROM

user_groups

WHERE

segment_id IN(s1, s2)

GROUP BY

user_id

HAVING

s1_only = true

이전 쿼리의 both_segments와 마찬가지로 식 (max (segment_id = s1) and min (segment_id! = s2))은 user_id uid가 일부 있는 경우에만 1 (true)을 반환합니다.

1 초 미만의 쿼리 성능

SingleStore 쿼리 옵티마이저는 user_id에 의해 데이터 세트가 분할되므로 개별 user_id의 계산을 각 개별 파티션으로 푸시한 다음 결과를 요약할 수 있다는 것을 이해합니다.

또한 각 파티션은 segment_id로 정렬되므로 SingleStore는 대부분의 데이터를 실제로 읽지 않고도 건너 뛸 수 있습니다. 쿼리와 관련된 테이블 부분만 압축 해제하고 사용해야 합니다. 이러한 효율적인 검색으로 인해 각 파티션은 수십만 개의 레코드를 병렬로 처리하므로 SingleStore는 1 초 이내에 오버랩 쿼리를 계산할 수 있습니다.

데이터 보존

본질적으로 광고 타겟팅 데이터는 나이가 들어감에 따라 관련성이 떨어집니다. 데이터 삭제는 단순히 삭제 쿼리를 실행하여 이루어집니다.

DELETE

from

user_groups

where

ts < date_sub(now(), interval 2 month);

명령문이 실행된 후 SingleStore는 백그라운드에서 Column 세그먼트를 압축합니다. 삭제 작업은 진행중인 쿼리를 방해하지 않습니다. 이를 통해 광고 플랫폼을 온라인 상태로 유지하고 24 시간 내내 새로운 데이터에 대한 쿼리를 실행할 수 있습니다.

하드웨어

설명된 워크로드는 3 개의 노드, 즉 하나의 Aggregator와 두 개의 Leaf(모두 Amazon cr3x.large 인스턴스)에서 실행할 수 있습니다. 정렬된 정수 목록의 압축률이 높기 때문에 노드 당 700GB의 SSD로 2 천억 개의 데이터 포인트를 저장하기에 충분합니다.

심화

사용자 세그먼트를 결합하고 교차 시키면 광고주는 사전 수집된 데이터만 사용하여 잠재 고객을 더 잘 이해할 수 있습니다. 기존의 데이터베이스 기술 제한으로 인해 과거에는 이러한 유형의 분석이 복잡해졌습니다. 그러나 SingleStore를 사용하면 개념과 실행 모두에서 복합 세그먼트 컴퓨팅이 단순 해집니다.

이러한 기술은 디지털 광고 외부에도 적용됩니다. 잠재적으로 겹치는 범주를 분석해야하는 모든 비즈니스 문제는 이 빅 데이터 벤 다이어그램을 활용할 수 있습니다. SingleStore를 사용하면 SQL만 사용하여 라이브 데이터에서 복합 세그먼트를 생성 할 수 있습니다.

April 14, 2015

Conor Doherty


https://www.singlestore.com/blog/overlap-ad-targeting/

Boost Conversions with Overlap Ad Targeting - SingleStore Blog - MemSQL is Now SingleStore

Advertisers & publishers build predictive models for buying & selling traffic. Learn how to boost conversions with overlap ad targeting. Read more now!

www.singlestore.com

​※ www.a-platform.biz | info@a-platform.biz