<생과일 타르트 모음> 어떤 타르트를 드시겠습니까?
지금까지 수집 및 분석한 데이터를 바탕으로 화장품 추천시스템을 구현해보자.
추천 모델은 CF(Collaborative Filtering) 모델을 사용할 예정이다.
CF 모델을 사용하기 위해서는 고객들간의 관계가 필요한데, 이를 위해 2개 이상의 구매이력을 가진 고객 데이터만 뽑아놓은 데이터가 "cos_2more.csv"데이터이다. (1개만 구매한 고객들로는 이후 사용할 KNN알고리즘에 적용하기 어렵다.)
총 2,887건의 고객데이터를 보유하고 있다.
변수는 16개가 나오는데, 이 중 CF모델에 필요한 데이터인 유저이름, 제품명, 평점 3가지 변수들만 뽑아오도록 한다.
nickname, product_name 변수들은 object형, rating 변수는 int형 변수이다.
그리고 보유한 데이터가 테이블 형태로 되어있는데, 추천시스템에 사용하기 위해서는 데이터를 딕셔너리 형태로 바꾸어 주어야 한다. 그래야 머신러닝 모델을 통해 나온 결과를 인덱싱해서 추천 화장품 리스트로 뽑아낼 수 있다.
이제 딕셔너리 구성이 완료되었다. 이 딕셔너리를 바탕으로 사용자 닉네임을 입력하면 추천해주는 모델을 구현해보자.
surprise 라이브러리에 rating_scale을 1~5점 척도로 지정해주었다.
학습에 사용된 머신러닝 알고리즘은 KNN이다. 나중에 K값을 넣어주면 그에 맞게 추천 알고리즘이 발현된다.
그리고 사용자간 유사도를 측정하는데에는 pearson similarity를 사용하였다.
최종적으로 fit으로 학습시키면 모델이 완성된다.
이제 이 모델을 바탕으로 "닉네임a"라는 고객의 추천리스트를 만들어보자.
K=5로 설정되어서 유사한 사용자 5명을 기반으로 화장품을 추천해주게 된다.
Input창에 유저 닉네임을 입력한다면 그에 맞는 인덱스 번호 및 유사 사용자 번호를 보여주고, 이를 바탕으로 추천하는 화장품 목록을 보여준다.
<결론>
해당 고객인 "닉네임a"에게는 MLE로션, 에센셜 모이스처라이저, 로열허니 착한 에멀전, 수분가득 콜라겐 에멀전, 더테라피 에센셜 포뮬러 에멀전, 슈퍼 아쿠아 울트라 워터-풀 컨트롤 에멀전이 추천되었다. 이 화장품들은 주로 수분공급용 제품들이다.
실제로 닉네임a에 대한 피부타입을 살펴보면 건성이다. 건성에 맞는 수분공급용 제품들이 추천된 것을 확인할 수 있다.
닉네임a의 제품 선호도와 유사한 사용자 5명을 선정한 후 그 사용자들이 선택한 다른 제품들을 닉네임a에게 추천해주는 것이다.
<추천시스템에 대하여>
이것으로 화장품 추천 모델에 대한 것이 일단락되었다. 하지만 이 CF추천시스템은 단점이 있다. 과거 구매이력 데이터가 적은 고객에게는 추천이 힘들다는 것이다. 모델이 그들의 소비자 데이터를 충분히 학습하지 못해서 추천하는데 한계가 있다.
이를 보완할 수 있는 추천 시스템이 CBF(Content-based Filtering) 추천시스템이다. 제품 정보와 소비자 정보에 대한 매칭을 통해 제품을 추천하므로 이전 데이터가 충분하지 않아도 추천이 가능하다.
CF와 CBF가 하이브리드된 추천 모델을 만들면 훨씬 더 강력한 추천시스템이 만들어질 수 있을 것이라는 가설이 나온다.
여기까지 하고 화장품 추천봇 스토리는 잠시 쉬어갑니다!
조만간 다시 돌아오겠습니다.