“함께 구매하면 좋은 상품” 추천 모델 고도화

발행: (2025년 12월 11일 오후 03:59 GMT+9)
13 min read

Source: Woowahan Tech

배달의민족에서는 음식 배달뿐만 아니라 장보기도 당일 배송이 가능하다는 사실, 알고 계셨나요?

배민의 장보기·쇼핑 서비스는 배민B마트를 비롯해 마트, 편의점, 꽃, 전자제품 등 다양한 셀러가 입점해 있어 다양한 물건을 빠르게 받아보실 수 있습니다. 고객이 서비스에 진입한 순간부터 구매를 완료하는 여정까지 최적의 상품을 발견할 수 있도록 개인화 추천, 함께 본 상품 추천, 실시간 트렌드 랭킹, 장바구니 추천, 결제 전 추가 상품 추천 등 다양한 추천을 제공하고 있습니다.

추천
그림 1. “장보기·쇼핑” 서비스의 다양한 추천

이번 글에서는 고객이 장바구니에 담은 상품들을 기반으로 연관 상품을 추천하는 장바구니 추천 모델의 개선 과정을 공유하고자 합니다. 추천 시스템과 기본적인 머신러닝 개념에 익숙한 분들을 대상으로 시행착오와 개선 과정을 공유하며, 단순한 임베딩 유사도를 넘어 유저가 장바구니에 담은 상품들의 맥락을 이해하여 함께 구매할 만한 상품을 추천하는 성능을 개선한 경험을 소개합니다.

장바구니 추천
그림 2. 장바구니 추천

기존 모델 소개 및 아쉬운 점

초기 장바구니 추천 모델은 빠른 도입과 구현 편의성을 위해 주문 데이터 기반의 Item2Vec 방식을 채택했습니다. 고객의 주문 이력을 하나의 문장으로, 주문 내 상품들을 단어(Word)로 간주하여 Skip‑gram 방식으로 학습했으며 현재 장바구니에 담긴 상품들과 임베딩 유사도를 기반으로 상품을 추천하는 구조였습니다.

하지만 추천 모델을 운영하면서 장바구니 추천의 목적과 상충되는 몇 가지 문제점을 발견하게 되었습니다.

대체재 편향

Item2Vec 모델은 동일한 주문 내에서 함께 등장하는 상품들을 유사한 벡터 공간에 매핑합니다. 이는 유사한 구매 패턴을 갖는 상품들이 비슷한 임베딩을 갖게 되는 결과로 이어집니다.

예를 들어, 고객이 우유를 장바구니에 담았을 때:

기대되는 추천실제 추천
시리얼, 등 우유와 함께 구매되는 상품다른 브랜드의 우유 상품군

임베딩 유사도에만 의존하면 추천 결과가 동일한 카테고리 내 대체재로 편중되어 추천 다양성이 크게 떨어지는 문제가 발생합니다. 크로스 셀링을 위해서는 다양한 보완 상품군을 제안할 수 있어야 합니다.

시퀀스 맥락 부재

장바구니에 상품을 담는 순서에는 고객의 구매 의도가 담겨 있습니다. 하지만 Item2Vec은 주문 내 상품의 동시 출현만을 학습하므로 순서 정보를 반영하지 못합니다.

고객장바구니 순서적합한 추천
1[라면, 삼겹살, 상추]고기 요리에 필요한 마늘
2[삼겹살, 상추, 라면]라면과 어울리는 김치

Item2Vec은 순서를 고려하지 못해 이러한 맥락 차이를 구분하지 못했습니다. 따라서 담은 상품의 시퀀스를 이해하고 자연스럽게 다음 상품으로 이어질 수 있는 추천을 목표로 모델 개선을 진행했습니다.

구매 맥락을 고려한 추천 모델

“어떤 맥락에서 상품들이 담겼는지”를 이해하기 위해 상품 간 관계뿐만 아니라 상품을 담는 순서까지 함께 고려해야 합니다. 이를 위해 2‑stage 파이프라인을 구성했습니다.

  • Stage 1. 그래프 기반 상품·카테고리 임베딩 – 주문 데이터를 그래프로 구조화하고 Node2Vec을 통해 임베딩을 생성.
  • Stage 2. 맥락 기반 다음 상품 예측 – Stage 1에서 만든 임베딩을 입력으로 Transformer 모델이 장바구니 시퀀스를 학습하고 다음에 담을 상품을 예측.

Stage 1. 그래프 기반 상품·카테고리 임베딩

롱테일 상품은 주문 빈도가 낮아 데이터 희소성 문제가 발생합니다. Node2VecRandom Walk를 통해 시퀀스를 생성해 구조적 연관성을 효과적으로 학습할 수 있습니다.

그래프 정의

그래프
그림 3. 함께 구매 데이터 기반 그래프 예시

Node 타입

타입설명
상품 노드주문 데이터에 등장한 개별 상품 (예: 삼겹살, 쌈장)
카테고리 노드상품이 속한 카테고리 (예: 육류, 채소)

Edges & Weights

  • Item‑Item – 상품 간 연결. 주문 데이터 기반 Association Rule을 활용해 연관도 기반 가중치를 부여, 인기 상품에 편중되지 않도록 함.
  • Item‑Category – 상품과 카테고리 간 연결. 신규·주문이 없는 상품도 카테고리 노드를 통해 임베딩을 생성해 Cold Start 문제를 완화.

시퀀스 생성 및 임베딩 학습

그래프에서 Weighted Random Walk를 수행해 가상의 노드 시퀀스를 생성합니다. 예시 시퀀스:

[한돈 삼겹살 500g → "육류" → 무항생제 목살 500g → 유기농 상추 → 국내산 깐마늘 → "채소" → …]
[룸모 스파게티면 → "스파게티/파스타면" → 바릴라 링귀니면 → 국내산 깐마늘 → 무띠 토마토소스 → "파스타소스" → …]

이 시퀀스를 Node2Vec에 입력해 상품·카테고리 임베딩을 학습합니다. 생성된 임베딩은 구매 패턴의 연관성을 함축하고, Stage 2의 Transformer 모델 입력으로 활용됩니다.

Stage 2. Transformer 기반 시퀀스 추천

장바구니에 담긴 상품을 하나의 시퀀스로 간주하고, “지금까지 담은 상품들”을 분석해 다음에 고객이 담을 가능성이 가장 높은 상품을 예측합니다.

모델 아키텍처
그림 4. 모델 아키텍처

학습 데이터 구성

주문 데이터에서 장바구니 순서를 활용해 학습 데이터를 구성합니다.

[ \text{Input: } [i_1, i_2, \dots, i_{t-1}] ;\rightarrow; \text{Target: } i_t ]

입력 임베딩

각 상품은 Stage 1에서 학습된 상품 임베딩카테고리 임베딩을 결합하고, 위치 임베딩을 더해 표현합니다.

[ h_i = [e_{\text{item}}(i) ; e_{\text{category}}(i)] + e_{\text{pos}}(i) ]

Cold Start 상품의 경우, 상품 임베딩이 약할 수 있지만 카테고리 임베딩과 결합해 보완합니다.

Transformer 기반 맥락 학습

  • Masked Self‑Attention – SASRec 방식을 참고해 Causal Masking 적용. 각 시점에서 이전 상품만 참조해 예측 타깃 정보가 유출되지 않도록 함.
  • Feed Forward Network – Self‑Attention 결과를 비선형 변환해 풍부한 표현 학습.

이 구조를 통해 동일한 상품 조합이라도 담는 순서에 따라 다른 추천이 가능해집니다. 예를 들어 [라면, 삼겹살, 상추]마늘, [삼겹살, 상추, 라면]김치를 높은 가중치로 추천하도록 학습됩니다.

모델 학습 구성 및 Loss 함수

  • Multi‑Task Learning – 다음 상품카테고리를 동시에 예측하도록 설계. 두 task의 loss를 가중합으로 결합.
  • Focal Loss – 인기 상품과 롱테일 상품 간 클래스 불균형을 완화. 어려운 샘플에 더 집중해 롱테일 상품 학습을 강화.

실험 결과 및 평가

예측 결과 비교

동일한 장바구니 맥락에 대해 Item2Vec(AS‑IS)과 개선 모델(TO‑BE)이 제공하는 추천을 실제 예시로 비교합니다.

추천 결과 비교
그림 5. 추천 모델 예측 결과 비교

Item2Vec은 임베딩 유사도에 기반해 비슷한 카테고리의 상품을 추천하는 경향이 있는 반면, 개선 모델은 맥락을 고려한 보완 상품을 주로 제안합니다.

오프라인 평가

장바구니 추천을 제공하는 여러 셀러를 대상으로 기존 모델(Item2Vec) 대비 성능을 평가했습니다. 평가 데이터는 학습 기간 이후 주문 내역을 사용했으며, 장바구니에 담은 상품 순서를 고려마지막 상품을 정답으로 설정했습니다.

셀러 유형셀러Hit Rate@10 (개선율)Category Diversity (평균)
슈퍼마켓셀러 A51% ↑7.04 → 8.13
셀러 B71% ↑7.38 → 8.35
셀러 C120% ↑8.57 → 8.38
편의점셀러 D54% ↑3.51 → 4.98
셀러 E40% ↑4.80 → 6.51
셀러 F87% ↑5.51 → 7.11

주요 결과

  • 기존 Item2Vec 대비 Hit Rate@10이 40 %~120 % 향상되었습니다. 특히 데이터가 적은 롱테일 셀러(C, F)에서 큰 폭의 개선을 보였으며, 이는 Transformer의 Self‑Attention이 적은 데이터에서도 맥락을 효과적으로 학습했기 때문입니다.
  • 대부분의 셀러에서 추천 다양성이 증가했습니다. 동일 카테고리 내 유사 상품이 아닌, 함께 구매할 만한 다양한 상품군을 제안하게 되었습니다. 셀러 C에서는 정확도 향상에 집중하면서 다양성이 소폭 감소했지만, 이는 롱테일 특성에 기인한 현상으로 해석됩니다.
  • 슈퍼마켓과 편의점 모두에서 일관된 성능 향상을 보여, 서로 다른 도메인에서도 모델이 안정적으로 작동함을 확인했습니다.
Back to Blog

관련 글

더 보기 »

우리는 코드처럼 문화도 리팩토링한다

팀 소개 커머스웹프론트개발팀 이하 “커머프팀”은 배달의민족의 모든 커머스 서비스와 플랫폼은 물론, 백오피스부터 뒷단의 물류시스템에 이르기까지 웹 클라이언트 영역을 담당하는 거대한 규모의 팀입니다. 각기 다른 서비스를 담당하던 팀이 모여 하나의 큰 팀을 이루었고, 배달의민족이 꿈꾸는 커머스의 미래를 함께 만들어갑니다.