본문 바로가기
분석프로젝트/분석프로젝트

[추천모델] 식료품 쇼핑몰 추천모델과 추천 챗봇 만들기 #02 데이터 설명

by DoBeFree 2020. 5. 17.
반응형

이전글 : 2020/05/13 - [분석프로젝트/분석프로젝트] - [추천모델] 식료품 쇼핑몰 추천모델과 추천 챗봇 만들기 #01 기획

이 분석프로젝트에서 사용하는 데이터는 인스타카트(Instacart) 라는 미국의 신선식품 배달업체가 공개한 2017년도 구매 데이터 입니다.
인스타카트는 모바일앱으로 식료품을 주문하면 실제 슈퍼마켓, 월마트 등 오프라인 매장에서 장을 봐주고 배달해주는 서비스를 제공하는 업체 입니다. 오픈데이터는 https://www.instacart.com/datasets/grocery-shopping-2017 에서 다운받을 수 있습니다. 
- 동일한 데이터를 캐글(Kaggle)에서도 다운가능합니다.(https://www.kaggle.com/c/instacart-market-basket-analysis/data) 공식홈페이지의 경우 다운속도가 느려 본 프로젝트에서는 캐글에서 다운받은 데이터를 사용합니다.)

1. 데이터 파악하기

데이터를 분석하고 모델을 학습하는 가장 첫 단계는 데이터를 파악하는 과정입니다. 우리의 클라이언트 "마켓브로콜리"가 수집하고 관리하는 데이터는 아래와 같습니다.



(1) orders.csv
유저의 주문정보로 언제 주문을 했는지, 마지막 주문으로부터 얼마나 걸렸는지 등을 수집중인 데이터 입니다.

  • order_id : 주문 유니크ID
  • user_id : 유저 유니크ID
  • eval_set : 로그의 evaluation 세트에 대한 라벨입니다.
    • prior : user_id의 과거 구매
    • train : user_id의 학습데이터(재구매 모델을 학습할 구매기록)
    • test : user_id의 테스트데이터(재구매 모델을 예측할 구매기록)
    • 아래 그림처럼 유저A는 총 6번의 구매를 했고 5번의 구매기록은 prior, 마지막6번째 구매기록이 train으로 모델로 재구매여부를 학습할수 있습니다.
    • 유저 C의 경우 총8번의 구매를 했으며 7번까지의 구매기록이 prior 마지막 8번째 구매기록은 test로 유저A를 통해 학습한 데이터를 유저C의 8번째 구매기록을 통해 재구매 여부를 예측합니다.

(1') kaggle 2nd soultion ppt 중

  • order_number : 구매 순서
  • order_dow : 구매요일
    • 0 : Sunday ~  6: Saturday
  • order_hour_of_day : 구매시간
  • day_since_prior_order : 마지막 구매일로부터 걸린 시간(단위 : 일)
    • 'NA'는 첫구매(order_number = 1) 일 경우.( 첫구매는 이전 구매기록이 있을 수 없기 때문) 



(2) order_products__prior.csv

orders.csv 파일의 eval_set 칼럼값이 prior 인 주문내역에 대한 데이터로, 어떤 상품을 구매했고, 상품을 장바구니에 담은 순서, 재구매한 상품인지에 대한 정보를 담고있는 데이터 입니다.

  • order_id : 주문 유니크ID , orders.csv 의 order_id와 연결하는 조인Key 입니다.
  • product_id : 주문한 상품ID
  • add_to_cart_order : 장바구니에 담은 순서
  • reordered : 이 상품이 재구매한 상품인지 아닌지 표현.
    • 1 : 재구매
    • 0 : 최초구매

 

 

(3) order_products__train.csv

orders.csv 파일의 eval_set 칼럼값이 train 인 주문내역에 대한 데이터로, 어떤 상품을 구매했고, 상품을 장바구니에 담은 순서, 재구매한 상품인지에 대한 정보를 담고있는 데이터 입니다. 구조상으로는 order_products__prior.csv 데이터와 동일합니다.

  • order_id : 주문 유니크ID , orders.csv 의 order_id와 연결하는 조인Key.
  • product_id : 주문한 상품ID
  • add_to_cart_order : 장바구니에 담은 순서
  • reordered : 이 상품이 재구매한 상품인지 아닌지 표현.
    • 1 : 재구매
    • 0 : 최초구매

(4) products.csv

product_id의 정보를 담은 메타데이터 입니다.

  • product_id : 주문한 상품ID, order_products__prior.csv, order_products__train.csv 의 product_id와 연결할 수 있는 Join Key
  • product_name : 상품이름
  • aisle_id : 상품 세부 카테고리ID
  • department_id : 상품 카테고리 ID

(5) department.csv

상품 카테고리ID에 대한 정보를 담은 메타데이터 입니다.

 

  • department_id : 상품 카테고리 ID
  • department : 상품 카테고리명

 

 

 

(6) aisles.csv

상품 세부 카테고리ID에 대한 정보를 담은 메타데이터 입니다.

  • aisle_id : 상품 세부 카테고리ID
  • aisle : 세부 카테고리명

데이터 연결 구조

데이터의 구조와 담은 스키마를 살펴봤으니 다음글에서는 RAW데이터를 전처리하여 빅쿼리에 적재하고 아파치 에어플로우(Airflow)를 통해 ETL을 작업을 진행하는 내용을 다룰 예정입니다. 

출처 :
(1') : https://www.kaggle.com/c/instacart-market-basket-analysis/discussion/38143
(2) : 데이터 설명 : https://gist.github.com/jeremystan/c3b39d947d9b88b3ccff3147dbcf6c6b

 

반응형

댓글