번개장터의 디지털 광고 시스템2: 예측

Kelly (이명휘)
번개장터 기술 블로그
11 min readSep 24, 2021

참고: 해당 글은 2020년 여름에 작성 되었습니다. 현재와는 많은 기술격차가 있을 수 있습니다.

User Response: Click Prediction (Estimation)

특정 고객으로부터 추출된 노출과 클릭 히스토리는 큰 의미를 갖게 됩니다. 고객에게 타게팅 된 광고를 제공하고 노출시키는 것을 위한 발판이 되기 때문입니다. 이는 매력적인 광고 상품의 적절한 노출을 기대해볼 수 있으며, 중고 플랫폼을 서비스하는 번개장터 입장에서는 광고 수익의 증대로 나타날 수 있습니다. 또한, 미리 수익 및 eCPM(Effective Cost Per Mille)을 추측해 광고의 효율을 명확하게 측정할 수도 있습니다.

추천 시스템과 같은 고도화 기술이 발전하는 것과 더불어 광고의 효율을 높이기 위한 Click(CTR) Prediction 기술 또한 비슷한 기법들로 발전하게 되었습니다. 번개장터에서도 이에 발 맞춰 광고 효율 향상을 위해서 광고 최적화 연구 및 기술 개발을 꾸준하게 진행해 왔습니다. 해당 파트에서는 번개장터의 Click Prediction 모델을 개발한 과정과 결과에 대해서 말씀드리도록 하겠습니다.

Dataset (Feature)

번개장터에서의 Click(CTR) Prediction은 노출과 클릭에 대한 히스토리 데이터를 이용해 모델을 생성하게 됩니다. 이때 실제 상품에 대한 노출 대비 클릭 수는 매우 희소 때문에 데이터 불균형 문제가 나타납니다. 아래는 번개장터에서 노출 대비 클릭이 차지하는 수치를 대략적으로 설명한 차트입니다.

위의 데이터 불균형 문제들을 해결하기 위해서 언더샘플링 및 오버샘플링을 이용하여 데이터의 균형을 맞춰야 하는게 맞으나, 실제 적용을 해보았을 때 크게 성능에 영향을 주는 점을 발견하지 못해 샘플링을 진행하지 않고 모델을 구성하였습니다. 또한, 노출 및 클릭 데이터는 매우 방대하기 때문에 feature의 수가 증가할 수록 차원의 크기도 증가하는 문제가 있기 때문에 차원을 축소하거나 Feature 중요도를 고려해 그 수를 가볍게 만드는 것이 중요합니다.

Click Prediction을 현재는 검색광고에 녹여내고 있기 때문에 광고 정보(Ad feature) 및 고객의 데모그래피 정보(Context feature)외에 질의 요소 (Query feature)를 활용한게 특징입니다.

Model Algorithm

Click Prediction과 관련한 많은 알고리즘들이 존재하기 때문에 이중 빠르고 성능이 좋은 최적의 알고리즘을 찾기 위하여 많은 테스트를 거쳤습니다. 아래는 번개장터에서 테스트를 진행한 알고리즘의 간단한 설명 및 결과입니다.

  • Logistic Regression

전통적으로 Click Prediction에서 가장 간단하면서 강력한 성능을 내는 모델입니다. 이미 많은 광고 플랫폼 회사에서 활용되었으며 충분히 검증된 알고리즘이기도 합니다.

위는 Logistic Regression 최적화 문제를 풀기 위한 수식입니다. 𝑥𝑖는 Feature벡터, 𝑦𝑖는 클릭여부(레이블), d는 학습 데이터셋(인스턴스)을 의미합니다. 여기서 𝜙(𝑤,𝑥)=𝑤⋅𝑥 부분은 우리가 익히 알고 있는 선형모델이 됩니다. 최종적으로 최소의 w를 구하는 것이 목적이며 여기에 추가로 정규화(Regularization) 파라미터를 추가해 최적화를 진행할 수 있습니다.

하지만 가중치를 이용해 Feature 간의 결합(Interaction, Conjunction)을 설명하는 데 있어서 적합하지 않은 단점을 가지고 있습니다.

  • Factorization Machine (Deep Learning)

FM은 2010년에 Randle, S.에 의해 발표되었으며, 현재 번개장터 개인화 추천 시스템에서 활용 중에 있습니다. 빠른 연산 속도를 지니고 있는 것이 특징입니다. 진보화되어 Kaggle의 CTR prediction Competition (Criteo Co.)에서는 DeepFM이라는 이름으로 활약한 이력이 있습니다. 사실 FM의 장점은 수식을 아름답게 고쳐 빠른 연산속도를 만들어낸 것도 있지만, 고차원 Feature 간의 Interaction을 정교하게 계산 & 학습해 준다는 점도 큰 특징입니다.

논문과 오픈소스로 공개된 DeepFM 소스를 기반으로 번개장터에 알맞게 Pytorch를 이용해 재구현 했으며, DNN(Deep Neural Network) 레이어를 추가로 concat한 형태로 구성하였습니다.

아래는 번개장터가 구성한 아키텍처 입니다.

  • LightGBM

LightGBM은 Microsoft에서 공개한 Tree 기반(GBDT) 알고리즘입니다. Tree 형태가 수직적으로 확장(Leaf-Wise) 되기 때문에 연산량을 줄일 수 있습니다. 이름만큼이나 가볍고 빠른 성능을 지니고 있습니다. GPU 활용 및 효율적인 병렬작업을 할 수 있도록 다양한 기능도 지원하고 있습니다. 학습 후, Feature의 중요도를 알 수 있는 Feature Importance 기능을 손쉽게 Feature를 골라낼 수도 있습니다.

Python으로 제공하는 라이브러리를 활용했고, LightGBM 특성상 One-hot encoding를 활용해 고차원을 만들어내기 보다 Label encoding을 사용했습니다.

결국 현재 Click Prediction에 활용 중인 번개장터의 학습 알고리즘은?

현재 번개장터는 LightGBM을 이용하고 있습니다. 성능도 준수하지만 무엇보다도 계산(Computation) 코스트를 획기적으로 줄일 수 있다는 장점을 가지고 있었습니다. 결코 적지 않은 데이터 셋을 학습에 이용하다 보니 비용에 대한 고민도 생각을 해봐야 합니다. 한때 유행했던 딥러닝을 이용해 멋지게 레이어를 쌓는 것도 중요하지만, 성능과 비용을 동시에 만족시킬 수 있는 알고리즘이 가장 멋진 알고리즘이라고 생각하였습니다.

참고로 종합적인 지표(성능,속도)로 보면 Logistic Regression < 그외 앙상블(Xgboost, RandomForest) < DeepFM ≤ LightGBM 순이었습니다.

Metric

Click(CTR) Prediction은 데이터의 불균형으로 인해서 정확도(Accuracy)나 재현율(Recall)과 같은 평가 지표를 사용하기가 어렵습니다. 노출 대비 클릭 할당이 3~4%밖에 되지 않기 때문에 정확도는 매번 90%를 상회하는 문제가 나타납니다. 학습 시 수많은 검증 데이터에서 하나만 맞춰도 정확도에 엄청난 영향을 주기 때문입니다.

주로 논문들을 보면 AUC(Area Under ROC)와 RIG(Relative Information Gain)를 평가 지표로 사용합니다. AUC는 흔한 지표이니 생략하고, RIG에 대해서 잠시 말씀을 드리도록 하겠습니다. RIG는 베이스 Log loss(Entropy)를 기반으로 상대적 이득을 측정하는 방법입니다. Click(CTR) prediction 특성상 Log loss가 중요하기 때문에 Log loss의 감소는 모델 성능 향상에 있어서 매우 중요한 역할을 하게 됩니다.

검증 데이터 셋의 평균 CTR을 Baseline으로 구성하고, 위의 식을 이용하여 Baseline 과의 증감률을 확인하여 평가 지표로 구성하였습니다.

Implementation (ML 파이프라인)

머신러닝 프로젝트는 아이디어와 모델만으로는 실제 구현이 힘듭니다. 전처리부터 서빙까지 엔지니어링 톱니바퀴가 정확히 맞물려야 합니다. 여기서 추가로 돈과 연관되는 부분은 절대 무시할 수 없는 부분이기도 합니다. 아래는 번개장터의 Computational Advertising 파이프라인을 요약한 그림입니다.

노출 및 클릭 로그를 담아 놓는 Data warehouse에서 데이터를 가져와 Preprocessor(전처리기)에서 특정 시간마다 전처리 작업을 수행합니다. 로그 데이터들을 이쁘게 가공하는 작업(결측값 제거)을 진행하고, 학습에 필요한 Feature들을 선별하는 작업을 거치게 됩니다. Feature들은 학습에 알맞게 레이블링하여 AWS Redis(ElasitcCache)로 구성된 Feature Store에 저장되며, 추가적으로 S3에 파일로 저장됩니다.

가공된 데이터를 토대로 Modeler에서 학습을 진행하게 되는데, 모델을 학습할 때에는 AWS Sagemaker를 활용하였습니다. Sagemaker에서는 전처리부터 서빙까지 다양한 기능을 제공하지만, 번개장터는 훈련 작업 용도로 Python 코드를 구성하였습니다. 알고리즘에 따라 다양한 인스턴스(CPU, GPU)들을 쉽게 테스트 해볼 수 있었으며, 학습 종료 시 컨테이너도 자동으로 내려가기 때문에 온디맨드로 실행되어 금액이 낭비되는 것을 방지할 수 있습니다. 또한, 스팟 인스턴스 설정을 통해 금액을 적절하게 아낄 수 있다는 것도 장점입니다.

최종적으로는 제작된 학습 모델을 이용해 Serving API가 광고 서버에 전달해 주는 역할을 하게 됩니다. 여기서 특이점은 Serving 용도로 기존 Flask에서 FastAPI를 도입하였는데 여러 장점이 있어서 매우 만족스럽게 사용하고 있습니다. (자동 Swagger 스펙문서 구현, 간편한 파라미터 Validation 등)

참고로 번개장터 머신러닝 파이프라인은 기본적으로 Airflow를 통해서 순차적으로 배치작업이 수행됩니다. 그리고 번개장터에서는 크게 Kotlin과 Python을 사용하고 있는데, 머신러닝 모델 코드 및 Airflow을 사용을 제외하면, API를 비롯한 거의 모든 코드는 Kotlin으로 구성됩니다.

번개장터 광고의 미래: CVR Prediction(Estimation)

모든 디지털 광고에서의 성과 지표는 매체의 매출도 있겠지만, 판매자단에서의 구매 전환율도 있습니다. 전환율을 예측하는 것은 노출의 가치를 추정하는 데 있어서 필수적입니다. 번개장터는 전환율을 측정하기가 매우 어려운 구조입니다. C2C 특성상 광고로 인해 생긴 판매자의 매출을 파악할 수 없는 환경이기 때문입니다. 이러한 이유로 전환율을 측정하는 방식을 새롭게 정의하였습니다. 광고 상품에 들어와 번개페이나 번개프로미스 버튼 클릭을 전환으로 판단하였습니다.

전환율 예측은 얼핏 보면 CTR을 예측하는 방식과 비슷해 보이지만 예상치 못한 변수가 하나 존재하여 걸림돌이 되곤 했습니다. 광고 캠페인이 노출된 후 긴 시간이 지나서야 전환이 이루어지는 경우도 있기 때문입니다. 연구자들은 이걸 지연된 피드백(Delayed feedback)이라고 불렀습니다.

전환율에 주요 영향을 주는 메커니즘은 크게 두 가지가 존재하는데 첫 번째는 다수의 노출에 의해서 나타나는 Post-View 전환이 있고, 두 번째로는 다수의 클릭에 의해서 나타나는 Post-Click 전환이 있습니다. 주요 연구에서는 클릭에 의해서 나타나는 모델을 사용하고 있으며, 생존분석(Survival Analysis), 음이항 회귀(Negative Binomial Regression) 등을 활용해 광고가 전환되는 시간에 대하여 분석하였습니다.

번개장터도 ROI 및 ROAS를 측정 및 예측하기 위한 니즈가 과거부터 있었으며, 앞으로는 전환율을 예측하기 위해 노력할 예정입니다.

결론: 3줄 정리

  1. 번개장터에서는 효율적인 광고 시스템을 지향해 왔습니다.
  2. 이를 위해 다양한 광고 기능 중 하나인 Click Prediction 체계를 기획하였습니다.
  3. 이를 기반으로 다양한 ML 모델 및 파이프라인을 구현하였습니다.

그 외

번개장터 데이터팀에서는 인재분들을 모시고 있습니다. C2C기반의 Personalized Recommendation, Computational Advertising, Fraud Detection 같은 고도화된 A.I 기술을 연구 및 개발하고 있습니다.

지원하러 가기

--

--