추천을 위한 알고리즘은 크게 메모리 기반(memory-based)과 모델 기반(model-based)으로 나눌 수 있다.
메모리 기반 알고리즘은 추천을 위한 데이터를 모두 메모리에 갖고 있으면서 추천이 필요할 때마다 이 데이터를 사용해서 계산을 하고, 적절한 상품을 추천한다. (대표적인 예가 협업 필터링 CF.)
모델 기반 추천은 데이터로부터 추천을 위한 모델을 구성한 후에 모델만 저장하고 (> 데이터 x.) 실제 추천할 때에는 이 모델을 사용해서 추천을 하는 방식을 말한다. 이번 글에서는 기존에 다루었던 CF, IDF와는 다른 행렬요인화 기반 추천 알고리즘을 소개한다.
📌 행렬요인화 (Matrix Factorization : MF)
메모리 기반 추천은 모든 데이터를 메모리에 저장하고 있기 때문에 기존의 데이터('패턴')를 충실하게 따르는 장점이 있다. 하지만 대량의 데이터를 다뤄야 하는 서비스에서는 계산 시간이 너무 소요될 수 있다. 이에 반해 모델 기반 추천 방식은 기존의 데이터는 모델(=모형)을 만드는 데만 사용한다. 그리고 *일단 모델이 완성되면 기존 데이터는 사용하지 않는다. 또한, 사용자의 평가 패턴으로 모델을 구상하기 때문에 잘 드러나지 않는 *weak-signal 또한 더 잘 잡아낼 수 있다!!
📎기존 데이터는 사용하지 않는다? : 말 그대로 기존의 데이터는 학습과 테스트를 위한 용도로만 사용된다! 완성된 모델을 토대로 새로운 상품을 추천하는 것. 초기 모델 생성 때는 많은 계산이 요구될 수 있으나, 메모리 기반 알고리즘은 모든 데이터가 매번 메모리 위에 올라와있기 때문에 이에 비해 더 빠른 추천이 가능하다.
📎Weak-Signal : 개별 유저의 행동분석에서는 잘 드러나지 않는 패턴을 의미.
Ex) 소수의 유저가 몇 개의 영화에 대해서만 특정한 평가 패턴이 있는 경우 : 개별 유저나 개별 아이템에 집중하는 메모리 기반 알고리즘은 이를 잡아내기 쉽지 않지만, 모델 기반 알고리즘은 이 weak-signal을 잘 잡아낸다!
📑 MF: 행렬요인화의 작동 방식
행렬 요인화(Matrix Factorization : MF)는 사용자 x 아이템으로 구성된 평가 데이터를 2개의 행렬로 분해하는 방법이다.

R (사용자 X 아이템)은 우리가 잘 알고 있는 평가 데이터다. M명의 유저가 N개의 아이템에 대해 평가한 데이터를 포함하고 있는 2차원 행렬로, 행렬의 각 원소(element)는 해당 유저의 해당 아이템에 대한 평점이다. MF 방식은 이 R 행렬을 유저 행렬(P)와 아이템 행렬(I)로 쪼개어서 분석하는 모델이다.

- R : 평가 데이터
- P : ( M x K )의 차원
- Q : ( N x K )의 차원
- R(hat) : P x Q^T 이므로, ( M x N )의 차원을 가지며, R과 같은 크기의 행렬이다.
#️⃣ R(hat)은 R의 예측치
- R(hat)이 최대한 R과 가까운 값을 가지도록 P와 Q를 구하면 그것이 바로 추천을 위한 모델.
#️⃣ P x Q^T
- P는 각 유저의 특성을 나타내는 K개의 요인의 값으로 이루어진 행렬.
- Q는 각 아이템의 특성을 나타내는 K개의 요인의 값으로 이루어진 행렬.
#️⃣ 잠재요인
- P와 Q 행렬에서 공통인 K개의 요인.
Ex) 영화 추천에서 K = 2인 경우(잠재요인이 2개)
→ 유저와 영화의 특성을 두 개 요인으로 나타낼 수 있다.
→ (액션 - 드라마), (판타지 - 사실주의)
모든 사용자와 영화의 특성은 각 요인에 대해 -1.0 ~ 1.0의 값으로 표현할 수 있다고 가정.

4명의 유저에 대한 두 가지 잠재요인 값, P 행렬.
→ 첫 번째 요인(액션-드라마)에서 -1에 가까울수록 액션의 성격이 강하고, 1에 가까울수록 드라마의 성격이 강하다.
→ 두 번째 요인(판타지-사실주의)에서 -1에 가까울수록 판타지의 성격이 강하고, 1에 가까울수록 사실주의 성격이 강하다.
이처럼 유저요인에 따라 유저 별로 어떤 영화를 좋아하는지 알 수 있다!

영화별 잠재요인에 대한 Q 행렬.
→ '기생충', '겨울왕국', '부산행', '백두산' 이렇게 4개의 영화에 대한 두 요인 값이 표시되어 있다.
→ 기생충은 Sue의 취향(사실주의)에, 겨울왕국은 Alice의 취향(판타지)에 가까울 것이다.
따라서 영화의 특성과 유저의 특성이 각각 2개의 잠재요인으로 분류되고 이 잠재요인을 통해 어떤 영화가 어떤 유저의 취향에 맞을 지 예상할 수 있다.
📑 SGD (Stochastic Gradient Descent) 사용 MF 알고리즘
어떤 도메인에 대해 유저와 아이템의 특성을 잘 설명할 수 있는 K개의 요인이 존재하고, 각 유저와 아이템의 K개 요인에 대한 측정값을 사용자요인(P)와 아이템요인(Q)처럼 알아낼 수 있다면 모든 유저의 모든 아이템에 대한 예측 평점을 다음과 같이 구할 수 있다.

→ 유저가 어떤 영화에 대해 실제 평점을 부여했다면??
실제 평점과 R(hat)의 예상 평점의 차이로 정확도를 계산할 수 있다. 결국 MF의 핵심은 주어진 유저와 아이템의 관계를 가장 잘 설명하는 P, Q 행렬을 분해하는 것!! 중요한 건 이 '예측 오차를 줄이기 위해 P, Q를 어떻게 수정하느냐'이다.

💡 SGD 최적화 과정

< MF 기본 원리 >
1️⃣ 유저i의 아이템 j에 대한 예측값 r(hat)은??

2️⃣ 예측 오차 e는 실제값에서 예측값을 뺀 값. 오차제곱을 최소화하는 방법을 찾아야 한다!!

3️⃣ 오차의 제곱을 p와 q에 대해 편미분한다.

4️⃣오차를 줄여주는 새로운 p(i), q(j) 값인 p'(i) 와 q'(j)를 구한다.

a (alpha) 값은 학습률로, 경험에 의해 적절한 숫자를 정해준다. 연산을 반복할 때마다 실제 평점이 존재하는 모든 (p(i), q(j)) 조합에 대해 예측값과 오차를 계산한 뒤 p(i), q(j)값을 업데이트하면 오차가 점점 줄어든다.
< 정규화 >
1️⃣ 과적합 방지를 위해 정규화를 한다.

2️⃣ p(i), q(j)에 대해 편미분하고 p'(i), q'(j)를 구한다.

< 편향 (bias) >
→ 각 유저와 아이템은 일정한 경향성(편향성)이 있다. 따라서 이 경향성을 제외하고 나머지 데이터를 봐야 한다.

- b : 전체 평균
- bu(i) : 전체 평균을 제거한 뒤 사용자 i의 평가경향(유저i의 평균과 전체 평균의 차이)
- bd(j) : 전체 평균을 제거한 뒤 아이템 j의 평가경향(아이템j의 평균과 전체 평균의 차이)
CF에서는 유저와 아이템별로 평가경향이 한 번에 계산되었지만, MF에서는 계산할 때마다 오차를 최소화하도록 평가 경향을 재조정한다. 따라서 식 (1) 을 식 (3)으로 대체하고 다시 편미분을 한다.

→ (2) 와 (4)의 반복을 통해 최초의 상태(R)에서 P, Q 행렬과 bu, bd를 지속적으로 업데이트한다!!
실습은 다음 챕터에서..!
https://www.flaticon.com/kr/free-icons 아이콘 제작자: Good Ware - flaticon
'기획(PM & PO) > ✏️ 개발 일지' 카테고리의 다른 글
'MF' 와 '딥러닝' [ReSys] (0) | 2024.04.14 |
---|---|
'FM (Factorization Machines)' 기반 추천 2 [ReSys] (0) | 2024.04.01 |
'FM (Factorization Machines)' 기반 추천 1 [ReSys] (1) | 2024.03.29 |
'MF (matrix factorization)' 기반 추천 2 [ReSys] (0) | 2024.03.25 |
추천을 위한 알고리즘은 크게 메모리 기반(memory-based)과 모델 기반(model-based)으로 나눌 수 있다.
메모리 기반 알고리즘은 추천을 위한 데이터를 모두 메모리에 갖고 있으면서 추천이 필요할 때마다 이 데이터를 사용해서 계산을 하고, 적절한 상품을 추천한다. (대표적인 예가 협업 필터링 CF.)
모델 기반 추천은 데이터로부터 추천을 위한 모델을 구성한 후에 모델만 저장하고 (> 데이터 x.) 실제 추천할 때에는 이 모델을 사용해서 추천을 하는 방식을 말한다. 이번 글에서는 기존에 다루었던 CF, IDF와는 다른 행렬요인화 기반 추천 알고리즘을 소개한다.
📌 행렬요인화 (Matrix Factorization : MF)
메모리 기반 추천은 모든 데이터를 메모리에 저장하고 있기 때문에 기존의 데이터('패턴')를 충실하게 따르는 장점이 있다. 하지만 대량의 데이터를 다뤄야 하는 서비스에서는 계산 시간이 너무 소요될 수 있다. 이에 반해 모델 기반 추천 방식은 기존의 데이터는 모델(=모형)을 만드는 데만 사용한다. 그리고 *일단 모델이 완성되면 기존 데이터는 사용하지 않는다. 또한, 사용자의 평가 패턴으로 모델을 구상하기 때문에 잘 드러나지 않는 *weak-signal 또한 더 잘 잡아낼 수 있다!!
📎기존 데이터는 사용하지 않는다? : 말 그대로 기존의 데이터는 학습과 테스트를 위한 용도로만 사용된다! 완성된 모델을 토대로 새로운 상품을 추천하는 것. 초기 모델 생성 때는 많은 계산이 요구될 수 있으나, 메모리 기반 알고리즘은 모든 데이터가 매번 메모리 위에 올라와있기 때문에 이에 비해 더 빠른 추천이 가능하다.
📎Weak-Signal : 개별 유저의 행동분석에서는 잘 드러나지 않는 패턴을 의미.
Ex) 소수의 유저가 몇 개의 영화에 대해서만 특정한 평가 패턴이 있는 경우 : 개별 유저나 개별 아이템에 집중하는 메모리 기반 알고리즘은 이를 잡아내기 쉽지 않지만, 모델 기반 알고리즘은 이 weak-signal을 잘 잡아낸다!
📑 MF: 행렬요인화의 작동 방식
행렬 요인화(Matrix Factorization : MF)는 사용자 x 아이템으로 구성된 평가 데이터를 2개의 행렬로 분해하는 방법이다.

R (사용자 X 아이템)은 우리가 잘 알고 있는 평가 데이터다. M명의 유저가 N개의 아이템에 대해 평가한 데이터를 포함하고 있는 2차원 행렬로, 행렬의 각 원소(element)는 해당 유저의 해당 아이템에 대한 평점이다. MF 방식은 이 R 행렬을 유저 행렬(P)와 아이템 행렬(I)로 쪼개어서 분석하는 모델이다.

- R : 평가 데이터
- P : ( M x K )의 차원
- Q : ( N x K )의 차원
- R(hat) : P x Q^T 이므로, ( M x N )의 차원을 가지며, R과 같은 크기의 행렬이다.
#️⃣ R(hat)은 R의 예측치
- R(hat)이 최대한 R과 가까운 값을 가지도록 P와 Q를 구하면 그것이 바로 추천을 위한 모델.
#️⃣ P x Q^T
- P는 각 유저의 특성을 나타내는 K개의 요인의 값으로 이루어진 행렬.
- Q는 각 아이템의 특성을 나타내는 K개의 요인의 값으로 이루어진 행렬.
#️⃣ 잠재요인
- P와 Q 행렬에서 공통인 K개의 요인.
Ex) 영화 추천에서 K = 2인 경우(잠재요인이 2개)
→ 유저와 영화의 특성을 두 개 요인으로 나타낼 수 있다.
→ (액션 - 드라마), (판타지 - 사실주의)
모든 사용자와 영화의 특성은 각 요인에 대해 -1.0 ~ 1.0의 값으로 표현할 수 있다고 가정.

4명의 유저에 대한 두 가지 잠재요인 값, P 행렬.
→ 첫 번째 요인(액션-드라마)에서 -1에 가까울수록 액션의 성격이 강하고, 1에 가까울수록 드라마의 성격이 강하다.
→ 두 번째 요인(판타지-사실주의)에서 -1에 가까울수록 판타지의 성격이 강하고, 1에 가까울수록 사실주의 성격이 강하다.
이처럼 유저요인에 따라 유저 별로 어떤 영화를 좋아하는지 알 수 있다!

영화별 잠재요인에 대한 Q 행렬.
→ '기생충', '겨울왕국', '부산행', '백두산' 이렇게 4개의 영화에 대한 두 요인 값이 표시되어 있다.
→ 기생충은 Sue의 취향(사실주의)에, 겨울왕국은 Alice의 취향(판타지)에 가까울 것이다.
따라서 영화의 특성과 유저의 특성이 각각 2개의 잠재요인으로 분류되고 이 잠재요인을 통해 어떤 영화가 어떤 유저의 취향에 맞을 지 예상할 수 있다.
📑 SGD (Stochastic Gradient Descent) 사용 MF 알고리즘
어떤 도메인에 대해 유저와 아이템의 특성을 잘 설명할 수 있는 K개의 요인이 존재하고, 각 유저와 아이템의 K개 요인에 대한 측정값을 사용자요인(P)와 아이템요인(Q)처럼 알아낼 수 있다면 모든 유저의 모든 아이템에 대한 예측 평점을 다음과 같이 구할 수 있다.

→ 유저가 어떤 영화에 대해 실제 평점을 부여했다면??
실제 평점과 R(hat)의 예상 평점의 차이로 정확도를 계산할 수 있다. 결국 MF의 핵심은 주어진 유저와 아이템의 관계를 가장 잘 설명하는 P, Q 행렬을 분해하는 것!! 중요한 건 이 '예측 오차를 줄이기 위해 P, Q를 어떻게 수정하느냐'이다.

💡 SGD 최적화 과정

< MF 기본 원리 >
1️⃣ 유저i의 아이템 j에 대한 예측값 r(hat)은??

2️⃣ 예측 오차 e는 실제값에서 예측값을 뺀 값. 오차제곱을 최소화하는 방법을 찾아야 한다!!

3️⃣ 오차의 제곱을 p와 q에 대해 편미분한다.

4️⃣오차를 줄여주는 새로운 p(i), q(j) 값인 p'(i) 와 q'(j)를 구한다.

a (alpha) 값은 학습률로, 경험에 의해 적절한 숫자를 정해준다. 연산을 반복할 때마다 실제 평점이 존재하는 모든 (p(i), q(j)) 조합에 대해 예측값과 오차를 계산한 뒤 p(i), q(j)값을 업데이트하면 오차가 점점 줄어든다.
< 정규화 >
1️⃣ 과적합 방지를 위해 정규화를 한다.

2️⃣ p(i), q(j)에 대해 편미분하고 p'(i), q'(j)를 구한다.

< 편향 (bias) >
→ 각 유저와 아이템은 일정한 경향성(편향성)이 있다. 따라서 이 경향성을 제외하고 나머지 데이터를 봐야 한다.

- b : 전체 평균
- bu(i) : 전체 평균을 제거한 뒤 사용자 i의 평가경향(유저i의 평균과 전체 평균의 차이)
- bd(j) : 전체 평균을 제거한 뒤 아이템 j의 평가경향(아이템j의 평균과 전체 평균의 차이)
CF에서는 유저와 아이템별로 평가경향이 한 번에 계산되었지만, MF에서는 계산할 때마다 오차를 최소화하도록 평가 경향을 재조정한다. 따라서 식 (1) 을 식 (3)으로 대체하고 다시 편미분을 한다.

→ (2) 와 (4)의 반복을 통해 최초의 상태(R)에서 P, Q 행렬과 bu, bd를 지속적으로 업데이트한다!!
실습은 다음 챕터에서..!
https://www.flaticon.com/kr/free-icons 아이콘 제작자: Good Ware - flaticon
'기획(PM & PO) > ✏️ 개발 일지' 카테고리의 다른 글
'MF' 와 '딥러닝' [ReSys] (0) | 2024.04.14 |
---|---|
'FM (Factorization Machines)' 기반 추천 2 [ReSys] (0) | 2024.04.01 |
'FM (Factorization Machines)' 기반 추천 1 [ReSys] (1) | 2024.03.29 |
'MF (matrix factorization)' 기반 추천 2 [ReSys] (0) | 2024.03.25 |