이번 글은 정보 전달보다는 고민 토로가 주된 내용이다. 팀 과제는 TV홈쇼핑 방송 매출을 예측하는 것이다. 한달/하루 매출이 아니라 각 방송 시간마다 얼마가 나올지를. 그래서 시계열 모델을 쓰지 않고 있다.

feature engineering

시계열이 아니라면 어떤 feature를 써야하는가를 심각하게 고민할 수 밖에 없다. 우리가 필요한 주요 변수는 방송에서 어떤 상품을 파느냐, 어떤 환경에서 방송을 하느냐가 아닐까 생각한다. 그런데 이런 심오한 내용을 어떤 데이터가 담아낼 수 있을까? 매우 고민이다…

similar text score

데이터에서 눈에 띄게 보이는 점은 매우 짧다는… 것이다. 어떤 상품에 대해 예측을 한다면 레코드가 10건 정도는 있기를 바라지만, 내가 보는 데이터는 평균 3건 뿐이다. classification 문제에서 class마다 데이터 3건이 있으면 어떤 분류기도 제대로 성능을 낼 수 없을 것이다.

데이터를 길게 만들기 위해 유사한 상품명을 묶어주기로 했다. [원더브라 10차, 11차, 12차]처럼 시리즈? 상품이거나 [면 블라우스/코튼 블라우스]와 같이 단어 차이만 있는 상품도 꽤 있기 때문에 이들을 한 class로 묶어주어도 무방할 것으로 보인다.

유사도의 기준은 Jaro-winkler 스코어를 사용했다. 상품 텍스트는 보통 이런 패턴이다. [브랜드] (상품 특징) (본 상품) (추가 구성) Jaro-winkler의 특징은 앞의 글자가 비슷하면 뒤쪽이 달라도 점수가 높은 경향이 있다. (그래서 검색엔진에서 첫 글자를 틀리면 오타 보정이 잘 안된다) 이 특성을 활용하기 위해 상품 텍스트에서 브랜드를 제거하여 (상품 특징) (본 상품) (추가 구성) 상품의 본질이 유사한 것끼리 묶이도록 유도했다.

text grouping by Jaro-winkler score

상품 1만 개를 $\binom{N}{2}$개의 쌍으로 묶고 Jaro-winkler 점수를 구한 다음 그룹핑을 해주는 것도 일이었다.

  1. 그룹핑 기준은 일일이 눈으로 확인하며(…) 적당히 잘 묶이는 수치를 사용했고
  2. 긴 상품명이 짧은 상품명으로 묶이도록 하여 결과적으로 군더더기 없이 간결한 상품명으로 정리되도록 했다.
  3. 이렇게 묶인 상품명이 그대로 피처로 쓰이진 않았고 파생 변수를 만드는데 중요한 역할을 했다.

회사 업무를 소스 없이 짧은 글로만 설명하기는 많이 어렵다는 걸 느끼며… 추후 소스를 짧게 덧붙여 나라도 알아볼 수 있게 만들어야겠다.