5.2 유사도 가중 평균 기반 평점 예측

여기에서는 이전 장에서 다룬 사용자 또는 아이템 간 유사도 계산을 통해 선정된 이웃 사용자 또는 이웃 아이템들의 유사도를 가지고 유사도 가중 평균을 사용하여 평점을 예측하는 방법을 살펴봅니다. 유사도 가중 평균을 사용한 예측 평점 계산은 원본 평점을 가중치로 반영하여 구한 유사도 가중 평균을 계산하는 방법입니다. 여기에서는 사용자가 평가하지 않은 아이템에 대한 예측 평점을 사용자 또는 아이템을 기준으로 계산하여 추천하는 두 가지 방법을 살펴봅니다.

5.2.1 수식 살펴보기

여기에서는 근접 이웃 협업 필터링 추천에서 유사도 가중 평균을 사용한 예측 평점에 대한 수식을 살펴봅니다.

5.2.1.1 사용자 기반 추천

사용자 기반 근접 이웃 협업 필터링 추천은 사용자와 가장 유사한 사용자의 $k$-근접 이웃을 선정하고, 사용자가 평가하지 않은 아이템에 대하여 사용자 유사도와 원본 평점을 가중 평균한 값으로 아이템의 예측 평점을 계산하여 예측 평점이 높은 순으로 추천합니다. 사용자 $u$가 평가하지 않은 아이템 $i$에 대한 예측 평점은 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} & = \frac{{\sum\nolimits_{v \in {N_i}(u)} {{w_{u,v}}{r_{vi}}} }}{{\sum\nolimits_{v \in {N_i}(u)} {\left| {{w_{u,v}}} \right|} }} \\ & = \frac{{\sum\nolimits_{v \in {N_i}(u)} {\mathrm{sim} (u,v) \cdot {r_{vi}}} }}{{\sum\nolimits_{v \in {N_i}(u)} {\left| {\mathrm{sim} (u,v)} \right|} }} \end{flalign} $$

여기에서, ${N_i}(u)$는 아이템 $i$를 평가한 사용자 $u$와 가장 유사한 $k$명의 사용자 집합($k$-근접 이웃), ${w_{u,v}}$는 사용자 $u$와 이웃 사용자 $v$의 유사도($u \ne v$), ${r_{vi}}$은 사용자 $v$가 아이템 $i$에 매긴 평점입니다.

5.2.1.2 아이템 기반 추천

아이템 기반 근접 이웃 협업 필터링 추천은 사용자가 평가한 아이템과 가장 유사한 아이템의 $k$-근접 이웃을 선정하고, 사용자가 평가하지 않은 아이템에 대하여 아이템 유사도와 원본 평점을 가중 평균한 값으로 아이템의 예측 평점을 계산하여 예측 평점이 높은 순으로 추천합니다. 사용자 $u$가 평가하지 않은 아이템 $i$에 대한 예측 평점은 다음과 같이 정의됩니다.

$$ \begin{flalign} \hat r_{ui} & = \frac{{\sum\nolimits_{j \in {N_u}(i)} {{w_{i,j}}{r_{uj}}} }}{{\sum\nolimits_{j \in {N_u}(i)} {\left| {{w_{i,j}}} \right|} }} \\ & = \frac{{\sum\nolimits_{j \in {N_u}(i)} {\mathrm{sim} (i,j) \cdot {r_{uj}}} }}{{\sum\nolimits_{j \in {N_u}(i)} {\left| {\mathrm{sim} (i,j)} \right|} }} \end{flalign} $$

여기에서, ${N_u}(i)$는 사용자 $u$가 평가한 아이템 $i$와 가장 유사한 k개의 아이템 집합(k-근접 이웃) , ${w_{i,j}}$는 아이템 $i$와 이웃 아이템 $j$의 유사도($i \ne j$), ${r_{uj}}$은 사용자 $u$가 아이템 $j$에 매긴 평점입니다.

5.2.2 직접 계산해보기

이제부터 예제 데이터셋을 사용하여 앞서 살펴본 수식으로 직접 계산해 볼 것입니다. 다음 표는 평점 데이터를 사용자는 행, 아이템은 열로 나타낸 것입니다.

예제 데이터셋의 평점 데이터

사용자/아이템 $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$u_1$ 0.5 5 1 3 3.5 5 2.5
$u_2$ 3 2 3.5 2 4 4 1
$u_3$ 3.5 1 3.5 4 1 3.5
$u_4$ 3 5 0.5 3.5 3.5 4.5
$u_5$ 3 4 2.5 4

예를 들어 사용자 $u_4$가 평가하지 않은 아이템들에 대한 예측 평점을 유사도 가중 평균을 사용하여 계산해 봅니다.

5.2.2.1 사용자 기반 추천

예를 들어 사용자 $u_4$가 평가하지 않은 아이템 $i_3$에 대한 예측 평점을 유사도 가중 평균을 사용하여 계산해 봅니다. 여기에서는 근접 이웃은 3명($k = 3$), 최소 이웃 수는 2명으로 가정하고, 유사도 계산 방법으로 결측값을 0으로 대체하지 않은 사용자 코사인 유사도를 사용합니다.

먼저 원본 평점 데이터를 사용하여 사용자 코사인 유사도를 계산해 봅니다. 여기에서는 직접 계산해 보지 않고 이전 장에서 직접 계산해본 결과를 사용합니다. 사용자 코사인 유사도의 계산에 대한 자세한 내용은 " Chapter 4. 유사도 계산"을 참고해 주세요.

다음 표는 사용자 코사인 유사도 데이터를 사용자(LHS)는 행, 사용자(RHS)는 열로 나타낸 것입니다.

사용자 코사인 유사도 데이터

사용자(RHS) 사용자(LHS) $u_1$ $u_2$ $u_3$ $u_4$ $u_5$
$u_1$ 1 0.7244371 0.9780612 0.9478988 0.8571429
$u_2$ 0.7244371 1 0.8637076 0.8288487 0.990024
$u_3$ 0.9780612 0.8637076 1 0.8245676 0.8055945
$u_4$ 0.9478988 0.8288487 0.8245676 1 0.996473
$u_5$ 0.8571429 0.990024 0.8055945 0.996473 1

여기에서 사용자 $u_4$의 이웃 사용자는 자기 자신을 제외한 {$u_1$, $u_2$, $u_3$, $u_5$}입니다.

다음 표는 사용자 $u_4$와 이웃 사용자 간의 유사도 데이터를 사용자(LHS)는 행, 사용자(RHS)는 열로 나타낸 것입니다.

사용자 $u_4$와 이웃 사용자 간의 유사도 데이터

사용자(RHS) 사용자(LHS) $u_1$ $u_2$ $u_3$ $u_5$
$u_4$ 0.9478988 0.8288487 0.8245676 0.996473

사용자 $u_4$가 평가하지 않은 아이템 {$i_3$, $i_5$, $i_7$, $i_{10}$}에 대한 이웃 사용자의 평점을 살펴봅니다.

다음 표는 이웃 사용자가 사용자 $u_4$가 평가하지 않은 아이템 {$i_3$, $i_5$, $i_7$, $i_{10}$}에 매긴 평점을 사용자는 행, 아이템은 열로 나타낸 것입니다.

사용자 $u_4$가 평가하지 않은 아이템에 대한 이웃 사용자의 평점 데이터

사용자/아이템(RHS) $i_3$ $i_5$ $i_7$ $i_{10}$
$u_1$ 1 3.5 2.5
$u_2$ 3.5 4 4 1
$u_3$ 1 4
$u_5$ 4 4

앞서 살펴본 바와 같이, 사용자 $u_4$의 이웃 사용자 {$u_1$, $u_2$, $u_3$, $u_5$}의 유사도는 {0.9478988, 0.8288487, 0.8245676, 0.996473}, 사용자 $u_4$가 평가하지 않은 아이템 {$i_3$, $i_5$, $i_7$, $i_{10}$} 중 아이템 $i_3$의 평점은 {1, 3.5, 1, 4}입니다.

다음 표는 사용자 $u_4$가 평가하지 않은 아이템 $i_3$에 대한 이웃 사용자의 유사도와 평점을 유사도가 높은 순으로 나타낸 것입니다.

[사용자 $u_4$의 아이템 $i_3$에 대한 이웃 사용자 데이터]

사용자 $u_4$의 아이템 $i_3$에 대한 이웃 사용자 데이터

사용자(LHS) 아이템 사용자(RHS) 유사도 평점 유사도와 평점의 곱 k-근접 이웃
$u_4$ $u_3$ $u_5$ 0.996473 4 3.985892 {$u_5$, $u_1$, $u_2$}
$u_1$ 0.9478988 1 0.9478988
$u_2$ 0.8288487 3.5 2.90097045
$u_3$ 0.8245676 1

사용자 $u_4$가 평가하지 않은 아이템 $i_3$에 대한 $k$-근접 이웃($k = 3$)은 유사도가 높은 순으로 사용자 {$u_5$, $u_1$, $u_2$}가 됩니다. 사용자 {$u_5$, $u_1$, $u_2$}의 유사도와 평점은 {0.996473, 0.9478988, 0.8288487}과 {4, 1, 3.5}입니다.

사용자 $u_4$가 평가하지 않은 아이템 $i_3$의 예측 평점은 $k$-근접 이웃의 유사도와 평점을 곱한 값의 합인 $7.8347612$을 각 사용자 유사도 절대값의 합인 $2.7732205$으로 나눈 $2.8251$가 됩니다.

$$ \begin{flalign} {\hat r_{4,3}} & = \frac{{( {0.996473 \times 4} ) + ( {0.9478988 \times 1} ) + ( {0.8288487 \times 3.5} )}}{{\left| {0.996473} \right| + \left| {0.9478988} \right| + \left| {0.8288487} \right|}} \\ & \approx 2.8251 \end{flalign} $$

다음 표는 직접 계산한 결괏값을 나타낸 것입니다.

계산 결과

사용자 아이템 합계(유사도와 평점의 곱) 합계(유사도 절대값) 예측 평점
$u_4$ $i_3$ 7.8347612 2.7732205 2.8251

같은 방법으로 사용자 $u_4$가 평가하지 않은 아이템에 대한 예측 평점을 모두 계산해 봅니다. 다음 표는 사용자 $u_4$가 평가하지 않은 아이템 {$i_5$, $i_7$, $i_{10}$}에 대한 이웃 사용자 데이터를 사용자(LHS)는 행, 사용자 (RHS)는 열로 나타낸 것입니다.

사용자 $u_4$의 평가하지 않은 나머지 아이템에 대한 이웃 사용자 데이터

사용자(LHS) 아이템 사용자(RHS) 유사도 평점 유사도와 평점의 곱 k-근접 이웃 예측 평점
$u_4$ $i_5$ 5 0.996473 {$u_2$, $u_3$} 4
1 0.9478988
2 0.8288487 4 3.3153948
3 0.8245676 4 3.2982704
$i_7$ 5 0.996473 4 3.985892 {$u_5$, $u_1$, $u_2$} 3.82909783
1 0.9478988 3.5 3.3176458
2 0.8288487 4 3.3153948
3 0.8245676
$i_{10}$ 5 0.996473 {$u_1$, $u_2$} 1.800253384
1 0.9478988 2.5 2.369747
2 0.8288487 1 0.8288487
3 0.8245676

사용자 $u_4$가 평가하지 않은 아이템 {$i_3$, $i_5$, $i_7$, $i_{10}$}에 대한 예측 평점은 {2.8251490, 4, 3.8290978, 1.8002533}입니다. 예를 들어, 사용자 $u_4$에게 예측 평점이 높은 상위 $N$개($N = 3$)의 아이템을 추천하면 추천된 아이템은 {$i_5$, $i_7$, $i_3$} 순이 됩니다.

다음 표는 사용자 $u_4$가 평가하지 않은 아이템을 예측 평점이 높은 순으로 나타낸 것입니다.

사용자 $u_4$가 평가하지 않은 아이템의 예측평점

아이템 합계(유사도와 평점의 곱) 합계(유사도 절대값) k-근접 이웃 예측 평점
$i_5$ 6.6136652 1.6534163 {$i_2$, $i_3$} 4
$i_7$ 10.6189326 2.7732205 {$i_5$, $i_1$, $i_2$} 3.8290978
$i_3$ 7.83476125 2.7732205 {$i_5$, $i_1$, $i_2$} 2.8251490
$i_{10}$ 3.1985957 1.7767475 {$i_1$, $i_2$} 1.80025338

5.2.2.2 아이템 기반 추천

예를 들어 사용자 $u_4$가 평가하지 않은 아이템 $i_3$에 대한 예측 평점을 유사도 가중 평균을 사용하여 계산해 봅니다. 여기에서는 근접 이웃은 3개($k = 3$), 최소 이웃 수는 2개로 가정하고, 유사도 계산 방법으로 결측값을 0으로 대체하지 않은 아이템 코사인 유사도를 사용합니다.

먼저 원본 평점 데이터를 사용하여 아이템 코사인 유사도를 계산해 봅니다. 여기에서는 직접 계산해 보지 않고 이전 장에서 직접 계산해본 결과를 사용합니다. 아이템 코사인 유사도의 계산에 대한 자세한 내용은 " Chapter 4. 유사도 계산"을 참고해 주세요.

다음 표는 아이템 코사인 유사도 데이터를 아이템(LHS)는 행, 아이템(RHS)는 열로 나타낸 것입니다.

아이템 코사인 유사도 데이터

아이템(RHS) 아이템(LHS) $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$
$i_1$ 1 0.7485823 0.9936053 0.8574929 0 0.8559155 0.8505946 0 0.7820596 0.5189781
$i_2$ 0.7485823 1 0.7053456 0.7186995 0.9647638 0.9653269 0.9144982 0 0.9986983 1
$i_3$ 0.9936053 0.7053456 1 0.7155742 0.8741573 0.8185875 0.931162 NaN 0.9847836 0.6121732
$i_4$ 0.8574929 0.7186995 0.7155742 1 0.9647638 0.4079401 0 0 0.7194015 0
$i_5$ 0 0.9647638 0.8741573 0.9647638 1 0 0 NaN 0 0
$i_6$ 0.8559155 0.9653269 0.8185875 0.4079401 0 1 0.9876651 0 0.9575504 0
$i_7$ 0.8505946 0.9144982 0.931162 0 0 0.9876651 1 NaN 0 0.8909061
$i_8$ 0 0 NaN 0 NaN 0 NaN 1 0 NaN
$i_9$ 0.7820596 0.9986983 0.9847836 0.7194015 0 0.9575504 0 0 1 0
$i_{10}$ 0.5189781 1 0.6121732 0 0 0 0.8909061 NaN 0 1

여기에서 사용자 $u_4$가 평가하지 않은 아이템 {$i_3$, $i_5$, $i_7$, $i_{10}$}의 이웃 아이템은 사용자 $u_4$가 평가한 아이템 {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$}입니다.

다음 표는 사용자 $u_4$가 평가하지 않은 아이템(LHS)는 행, 사용자 $u_4$가 평가한 이웃 아이템(RHS)는 열로 나타낸 것입니다.

사용자 $u_4$가 평가하지 않은 이웃 아이템과 사용자가 평가한 아이템 간의 유사도 데이터

아이템(RHS) 아이템(LHS) $i_1$ $i_2$ $i_4$ $i_6$ $i_8$ $i_9$
$i_3$ 0.9936053 0.7053456 0.7155742 0.8185875 NaN 0.9847836
$i_5$ 0 0.9647638 0.9647638 0 NaN 0
$i_7$ 0.8505946 0.9144982 0 0.9876651 NaN 0
$i_{10}$ 0.5189781 1 0 0 NaN 0

다음으로 사용자 $u_4$가 평가한 아이템 {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$}에 대한 사용자의 평점을 살펴봅니다.

다음 표는 사용자 $u_4$가 평가한 아이템 {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$}을 사용자는 행, 아이템은 열로 나타낸 것입니다.

사용자 $u_4$가 평가한 아이템의 평점 데이터

아이템(RHS) 사용자 $i_1$ $i_2$ $i_4$ $i_6$ $i_8$ $i_9$
$u_4$ 3 5 0.5 3.5 3.5 4.5

앞서 살펴본 바와 같이, 사용자가 평가하지 않은 아이템 $i_3$과 사용자 $u_4$가 평가한 이웃 아이템 {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$}의 유사도는 {0.9936053, 0.7053456, 0.7155742, 0.8185875, NaN, 0.9847836}, 사용자 $u_4$가 평가한 이웃 아이템 {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$}의 평점은 {3.5, 5, 0.5, 3.5, 4.5}입니다.

다음 표는 사용자 $u_4$가 평가하지 않은 아이템 $i_3$에 대한 이웃 아이템의 유사도와 평점을 유사도가 높은 순으로 나타낸 것입니다.

아이템 $i_3$에 대한 이웃 아이템 데이터

사용자 아이템(LHS) 아이템(RHS) 유사도 평점 유사도와 평점의 곱 k-근접 이웃
$u_4$ $i_3$ $i_1$ 0.9936053 3 2.9808159 {$i_1$,$i_9$, $i_6$}
$i_9$ 0.9847836 4.5 4.4315262
$i_6$ 0.8185875 3.5 2.8650562
$i_4$ 0.7155742 0.5
$i_2$ 0.7053456 5
$i_8$ NaN 3.5

사용자 $u_4$가 평가하지 않은 아이템 $i_3$에 대한 $k$-근접 이웃($k = 3$)은 NaN인 아이템 $i_8$을 제외한 유사도가 높은 순으로 아이템 {$i_1$, $i_9$, $i_6$}이 됩니다. 아이템 {$i_1$, $i_9$, $i_6$}의 유사도와 평점은 {0.9936053, 0.9847836, 0.8185875}와 {3, 4.5, 3.5}입니다.

사용자 $u_4$가 평가하지 않은 아이템 $i_3$의 예측 평점은 $k$-근접 이웃의 유사도와 평점을 곱한 값의 합인 $10.2773983$을 각 사용자 유사도 절대값의 합인 $2.7969764$으로 나눈 $3.6744$가 됩니다.

$$ \begin{flalign} {\hat r_{4,3}} & = \frac{{( {0.9936053 \times 3} ) + ( {0.9847836 \times 4.5} ) + ( {0.8185875 \times 3.5} )}}{{\left| {0.9936053} \right| + \left| {0.9847836} \right| + \left| {0.8185875} \right|}} \\ & \approx 3.6744 \end{flalign} $$

다음 표는 직접 계산한 결괏값을 나타낸 것입니다.

계산 결과

사용자 아이템 합계(유사도와 평점의 곱) 합계(유사도 절대값) 예측 평점
$u_4$ $i_3$ 10.2773983 2.7969764 3.6744

같은 방법으로 사용자 $u_4$가 평가하지 않은 아이템에 대한 예측 평점을 모두 계산해 봅니다. 다음 표는 사용자 $u_4$가 평가하지 않은 아이템 {$i_5$, $i_7$, $i_{10}$}에 대한 이웃 아이템 데이터를 아이템(LHS)은 행, 아이템(RHS)은 열로 나타낸 것입니다.

사용자 $u_4$의 평가하지 않은 나머지 아이템에 대한 이웃 아이템 데이터

사용자 아이템(LHS) 아이템(RHS) 유사도 평점 유사도와 평점의 곱 k-근접 이웃 예측평점
$u_4$ $i_5$ $i_2$ 0.9647638 5 4.823819 {$i_2$, $i_4$} 2.75
$i_4$ 0.9647638 0.5 0.4823819
$i_1$ 0 3
$i_6$ 0 3.5
$i_9$ 0 4.5
$i_8$ NaN 3.5
$i_7$ $i_6$ 0.9876651 3.5 3.45682785 {$i_6$, $i_2$, $i_1$} `3.8438188
$i_2$ 0.9144982 5 4.572491
$i_1$ 0.8505946 3 2.5517838
$i_4$ 0 0.5
$i_9$ 0 4.5
$i_8$ NaN 3.5
$i_{10}$ $i_2$ 1 5 5 {$i_2$,$i_1$} 4.3166746
$i_1$ 0.5189781 3 1.5569343
$i_4$ 0 0.5
$i_6$ 0 3.5
$i_9$ 0 4.5
$i_8$ NaN 3.5

사용자 $u_4$가 평가하지 않은 아이템 {$i_3$, $i_5$, $i_7$, $i_{10}$}에 대한 {3.6744673, 2.75, 3.8438188, 4.3166746}입니다. 예를 들어, 사용자 $u_4$에게 예측 평점이 높은 순으로 $N$개($N = 3$)의 아이템을 추천하면 추천된 아이템은 {$i_{10}$, $i_7$, $i_3$}이 됩니다.

다음 표는 사용자 $u_4$가 평가하지 않은 아이템을 예측 평점이 높은 순으로 나타낸 것입니다.

사용자 $u_4$가 평가하지 않은 아이템의 예측평점

다음 표는 사용자 u4가 평가하지 않은 아이템을 예측 평점이 높은 순으로 나타낸 것입니다.

사용자 u4가 평가하지 않은 아이템의 예측평점

아이템 합계(유사도와 평점의 곱) 합계(유사도 절대값) k-근접 이웃 예측 평점
$i_{10}$ 6.5569343 1.5189781 {$i_2$, $i_1$} 4.3166746
$i_7$ 10.58110265 2.7527579 {$i_6$, $i_2$, $i_1$} 3.8438188
$i_3$ 10.27739835 2.7969764 {$i_1$, $i_9$, $i_6$} 3.6744673
$i_5$ 5.3062009 1.9295276 {$i_2$, $i_4$} 2.75
한글:2972 영어:3753 숫자:2752

추천 시스템: 워크북

Comments

Do you have a problem, want to share feedback, or discuss further ideas? Feel free to leave a comment here! Please follow Rust's code of conduct. This comment thread directly maps to a discussion on GitHub, so you can also comment there if you prefer.

Instead of authenticating the giscus application, you can also comment directly on GitHub.