오늘의집 검색/디스플레이 광고 내재화 프로젝트 #2
모델 개선 및 최적화 여정
2026년 1월 2일Dominic, Josh, Jordan, Paul

Introduction

오늘의집의 광고 시스템의 내재화는 단순히 외부 의존성을 제거하는 것 이상의 의미를 갖습니다. 우리 플랫폼만의 독특한 사용자 행동 패턴과 비즈니스 목표를 반영할 수 있는 시스템을 구축함으로써, 외부와 비교해도 경쟁력 있는 기술적 독립성과 추천 기술 수준을 확보하고자 했습니다.

1부에서 다룬 'Bolder Faster' 문화를 통해 우리는 실험 속도의 병목을 해결했습니다. 일주일이 걸리던 A/B 테스트를 하루 만에 완료할 수 있는 인프라를 구축했고, 실패를 두려워하지 않고 빠르게 학습하는 조직 문화를 정착시켰습니다. 이제 우리에게는 ‘빠른 실험 사이클’이라는 강력한 무기가 생긴 것입니다.

하지만 새로운 도전이 기다리고 있었습니다. 내재화 초기 모델은 업계 벤치마크 대비 CTR이 30% 낮았고, 사용자들로부터 "전혀 관련 없는 광고가 뜬다"는 피드백이 지속적으로 제기되었습니다. 이를 해결하기 위해 검색/디스플레이 광고의 두 핵심 컴포넌트인 Producer(후보 선정)와 Ranker(순위 결정)를 개선하는 데 집중했습니다. 이 글에서는 Producer의 개선부터 Calibration Layer의 정교화, Feature Engineering의 다양한 시도까지, 오늘의집에서 ML 모델 성능을 벤치마크 수준으로 끌어올리면서 얻은 몇 가지 접근법과 성과를 공유하려고 합니다. 특히 기술적 도전 과정에서 발생한 문제점들과 시도한 해결 방법들을 중심으로 구성했습니다.


1. Producer 개선 : Two Tower Model

Two Tower Architecture의 설계

Two Tower Model은 가장 직접적으로 유저 피드백을 활용하여 후보군을 선정할 수 있는 대표적인 방식입니다. 아래 그림처럼 Query Tower는 사용자 컨텍스트를 인코딩하고, Item Tower는 상품과 그 메타데이터를 독립적으로 인코딩합니다. 두 타워의 임베딩 공간에서 계산된 유사도를 통해 의미적으로 연관된 후보를 실시간으로 선별할 수 있습니다.


In-Batch Negative Sampling

In-Batch Negative Sampling은 현재 학습 배치 내의 다른 Positive Pairs를 Negative로 재활용하는 기법입니다. Two Tower 모델은 User Tower와 Item Tower가 각각 독립적으로 임베딩을 생성하고, 그 두 벡터의 유사도를 통해 Positive/Negative 관계를 학습합니다. 이때 각 사용자에 대해 적절한 수의 Negative Item(즉, 클릭하지 않은 아이템)을 함께 학습할 수도 있습니다.

최초의 접근 방식은 사용자 노출 로그를 기반으로 특정 사용자가 클릭한 아이템은 Positive, 노출만 된 아이템은 Negative로 간주해 샘플링하는 것이었습니다. 이 방식은 현실적인 사용자 행동을 반영한다는 장점이 있지만, 모델 학습 시 매 스텝마다 노출 로그에서 개별 사용자에 맞는 Negative 후보를 불러와야 하므로 샘플링 연산 비용이 높고 메모리 접근도 비효율적입니다. 또한 사용자마다 k개의 Negative를 인위적으로 샘플링해야 하므로 Negative 후보의 다양성이 제한적이고 한 배치 내에서 서로 다른 사용자 간 임베딩 관계가 학습되지 않기에 Contrastive Signal이 제한됩니다. 이로 인해 전체 임베딩 공간의 구조를 충분히 학습하지 못하고, 로컬하게만 최적화되는 문제가 발생할 수 있습니다.

이 문제를 해결하기 위해 In-Batch Negative Sampling을 도입했습니다. 이 방식은 한 번의 배치에서 계산된 다른 (user, item) 쌍의 item들을 Negative로 재활용하는 구조입니다. 즉 배치 크기가 N이라면 각 사용자에 대해 나머지 N-1개의 아이템이 자동으로 Negative로 활용되며, 별도의 Negative Pool이 없이도 대량의 Negative 쌍을 한 번의 forward pass로 학습할 수 있습니다. Batch size 조절을 통해 Negative Pool을 충분히 활용할 수 있다면, 별도 샘플링 과정 없이 배치 내에서 자동으로 충분한 Negative를 확보하여 효율적이고 안정적으로 학습이 가능해집니다.


간결한 Model Pipeline

광고 상품은 전체 상품군에 비해 수가 훨씬 적기 때문에, 빠른 실험을 위해 서빙 모델 내부에 사전 계산된 Item Index를 포함하는 방식을 적용하는 간결한 파이프라인을 구성했습니다. ANN 기능을 모델 내부에서 수행할 수 있도록 하기 위해 ScaNN을 도입했습니다. TensorFlow 모델 내에서 직접 Retrieval을 수행하도록 설계함으로써, 별도의 벡터 DB 동기화 절차 없이도 여러 모델을 빠르게 실험할 수 있는 환경을 구축했습니다. 이런 구조의 서빙 방식은 일반적인 Two Tower 접근법에서 요구되는 (1) 유저 임베딩 추출과 (2) 아이템 임베딩과의 ANN 수행의 과정을 하나의 모델이 담당하게 됩니다. 결과적으로 짧은 시간 내 다양한 모델 테스트가 가능한 단일 파이프라인 구조를 실현할 수 있었습니다. 물론 이를 위해 메모리 사용량 관점에서 아이템 수용 한계를 로드 테스트로 검증했고, 해당 프로젝트에서는 충분히 감당 가능한 수준임을 확인했습니다. 다만 현재는 filtering, scaling 및 재사용성을 감안하여 상황에 따라 Milvus와 같은 Vector DB의 활용을 동시에 검토하고 있습니다.


Two Tower 모델의 개선 시도들

Score Threshold

1편에서 언급했던 실시간 지표 수집 엔진(Imply)를 통해 해당 모델 배포 후 클릭 전환율 성능을 확인한 결과, 유사도 점수가 감소하면 클릭 전환율도 감소하는 관련성을 확인할 수 있었습니다. 그러나 일정 수치 이하의 점수 구간에서는 이러한 관련성이 사라지면서 매우 낮은 클릭 전환율을 보이는 경향이 나타났습니다. 이에 따라 일정 이상의 후보군 수를 확보할 수 있는 점수대를 찾아서 제거하는 로직을 서비스 레벨에서 추가했습니다

이를 통해 연관성이 크게 떨어지는 아이템을 후보군 레벨에서 제거하여 이후 로직에 좀 더 양질의 후보군을 제공할 수 있게 되었고, 전체적으로 안정적인 클릭 전환율 성능을 유지할 수 있게 되었습니다.


Query Relevance Filter

Two Tower 모델을 제공하는 지면에는 크게 일반 광고 지면과 검색 광고 지면이 있었습니다. 일반 광고 지면에서는 기본적인 학습 과정으로도 다른 Producer 대비해서도 상위에 위치하는 성능을 보였으나 검색 광고에서는 단순 인기 상품 노출 형태보다 낮은 클릭 전환율을 보였습니다.

이를 분석해본 결과, 검색 광고 지면에는 유저 컨텍스트 뿐 아니라 유저가 해당 지면에 들어가기 위해서 사용한 쿼리 정보가 같이 들어가게 됩니다. 그런데 자주 등장하는 숏테일 쿼리에 대해서는 쿼리와 아이템이 충분한 연관성을 가지고 있지만, 자주 등장하지 않는 롱테일 쿼리에 대해서는 쿼리 연관성이 크게 떨어지고 유저 컨텍스트와의 연관성을 크게 가지고 가는 것을 파악할 수 있었습니다.

오늘의집에서는 특정 쿼리와 상품과의 연관성 점수를 가져올 수 있는 서비스가 있습니다. 이것을 서비스 레벨 필터로 활용하여 가져온 후보군 중 연관성이 크게 떨어지는 아이템을 제거하는 식으로 활용을 했습니다. 이를 통해서 일반 광고 지면의 Two Tower 모델에 준하는 성능을 달성할 수 있었습니다.


Optimizer

Two Tower 모델의 사용자/아이템 임베딩은 차원이 크고 업데이트가 빈번하기 때문에, 학습 과정에서 특정 벡터가 비정상적으로 커지거나 다른 차원과의 균형이 무너지는 현상이 성능에 영향을 줄 수 있었습니다. 초기에는 Adam Optimizer를 사용하고 있었지만 Adam이 weight decay를 정규화(L2 penalty)와 최적화(update)가 결합된 형태로 적용하기 때문에, 상황에 따라 임베딩 규모가 과도하게 커지는 패턴이 나타날 수 있습니다. 이 때문에 고빈도 아이템/쿼리의 임베딩은 빠르게 커지고, 반대로 드물게 등장하는 롱테일 쿼리·아이템의 임베딩은 충분히 업데이트되지 않는 경향이 생기면서 스코어 분포 전체가 불안정해지는 양상이 있을 수 있습니다.

정규화가 최적화와 분리되는 AdamW를 적용하면 위와 같은 가능성을 완화할 수 있다고 생각하여 이를 적용해보았습니다.  AdamW는 weight decay가 gradient 크기나 adaptive learning rate의 영향을 덜 받고 독립적으로 적용되기 때문에, 임베딩 스케일이 더 균일하게 유지될 가능성이 있었습니다. 또 Two Tower처럼 embedding parameter의 비중이 높은 모델 구조에서 특히 유효할 가능성이 있다고 보았습니다.

AdamW를 적용해 학습을 진행한 결과, HR@10이 Adam 대비 약 20% 더 높은 최대 성능을 기록했습니다. 이 결과는 AdamW의 decoupled weight decay가 Two Tower 구조에서 임베딩 품질과 점수 분포에 더 적절하게 작용한 것으로 해석할 수 있었습니다. 그래서 이후 실험에서는 AdamW를 기본 optimizer로 채택하게 되었습니다.


Learning Rate Scheduler

처음에는 고정 Learning Rate 기반의 학습 방식이었습니다. 그러나 좀 더 좋은 결과를 내기 위해선 Learning Rate를 시간의 흐름에 따라 조정할 필요가 있다고 판단하여 Learning Rate Scheduler를 도입했습니다. 여러 후보군(eg. StepLR)를 비교한 결과, CosineAnnealingWarmupRestarts 방식이 가장 좋은 성능 향상을 보였습니다. 이 스케줄러는 아래 그림처럼 Learning Rate가 변화하며 다음과 같은 특성을 가지고 있습니다.

  • Warmup Phase : 초반 몇 step 동안 학습률을 증가시켜 임베딩이 급격하게 흔들리지 않도록 완충 역할
  • Cosine Annealing Phase : 학습이 안정화될수록 학습률이 점차 감소하며 fine-tuning 효과를 유도
  • Restart : 특정 주기마다 학습률을 다시 높여 local minima에 빠지는 것을 방지

이를 통해서 HR@10 기준 약 3% 정도의 개선 효과를 확인했습니다.


Deep Neural Network Encoder Architecture

초기 Two Tower 모델에서는 사용자·아이템 타워 모두 비교적 단순한 MLP(Multilayer Perceptron) 기반 구조를 사용하고 있었습니다. 그러나 추천 시스템에서는 feature interaction이 성능에 중요한 역할을 하는 경우가 많기 때문에, 단일 MLP만으로는 충분한 표현력을 확보하기 어려울 가능성이 있었습니다.

특히 사용자 로그 기반 feature는 특정 조합에서 강한 비선형 패턴을 가지는 경우가 많고, 아이템 feature 또한 카테고리, 속성, 메타데이터 간 상호작용이 중요한 정보로 작용할 수 있습니다 이때문에 단순 feed-forward MLP보다 상호작용을 더 풍부하게 포착할 수 있는 구조가 적합할 수 있다고 판단했습니다. 이러한 가능성을 검증하기 위해 대표적인 interaction modeling 계열 구조인 DCN(Deep & Cross Network), MaskNet 등을 실험적으로 적용해 보았습니다.


DCN

DCN(참고: https://arxiv.org/pdf/1708.05123)은 cross layer를 통해 feature의 explicit interaction을 반복적으로 학습시키는 구조적 특성이 있습니다. MLP 기반 구조에서는 이러한 interaction이 암묵적으로만 학습되기 때문에, 사용자/아이템 임베딩이 충분히 복잡한 패턴을 포착하지 못할 가능성이 있었습니다.

DCN을 기존 MLP 기반 Two Tower 모델의 encoder로 적용한 결과, MLP 버전 대비 HR@10이 약 50% 정도 상승하는 개선이 확인되었습니다. 이는 cross layer가 사용자/아이템 feature 간 고차 상호작용을 직접적으로 모델링하기 때문에, sparse feature 조합이나 특정 행동 패턴의 차이를 보다 분명하게 반영한 효과일 가능성이 있다고 판단했습니다.


MaskNet

MaskNet은 “MaskNet: Multi-Scale Masked Model for Recommendation”(참고: https://arxiv.org/pdf/2102.07619) 논문에서 제안된 구조를 기반으로 합니다. 해당 논문은 feature-level의 mask를 통해 중요한 feature나 feature 조합을 강조하고, 덜 중요한 feature는 약화시키는 방식으로 추천 모델의 표현력을 확대하는 방법을 제안하고 있습니다. 이 과정에서 mask는 학습 과정에서 동적으로 조정되며, feature 중요도(feature importance)를 학습적으로 부여할 수 있다는 점이 특징입니다. 이 구조가 Two Tower 모델에서도 사용자 행동 패턴 또는 아이템 속성 조합 간의 선택적 상호작용을 더 정교하게 포착할 가능성이 있다고 판단해 실험을 진행했습니다.

MaskNet을 encoder 구조로 적용한 결과 기존 MLP 대비 HR@10 약 30% 정도의 개선이 확인되었습니다. MaskNet 내부 구조를 Parallel 방식과 Serial 방식으로 각각 구성해 비교해 본 결과, Parallel 방식이 미세하게 더 좋은 경향을 보였으나 유의미한 수준의 차이는 아니었습니다. 동적 mask가 feature importance를 조절하는 구조적 특성 덕분에 일정 수준의 성능 개선은 확인할 수 있었습니다.

다만 동일 환경에서 실험한 DCN이 HR@10 약 50% 개선으로 더 큰 폭의 성능 상승을 보였기 때문에 최종 구조에서는 MaskNet을 채택하지 않았습니다. MaskNet은 상황에 따라서는 유효할 가능성이 있으나, 여기에서는 DCN이 더 많은 interaction 정보를 포착하는 것으로 판단했습니다.


And More

위와 같은 시도들을 통해 Two Tower 모델은 서비스 레벨에서 안정적인 후보군을 제공할 수 있는 하나의 효과적인 방식으로 자리 잡았지만, 여전히 발전의 여지는 충분히 남아 있다고 생각합니다. 예를 들어, 아이템 타워를 더 복잡한 구조로 확장하여 임베딩 표현력을 높이거나, 검색 쿼리나 광고 페이지 접근 상품과 같은 특정 피처를 별도 타워로 분리해 직접적으로 연관성을 학습하도록 하는 방식도 고려해 볼 수 있습니다. 이러한 방향들이 추가적으로 반영된다면 Two Tower 모델은 지금보다 한 차원 높은 수준의 추천 품질을 달성할 수 있을 것으로 기대됩니다.


2. Producer 개선 : Sequential Recommendation

▲ Self-Attentive Sequential Recommendation : https://arxiv.org/pdf/1808.09781
▲ Self-Attentive Sequential Recommendation : https://arxiv.org/pdf/1808.09781

SASREC 기반 시퀀스 모델의 구현 및 활용

사용자의 의도는 한순간에 완성되지 않습니다. 상황과 탐색 과정에 따라 서서히 변화하며, 그 변화의 흔적이 행동 로그에 남습니다. 예를 들어, “노트북”에서 시작해 “맥북 프로”, “맥북 프로 16인치”, “맥북 프로 케이스”로 이어지는 검색 경로는 단순한 탐색이 아니라 구매를 향한 점진적 의사결정 과정입니다. 이 흐름을 고려하지 않고 각 검색을 개별적으로 처리한다면, 추천 시스템은 사용자가 현재 구매 여정의 어디에 와 있는지를 놓치게 됩니다.

이러한 일련의 맥락의 흐름을 모델링하는 분야가 Sequential Recommendation입니다. 핵심은 “과거의 행동이 현재 선택에 어떤 영향을 미치는가?”를 파악하는 것입니다. 이 문제를 효과적으로 해결한 대표적인 모델이 SASRec (Self-Attentive Sequential Recommendation, https://arxiv.org/pdf/1808.09781)입니다. SASRec은 Transformer의 Self-Attention을 사용자 행동 시퀀스에 적용하여, 많은 과거 행동 중 현시점에서 의미가 큰 행동만 선택적으로 반영합니다.

흥미로운 점은 SASRec이 발표된 지 시간이 지났음에도 여전히 최신 연구들의 기본 비교 모델로 사용되고 있다는 사실입니다. 모델 구조가 단순하면서도 실무 적용이 쉽고, 다양한 데이터셋에서 안정적인 성능을 보여주기 때문입니다. 실제로 최근 한국에서 개최된 ICML과 같은 주요 국제 학술대회에서도 SASRec을 확장하거나 개선하는 연구가 꾸준히 발표될 만큼 그 가치를 인정받고 있습니다.

실무 관점에서 SASRec의 강점은 모델 구조 자체뿐만 아니라 효율적인 학습 방식에서도 확인할 수 있습니다. 전체 후보 아이템에 대해 Softmax를 계산하는 대신 샘플링 기반의 BCE loss를 활용함으로써, 대규모 아이템 환경에서도 비교적 가볍고 효율적인 학습이 가능합니다. 또한 시퀀스 길이, 블록 깊이(레이어 수), 정규화 기법 및 드롭아웃 설정 등을 적절히 튜닝함으로써 추가적인 성능 향상도 기대할 수 있습니다.

처음에는 논문에서 제안된 기본 형태 그대로 적용하더라도 충분히 준수한 성능을 얻을 수 있습니다. 그러나 더 높은 추천 정확도를 목표로 한다면 시퀀스 길이 조정, 어텐션 구조 변형, 임베딩 증강 등 다양한 실험을 통해 성능을 개선할 수 있습니다. 아래에서는 오늘의집에서 실제로 진행했던 몇 가지의 SASRec을 베이스로 한 성능 개선 시도들과 결과들을 정리해 공유하고자 합니다.

SASREC 성능 개선

검색 및 PDP에 적용

SASRec은 사용자 행동의 시간적 흐름을 잘 포착하지만, 이를 검색(Search)이나 상품 상세 페이지(PDP) 환경에 그대로 적용하면 사용자가 지금 보고 있는 맥락과 상관없는 추천이 노출될 위험이 있습니다. 예를 들어, 어떤 사용자가 최근까지 책상을 주로 탐색했더라도, 검색창에 “모니터”라고 입력하는 순간 현재의 관심사는 분명히 “책상 → 모니터”로 이동한 상태입니다. 하지만 시퀀스에서 이 맥락 전환을 반영하지 않으면, 모델이 여전히 책상 관련 상품을 우선적으로 추천하는 결과가 나올 수 있습니다.

이를 해결하기 위해 우리는 현재 컨텍스트를 시퀀스의 마지막에 직접 삽입하는 방식을 적용했습니다. 검색 상황에서는 입력된 검색어 자체를 시퀀스의 마지막 토큰으로, PDP에서는 사용자가 현재 보고 있는 상품(product id)을 마지막 토큰으로 추가했습니다. 이렇게 하면 SASRec의 Self-Attention 메커니즘 “최근 행동”에 높은 가중치를 두는 특성을 활용해, 모델이 자연스럽게 현재 맥락 중심의 추천을 하게 됩니다.

결과적으로, 해당 방식은 사용자가 ‘지금’ 무엇을 보고 있는지를 모델이 즉시 이해할 수 있도록 도와주었고, 검색/상세 페이지 내 추천 정확도는 물론, 노출 상품의 체감 관련성도 개선되었습니다. 이 과정에서 모델 구조를 바꾸지 않고, 시퀀스 구성 방식만 조정했다는 점도 실무 적용 관점에서 매우 유리했습니다.


Loss function 최적화

기존 SASRec 모델은 모든 time step에 대해 Binary Cross-Entropy 기반의 다음 아이템 예측 Loss를 사용했습니다. 즉, 시퀀스를 구성하는 아이템들의 순서가 있을 때(예: i₁ → i₂ → … → iₜ → iₜ₊₁), 각 시점 t에서 생성된 hidden state가 그 다음에 등장할 아이템의 임베딩과 얼마나 가까운지를 내적으로 계산하여 확률로 변환하고, 이를 BCE Loss로 학습하는 방식이었습니다.


그러나 이러한 방식은 마지막 timestep(광고 노출 시점)의 중요도가 다른 timestep과 동일하게 처리된다는 한계가 존재했습니다. 실제 광고 추천에서는 최신 행동이 미래 클릭에 가장 강하게 영향을 미치므로, 시퀀스 마지막 위치에 대한 예측을 더욱 정확하게 학습할 수 있는 구조가 필요했습니다.

이를 보완하기 위해 기존 BCE Loss는 그대로 유지하되, 시퀀스의 마지막 timestep에서 등장한 정답 아이템에 한해 Sampled Softmax 기반의 Primary Loss를 추가하여 Hybrid Loss 구조로 변경했습니다. 여기서 Sampled Softmax는 전체 아이템에 대해 full softmax를 계산하는 대신 소수의 negative 아이템만 샘플링해 softmax를 근사하는 방식으로, 계산 비용을 줄이면서도 마지막 timestep의 정답에 대한 분류 신호를 더 명확하게 제공합니다.


Auxiliary Loss는 기존 SASRec Loss와 동일하게 BCE 기반으로 적용했으며, 이는 시퀀스 전 구간의 표현 학습 안정성을 유지하는 역할을 합니다.


한편, Primary Loss는 시퀀스의 마지막 시점에서 생성된 hidden state uₜ를 기반으로 정답 아이템과 여러 negative 샘플을 함께 비교하는 Sampled Softmax 방식을 적용했습니다. dlsms 추천 시스템의 실제 목표인 정답 아이템을 다른 후보보다 위에 올리는 것을 마지막 시점에서만 강하게 학습시키는 구조로, 기존보다 더 직접적으로 최적화되도록 했습니다.


Hybrid Loss를 도입함으로써 representation 학습은 비교적 자유롭게 두고, 최종 순위 결정 단계에서만 강하게 구분하도록 만들 수 있었습니다. 이를 통해 기존 SASRec의 BCE 기반 학습 안정성을 유지하면서도 최종 광고 후보 예측 정확도를 직접적으로 향상시키는 효과를 얻을 수 있었습니다.


ID 외 추가 피처 활용

기존 SASRec 모델은 사용자와 상품을 각각 단일 ID 임베딩으로 표현하고, 시퀀스 상의 클릭 패턴만을 기반으로 다음 아이템을 예측하는 구조를 사용하고 있습니다. 이 방식은 구조가 단순하고 대규모 트래픽 환경에서도 안정적으로 동작한다는 장점이 있지만, 사용자와 상품에 내재된 다양한 맥락 정보를 충분히 반영하기에는 한계가 있습니다. 이에 따라 최근에는 ID 기반 표현을 넘어, 추가적인 피처를 함께 활용하는 방향에 대한 개선 가능성을 함께 검토하고 있습니다.

예를 들어 상품의 카테고리, 가격대, 브랜드, 콘텐츠 속성(텍스트/이미지 기반 임베딩)과 같은 정적 피처뿐 아니라, 시간대, 디바이스, 유입 경로와 같은 컨텍스트 피처를 시퀀스 입력과 함께 결합하는 방식을 고려할 수 있습니다. 이러한 피처들은 사용자 행동의 배경 정보를 더 풍부하게 제공함으로써 동일한 클릭 이력이라도 상황에 따라 다른 해석이 가능하도록 만들어 줍니다. 특히 신규 상품이나 상호작용 데이터가 충분하지 않은 롱테일 아이템에 대해서도 보다 안정적인 예측을 가능하게 할 것으로 기대하고 있습니다.

다만 SASRec 구조 특성상 시퀀스 길이가 증가할수록 연산량이 빠르게 증가하는 만큼, 다수의 피처를 무작정 결합하는 방식은 학습 및 서빙 측면에서 부담이 될 수 있습니다. 따라서 현재는 ID 기반 시퀀스 모델의 장점을 유지하면서, 필요한 정보만 선택적으로 결합하는 효율적인 피처 융합 방식에 대한 실험을 단계적으로 진행하고 있습니다. 장기적으로는 시퀀스 모델이 사용자 행동의 맥락과 의도를 보다 정밀하게 표현할 수 있도록, 멀티 모달 피처와의 결합까지 포함한 확장 방향도 함께 검토 중입니다.


데이터셋 길이와 성능의 상관관계

초기 배포한 SASRec 모델은 최근 30일간의 클릭 데이터를 사용하되, 최대 시퀀스 길이를 15로 제한하여 학습되었습니다. 이후 사용자 이력을 더 폭넓게 활용할 경우 예측 품질이 개선될 수 있을 것이라는 가설하에, 시퀀스 길이를 30, 50, 100까지 단계적으로 확장하는 실험을 진행했습니다. 그 결과 일부 실험 데이터에서는 오프라인 검증 기준 HR@10이 유의미하게 상승하는 효과를 확인할 수 있었습니다. 이는 더 긴 시퀀스가 사용자의 관심 변화를 보다 연속적으로 포착하며, 모델이 활용할 수 있는 정보의 밀도를 증가시킨 결과로 해석할 수 있습니다.

다만 실제 온라인 실험에서는 지면별 반응 차이가 관찰되었습니다. 일부 지면에서는 시퀀스 확장의 효과가 뚜렷하게 나타난 반면, 다른 영역에서는 성능 개선이 거의 없는 경우도 확인되었습니다. 이는 시퀀스 길이 확장이 전반적으로는 긍정적인 영향을 미치지만, 지면의 특성과 사용자 행동 패턴에 따라 최적의 적용 방식이 달라질 수 있음을 시사합니다.

한편 더 긴 시퀀스를 안정적으로 표현할 수 있도록 모델 구조를 고도화하고, 보다 다양한 피처 및 상품 간 상호작용을 함께 고려하는 방향의 연구는 현재도 진행 중입니다. 아직 명확한 정답에 도달했다고 보기보다는, 지속적인 실험과 검증을 통해 최적의 설계를 찾아가는 과정에 있습니다.


3. Ranker의 정교화: Calibration

예측과 현실의 차이 최소화

Ranker는 사용자 반응을 예측해 광고 노출을 결정하는 핵심 역할을 수행합니다. 하지만 초기 모델은 클릭 가능성을 지나치게 높게 평가하는 over-confidence 문제를 겪고 있었습니다. 예를 들어, 예측은 0.8이라 했지만 실제 CTR은 0.3에 그치는 상황이 자주 발생했습니다. 특히 학습 과정에서 down-sampling 등 샘플링 전략을 사용한 영향으로 데이터 분포가 원래 현실과 달라지는 상황이 발생했고, 이 왜곡이 모델의 신뢰도를 더 떨어뜨렸습니다. 이러한 부정확한 예측은 경매 가격 책정과 광고 효율에 직접적인 악영향을 미칠 수밖에 없었습니다.

이런 상황에서 모델이 말하는 ‘확률’이 실제 관측과 맞도록 맞춰주는 접근법을 Calibration이라고 합니다. Calibration은 모델이 얼마나 ‘확신’해야 하는지를 다시 가르쳐주는 과정으로, 샘플링으로 인해 기울어진 분포를 실제 환경에 맞게 바로 세워줍니다. 정확한 Calibration을 통해 Ranker는 기존보다 훨씬 일관되고 현실적인 pCTR을 예측할 수 있게 되고, 이는 곧 광고 경매의 안정성을 확보할 수 있도록 하는 중요한 요인입니다.


Calibration Layer의 도입

Ranker 모델을 학습하는 과정에서 down-sampling과 같은 샘플링 전략을 활용하게 됩니다. 이는 클릭이 극히 드문 환경에서 학습 효율을 확보하기 위한 필수적인 선택이지만, 동시에 데이터 분포가 실제 환경과 달라지는 문제를 낳습니다. 샘플링 비율이 바뀌면 모델은 ‘실제로 얼마나 클릭이 일어나는가’를 제대로 감각하지 못하게 되고, 그 결과 예측 확률이 과도하게 커지거나 작아지는 over-confidence 현상이 나타날 수 있습니다.

이 문제를 완화하기 위해 흔히 사용되는 방법이 샘플링 확률에 기반한 재스케일링입니다. 이 방식은 빠르고 해석도 쉬워 실무에서 자주 쓰이지만, 한 가지 근본적인 한계가 있습니다. 샘플링 왜곡으로 인해 예측 확률의 전체 분포가 실제 분포와 불일치하는 것. 즉, 예측값이 현실 확률과의 상대적 관계나 분포적 구조까지 어긋나는 현상에 대해서는 충분히 보정하지 못한다는 점입니다.

이때 모델이 내놓은 확률을 현실 데이터의 확률 공간에 다시 정렬하는 과정을 통해, 예측값을 실제 확률과 유사하게 보정할 수 있습니다. 이를 위해 기존의 모델 레이어에 별도의 재보정 레이어를 추가하여 실제 확률로 재보정을 하는데, 이 과정을 Calibration이라고 합니다. 오늘의집에서는 크게 Platt Scaling, Piecewise Linear Calibration이라는 두 방법을 사용하여 확률을 재보정합니다.

Platt Scaling은 모델의 출력값을 시그모이드 함수로 다시 매핑함으로써 예측 확률을 부드럽게 재조정합니다. 이 방식은 구현이 간단하고 데이터가 많지 않아도 안정적으로 적용할 수 있다는 장점이 있습니다. CTR의 평균은 정확하게 예측을 하지만, 단순히 가중치를 logit에 곱하는 형태이기 때문에 CTR의 분포까지는 제대로 예측하지 못한다는 단점이 있습니다.

Piecewise Linear Calibration은 logit과 확률과의 관계를 하나의 함수에 고정하지 않고, 여러 구간에서 서로 다른 기울기를 갖는 선형 함수들의 조합으로 근사합니다. 이렇게 구간별로 조정이 가능해지면, 모델이 특정 확률 구간에서 오보정하는 편향이 존재할 때 그 부분만 선택적으로 보정할 수 있습니다. 즉, 단일 곡선으로는 표현하기 어려운 지역적 왜곡을 구간 단위로 유연하게 수정할 수 있어, 최종적으로 모델의 예측 확률을 실제 CTR 분포에 더 가깝게 맞출 수 있습니다.

다만 이러한 Calibration 역시 별도의 학습을 통해 보정 함수를 추정하는 방식이기 때문에, 예측 확률의 평균 수준은 보정할 수 있지만 확률 분포의 분산이나 tail 영역까지 이론적으로 보장하지는 못한다는 한계가 존재합니다. 특히 extreme low-CTR 혹은 high-CTR 구간에서는 여전히 분포 왜곡이 잔존할 수 있어, 현재는 이 분산 보장 문제를 어떻게 완화할 수 있을지에 대한 추가적인 설계와 실험을 함께 고민하고 있는 단계입니다.

현재 오늘의집에서는 A/B Test 결과를 기반으로 지면의 특성에 따라 Platt Scaling, Piecewise Linear Calibration 두 방식을 선택적으로 사용하고 있습니다.


4. Feature Engineering : Soft Binning과 Entity-Value Fusion

이번 장에서는 연속형 값과 특정 정보를 보다 자연스럽게 모델에 전달하기 위한 두 가지 접근을 소개합니다. 먼저 Soft Binning은 값을 단일 구간에 강제로 할당하는 대신 여러 구간과의 관계를 연속적으로 반영해 특성의 변화를 더 섬세하게 표현합니다. 이어서 Entity-Value Fusion은 Producer와 같은 특정 엔티티가 가진 의미와 그에 대응하는 Producer 스코어와 같은 수치적 신호를 함께 고려할 수 있도록 임베딩과 정규화를 결합하는 방법입니다. 두 기법 모두 기존의 수작업 중심 feature 설계가 갖는 경직성을 줄이고, 모델이 데이터 속 구조적 패턴을 직접 학습할 수 있도록 돕는 방향을 지향하고자 했습니다.


Soft-binning : end to end 학습 방식으로 연속형 특성의 정보 손실을 최소화

▲ 3개의 bin을 갖는 피처의 2-dim embedding 값 / (왼쪽부터) Hard Binning, Soft Binning
▲ 3개의 bin을 갖는 피처의 2-dim embedding 값 / (왼쪽부터) Hard Binning, Soft Binning


기존 모델에서는 수치형 연속값을 그대로 사용하는 대신, 구간(Bin)으로 나누어 임베딩하는 방식이 많이 활용되고 있었습니다. 예를 들어 가격, 할인율, 리뷰 점수 같은 연속형 특성을 다룰 때는 전통적인 Hard Binning(예: 0-10만원, 10-20만원...)을 사용할 수 있습니다.

Soft Binning의 핵심은 연속형 값을 이산 구간으로 '끊어내지 않고' 각 구간과의 관계를 연속적으로 반영하는 방식에 있습니다. 특히 여기서는 구간 경계를 사람이 직접 결정하지 않고 모델이 학습을 통해 boundary를 조정하도록 설계했습니다. 이를 위해 첫 번째 boundary b₀를 기준으로 하고, 이후 boundary 아래 형태로 표현합니다.


uₖ는 모델이 학습하는 값이며, softplus를 거치기 때문에 bᵢ는 항상 단조 증가합니다. 이로써 학습 과정 내내 boundary의 순서가 뒤집히지 않으며, 모델은 데이터 분포에 맞는 bin 구조를 스스로 찾아가게 됩니다.

각 입력값 x는 모든 boundary bᵢ와의 거리 |x − bᵢ|를 기준으로, 다음의 log barrier scoring을 통해 각 Bin에 대한 유사도를 계산합니다.


boundary에 가까울수록 sᵢ는 크게, 멀어질수록 작게 계산되며 이는 −log(·)의 형태 덕분에 연속적이면서도 경계 근처를 강조하는 효과가 생깁니다. 이후 temperature (T)로 sharpness를 조절한 뒤 softmax를 적용하면 다음의 형태가 됩니다.


따라서 입력값 x는 단일 구간에만 소속되는 것이 아니라, 모든 Bin에 대해 확률적 weight wᵢ를 갖게 됩니다. T가 작을수록 분포는 더욱 뾰족해지고, 커질수록 평탄해집니다. 이 값 역시 학습 가능하도록 하면 모델이 데이터에 맞는 granularity를 스스로 조정할 수 있습니다.

마지막 단계에서는 각 Bin에 연결된 embedding 벡터 eᵢ와 가중합을 통해 최종 표현을 얻습니다.


즉, 모델은 단순히 “어느 구간에 속한다”를 학습하는 것이 아니라, 연속값이 어떻게 변화하는지가 반영된 부드러운 표현 공간(continuous representation)을 얻게 됩니다.

이 방식의 가장 큰 장점은 사람이 Bin 구간을 설계하고 관리할 필요가 없다는 점입니다. 데이터 분포가 바뀌어도 boundary는 학습을 통해 자동으로 조정되고, temperature는 필요에 따라 표현의 뾰족함을 조절합니다. 결과적으로 Soft Binning을 통해 연속형 특성을 정형화된 규칙에 억지로 맞추는 대신 모델이 스스로 의미 있는 구간 구조를 학습하게 됩니다.


Entity-Value Fusion

▲ Entity-Value Fusion : Producer 타입과 스코어를 동시에 고려합니다.
▲ Entity-Value Fusion : Producer 타입과 스코어를 동시에 고려합니다.


오늘의집의 추천 시스템에는 백 가지가 넘는 Producer가 존재합니다. 그리고 Producer의 타입에 따라 Producer 스코어의 범위가 각기 다릅니다. 예를 들어, two tower 기반의 Producer는 Normalized Dot Product를 스코어로 사용하여 -1~1 사이의 값을 가집니다. GraphRandomwalk와 같은 방식을 사용하는 경우에는 0보다 큰 양수에 대한 스코어 분포를, 과거 CTR을 기반으로 Popular Producer를 만드는 경우에는 0~1 사이의 값을 가집니다.

이러한 Producer 관련 정보를 모델 입력으로 활용할 때의 핵심 고민은 ‘서로 다른 Producer 타입과 해당 Producer의 점수를 어떻게 자연스럽게 결합할 것인가’하는 점입니다. 특히 Producer 스코어는 타입마다 값의 분포와 범위가 크게 다를 수 있으므로, 단순히 수치를 그대로 입력하는 방식으로는 원하는 효과를 얻기 어렵습니다. 따라서 프로듀서 자체의 특성은 임베딩으로 표현하고, 스코어는 섬세한 정규화 과정을 거쳐 모델이 안정적으로 받아들일 수 있도록 만드는 과정이 필요합니다.

우선 Producer 타입은 vocabulary를 정의한 뒤 Lookup Layer를 통해 고정 차원의 임베딩 벡터로 변환합니다. 이는 각 프로듀서가 가지는 의미적 차이를 모델이 학습할 수 있도록 하기 위함입니다. 동시에 프로듀서 스코어는 각 타입마다 스케일이 다르기 때문에 스코어에 대해 producer-wise scaling factor와 bias를 학습 가능한 형태로 두어 ax + b 방식으로 변환하고, 추가적으로 batch normalization을 적용하여 값의 균형을 맞춰줍니다. 이를 통해 스코어가 모델 학습 과정에서 과도하게 영향을 주거나 소실되는 문제를 완화할 수 있습니다.

이렇게 추출된 피쳐를 model에 입력하는 부분은 크게 두 부분으로 구성됩니다. 하나는 프로듀서 임베딩이고, 다른 하나는 정규화된 Producer 스코어입니다. 여기서 스코어 자체의 정보를 더욱 풍부하게 전달하기 위해 sqrt(x), x² 같은 비선형 변환을 적용하거나 작은 Dense 레이어를 통과시키는 방식도 활용할 수 있습니다. 또한 프로듀서 임베딩에 정규화된 스코어를 곱해줌으로써, 스코어가 높을수록 해당 프로듀서 임베딩의 영향력이 강화되는 형태로 표현할 수도 있습니다. 이러한 방식은 스코어가 단순한 수치가 아니라 모델이 고려해야 할 중요도 신호임을 직접적으로 반영합니다.

만약 한 샘플에 여러 Producer 타입과 스코어가 함께 존재하는 경우라면, 각 프로듀서에 대해 위 과정으로 임베딩과 스코어 표현을 만든 뒤 이를 평균으로 통합하거나, 특정 기준에 따라 상위 K개만 선택해 사용하는 전략을 고려할 수 있습니다. 이를 통해 여러 프로듀서가 동시에 기여하는 상황에서도 모델이 안정적으로 그 정보를 흡수할 수 있습니다. 결국 이러한 접근은 Producer 타입의 차이와 스코어의 의미를 모두 살리면서, 모델이 보다 정교한 표현을 학습할 수 있도록 도와주는 방법입니다.


Feature Engineering의 방향성

현실 세계의 모델링 문제는 항상 다양한 제약과 타협 속에서 진행됩니다. 모델의 크기와 복잡도, 데이터 분포의 변화, 새로운 엔티티의 등장, 수치 스케일의 불균형 등 수많은 조건을 동시에 고려해야 하고, 그 속에서 문제에 가장 적합한 솔루션을 찾아내야 합니다. 따라서 Feature Engineering은 단순히 ‘특징을 잘 만드는 기술’이 아니라, 변화하는 환경 속에서 모델이 안정적으로 의미 있는 표현을 학습할 수 있도록 표현 공간을 설계하는 과정이라고 볼 수 있습니다.

Soft Binning과 Entity-Value Fusion 접근은 이 과정이 어떻게 발전하고 있는지 잘 보여줍니다. 두 방법은 모두 사람이 임의로 기준을 단단하게 고정하는 대신, 모델이 데이터의 구조를 직접 학습할 수 있도록 유연성을 열어두는 방향을 취합니다. Soft Binning은 연속형 값이 특정 구간에 ‘소속되는가/아닌가’로 단절되는 대신, 각 구간에 연속적으로 영향을 미치도록 표현해줍니다. Entity-Value Fusion은 카테고리형 엔티티와 수치형 값의 결합을 학습 가능한 스케일링과 임베딩 상의 연산으로 표현해, 각 엔티티가 가지는 상대적 영향력을 모델이 스스로 이해할 수 있도록 합니다.

이러한 접근은 모델 성능뿐 아니라 운영 관점에서도 장점이 있습니다. 기존 방식처럼 Bin 경계를 재정의하거나 vocabulary를 새로 관리하는 작업은 비용이 크고 반복적이며, 데이터 분포가 조금만 변해도 전체 파이프라인을 다시 손봐야 했습니다. 반면 Soft Binning처럼 미분 가능하고 학습 가능한 구조는 변화가 생겨도 모델이 representation space에서 이를 흡수해낼 수 있습니다. 결과적으로 유지 비용이 낮아지고, 실험 속도가 빨라지며, 모델이 더 일반화된 표현을 학습할 가능성도 커집니다.

정리하자면 Feature Engineering의 방향성은 고정된 규칙 기반에서 학습 가능한 표현 기반으로의 전환에 있다고 볼 수 있습니다. 사람이 bin 경계나 스케일링 기준을 일일이 설계하는 방식은 데이터 변화와 새로운 엔티티 등장에 취약하고, 반복적인 파이프라인 유지 작업을 요구합니다. 반면 soft binning이나 entity-value fusion처럼 모델이 표현 공간을 스스로 학습하도록 여지를 열어두는 방식은 변화에 유연하고 실험 속도도 빠릅니다. 이는 결국 모델 성능 향상에 그치지 않고 ML 엔지니어가 수작업 피처 관리에서 벗어나 문제 정의, 구조 설계, 데이터 해석 같은 더 본질적이고 창의적인 영역에 집중할 수 있게 해줍니다. 이러한 변화는 결국 더 적은 수작업, 더 유연한 표현, 더 강한 일반화 능력이라는 장점을 가져오며, 이런 장점들이 앞으로 오늘의집 ML 시스템에서 지향하는 설계의 방향입니다.


5. Loss Function and Evaluation Metrics

Rank Loss

기존 Ranker 모델은 주로 Binary Cross Entropy(BCE)를 사용해 pCTR을 학습했습니다. BCE는 개별 노출 단위에서 클릭 여부를 정확히 예측하는 데에는 효과적이지만, 광고나 추천 시스템에서 중요한 것은 단순한 확률 예측 정확도만이 아닙니다. 실제 환경에서는 ‘어떤 광고를 먼저 보여줄 것인가’도 중요하기 때문에, 예측 값의 상대적 순서가 직접적인 성능과도 연관됩니다. 그러나 BCE는 두 예측 값 간의 크고 작은 관계를 보장하지 않기 때문에, 학습 과정에서 모델이 개별 확률은 맞추더라도 전체 순위 구조가 흔들리는 문제가 발생할 수 있었습니다.

이 문제를 해결하기 위해 우리는 BCE와 함께 Rank Loss를 도입했습니다. Rank Loss는 클릭된 샘플이 그렇지 않은 샘플보다 더 높은 점수를 갖도록 유도하여 모델의 출력이 순위 정렬에 적합한 구조를 갖도록 만듭니다. 즉, BCE가 ‘각 샘플의 정답 확률’을 맞추는 역할이라면, Rank Loss는 ‘샘플들 간 상대적인 우선순위’를 보정하는 역할을 수행합니다. 두 손실을 함께 사용함으로써 모델은 개별 pCTR 예측의 정확성과 노출 순서의 일관성을 동시에 확보할 수 있을 것으로 기대했습니다.

최종적으로 모델은 개별 샘플의 pCTR 정확도샘플 간 순위 정합성을 동시에 확보하기 위해 BCE Loss와 RankNet Loss를 함께 사용했습니다. 전체 loss는 두 손실을 가중합 형태로 구성되며 다음과 같습니다.


여기서 BEC Loss는 클릭 여부 y∈{0,1}에 대한 binary cross entropy :


RankNet Loss는 클릭된 샘플 i와 클릭되지 않은 샘플 j의 점수 차이를 기반으로 한 pairwise loss :


그리고 λ는 두 손실의 균형을 조절하는 하이퍼파라미터로, pCTR 예측의 안정성과 순위 일관성 사이에서 적절한 trade-off를 조정하는 역할을 하게 됩니다. 이 조합을 통해 모델은 “얼마나 클릭될까?”라는 확률 예측 문제와 “무엇을 먼저 보여줄 것인가?”라는 순위 결정 문제를 동시에 만족시키는 구조를 갖출 수 있었습니다.

현재는 Listwise Loss, Asymmetric Loss, Focal Loss 등과 같은 추가적인 loss 함수의 도입 가능성도 함께 검토하고 있습니다. 또한 단순히 최종 출력 점수의 순위만 맞추는 것을 넘어, 중간 representational space 자체가 자연스럽게 순위 구조를 반영하도록 학습하는 방향에 대한 고민도 함께 진행 중입니다. 이는 embedding 공간에서부터 클릭/비클릭 샘플 간의 기하학적 분리가 동시에 이루어지도록 유도함으로써, representation learning과 ranking learning을 분리하지 않고 하나의 목표로 공동 최적화하는 접근입니다. 이러한 방향은 향후 retrieval 단계와 ranking 단계를 보다 유기적으로 연결하는 데에도 중요한 기반이 될 것으로 기대하고 있습니다.


Evaluation Metrics

지표들은 서로 다른 특성을 갖기 때문에, 모델 개선 과정에서 어떤 지표가 먼저 움직이고 어떤 지표가 따라오는지를 이해하는 것이 중요했습니다. 예를 들어 ECE는 비교적 모델의 출력 분포가 바뀌거나 Calibration 기법을 적용했을 때 빠르게 반응하는 선행 지표의 성격을 갖습니다. 즉, 모델이 “확률을 얼마나 정직하게 말하느냐”를 조기에 확인하기 좋습니다. 반면 Spearman Monotonicity나 AUC는 모델이 샘플들 간의 상대적인 우위를 파악합니다. 이 지표를 통해서는 ‘높은 확률로 예측된 경우 실제로 높은 확률을 갖는가’를 기반으로 제대로 정렬하고 있는지를 평가하기 때문에, Rank Loss 도입이나 feature weighting 변화와 같이 순서 구조를 직접 다루는 개선에서 유의미하게 반응합니다.

분류 문제의 관점에서 바라볼 때, AUC는 데이터 내 TN(True Negative)의 수에 크게 영향을 받습니다. 이때문에, 광고나 추천처럼 클릭이 매우 희소한 환경에서는 TN이 과도하게 많아 AUC가 높게 보일 수 있고, 실제 모델의 분별력이 과대평가되는 경우가 발생할 수 있습니다. 그래서 우리는 AUC를 보더라도 항상 AUC-PR을 함께 확인하여, 희소한 긍정 사례(클릭)를 얼마나 잘 식별했는지를 균형 있게 판단하기 위해 노력했습니다.

서비스 영향 관점에서는 NDCG와 Hit Rate가 더 중요한 후행 지표로 작동했습니다. 이 지표들은 상위 노출 영역, 즉 사용자가 실제로 보게 되는 영역의 품질 변화를 반영하기 때문입니다. 특히 실 서비스에서는 상위 3~5개 영역의 역량이 전환율에 직접적으로 연결되므로, 모델이 아무리 전체적으로 잘 예측하더라도 상위 랭킹이 무너지면 사용자 경험과 매출 효율이 즉각적으로 악화됩니다. 따라서 우리는 모델 변경 시 먼저 ECE와 AUC 등으로 안전성을 확인하고, 이후 NDCG와 HR이 실제 성과 개선으로 이어지는지를 최종적으로 검증하는 2단계 평가 체계를 운영했습니다.

결국 이러한 다차원 평가 체계는 단순히 모델이 ‘잘 맞추고 있는가’가 아닌, ‘현실에서 제대로 작동하는가’를 바라보게 해줍니다. 우리는 모델이 개선되는 방향이 데이터 상에서만 유효한 것이 아니라 실제 사용자 경험과 비즈니스 효율까지 긍정적으로 변화시키는지를 명확하게 확인할 수 있었고, 이는 모델 실험의 성공 가능성과 안정성을 크게 높이는 기반이 되었습니다.


6. 실험과 검증 : A/B 테스트를 넘어서

앞서 소개한 Producer, Ranker, Feature Engineering, Calibration 단계의 다양한 개선들은 모두 성능 향상을 위한 여러 기술적 시도와 문제 해결 과정이었습니다. 하지만 어떤 모델링 접근이든 궁극적으로 가장 중요한 것은 실제 서비스 환경에서 사용자 행동과 비즈니스 성과가 개선되었는가입니다.

이번 장에서는 위에서 논의한 개선들이 실제 온라인 A/B 실험에서 어떤 결과를 가져왔는지, 그리고 서비스 지표 관점에서 어떤 의미 있는 변화가 있었는지를 중심으로 구체적인 실험 사례와 성과를 공유하고자 합니다.


Two Tower Producer 추가

Two Tower Producer는 가장 직접적으로 유저의 행동을 학습해서 후보를 생성하도록 설계되었습니다. 가장 클릭할만한 아이템들을 잘 제공해 줄 수 있을 것이라고 기대했고, 추가로 아이템의 유사도를 기반으로 후보군을 제공하는 방식이기에 다수의 후보군을 잘 확보할 수 있을 것이라고 생각했습니다. 실제 온라인 실험에서도 지면 간 편차가 있기는 했지만 전반적으로 CTR 개선 효과와 함께 추천 아이템 수도 증가시켜주는 효과도 확인할 수 있었습니다.


Feature Engineering, LR, Batch 크기, 유사도 임계 값 조정

초기에는 별도 탐색은 하지 않고 몇 가지 룰을 기반으로 Feature 들의 차원, Learning Rate 값, Batch 크기 등을 결정해서 사용했습니다. 큰 작업 없이 Feature 차원과 Batch 크기의 최적 값을 찾고 Learning Rate를 적절한 값과 함께 Scheduler를 제공함으로써 온라인에서 네거티브 없이 10%의 CTR 상승이 있었습니다.

추가로 유사도 임계 값의 경우 일정 이상까진 큰 노출 감소없이 CTR이 상승하는 효과를 보였으나, 이 이상으로 가면 노출 자체가 감소하기에 적정 수준을 찾아 설정했습니다.


Architecture 변경

초기 단순한 구조의 FCN에서 DCN으로 유저 타워/아이템 타워 모두 내부 구조를 변경해보았고, 이를 통해 약 5%의 CTR 상승을 확인할 수 있었습니다.


SASRec Producer 추가

SASRec Producer는 사용자 행동의 시간적 흐름과 최근 행동의 영향력 등을 반영해 후보를 생성하도록 설계해 기존 정적 컨텍스트 기반 Producer가 놓치던 실시간 의도 신호를 효과적으로 활용할 수 있을 것으로 기대했습니다. 실제 온라인 실험에서도 최근 행동 중심의 후보 구성 방식이 상위 랭킹 품질을 강화하며 CTR 개선으로 이어지는 것을 확인했습니다.


데이터셋 수정

초기 SASRec 모델은 최근 30일치 상품 클릭 시퀀스만을 사용하여 다음 클릭될 상품을 예측했습니다. 하지만 클릭된 상품뿐 아니라, 사용자가 검색한 쿼리 시퀀스 역시 다음에 클릭될 상품 예측에 중요한 역할을 합니다. 클릭한 상품과 검색한 쿼리를 모두 사용하고 같은 임베딩 공간에 매핑하여 SASRec 모델을 학습했을 때 3%의 CTR 상승이 있었습니다.


Loss Function 수정

기존 SASRec은 모든 time step을 동일한 BCE Loss로 학습하여, 실제 예측에서 더 중요한 마지막 클릭 신호가 충분히 반영되지 않는 한계가 있었습니다. 이를 개선하기 위해 마지막 timestep에는 Sampled Softmax 기반 Primary Loss를 적용하고, 이전 timestep은 기존 BCE Loss로 학습하는 Hybrid Loss 구조를 도입했습니다. 그 결과 시퀀스 표현의 안정성을 유지하면서도 최신 행동에 대한 예측 민감도가 높아졌습니다. 실제 온라인 실험에서도 next-click 랭킹 품질 향상과 함께 CTR이 33% 상승하는 효과를 확인했습니다.


Calibration

Calibration은 모델이 예측한 pCTR이 실제 CTR과 보다 가깝도록 확률값을 조정하는 과정으로, 예측값의 신뢰도를 정교하게 보완해 주는 역할을 합니다. 특히 광고 입찰에서는 pCTR이 실제보다 높거나 낮게 추정되면 기대 수익과 순위 산출이 왜곡되기 때문에, 결과적으로 수익 효율이 떨어질 수 있습니다.


Calibration 모델 변경

기존 Platt Scaling은 지면별로 단일 선형 변환(가중치·바이어스)만 학습하여 확률을 조정했기 때문에 표현력이 제한되었습니다. 이와 비교해 Piecewise Linear Calibration은 지면별 또는 글로벌 단위로 다중 keypoint를 학습하고 보강하여 비선형·단조 증가 형태의 보정 곡선을 구성할 수 있습니다. 그 결과 Platt Scaling 대비 더 유연하고 미세한 Calibration이 가능해졌으며, 실제 예측 확률의 Calibration quality가 개선되었습니다.
스토어 검색 결과 구좌에서 Platt Scaling 모델을 Piecewise Linear Calibration 모델로 변경해서 실험을 했으며, 구좌 CPM (Impression 대비 집행광고비) 3.2% 상승, site-wide하게는 광고, 커머스 합계 이익이 1.95% 증가했습니다.


7. Future Work

Multi-Task Learning

현재 모델은 CTR 예측을 핵심 목표로 삼고 있지만, 실제 비즈니스 성과는 CVR(Conversion Rate), LTV(Lifetime Value), 구매 전환 이후의 재방문율 등 다양한 지표들의 복합적인 결과로 결정됩니다. CTR이 높더라도 전환이나 매출로 이어지지 않는 경우가 존재하기 때문에, 단일 지표에 최적화된 추천은 한계가 분명합니다. 이러한 문제를 해결하기 위해, 우리는 CTR, CVR, LTV 등 서로 다른 목적 함수를 동시에 학습하는 Multi-Task Learning 기반의 통합 모델을 단계적으로 구축하고 있습니다.

Multi-Task Learning을 통해 각 태스크는 공통의 사용자·상품 표현을 공유하면서도 서로 다른 목표를 보완적으로 학습하게 됩니다. 이를 통해 데이터 효율성을 높이는 동시에, 특정 지표에 대한 과도한 편향을 완화하고 보다 균형 잡힌 추천 품질을 확보할 수 있을 것으로 기대하고 있습니다. 장기적으로는 단기 반응(CTR)과 장기 가치(LTV)를 함께 고려하는 방향으로의 확장이 중요한 연구 방향이 될 것입니다.


Producer 개선

현재 추천 시스템은 Sequential Recommendation, Two-Tower와 같은 비교적 정형화된 구조를 중심으로 구성되어 있지만, 추천 후보를 생성하는 Producer 단계의 표현력과 다양성은 여전히 개선의 여지가 많습니다. 특히 사용자와 상품 간의 복잡한 관계를 충분히 반영하기 위해, 단순 이력 기반 구조를 넘어서는 새로운 생성 방식이 필요합니다.

이를 위해 우리는 Two Tower, Sequential recommendation 이외에도 Graph Neural Network(GNN)를 활용한 관계 기반 추천, 그리고 LLM을 활용한 의미 기반 상품 이해 및 추천 후보 생성 등 다양한 producer 아키텍처에 관심을 가지고 있습니다. 이러한 방식들은 기존 방식으로는 포착하기 어려웠던 잠재적 연관성과 맥락 정보를 활용할 수 있는 가능성을 열어주며, 향후 추천 생태계의 다양성과 확장성을 높이는 핵심 축이 될 것으로 기대하고 있습니다.


실시간 학습 시스템 구축

현재의 추천 모델은 배치 학습 기반으로 운영되며, 데이터 반영 주기는 최소 시간부터, 최대 하루 단위로 이루어지고 있습니다. 이 구조는 안정성과 운영 효율성 측면에서는 장점이 있지만, 급변하는 사용자 행동이나 실시간 트렌드를 즉각적으로 반영하기에는 구조적인 한계를 갖습니다. 특히 플래시 세일, 이슈성 트렌드 상품과 같이 짧은 시간 내에 수요가 급변하는 상황에서는 이러한 지연이 곧 성능 손실로 이어질 수 있습니다.

이를 개선하기 위해 우리는 스트리밍 데이터 파이프라인과 온라인 학습 알고리즘을 기반으로 한 실시간 학습 시스템을 단계적으로 구축하고 있습니다. 사용자의 클릭, 구매, 탐색 행동이 발생하는 즉시 모델에 반영되고 추천 결과가 빠르게 업데이트되는 구조를 목표로 하며, 이를 통해 변화하는 사용자 선호와 시장 상황에 한층 더 민첩하게 대응할 수 있을 것으로 기대하고 있습니다.


지속적인 혁신을 향해

이러한 Future Work는 단순히 개별 모델 성능을 개선하는 것을 넘어, 추천과 광고를 둘러싼 전체 시스템을 보다 건강하고 효율적으로 진화시키는 과정이라고 볼 수 있습니다. Multi-Task Learning을 통해 단기 성과와 장기 가치를 균형 있게 고려하고, 다양한 producer 실험을 통해 추천 후보의 질과 다양성을 확장합니다. 또 실시간 학습을 통해 시장 변화에 즉각 반응하는 구조를 만들어 가고자 합니다.

궁극적으로 우리는 추천 시스템이 단순한 최적화 도구를 넘어 사용자에게는 더 만족스러운 경험을 제공하고, 파트너와 광고주에게는 더 예측 가능하고 신뢰할 수 있는 성과를 제공하는 방향으로 발전하길 기대합니다. 이러한 방향성을 바탕으로, 앞으로도 데이터와 모델, 시스템 전반에 걸친 지속적인 실험과 개선을 이어갈 계획입니다.


오늘의집 Discovery 팀은 검색/추천/광고 및 관련 기반 기술 전반에 대한 도전을 이어가고 있습니다.
함께하실 분들은 아래 링크에서 더 자세한 내용을 확인해주세요!

오늘의집에서 당신을 찾고 있습니다!
Senior Backend Engineer, Tech Lead & Manager, CommerceSenior Frontend Engineer, Tech Lead & Manager, CommerceSenior Backend Engineer, AdsSenior Machine Learning Engineer, Vision/GenAISenior Machine Learning Engineer, RecommendationSenior Android Engineer, Client FoundationBackend Engineer, Core PlatformBackend Engineer, ContentBackend Engineer, CommerceBackend Engineer, AdsFrontend Engineer, CommerceFrontend Engineer, Interior & LifeFrontend Engineer, Client FoundationFrontend Engineer, UserFullstack Engineer, Life ServiceFullstack Product Engineer, AI AgentMachine Learning Engineer, ML PlatformMachine Learning Engineer, SearchMachine Learning Engineer, RecommendationMachine Learning Engineer, Recommendation (전문연구요원)Cloud EngineerSenior Data Analytics EngineerData Analytics EngineerAI Solutions EngineerQA EngineerQA Assistant (계약직)[오늘의집페이] Backend Engineer[오늘의집페이] Fullstack Engineer
목록으로 돌아가기