추천에서의 빈도주의와 베이지안
지금까지 일주일에 한 번씩은 치킨을 시켜먹은 소비자가 있다고 했을 때,
빈도주의적 관점에선 다음 주에도 치킨을 먹기를 추천할 수 있다.
반면 베이지안은 데이터로 보여지는 사실과 별개로 불확실성을 내포하고 있기 때문에,
다음 주도 치킨을 시켜먹을 것이라는 빈도주의적 접근을 따르지는 않는다.
즉, 보여지는 현상이 아닌 불확실한 현상을 검증하는 데에 주목한다.
BPR LOSS의 핵심음악 추천 서비스를 만든다고 했을 때,고객의 사용 로그를 살펴보면 다음과 같은 사실을 알 수 있다.1. 고객은 A 음악을 들었다.2. 고객은 A 음악에 대해 k점의 평점을 남겼다. (없을 수도 있다)3. 고객은 B 음악을 들은 적이 없다.
B음악을 듣지 않은 고객은 해당 음악을 몰라서 듣지 않을수도, 듣고 싶지 않아서 듣지 않을 수도 있다.데이터는 고객의 선호도를 명확하게 판별할 수가 없다.
빈도주의적 관점에서 최선으로 할 수 있는 행위는
1. 좋은 평가를 남긴 음악을 재추천 하는 것
2. 해당 음악과 비슷한 느낌의 음악을 추천해주는 것
이미 밝혀진 사실에 대해서 고객 선호를 모델링 할 수 있겠다.
BPR은 이러한 접근과는 반대로
평가하지 않은 항목을 모델에 반영시킨다.
예를 들어 A음악을 듣고, B음악을 듣지 않은 고객은
B보단 A음악을 더 선호할 것이라는 가설을 세우고자 한다.
즉, 소비된 음악과 그렇지 않은 음악 사이에 Ranking을 매기고자 하는 것이다.
(물론 소비자가 B음악을 정말로 선호할건지, 아닌지에 대한 불확실성이 존재한다)
이 문제를 머신러닝 모델로 풀어보고자 하여 개발된 것이 BPR Loss이다.
지금부터 이 Loss에 대해서 사례 기반으로 알아보자.
유저 | A 음악 | B 음악 |
1 | O | X |
2 | X | O |
기본 가정
최대한 문제를 단순화 하기 위해서 이 세상에 두 개의 음악과 두 사람만 존재하는 것으로 가정해보자
1번 유저는 A보다 B를 좋아할 것이다.
2번 유저는 B보다 A를 좋아할 것이다.
문제 설정
머신러닝 모델의 output은 (초기엔 무작위로 초기화 된 값에 의해 나온다)
1번 유저가 A 음악을 좋아할 확률(positive)을 높게, B 음악을 좋아할 확률(negative)를 낮게 만들 것이다.
2번 유저가 B 음악을 좋아할 확률(positive)을 높게, A 음악을 좋아할 확률(negative)를 낮게 만들 것이다.
선택될 확률을 Sigmoid로
보통 특정 아이템을 선호할 확률은 이진 분류 문제로, Sigmoid를 쓰기 때문에
positive item은 1로, negative item은 0에 가깝게 나올 것이다.
수식으로 표현해보자
$ \sigma(positive) \rightarrow 1 , \sigma(negative) \rightarrow 0 $
여기서 우리는 1번 유저가 B보다 A를 선호할 확률(Ranking)을 극대화 하고 싶으니 다음과 같이 표현해볼 수 있다
$ \sigma(positive - negative) \rightarrow 1 $
두 아이템에 대한 output이 상호작용(pair-wise)하여 sigmoid 층을 통과하게 된다.
sigmoid를 통과할 때 1이 나오려면 positive는 충분히 커져야 하고, negative는 충분히 작아져야한다.
(반대로 positive가 작아지고 negative가 커지면 sigmoid는 0이 되고 positive가 negative보다 선호될 확률이 0이되는 것과 다름이 없어진다)
$ \sigma(positive - negative) $
이 활성함수를 통과하면 output은 0~1로 제한된다.
이 값을 이용하여 모델을 최적화하기 위해 log 레이어를 통과시킨다.
최적화를 하기 위해 -Log를
$ \log(\sigma(positive - negative)) $
log를 씌워주면 0은 -inf로 1은 0으로 수렴하게 된다.
Gradient Descent를 위해(최저점으로 수렴)
(-)를 붙여 손실함수를 완성해준다.
$ -\log(\sigma(positive - negative)) $
이게 끝이다.
결론적으로 유저 1의 A음악이 B음악에 비해 선호될 가능성을 극대화시킴으로
주어진 데이터에서 불확실성을 모델링하게 될 수 있었다.
그래서 좋은게 무엇이냐?
이게 현실에서 가지는 의미는 다음과 같다.
1. 모든 고객은 아이템을 소비한다.
2. 모든 고객은 모든 아이템을 소비할 순 없다.
3. 선택되지 못한 아이템은 불가피하게 생겨나며, 이 불확실성을 통제할 방법 중 하나가 BPR이다.
물론, 통계학적인 관점에서
소비되지 않은 아이템은 Null로 처리가 되어야하는 것이 맞는데,
이에 대한 해석을 잠정적으로 "소비된 아이템보다 선호하지 않음"으로 결정한 것이 한계점이긴하다.
그렇지만, 현실 세계에서 제시할 수 있는 설득적인 이론이라고 생각이 든다.