TECH 으로 돌아가기
TECH HACKER NEWS 2일 전 6분 읽기 27 READS

장바구니 320만 개를 분석했더니: 인스타카트 데이터로 배우는 '같이 사는 물건'의 과학

장바구니 320만 개를 분석했더니: 인스타카트 데이터로 배우는 '같이 사는 물건'의 과학

미국의 장보기 대행 서비스 '인스타카트'가 공개한 실제 주문 데이터 320만 건을 한 개발자가 분석해서, '어떤 물건들이 유난히 같이 팔리는가'를 파헤친 글이 올라왔어요. 결과물 자체도 피식피식 웃음이 나는데, 그 안에 담긴 분석 기법이 추천 시스템의 기본기를 그대로 보여주는 좋은 교재라서 소개해요.

그냥 세면 안 되는 이유

'같이 팔린 조합'을 찾는다고 하면, 단순하게 두 상품이 한 장바구니에 함께 담긴 횟수를 세면 될 것 같잖아요? 그런데 그렇게 하면 결과가 아주 재미없어져요. 1등은 무조건 '바나나와 우유' 같은 조합이 나오거든요. 왜냐하면 바나나도 우유도 원래 제일 많이 팔리는 상품이라, 딱히 관계가 없어도 같은 장바구니에 들어갈 확률이 높기 때문이에요.

그래서 진짜 재미있는 조합을 찾으려면 '향상도(lift)'라는 지표를 써야 해요. 이게 뭐냐면, A를 산 사람이 B도 살 확률이, 그냥 아무나 B를 살 확률보다 몇 배나 높은지를 재는 거예요. 수식으로 쓰면 lift = P(A와 B 동시 구매) ÷ (P(A 구매) × P(B 구매))인데요. 이 값이 1이면 두 상품은 서로 아무 상관이 없다는 뜻이고, 10이면 '이걸 사는 사람은 저것도 살 확률이 우연보다 10배 높다'는 뜻이에요.

이 지표로 320만 건을 돌리면 마법 같은 일이 벌어져요. 개별 판매량은 미미한데 함께 살 때만 존재감을 드러내는 조합들이 수면 위로 떠오르거든요. 칵테일 재료들이 세트로 묶여 나온다든지, 특정 요리의 레시피 재료가 통째로 드러난다든지, 장바구니 조합만 보고도 '아, 이 사람 오늘 밤 파티구나' 하고 그날의 계획이 읽히는 것들이요. 데이터가 사람들의 생활을 이렇게 투명하게 보여준다는 게 이 글의 웃음 포인트이자 소름 포인트예요.

직접 해보실 분들을 위한 함정 안내

따라 해보면 바로 만나게 되는 함정이 하나 있는데요. 바로 희귀 상품 노이즈예요. 각각 딱 한 번씩 팔린 상품 두 개가 우연히 같은 주문에 들어 있으면, 분모가 극도로 작아지면서 향상도가 하늘로 치솟거든요. 통계적으로는 아무 의미가 없는데 수치상으로는 가장 강력한 조합처럼 보이는 거죠. 그래서 실무에서는 '최소 지지도(support)' 필터, 그러니까 최소한 몇 백 번 이상 등장한 조합만 후보에 올리는 식의 컷을 먼저 걸어요. 이건 실제 추천 시스템을 만들 때도 똑같이 만나는 문제라서, 여기서 한 번 데어보면 좋은 예방주사가 돼요.

구현 난이도는 생각보다 낮아요. 주문-상품 테이블을 자기 자신과 조인(self join)해서 상품 쌍별로 세면 되니까 SQL 몇 줄로도 되고, 파이썬이라면 pandas와 희소 행렬(대부분이 0인 거대한 표를 메모리를 아끼며 다루는 자료구조)로 노트북에서도 충분히 돌아가요. 320만 주문이라고 하면 커 보이지만, 요즘 기준으로는 '노트북 사이즈' 데이터거든요.

이 분석의 족보

이런 걸 '장바구니 분석(market basket analysis)'이라고 부르는데, 유통업계에서는 역사가 깊어요. '맥주를 사는 사람이 기저귀를 함께 산다'는 그 유명한(그리고 절반쯤은 전설인) 이야기가 바로 이 분석에서 나왔죠. 아마존의 '이 상품을 구매한 고객이 함께 구매한 상품'도 원형은 같은 동시출현 통계고요. 요즘 추천 시스템은 word2vec을 상품에 적용한 item2vec처럼 임베딩 기반으로 진화했지만, 그 밑바탕에 깔린 직관은 여전히 '함께 등장하는 것들은 관련이 있다'는 동시출현이에요. 기본기를 이해하면 최신 기법도 훨씬 빨리 와닿는 이유죠.

우리한테 남는 것

커머스나 콘텐츠 서비스를 만들고 계시다면, 향상도 기반 동시출현 분석은 돈 한 푼 안 들이고 하루 만에 만들 수 있는 가장 가성비 좋은 추천 베이스라인이에요. 거창한 머신러닝 없이도 '함께 보면 좋은 상품' 정도는 바로 뽑아낼 수 있거든요. 그리고 인스타카트의 이 데이터셋은 Kaggle에 공개돼 있어서 누구나 내려받아 재현할 수 있어요. 데이터 분석 포트폴리오가 필요한 분들에게는 '재미있는 질문 하나 + 공개 데이터'가 얼마나 훌륭한 프로젝트가 되는지 보여주는 모범 사례이기도 하고요.

정리하자면, 뻔한 빈도 대신 향상도를 쓰는 순간 데이터가 이야기를 시작한다는 것. 여러분의 서비스 데이터에서 발견한 의외의 상관관계, 있으신가요? 댓글로 공유해 주세요.


🔗 출처: Hacker News

SOURCE · HACKER NEWS
원문 전체 보기 → https://rogerdickey.com/funny-item-co-occurrences-in-3-milli...
SHARE
처리 중...