Skip to content
Jisoo edited this page Feb 7, 2023 · 31 revisions

데이터 개요

image

  • 오늘의집 사이트에서 유저들이 인테리어를 소개하는 글이 있음.
  • 인테리어 소개글에 포함된 아이템들을, 해당 오늘의집 유저가 선호하는 아이템으로 간주 (user-item interaction으로 간주)
  • 수집한 데이터를 통해 데이터셋을 구성 (ERD를 참고해주세요.)

데이터 수집 방법 및 업데이트

데이터 수집 파이프라인

image

  • 데이터 수집 소요시간을 단축하기 위해 데이터 수집 파이프라인 설계

데이터 수집 방법

image

  • 유저가 작성한 인테리어 글을 모아 둔 링크에서 Interior 고유번호를 먼저 수집
  • Interior 고유번호에 포함된, 연관된 이미지와 상품의 고유번호를 수집
  • 이후 수집된 고유번호를 활용하여 데이터에 대한 세부 정보를 수집

데이터 수집 자동화를 위한 데이터 업데이트 코드

image

  1. 새로 등록된 글은 [New] 라벨과 함께 상단에 노출
  2. 인테리어 모아보기 페이지의 최상단의 3개만 탐색하여 새로 등록된 글이 있는지 먼저 확인
  3. 새로 등록된 글이 있다면, 해당 글에서 새롭게 발견된 Item, Card에 대해서만 데이터 수집 진행

크롤링 가능 여부

image

  • 크롤링 가능 여부를 robots.txt를 통해 확인

데이터의 특성

Extremely High Sparsity

image

  • 수집된 데이터의 경우 가능한 모든 상호 작용 중에서 관측치의 비율이 99.96%로 매우 spare한 데이터
  • 위 이미지는 전체 아이템 중 10%에 해당하는 아이템들에 대해 99.96%의 sparsity를 시각화한 이미지

Extremely Long Tail Problem

image

  • 수집된 데이터는 0.41%의 소수 아이템들이 다른 아이템들과 비교해서 상대적으로 많은 interaction을 차지하고 있음.
  • 아이템별로 interaction의 불균형이 존재하기 때문에, 모델 학습 시 소수의 인기 아이템에 편향되서 개인화 추천이 어려운 문제가 발생할 수 있음.

데이터의 전처리

전처리

문자열 전처리 적용, Konlpy, keras의 text_to_word_sequence 적용해서 가공하기 쉬운 형태로 변환

상품명 클러스터링

상품명 클러스터링 개괄

image

상품명의 특징

image

  • 상품명이 유사한데 색상, 크기, 형태만 다른 경우가 있음.

상품명 vectorzie (text to vector)

  • 상품명 text의 평균 길이: 19
  • 짧은 text가 많기 때문에 tf-idf, bag-of-words, word2vec과 같은 ML 기법으로 vectorize가 잘 안됨.
  • 게슈탈트 패턴 매칭 알고리즘을 통해 text 간의 유사도를 character 단위로 계산해서 numerical value로 변환(vectorize)

상품명 유사도 계산 - 시간복잡도 줄이기

image

  • 게슈탈트 패턴 매칭 알고리즘으로 vectorize할 경우 모든 아이템과 비교하려면 O(n^2)의 시간복잡도가 요구됨. (15시간 소요)
  • Sliding Window 알고리즘 적용: 상품명 기준으로 정렬 후 근방의 K개 상품명만 비교하면 O(n*k)의 시간복잡도가 요구됨. (10분 소요)

유사도 기반 상품명 클러스터링

image

  • 아이템별로 유사한 상품들끼리를 같은 클러스터로 묶일 수 있도록 BFS 알고리즘 사용
  • 너무 먼 이웃의 노드는 클러스터에 포함되지 않도록 함. (트리의 depth 제한 적용)
  • 양방향 그래프를 구성해서 노드들이 빠짐없이 클러스터링

실제 서비스 적용 결과 이미지

image

ERD

image

Clone this wiki locally