brunch

You can make anything
by writing

C.S.Lewis

by 말바보 Nov 06. 2022

Instacart 주문 뒤의 이야기

2부: 찾아보기



이것은 "주문 비하인드 스토리" 시리즈의 두 번째 기사로, 앱에서 식료품 품목을 표시하고, 매장 검색을 가능하게 하고, 쇼핑객이 계산을 하도록 안내하고, 마지막 마일 물류에 힘을 실어주는 기술을 안내합니다. 한 시간 안에 집 앞까지 저녁 식사를 제공합니다. 이 게시물을 읽기 전에 1 부를 확인하여 식료품 카탈로그 데이터를 수집하고 정규화하는 방법을 확인하십시오.


지난 기사에서 우리는 마지막 저녁 식사 계획(주중 레몬 허브 연어)에 대해 배웠고 연어 필레, 마이어 레몬 및 딜 품목 목록을 일반 식료품 카탈로그에 넣는 방법에 대해 자세히 설명했습니다. 이 두 번째 기사에서는 해당 재료를 찾아 장바구니에 추가하고 버튼을 탭하여 결제할 수 있는 기술에 대해 알아보겠습니다.


검색 가능한 카탈로그 구축



평균적으로 사용자는 체크아웃하기 전에 장바구니당 20번의 검색을 합니다.



우리는 고객에게 시간을 돌려주기 위해 Instacart를 구축했으며 검색 팀은 고객이 20개의 검색을 최대한 활용할 수 있도록 지원합니다. 문제는 20,000개 위치에 있는 500,000,000개 항목 목록을 쉽게 탐색할 수 있도록 하는 것이 정말 어렵다는 것 입니다. 검색 창에 "딜"을 추가하면 신선한 딜, 말린 딜 또는 딜 피클을 원하는지 결정하고 가장 관련성이 있다고 생각되는 순서대로 해당 제안의 순위를 지정해야 합니다.


이를 위해 우리는 Elasticsearch 와 7년 간의 카탈로그 및 구매 데이터 백로그에 의존합니다. 다음은 이 특정 쿼리에 적용할 수 있는 검색 프레임워크입니다.


1.) 사용자 의도 파악


가장 먼저 해야 할 일은 의도를 식별하는 것입니다. 검색어를 기반으로 검색자가 앱을 사용하여 옵션을 탐색하고 영감을 얻습니까? 아니면 염두에 두고 있는 특정 항목을 구매하기 위해 여기에 있습니까? 예를 들어 사용자가 "허브"를 입력하면 접시 위에 다른 허브를 탐색한다고 가정할 수 있지만 "유기농 신선한 딜"을 입력하면 의도가 훨씬 더 명확해집니다.


2. 제품 수정자 결정


모든 검색어에서 우리는 핵심 제품 을 얻습니다  . 이 경우에는 "딜"입니다. 이 다음 검색 계층에서는 고객이 일반적으로 더 강한 의도와 상관관계가 있는 제품 수정자를 추가했는지 확인합니다. 이 예에서 "유기농" 및 "신선한"은 제품 수식어입니다. 특정 브랜드나 부서와 같은 다른 강력한 제품 수정자는 결과를 더 잘 구성하는 데 도움이 될 수 있습니다.


3. 카탈로그 매칭


소매업체는 재고 데이터를 입력할 때 일반적으로 부서별로 구성합니다. 그렇지 않은 경우 미리 설정된 표준화된 부서 목록에 추가합니다. 우리가 올바른 의도라고 생각하는 것이 무엇인지 결정하기 위해 제품 수정자를 사용한 후에는 관련 제품을 찾기 위해 카탈로그 데이터베이스를 조사하면서 Elasticsearch를 제품 쿼리 중매자로 사용합니다.

"유기농 신선한 딜" 검색과 관련이 있을 수 있는 부서 및 제품에 대한 검색 트리의 예입니다.


4. 결과 순위 지정


마지막으로 고객이 구매할 가능성이 가장 큰 제품을 결정하고 "볼 수 있는 부분"에 순위를 매겨야 합니다. 앱 내 결과를 표시할 때 이상적인 순위를 구축하기 위해 키워드 관련성, 과거 구매 데이터(어떤 항목이 장바구니에 가장 많이 추가됩니까?)의 조합을 찾습니다. 시간이 지남에 따라 점점 더 많은 품목이 더 많은 장바구니에 추가됨에 따라 각 쿼리 와 가장 관련성 이 높은 제품이 무엇인지 더 세밀하게 이해할 수 있습니다.

쿼리에 대한 순위 검색 결과입니다. 우리가 어떻게 했다고 생각합니까?


연어와 Meyer 레몬을 검색할 때 의도를 확인하고 카탈로그를 쿼리하고 순위를 매기는 동일한 프로세스를 사용하여 연어 고양이 사료와 레몬 향이 나는 주방 세제를 걸러냅니다!


동적 바구니 합계 계산


그래서 당신은 당신의 의도와 일치하는 검색 결과에 착륙했습니다. 상품을 장바구니에 담기 전에 가격별로 검색을 시작합니다. 모든 장바구니에서 실시간으로 항목 및 장바구니 합계에 쿠폰 및 거래를 적용하기 위해 고객 프로필, 소매업체 및 CPG 파트너가 제공하는 논리를 평가해야 합니다.



시장 전체에서 총 바구니 비용에 영향을 미칠 수 있는 10,000,000건 이상의 거래 또는 할인을 실행할 수 있습니다.



앱에 목록 가격을 표시하기 위해 고객과 관련된 다양한 컨텍스트 세부 정보, 장바구니에 담긴 품목의 양, 소매업체 및 장바구니에 담긴 특정 제품 브랜드를 고려합니다.


다양한 요인이 매장에서 볼 수 있는 연어 가격과 체크아웃 시 더 큰 바구니에 담긴 연어 가격에 영향을 미칠 수 있습니다.



리스팅 특정 거래 : CPG 및 브랜드 파트너는 플랫폼의 특정 항목에 대한 쿠폰 또는 판매를 제공할 수 있습니다.


로열티 클럽 할인 : 특정 소매업체는 Instacart 사용자 프로필에 클럽 회원 번호를 입력하는 고객에게 로열티 클럽 가격을 제공합니다.


위치 기반 거래 : 소매업체는 종종 위치 또는 지역별 판매 또는 쿠폰을 설정합니다.


배송 할인 : 협력사는 첫 주문자에게 무료 배송을 후원할 수 있으며, 고객이 특정 상품을 장바구니에 담으면 배송비 면제도 후원할 수 있습니다.


번들 품목 할인 : 브랜드는 한 번에 여러 제품을 구매하기로 선택한 경우 총 장바구니 가격에서 일정 달러를 할인할 수 있습니다. 예를 들어 O Organics에서 5개 제품을 구매하는 경우 총 구매 금액에서 10달러 할인을 받을 수 있습니다. 또 다른 일반적인 묶음 상품은 요구르트 매장에서 흔히 볼 수 있는 10달러짜리 클래식 10개 품목입니다.


Instacart Express 멤버십 : 주문자가 Instacart Express 회원인 경우 일정 금액 이상 주문 시 배송료가 면제됩니다.


기프트 카드 및 크레딧 : 개별 고객 프로필에 추가되거나 발행된 달러 금액.


고객이 탐색할 때 찾을 수 있는 일반적인 거래: 이 신선한 대서양 연어 필레 목록에는 시간 제한이 있는 판매 가격이 적용됩니다.


장바구니 합계에 이러한 모든 거래 및 세부 정보가 고려되도록 하기 위해 Elasticsearch를 사용 하여 카탈로그에서 기본 제품 속성 (예: 항목 이름, 이미지 및 목록 설정 가격과 같은 간단한 항목)을 가져오고 다음을 사용합니다. 탐색하고 장바구니에 추가하는 항목에 가격 변환 을 적용하는 간단한 Ruby 논리 세트입니다 . 변환이 적용되면 장바구니 총액에 반영되는 조정된 품목 비용 을 얻습니다.


이 모든 것이 진행됨에 따라 포인트 카드, 익스프레스 멤버십, 최초 주문 및 주문 크레딧과 같은 계정과 관련된 기타 상황 정보를 가져와 장바구니 합계에 실시간으로 적용합니다. 장바구니에 담긴 연어 필레, 신선한 딜 및 Meyer 레몬 품목이 적절하게 변형되었다고 확신하고 '주문하기'를 클릭하면 주문 정보가 유지되며, 이는 주문 처리 팀에서 일괄 처리하는 데 사용할 것입니다. 쇼핑객에게 주문. 이 주문 생성의 일부로 우리는 모든 총액 계산을 확인하고, 총액을 결정하고 , 결제 프로세서인 Stripe ®를 통해 결제 승인을 생성합니다.


이 주문의 다음 이야기는? 이행. 이 시리즈의 다음 편에서는 쇼핑객이 매장에서 주문을 선택하는 데 도움이 되는 기술과 주문을 집 앞까지 안내하는 물류 시스템에 대해 자세히 알아볼 것입니다.


검색, 기계 학습 및 동적 바구니 가격 책정으로 충분하지 

않습니까?


엔지니어링 및 제품 팀을 모집합니다!


우리의 현재 오프닝을 확인하십시오


.


*Instacart의 기술 블로그 에서 엔지니어링에 대해 자세히 알아보십시오 .


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari