Personalizing Airbnb search by learning from the guest journey
Author: Daochen Zha 외 (Airbnb) | Source: Medium (Airbnb Engineering) | Published: 2026-07-22
한 줄 요약
수백 개까지 늘어난 손수 만든 집계 피처의 확장성·표현력 한계를 넘기 위해, 게스트 여정을 7년치 long-term 시퀀스와 21일치 short-term 뷰 시퀀스로 분리해 Transformer로 인코딩하고 배치 추론으로 서빙한 랭킹 시스템.
핵심 주장/내용
- 문제: Airbnb 여행 계획은 단일 세션에서 일어나지 않는다. 며칠에 걸쳐 수십 개 숙소를 둘러보고, 수년에 걸쳐 예약·리뷰·간간이 취소가 쌓인다. 이 이벤트들이 게스트가 숙박에서 무엇을 중시하는지 많은 것을 드러낸다. 기존에는 이를 손수 만든 피처(총 과거 예약 수, 평균 숙소 가격 같은 집계 통계)로 포착했는데, 피처 수가 수백 개에 이르자 확장이 어려워지고 표현력이 점점 제한되었다
- 세 가지 난제:
- listing view가 압도적으로 전체 이벤트의 대부분(97.8%)을 차지하고 일부 게스트는 수십만 개를 쌓아, 원시 시퀀스를 직접 모델링하는 것이 계산적으로 불가능
- 소셜 미디어와 최적화 대상이 다르다 — 소셜 미디어는 engagement를 최적화하지만 Airbnb는 예약 전환을 최적화한다. 예약은 이벤트에 비해 희소하고 의도적인 반면, listing view는 진짜 의도일 수도 그냥 심심풀이 브라우징일 수도 있다. 이 희소하고 노이즈 많은 신호에서 일반화하는 모델을 만드는 것은 engagement 모델링과 근본적으로 다른 문제
- 수억 개 search-label 쌍으로 시퀀스 모델을 학습하는 비용
- 시퀀스 설계 — 모든 이벤트를 균일하게 다루지 않고 둘로 분할:
- long-term — 지난 7년의 드물지만 정보량 많은 이벤트(예약, 리뷰, 취소, 기타 과거 상호작용). 80개로 캡
- short-term — 지난 21일의 listing view. 200개로 캡
- 캡 임계값은 가장 긴 2%만 truncate되도록 설정. 둘을 합치면 예약 이력의 깊이와 최근 브라우징의 즉시성을 모두 준다
- listing·host 식별자와 계층적 지리 ID 같은 high-cardinality ID는 공유 피처 풀 + unified embedding table로 인코딩
- 학습 효율 3전략 (합쳐서 약 4배 처리량 개선):
- 가장 영향력 큰 것 — search의 배치화: 인코더가 causal mask를 쓰므로 시퀀스를 누적적으로 처리한다. T=3 위치에서 생성된 임베딩이 그 시점까지 게스트가 한 모든 것을 담으므로 T=4의 search에 올바른 시퀀스 표현이 된다. 마찬가지로 T=6 임베딩이 T=7 search를, T=9 임베딩이 T=10 search를 서빙한다. 인코더를 세 번 처음부터 돌리는 대신 전체 이벤트 시퀀스에 한 번 돌리고 각 search를 해당 중간 임베딩으로 라우팅해 세 search가 forward pass 하나를 공유
- 길이별 bucketize로 배치 내 padding 최소화
- search의 sparse calculation으로 랭킹 모델에서 padding된 search 제거
- 서빙도 같은 효율 원칙 — 두 추론 단계를 분리: 최대 7년 이벤트와 21일 뷰에 걸친 전체 게스트 시퀀스에 다층 Transformer 인코더를 쿼리 시점에 돌리는 것은 비싸다. 시퀀스 인코더는 일별 배치 잡으로 실행해 새 이벤트가 생긴 게스트의 임베딩을 처리·저장하고, 검색 시 랭킹 모델이 저장된 임베딩을 실시간으로 조회해 라이브 검색 쿼리와 결합. 레이턴시를 낮게 유지하면서 모든 랭킹 결정에 게스트 이력의 전체 깊이를 반영
- 3단계 롤아웃 (각 단계마다 3주 A/B, 핵심 비즈니스 지표와 guardrail 지표를 면밀히 모니터링하며 통계적으로 강한 증거 + 안전 체크 통과 시에만 출시):
- long-term 시퀀스만 — 시퀀스 학습 게스트 표현이 기존 랭킹을 유의미하게 개선할 수 있음을 확립
- short-term 뷰 시퀀스 추가 — 위의 효율 전략으로 해결한 데이터 스케일링 난제를 도입
- setwise ranker를 시퀀스 인코더와 co-train — 각 숙소를 독립적으로 스코어링하는 pointwise ranker와 달리 후보 집합을 함께 고려해 숙소 간 상대적 차이를 추론할 수 있게 한다. 풍부한 게스트 표현과 결합하면 게스트의 여행 이력과 검색된 숙소들의 상호 비교를 함께 이해해 더 개인화된 랭킹 결정
주요 수치 / 사실
- listing view가 전체 게스트 이벤트의 97.8%
- 오프라인 NDCG(예약 라벨): long-term만 +0.44%, short-term 추가로 누적 +1.48%, setwise ranker가 추가 +2.3% → 총 +3.78%. Airbnb에서는 10년 넘게 다듬은 랭킹 모델이라 0.3% 개선도 유의미하다고 본다
- 온라인 A/B: long-term만 — uncanceled bookers +0.31%, views +0.38%. short-term 추가 — uncanceled bookers +0.55%, uncanceled nights +0.82%, views +0.90% (모두 통계적으로 유의). setwise ranker — uncanceled bookings +0.28%, booking requesters +0.32%
- views 상승이 모델이 게스트 관심을 포착하는 숙소를 효과적으로 표면화하고 있음을 시사하고, 그것이 관측된 더 높은 예약 전환으로 직결
- 일반화 검증 — 아키텍처 변경 없이 같은 시퀀스 임베딩을 프로모션 이메일 숙소 랭킹에 적용: uncanceled bookers +0.16%, uncanceled nights +0.23%, email clicks +5.04%. 게스트 표현이 검색을 넘어 일반화됨을 입증
- 향후: 준실시간 시퀀스 임베딩 갱신, wishlist·지도 상호작용 등 더 풍부한 이벤트 타입, target-aware 랭킹, generative recommender, setwise 랭킹 개선
- 논문: JourneyFormer (KDD ‘26, arXiv:2606.19108)
관련 위키
- ML Ranking Systems
- Generative Recommender Systems
- Recommendation Impact Measurement
- Feature Store
- A-B Testing and Experimentation
- Semantic IDs
Source: 원문 보기