앙상블 지도학습
지도 학습(supervised learning)은 학습 데이터에 예측의 목표가 되는 학습 레이블(label)이 포함된 학습 방법으로 기계학습(machine learning)에서 가장 기본적인 개념 중 하나이며 추천 시스템에서도 널리 사용된다. 다량의 데이터를 바탕으로 학습한 후 피처벡터만 주어졌을 때 학습 레이블에 해당하는 정보를 정확하게 예측하는 것이 목표가 된다. 지도학습이 추천시스템에 사용되는 과정을 살펴보자.
클릭 예측 모델과 데이터
좋은서점닷컴에 사용자가 방문하면 화면 상단에 10개의 서적을 보여준다고 생각해 보자. 그 중에 관심을 끄는 서적이 있다면 사용자는 해당 서적을 클릭하여 상세정보를 살펴보고 구매를 고려하게 될 것이다. 사용자의 관심사에 맞는 서적을 선정하기 위해, 해당 사용자가 각 서적을 클릭할 확률을 예측하는 모델을 만든다. 클릭할 확률을 정확하게 예측할 수 있다면 예측된 클릭 확률이 높은 순서로 추천 서적을 선정할 수 있기 때문이다.
클릭 예측모델의 학습데이터는 과거의 방문기록으로부터 얻을 수 있다. 방문기록은 어떤 사용자가 언제 방문하였는지, 그리고 사용자에게 보여준 서적의 목록과 그 중에 클릭한 서적들을 포함한다. 다음과 같은 간단한 방문기록을 생각해 보자.
| 시각 | 방문자 | 화면 상단에 보여준 서적 | 화면 상단에 보여준 서적 중 클릭한 서적 |
|---|---|---|---|
| 3개월 전 | 사용자1 | 서적 1, 3, 5, 6, 7, 12, 13, 14, 18, 20 | 서적 3 |
| 2개월 전 | 사용자2 | 서적 1, 2, 4, 8, 10, 11, 15, 16, 21, 28 | 서적 4, 15 |
| 1개월 전 | 사용자3 | 서적 3, 5, 9, 10, 12, 13, 20, 21, 22, 24 | 서적 21 |
사용자1과 사용자3은 한 개의 서적을 클릭하였고 사용자2는 두개의 서적을 클릭하였다. 물론 좋은서점닷컴을 방문한 후 화면 상단 10개의 서적 가운데 아무 서적도 클릭하지 않는 경우도 있을 테지만, 클릭이 없는 방문기록은 학습 데이터를 만들기 위한 데이터에서 제거하는 경우가 대부분이다.
학습 데이터를 구성하기 위해 피처벡터(feature vector)를 정의한다. 피처(feature)는 대상의 구체적인 정보를 숫자로 표시한 것이다. 여러 개의 피처를 모아서 벡터(vector)형태로 표현한 것을 피처벡터(feature vector)라고 부른다. 앞서 유사상품 추천에 대한 글에서 피처에 대해 살펴본 적이 있다. 유사상품 추천에서는 피처를 상품을 대상으로 정의했지만, 클릭모델에서는 (사용자, 상품)의 쌍을 대상으로 정의한다. 좋은서점닷컴의 클릭 예측 모델에서 생각할 수 있는 피처들을 예로 들면 다음과 같다.
| 피처의 정의 | |
|---|---|
| 피처1 | 해당 사용자가 가입한 후 경과한 개월 수 |
| 피처2 | 해당 사용자가 가입후 구매한 서적의 수 |
| 피처3 | 해당 사용자가 최근 1년간 구매한 서적의 수 |
| 피처4 | 해당 서적이 출판된 후 경과한 개월 수 |
| 피처5 | 해당 서적이 좋은서점닷컴에 판매된 총 부수 |
| 피처6 | 해당 서적이 최근 1년간 좋은서점닷컴에 판매된 총 부수 |
| 피처7 | 해당 사용자가 구매한 서적 가운데 해당 서적과 분류기호가 같은 서적의 비율 |
| 피처8 | 해당 사용자가 최근 1년간 구매한 서적 가운데 해당 서적과 분류기호가 같은 서적의 비율 |
| 피처9 | 해당 사용자가 해당 서적을 클릭한 횟수 |
피처벡터를 정의했다면 학습데이터를 구성할 수 있다. 클릭 모델에서 학습 레이블은 사용자가 해당 서적을 클릭했는지 여부이다. 이 학습 레이블은 클릭하지 않았음을 나타내는 0 또는 클릭했음을 나타내는 1의 값만을 가질 수 있는 이진(binary) 정보이다. 위의 방문기록을 바탕으로 학습데이터를 생성해 보면 다음과 같다.
| 피처벡터 | 학습 레이블 |
|---|---|
| (사용자1, 서적1)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적3)의 3개월 전 피처벡터 | 1 |
| (사용자1, 서적5)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적6)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적7)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적12)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적13)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적14)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적18)의 3개월 전 피처벡터 | 0 |
| (사용자1, 서적20)의 3개월 전 피처벡터 | 0 |
| (사용자2, 서적1)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적2)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적4)의 2개월 전 피처벡터 | 1 |
| (사용자2, 서적8)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적10)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적11)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적15)의 2개월 전 피처벡터 | 1 |
| (사용자2, 서적16)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적21)의 2개월 전 피처벡터 | 0 |
| (사용자2, 서적28)의 2개월 전 피처벡터 | 0 |
| (사용자3, 서적3)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적5)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적9)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적10)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적12)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적13)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적20)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적21)의 1개월 전 피처벡터 | 1 |
| (사용자3, 서적22)의 1개월 전 피처벡터 | 0 |
| (사용자3, 서적24)의 1개월 전 피처벡터 | 0 |
학습 데이터의 총 크기는 30개 이며, 그 중 4개의 학습 레이블은 1이고 나머지 26개의 학습 레이블은 0이다. 피처벡터의 차원(dimension)은 9이다. 실제 추천 시스템에서는 학습데이터는 이보다 훨씬 많을 것이고, 피처벡터의 차원도 더 큰 경우가 많다. 이 학습데이터를 이용해 이진 정보를 예측하는 이진 분류(binary classification)문제를 학습함으로써 클릭 예측 모델을 만든다.
의사결정나무 앙상블
추천 시스템에서 많이 쓰이는 이진 분류(binary classification) 방법은 의사결정나무 앙상블(decision tree ensemble) 방법이다. 의사결정나무 앙상블은 여러개의 의사결정나무(decision tree)를 모아서 만드는 모델을 말하는데, 이를 구성하는 의사결정나무는 피처벡터중 하나의 값을 비교하는 문장들과 그 결과에 따른 예측값으로 표현된 간단한 순서도같은 모델이다. 예를 들어보자.