8.2 연관 규칙 기반 아이템 추천

연관 규칙을 구해보고 흥미도 측도를 계산하여 추천하는 방법을 살펴봅니다.

8.2.1 수식 살펴보기

여기에서는 연관 규칙 기반 필터링 추천에서 연관 규칙과 흥미도 측도에 대한 수식을 살펴봅니다.

8.2.1.1 항목 집합과 지지도 카운트

항목 집합(Itemset)

데이터에 존재하는 모든 항목의 집합 $I = { {i_1},{i_2},{i_3}, \cdots ,{i_m}} $는 전체 항목 집합이라고 하고 전체 트랜잭션 집합 $T = { {t_1},{t_2},{t_3}, \cdots ,{t_n}} $를 고유의 트랜잭션 ID를 가진 각각의 거래 내역인 트랜잭션(Transaction) ${t_i}$의 집합이라고 하면 ${t_i}$는 구매 항목들이 존재하게 되어 ${t_i} \subseteq I$가 됩니다. 항목 집합(Itemset)은 하나 이상의 항목들의 집합으로 트랜잭션 ${t_i}$의 부분 집합입니다. 덧붙여서 항목 집합에 속하는 항목 개수가 $k$개이면 이를 $k$-항목 집합이라고 합니다.

지지도 카운트(Support Count)

지지도 카운트(Support Count)는 전체 트랜잭션 집합에서 특정 항목 집합이 출현하는 빈도(Occurrence Frequency)로 해당 항목 집합을 포함하고 있는 트랜잭션의 개수입니다.

항목 집합의 지지도 카운트는 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \sigma (X) = \left| \{ {t_i}|X \subseteq {t_i}, {t_i} \in T\} \right| \end{flalign} $$

여기에서 $X$는 항목 집합, $t$는 개별 트랜잭션, $T$는 전체 트랜잭션 집합, $\left| {{\rm{ }} \cdot {\rm{ }}} \right|$는 집합의 원소 개수(Cardinality), $\sigma (X)$는 지지도 카운트입니다.

8.2.1.2 연관 규칙

연관 규칙은 한 항목 집합과 다른 항목 집합 사이에 존재하는 연관성을 규칙의 형태($if \ {\rm{ }}X{\rm{ }} \ then{\rm{ }} \ Y$)로 표현한 것입니다.

항목 집합 $X$와 $Y$간의 연관 규칙은 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag X \Rightarrow Y \end{flalign} $$

여기에서 $X$와 $Y$가 하나 이상의 항목들로 구성되는 항목 집합이라고 할 때 $X \subseteq {t_i}$, $Y \subseteq {t_i}$, 그리고 $X \cap Y = \emptyset $입니다. 연관 규칙 $X \Rightarrow Y$에서 각각의 항목 집합은 $X$와 $Y$이며 $X$는 "만일 ~라면"에 해당하는 부분인 조건절(Left Hand Side, 이하 LHS)이고 $Y$는 그 뒷부분에 해당하는 결과절(Right Hand Side, 이하 RHS)입니다.

8.2.1.3 흥미도 측도

연관 규칙은 항목 집합과 항목 집합의 조합에 따라 너무 많은 수의 연관 규칙이 만들어질 수 있습니다. 이렇게 생성된 규칙들 중 일부는 불필요하거나 흥미롭지 않을 수 있습니다. 이때 연관 규칙들을 평가할 수 있는 흥미도 측도(Interestingness Measure)를 통해 흥미롭지 않은 연관 규칙들을 일부 제거하거나 연관 규칙 간의 순위를 매길 수 있습니다. 여기에서는 이러한 흥미도 측도 중 대표적인 지지도(Support), 신뢰도(Confidence), 향상도(Lift)를 살펴봅니다.

다음 표는 대형 마트의 거래 내역 예시를 트랜잭션은 행, 1-항목 집합은 열인 이원 도수 분포표로 나타낸 것입니다.

거래 내역의 이원 도수 분포표

1-항목 집합 트랜잭션 우유 기저귀 맥주 콜라 계란
1 1 1 0 0 0 0
2 1 0 1 1 0 1
3 0 1 1 1 1 0
4 1 1 1 1 0 0
5 1 1 1 0 1 0
지지도 카운트 4 4 4 3 2 1
지지도 0.8 0.8 0.8 0.6 0.4 0.2
지지도(Support)

지지도는 전체 트랜잭션에서 포함된 항목 집합이나 연관 규칙의 발생 비율입니다. 항목 집합의 지지도는 전체 트랜잭션에서 특정 항목 집합을 포함하고 있는 트랜잭션의 비율로 특정 항목 집합의 발생 확률로 항목 집합의 지지도는 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \mathrm{support} (X) & = P(X) \\ & = \frac{\sigma (X)}{\left| T \right|} \end{flalign} $$

여기에서, $\sigma (X)$는 항목 집합 $X$의 지지도 카운트, $\left| T \right|$는 전체 트랜잭션 집합 $T$의 원소 개수입니다.

이전에 살펴본 대형 마트의 거래 내역 예시에서 전체 트랜잭션은 5이며 항목 집합 (기저귀)를 포함하고 있는 트랜잭션의 수인 지지도 카운트는 4로 항목 집합 (기저귀)의 지지도는 0.8이 됩니다.

연관 규칙의 지지도는 전체 트랜잭션에서 조건절과 결과절의 항목 집합을 모두 포함하고 있는 트랜잭션의 비율로 두 항목 집합의 동시 발생 확률로 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \mathrm{support} (X \Rightarrow Y) & = P(X,Y) \\ & = \frac{\sigma (X,Y)} {\left| T \right|} \end{flalign} $$

여기에서, $\sigma (X,Y)$는 항목 집합 $X$와 $Y$의 지지도 카운트, $\left| T \right|$는 전체 트랜잭션 집합 $T$의 원소 개수입니다.

이전에 살펴본 대형 마트의 거래 내역 예시에서 전체 트랜잭션은 5이며 연관 규칙 (기저귀) $\Rightarrow$ (맥주)를 포함하고 있는 트랜잭션의 수인 지지도 카운트는 3으로 연관 규칙(기저귀) $\Rightarrow$ (맥주)의 지지도는 0.6이 됩니다. 이것은 맥주를 구매한 사람이 기저귀를 구매한 비율이 60%라는 의미입니다.

신뢰도(Confidence)

신뢰도(Confidence)는 조건절의 항목 집합이 포함된 트랜잭션 중에 결과절의 항목 집합도 포함하고 있는 트랜잭션의 비율로 조건절의 항목 집합이 발생(선행 사건)하고 난 후 조건절과 결과절의 항목 집합이 동시에 발생(후행 사건)하는 조건부 확률(Conditional Probability)입니다.

연관 규칙의 신뢰도는 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \mathrm{confidence} (X \Rightarrow Y) & = P(Y|X) = \frac{P(X,Y)} {P(X)} \\ & = \frac{\mathrm{support} (X \Rightarrow Y)} {\mathrm{support}(X)} \end{flalign} $$

여기에서 $\mathrm{support} (X \Rightarrow Y)$는 연관 규칙 $X \Rightarrow Y$의 지지도, $\mathrm{support} (X)$는 항목 집합 $X$의 지지도입니다.

이전에 살펴본 대형 마트의 거래 내역 예시에서 연관 규칙 (기저귀) $\Rightarrow$ (맥주)의 신뢰도는 연관 규칙 (기저귀) $\Rightarrow$ (맥주)의 지지도인 0.6을 항목 집합 (맥주)의 지지도인 0.6로 나눈 1이 됩니다. 이것은 맥주를 구매한 사람 중에서 기저귀를 구매한 비율이 100%라는 의미입니다.

향상도(Lift)

향상도(Lift)는 항목 집합 $X$가 주어지지 않았을 때의 항목 집합 $Y$의 발생 확률 대비 항목 집합 $X$가 발생했을 때 항목 집합 $X$와 $Y$가 동시에 발생하는 조건부 확률의 증가 비율입니다. 이는 선행 사건과 후행 사건에 대한 연관 규칙을 모를 때 대비 연관 규칙을 알 때의 비율로 연관 규칙이 얼마나 유의미한 지 판단하는 지표로 사용됩니다. 만일 두 사건이 상호 독립적인 관계이면 분모와 분자가 같기 때문에 향상도는 1이 되며, 이를 기준으로 1보다 크면 두 아이템의 연관성은 양의 상관관계(보완재), 1보다 작으면 음의 상관관계(대체재)를 의미합니다.

연관 규칙의 향상도는 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \mathrm{lift} (X \Rightarrow Y) & = \frac{P(Y|X)} {P(Y)} = \frac{P(X,Y)} {P(X) P(Y)} \\ & = \frac{\mathrm{support} (X \Rightarrow Y)} {\mathrm{support} (X) \times \mathrm{support} (Y)} = \frac{\mathrm{confidence} (X \Rightarrow Y)} {\mathrm{support} (Y)} \end{flalign} $$

여기에서 $\mathrm{confidence} (X \Rightarrow Y)$는 연관 규칙 $X \Rightarrow Y$의 신뢰도, $\mathrm{support} (Y)$는 항목 집합 $Y$의 지지도입니다.

이전에 살펴본 대형 마트의 거래 내역 예시에서 연관 규칙 (기저귀) $\Rightarrow$ (맥주)의 향상도는 연관 규칙 (기저귀) $\Rightarrow$ (맥주)의 신뢰도인 0.75를 항목 집합 (기저귀)의 지지도인 0.6으로 나눈 1.25가 됩니다. 이때 향상도가 1보다 크기 때문에 연관 규칙 (기저귀) $\Rightarrow$ (맥주)는 양의 상관관계로 보완재가 됩니다.

확신도(Conviction)

연관 규칙의 확신도는 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \mathrm{conviction} (X \Rightarrow Y) & = \frac{P(X) P(\neg Y)}{P(X \wedge \neg Y)} = \frac{P(X) P(\overline{X})}{P(X \overline{Y})} = \frac{1-P(Y)} {1-P(Y|X)} \\ & = \frac {\mathrm{support} (X) \times \mathrm{support} (\neg Y)} {\mathrm{support} (X \wedge \neg Y)} = \frac{1-\mathrm{support} (Y)} {1-\mathrm{confidence} (X \Rightarrow Y)} \end{flalign} $$

여기에서 $\mathrm{conviction} (X \Rightarrow Y)$는 연관 규칙 $X \Rightarrow Y$의 확신도, $\mathrm{support} (Y)$는 항목 집합 $Y$의 지지도, $\mathrm{confidence} (X \Rightarrow Y)$는 연관 규칙 $X \Rightarrow Y$의 신뢰도입니다.

레버리지(Leverage)

연관 규칙의 레버리지는 다음과 같이 정의됩니다.

$$ \begin{flalign} \notag \mathrm{leverage} (X \Rightarrow Y) & = P(X,Y) - P(X) P(Y) \\ & = \mathrm{support} (X \Rightarrow Y) - \mathrm{support} (X) \times \mathrm{support} (Y) \end{flalign} $$

여기에서 $\mathrm{leverage} (X \Rightarrow Y)$는 연관 규칙 $X \Rightarrow Y$의 레버리지, $\mathrm{support} (X \Rightarrow Y)$는 연관 규칙 $X \Rightarrow Y$의 지지도, $\mathrm{support} (X)$는 항목 집합 $X$의 지지도, $\mathrm{support} (Y)$는 항목 집합 $Y$의 지지도입니다.

8.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

예를 들어 아이템 $i_3$의 연관 아이템에 대한 지지도와 신뢰도, 향상도를 연관 규칙을 사용하여 계산해 봅니다. 또한, 레버리지와 확신도를 추가로 계산해 볼 것입니다. 항목 집합과 연관 규칙의 최소지지도 임곗값( Minimum Support Threshold)은 0.3 이상, 연관 규칙의 최소신뢰도 임곗값(Minimum Confidence Threshold)은 0.5 이상으로 가정합니다.

8.2.2.1 항목 집합과 빈발 항목 집합

평점 데이터에서 트랜잭션은 사용자별 아이템에 대하여 매긴 평점 이력이며 항목 집합은 각 아이템의 조합입니다. 여기에서는 1-항목 집합만 대상으로 하기 때문에 사용자는 고유의 트랜잭션 ID(Transaction ID, 이하 TID)를 가진 거래 내역으로 전체 트랜잭션의 개수는 5, 항목 집합은 사용자가 평가한 모든 아이템으로 전체 항목 집합의 개수는 10입니다.

다음 표는 각각의 트랜잭션(사용자)에 포함된 항목 집합(아이템)을 표로 나타낸 것입니다.

트랜잭션별 항목 집합 데이터

트랜잭션 아이템 k-항목집합
$u_1$ {$i_1$, $i_2$, $i_3$, $i_6$, $i_7$, $i_9$, $i_{10}$} 7
$u_2$ {$i_1$, $i_2$, $i_3$, $i_4$, $i_5$, $i_7$, $i_{10}$} 7
$u_3$ {$i_2$, $i_3$, $i_4$, $i_5$, $i_6$, $i_9$} 6
$u_4$ {$i_1$, $i_2$, $i_4$, $i_6$, $i_8$, $i_9$} 6
$u_5$ {$i_2$, $i_3$, $i_6$, $i_7$} 4

이원 도수 분포표

트랜잭션/아이템 $i_1$ $i_2$ $i_3$ $i_4$ $i_5$ $i_6$ $i_7$ $i_8$ $i_9$ $i_{10}$ 합계
$u_1$ 1 1 1 0 0 1 1 0 1 1 7
$u_2$ 1 1 1 1 1 0 1 0 0 1 7
$u_3$ 0 1 1 1 1 1 0 0 1 0 6
$u_4$ 1 1 0 1 0 1 0 1 1 0 6
$u_5$ 0 1 1 0 0 1 1 0 0 0 4
합계 3 5 4 3 2 4 3 1 3 2 30

다음 표는 1-항목 집합과 포함하고 있는 트랜잭션을 표로 나타낸 것입니다.

1-항목 집합의 트랜잭션 데이터

1-항목 집합 트랜잭션
{$i_1$} {$u_1$, $u_2$, $u_4$}
{$i_2$} {$u_1$, $u_2$, $u_3$, $u_4$, $u_5$}
{$i_3$} {$u_1$, $u_2$, $u_3$, $u_5$}
{$i_4$} {$u_2$, $u_3$, $u_4$}
{$i_5$} {$u_2$, $u_3$}
{$i_6$} {$u_1$, $u_3$, $u_4$, $u_5$}
{$i_7$} {$u_1$, $u_2$, $u_5$}
{$i_8$} {$u_4$}
{$i_9$} {$u_1$, $u_3$, $u_4$}
{$i_{10}$} {$u_1$, $u_2$}

항목 집합의 지지도 카운트는 항목 집합을 포함하고 있는 트랜잭션의 개수이며 항목 집합의 지지도는 전체 트랜잭션에서 특정 항목 집합을 포함하고 있는 트랜잭션의 비율입니다. 예를 들어 항목 집합 {$i_3$}, {$i_2$}, {$i_7$}의 지지도를 계산해 봅니다.

{$i_3$}의 지지도

여기에서 전체 트랜잭션은 5, 항목 집합 {$i_3$}을 포함하고 있는 트랜잭션은 {$u_1$, $u_2$, $u_3$, $u_5$}으로 지지도 카운트는 4입니다.

항목 집합 {$i_3$}의 지지도는 지지도 카운트를 전체 트랜잭션으로 나눈 0.8이 됩니다.

$$ \begin{flalign} \mathrm{support} (\{i_3\}) = \frac{4}{5} = 0.8 \end{flalign} $$

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

계산 결과

전체 트랜잭션 항목 집합 {$i_3$}의 지지도 카운트 항목 집합 {$i_3$}의 지지도
5 4 0.8
{$i_2$}의 지지도

여기에서 전체 트랜잭션은 5, 항목 집합 {$i_2$}을 포함하고 있는 트랜잭션은 {$u_1$, $u_2$, $u_3$, $u_4$, $u_5$}으로 지지도 카운트는 5입니다.

항목 집합 {$i_2$}의 지지도는 지지도 카운트를 전체 트랜잭션으로 나눈 1이 됩니다.

$$\mathrm{support} (X) = \frac{5}{5} = 1$$

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

계산 결과

전체 트랜잭션 항목 집합 {$i_2$}의 지지도 카운트 항목 집합 {$i_2$}의 지지도
5 5 1
{$i_7$}의 지지도

여기에서 전체 트랜잭션은 5, 항목 집합 {$i_7$}을 포함하고 있는 트랜잭션은 {$u_1$, $u_2$, $u_5$}으로 지지도 카운트는 3입니다.

항목 집합 {$i_2$}의 지지도는 지지도 카운트를 전체 트랜잭션으로 나눈 0.6이 됩니다.

$$\mathrm{support} (X) = \frac{3}{5} = 0.6$$

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

계산 결과

전체 트랜잭션 항목 집합 {$i_7$}의 지지도 카운트 항목 집합 {$i_7$}의 지지도
5 4 0.6

같은 방법으로 1-항목 집합의 지지도 카운트와 지지도를 모두 계산해 봅니다.

다음 표는 1-항목 집합의 지지도 카운트와 지지도를 표로 나타낸 것입니다.

1-항목 집합의 지지도 카운트와 지지도

항목 집합 TID 지지도 카운트 지지도
{$i_1$} {$u_1$, $u_2$, $u_4$} 3 0.6
{$i_2$} {$u_1$, $u_2$, $u_3$, $u_4$, $u_5$} 5 1
{$i_3$} {$u_1$, $u_2$, $u_3$, $u_5$} 4 0.8
{$i_4$} {$u_2$, $u_3$, $u_4$} 3 0.6
{$i_5$} {$u_2$, $u_3$} 2 0.4
{$i_6$} {$u_1$, $u_3$, $u_4$, $u_5$} 4 0.8
{$i_7$} {$u_1$, $u_2$, $u_5$} 3 0.6
{$i_8$} {$u_4$} 1 0.2
{$i_9$} {$u_1$, $u_3$, $u_4$} 3 0.6
{$i_{10}$} {$u_1$, $u_2$} 2 0.4

빈발 항목 집합은 최소지지도(Minimum Support) 이상의 지지도를 가지는 항목 집합으로 최소지지도 카운트는 최소지지도와 전체 트랜잭션의 수를 곱한 값(가장 가까운 정수)이 됩니다. 여기에서는 최소지지도가 0.5 이상으로 최소지지도 카운트는 최소지지도와 전체 트랜잭션을 곱한 2.5와 가장 가까운 정수인 3이 되며 최소지지도가 0.5 이상인 항목 집합이 됩니다. 따라서 빈발 항목 집합은 연관 아이템의 기준이 되는 항목 집합 {$i_3$}와 최소지지도 이하인 항목 집합 {$i_5$}, {$i_8$}, {$i_{10}$}을 제외한 8개의 항목 집합 {$i_1$}, {$i_2$}, {$i_4$}, {$i_6$}, {$i_7$}, {$i_9$}입니다.

빈발 항목 집합

항목 집합 TID 지지도 카운트 지지도
{$i_1$} {$u_1$, $u_2$, $u_4$} 3 0.6
{$i_2$} {$u_1$, $u_2$, $u_3$, $u_4$, $u_5$} 5 1
{$i_3$} {$u_1$, $u_2$, $u_3$, $u_5$} 4 0.8
{$i_4$} {$u_2$, $u_3$, $u_4$} 3 0.6
{$i_6$} {$u_1$, $u_3$, $u_4$, $u_5$} 4 0.8
{$i_7$} {$u_1$, $u_2$, $u_5$} 3 0.6
{$i_9$} {$u_1$, $u_3$, $u_4$} 3 0.6

8.2.2.2 연관 규칙과 흥미도 측도

항목집합과 항목 집합의 조합에 따라 만들어진 연관 규칙들을 흥미도 측도(Interestingness Measure)를 통해 평가하여 연관 규칙 간의 순위를 매기거나 필요에 따라 일부 제거할 있습니다. 여기에서는 흥미도 측도 중 지지도와 신뢰도를 사용하여 강한 규칙을 선정하고 이 규칙들의 향상도를 계산해 봅니다.

강한 규칙(Strong Rule)

이전 단계에서 최소지지도 임곗값인 0.5 미만의 지지도를 가지는 항목 집합을 제거하여 빈발 항목 집합(Frequent Itemset)을 선정하였습니다. 이제 빈발 항목 집합의 모든 항목이 조합되는 경우의 수만큼 만들어지는 연관 규칙 중에서 최소지지도와 최소신뢰도를 모두 만족하는 강한 규칙(Strong Rule)을 먼저 선정해 볼 것입니다. 항목 집합 {$i_3$}을 조건절로 갖는 경우만 대상으로 하기 때문에 조합된 연관 규칙에서 조건절과 결과절이 같은 경우는 제외합니다.

예를 들어 항목 집합 {$i_3$}을 조건절로, 항목 집합 {$i_2$}, {$i_7$}을 결과절로 가지는 연관 규칙의 지지도와 신뢰도를 계산해 봅니다.

연관 규칙 $\{i_3\} \Rightarrow \{i_2\}$의 지지도와 신뢰도

항목 집합 {$i_3$}이 포함되어 있는 트랜잭션은 {$u_1$, $u_2$, $u_3$, $u_5$}, 항목 집합 {$i_2$}이 포함되어 있는 트랜잭션은 {$u_1$, $u_2$, $u_3$, $u_4$, $u_5$}이고 항목 집합 {$i_3$}과 {$i_2$}이 모두 포함되어 있는 트랜잭션은 {$u_1$, $u_2$, $u_3$, $u_5$}로 지지도 카운트는 4입니다.

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_2$}인 연관 규칙의 지지도는 연관 규칙의 지지도 카운트를 전체 트랜잭션으로 나눈 0.8가 됩니다.

$$\mathrm{support} (X \Rightarrow Y) = \frac{4}{5} = 0.8$$

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_2$}인 연관 규칙의 신뢰도는 조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_2$}인 연관 규칙의 지지도인 0.8를 항목 집합 {$i_3$}의 지지도인 0.8로 나눈 1가 됩니다.

$$\mathrm{confidence} (X \Rightarrow Y) = \frac{0.8}{0.8} = 1$$

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

계산 결과

조건절(LHS) 결과절(RHS) 연관 규칙
항목 집합 지지도 항목 집합 지지도 지지도 카운트 지지도 신뢰도
{$i_3$} 0.8 {$i_2$} 1 4 0.8 1
연관 규칙 $\{i_3\} \Rightarrow \{i_7\}$의 지지도와 신뢰도

항목 집합 {$i_3$}이 포함되어 있는 트랜잭션은 {$u_1$, $u_2$, $u_3$, $u_5$}, 항목 집합 {$i_7$}이 포함되어 있는 트랜잭션은 {$u_1$, $u_2$, $u_5$}이고 항목 집합 {$i_3$}과 {$i_7$}이 모두 포함되어 있는 트랜잭션은 {$u_1$, $u_2$, $u_5$}로 지지도 카운트는 3입니다.

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_7$}인 연관 규칙의 지지도는 연관 규칙의 지지도 카운트를 전체 트랜잭션으로 나눈 0.6가 됩니다.

$$\mathrm{support} (X \Rightarrow Y) = \frac{3}{5} = 0.6$$

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_7$}인 연관 규칙의 신뢰도는 조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_7$}인 연관 규칙의 지지도인 0.6를 항목 집합 {$i_3$}의 지지도인 0.8로 나눈 1가 됩니다.

$$\mathrm{confidence} (X \Rightarrow Y) = \frac{0.6}{0.8} = 0.75$$

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

계산 결과

조건절(LHS) 결과절(RHS) 연관 규칙
항목 집합 지지도 항목 집합 지지도 지지도 카운트 지지도 신뢰도
{$i_3$} 0.8 {$i_7$} 0.6 3 0.6 0.75

같은 방법으로 조건절이 항목 집합 {$i_3$}의 모든 결과절에 대한 연관 규칙의 지지도와 신뢰도를 계산해 봅니다.

다음 표는 조건절이 항목 집합 {$i_3$}인 연관 규칙의 지지도와 신뢰도를 나타낸 것입니다.

조건절이 항목 집합 {$i_3$}인 연관 규칙

조건절(LHS) 결과절(RHS) 연관 규칙
항목 집합 트랜잭션(TID) 지지도 항목 집합 트랜잭션(TID) 지지도 공통 트랜잭션(TID) 지지도 카운트 지지도 신뢰도
{$i_3$} {$u_1$, $u_2$, $u_3$, $u_5$} 0.8 {$i_1$} {$u_1$,$u_2$,$u_4$} 0.6 {$u_1$,$u_2$} 2 0.4 0.5
{$i_2$} {$u_1$,$u_2$,$u_3$,$u_4$,$u_5$} 1 {$u_1$,$u_2$,$u_3$,$u_5$} 4 0.8 1
{$i_4$} {$u_2$,$u_3$,$u_4$} 0.6 {$u_2$,$u_3$} 2 0.4 0.5
{$i_6$} {$u_1$,$u_3$,$u_4$,$u_5$} 0.8 {$u_1$,$u_3$,$u_5$} 3 0.6 0.75
{$i_7$} {$u_1$,$u_2$,$u_5$} 0.6 {$u_1$,$u_2$,$u_5$} 3 0.6 0.75
{$i_9$} {$u_1$,$u_3$,$u_4$} 0.6 {$u_1$,$u_3$} 2 0.4 0.5

앞서 가정한 연관 규칙의 최소지지도 임곗값은 0.5 이상, 최소신뢰도 임곗값은 0.5 이상으로, 따라서 강한 규칙은 조건절이 항목 집합 {$i_3$}이고 결과절은 항목 집합 {$i_1$}, {$i_4$}, {$i_9$}를 제외한 3개의 항목 집합 {$i_2$}, {$i_6$}, {$i_7$}입니다.

다음 표는 조건절이 항목 집합 {$i_3$}인 연관 규칙 중 강한 규칙을 나타낸 것입니다.

조건절이 항목 집합 {$i_3$}인 연관 규칙 중 강한 규칙

조건절(LHS) 결과절(RHS) 연관 규칙
항목 집합 트랜잭션(TID) 지지도 항목 집합 트랜잭션(TID) 지지도 공통 트랜잭션(TID) 지지도 카운트 지지도 신뢰도
{$i_3$} {$u_1$, $u_2$, $u_3$, $u_5$} 0.8 {$i_2$} {$u_1$,$u_2$,$u_3$,$u_4$,$u_5$} 1 {$u_1$,$u_2$,$u_3$,$u_5$} 4 0.8 1
{$i_6$} {$u_1$,$u_3$,$u_4$,$u_5$} 0.8 {$u_1$,$u_3$,$u_5$} 3 0.6 0.75
{$i_7$} {$u_1$,$u_2$,$u_5$} 0.6 {$u_1$,$u_2$,$u_5$} 3 0.6 0.75
향상도

이전 단계에서 최소지지도 임곗값은 0.5 미만, 최소신뢰도 임곗값은 0.5 미만인 연관 규칙을 제거하여 강한 규칙을 선정하였습니다. 이제 강한 규칙들의 향상도를 계산해 봅니다.

연관 규칙 $\{i_3\} \Rightarrow \{i_2\}$의 향상도

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_2$}인 연관 규칙의 향상도는 연관 규칙의 신뢰도인 1을 항목 집합 {$i_2$}의 지지도인 1로 나눈 1이 됩니다.

$$\mathrm{lift} (X \Rightarrow Y) = \frac{1}{1} = 1$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도
{$i_3$} 0.8 {$i_2$} 1 0.8 1 1
연관 규칙 $\{i_3\} \Rightarrow \{i_7\}$의 향상도

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_7$}인 연관 규칙의 향상도는 연관 규칙의 신뢰도인 0.75을 항목 집합 {$i_7$}의 지지도인 0.6로 나눈 1.25이 됩니다.

$$\mathrm{lift} (X \Rightarrow Y) = \frac{0.75}{0.6} = 1.25$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도
{$i_3$} 0.8 {$i_7$} 0.6 0.6 0.75 1.25

같은 방법으로 항목 집합 {$i_3$}의 강한 규칙에 대한 향상도를 모두 계산해 봅니다.

항목 집합 트랜잭션(TID) 지지도 항목 집합 트랜잭션(TID) 지지도 공통 트랜잭션(TID) 지지도 카운트 지지도 신뢰도 향상도
{$i_3$} {$u_1$, $u_2$, $u_3$, $u_5$} 0.8 {$i_2$} {$u_1$,$u_2$,$u_3$,$u_4$,$u_5$} 1 {$u_1$,$u_2$,$u_3$,$u_5$} 4 0.8 1 1
{$i_6$} {$u_1$,$u_3$,$u_4$,$u_5$} 0.8 {$u_1$,$u_3$,$u_5$} 3 0.6 0.75 0.9375
{$i_7$} {$u_1$,$u_2$,$u_5$} 0.6 {$u_1$,$u_2$,$u_5$} 3 0.6 0.75 1.25
확신도

이전 단계에서 향상도를 계산하였습니다. 이제 강한 규칙들의 확신도를 계산해 봅니다.

연관 규칙 $\{i_3\} \Rightarrow \{i_2\}$의 확신도

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_2$}인 연관 규칙의 확신도는 1에서 항목 집합 {$i_2$}의 지지도를 뺀 값에서 1에서 연관 규칙의 신뢰도를 뺀 값으로 나눈 값이 됩니다.

연관 규칙의 신뢰도가 1이면 수식에서 분모가 0이 되어 확신도는 NaN이 되지만, 신뢰도가 1이라는 것은 조건절과 결과절의 항목 집합이 동시에 발생하는 조건부 확률이 100%로 항상 발생한다는 것을 나타내기 때문에 이 경우에는 확신도는 $\infty$로 정의합니다.

$$\mathrm{conviction} (X \Rightarrow Y) = \frac{1-1} {1-1} = \infty$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도 확신도
{$i_3$} 0.8 {$i_2$} 1 0.8 1 1 $\infty$
연관 규칙 $\{i_3\} \Rightarrow \{i_6\}$의 확신도

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_6$}인 연관 규칙의 확신도는 1에서 항목 집합 {$i_6$}의 지지도를 뺀 값에서 1에서 연관 규칙의 신뢰도를 뺀 값으로 나눈 값이 됩니다.

$$\mathrm{conviction} (X \Rightarrow Y) = \frac{1-0.8} {1-0.75} = 0.8$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도 확신도
{$i_3$} 0.8 {$i_6$} 0.8 0.6 0.75 0.9375 0.8
연관 규칙 $\{i_3\} \Rightarrow \{i_7\}$의 확신도

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_7$}인 연관 규칙의 확신도는 1에서 항목 집합 {$i_7$}의 지지도를 뺀 값에서 1에서 연관 규칙의 신뢰도를 뺀 값으로 나눈 값이 됩니다.

$$\mathrm{conviction} (X \Rightarrow Y) = \frac{1-0.6} {1-0.75} = 1.6$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도 확신도
{$i_3$} 0.8 {$i_7$} 0.6 0.6 0.75 1.25 1.6
레버리지

이전 단계에서 확신도를 계산하였습니다. 이제 강한 규칙들의 레버리지를 계산해 봅니다.

연관 규칙 $\{i_3\} \Rightarrow \{i_2\}$의 레버리지

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_2$}인 연관 규칙의 레버리지는 1에서 연관 규칙의 지지도에서 항목 집합 {$i_3$}의 지지도와 항목 집합 {$i_2$}의 지지도를 곱한 값을 뺀 값이 됩니다.

$$\mathrm{leverage} (X \Rightarrow Y) = 0.8 - (0.8 \times 1) = 0$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도 확신도 레버리지
{$i_3$} 0.8 {$i_2$} 1 0.8 1 1 $\infty$ 0
연관 규칙 $\{i_3\} \Rightarrow \{i_6\}$의 레버리지

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_6$}인 연관 규칙의 레버리지는 1에서 연관 규칙의 지지도에서 항목 집합 {$i_3$}의 지지도와 항목 집합 {$i_6$}의 지지도를 곱한 값을 뺀 값이 됩니다.

$$\mathrm{leverage} (X \Rightarrow Y) = 0.6 - (0.8 \times 0.8) = -0.04$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도 확신도 레버리지
{$i_3$} 0.8 {$i_6$} 0.8 0.6 0.75 0.9375 0.8 -0.04
연관 규칙 $\{i_3\} \Rightarrow \{i_7\}$의 레버리지

조건절이 항목 집합 {$i_3$}이고 결과절이 항목 집합 {$i_7$}인 연관 규칙의 레버리지는 1에서 연관 규칙의 지지도에서 항목 집합 {$i_3$}의 지지도와 항목 집합 {$i_7$}의 지지도를 곱한 값을 뺀 값이 됩니다.

$$\mathrm{leverage} (X \Rightarrow Y) = 0.6 - (0.8 \times 0.6) = 0.12$$

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

계산 결과

항목 집합 지지도 항목 집합 지지도 지지도 신뢰도 향상도 확신도 레버리지
{$i_3$} 0.8 {$i_7$} 0.6 0.6 0.75 1.25 1.6 0.12

8.2.2.3 아이템 추천

아이템 $i_3$에게 추천할 아이템 {$i_2$, $i_6$ $i_7$}에 대하여 흥미도 측도 중 향상도가 높은 순이며 향상도가 1보다 큰 $N$개($N = 3$)의 아이템을 추천하면, 추천된 아이템은 {$i_7$}이 됩니다.

다음 표는 아이템 $i_3$에게 추천할 아이템을 향상도, 신뢰도, 지지도가 높은 순으로 나타낸 것입니다.

아이템 추천(상위 3개)

순위 아이템 지지도 신뢰도 향상도 확신도 레버리지
1 $i_7$ 0.6 0.75 1.25 1.6 0.12

8.2.3 예제 코드 실행해보기

앞서 "직접 계산하기"에서는 예제 데이터셋의 평점 데이터를 사용하여 계산해 보았습니다. 이제부터는 평점 데이터 파일과 예제 코드를 사용하여 "직접 계산하기"의 계산 결과를 한 번 더 확인해 볼 것입니다.

"직접 계산하기"의 결과

추천 대상 추천 아이템 지지도 신뢰도 향상도 확신도 레버리지 순위
$i_3$ $i_7$ 0.6 0.75 1.25 1.6 0.12 1

8.2.3.1 구현 클래스 살펴보기

먼저 예제 코드에서 사용하는 연관 규칙 기반 필터링이 구현된 AssociationRuleMiningParams 클래스와 AssociationRuleMining 클래스를 살펴봅니다. AssociationRuleMiningParams 클래스는 Apache Spark ML 패키지의 추상 클래스인 JavaParams 클래스를 상속받는 CommonParams 클래스를 구현하고 있는 클래스로 AssociationRuleMining 클래스의 생성자에 매개변수를 전달합니다. AssociationRuleMining 클래스는 AbstractRecommender 클래스를 상속받아 평점 데이터(사용자/아이템/평점) 를 사용자 기반 또는 아이템 기반의 추천 결과로 변환하는 recommend 메서드를 구현하고 있는 추천을 처리하는 추천기(Recommender)입니다.

다음 그림은 UML 클래스 다이어그램 표기법을 사용하여 AssociationRuleMiningParams 클래스와 AssociationRuleMining 클래스를 클래스 다이어그램으로 나타낸 것입니다.

Download

[UML 클래스 다이어그램]

AssociationRuleMiningParams 클래스는 연관 규칙 기반 필터링 추천을 위해 필요한 매개변수의 설정이나 기본값 변경이 필요한 경우에는 필요에 따라 다음 코드와 같이 빌더 패턴을 사용하여 인스턴스를 생성할 수 있습니다.

AssociationRuleMiningParams params =
        new AssociationRuleMiningParams()
        .setMinSupport(0.5)
        .setMinConfidence(0.5)
        .setVerbose(false)
        .setUserCol("user")
        .setItemCol("item")
        .setRatingCol("rating")
        .setOutputCol("score");

AssociationRuleMiningParams 클래스의 인스턴스에 설정 가능한 매개변수는 다음과 같습니다.

주요 매개변수

매개변수 유형 필수여부 기본값 설명
minSupport Double O - 지지도 최소 임곗값
minConfidence String O - 신뢰도 최소 임곗값
verbose boolean false 처리과정에 대한 정보를 출력할 것인지 여부 체크(기본값: false).
userCol String user 평점 데이터의 사용자 컬럼명(기본값: “user”)
itemCol String item 평점 데이터의 아이템 컬럼명(기본값: “item”)
ratingCol String rating 평점 데이터의 평점 컬럼명(기본값: “rating”)
outputCol String support 출력 컬럼명(기본값: “support”)으로 흥미도

AssociationRuleMining 클래스는 다음 코드와 같이 생성된 AssociationRuleMiningParams 클래스의 인스턴스를 생성자의 인자로 전달받아 인스턴스를 생성한 후 recommend 메서드를 사용하여 평점 데이터와 태그 데이터를 입력받아 프로필 유사도 높은 순의 Top-N 아이템 추천 데이터로 변환할 수 있습니다.

AssociationRuleMiningParams params =
    new AssociationRuleMiningParams()
        .setMinSupport(0.5)
        .setMinConfidence(0.5)
        .setVerbose(false)
        .setUserCol("user")
        .setItemCol("item")
        .setRatingCol("rating")
        .setOutputCol("support");

AssociationRuleMining recommender = new AssociationRuleMining(params);

Dataset<Row> recommendedItemDS = recommender.recommend(ratingDS, 10, "i3");

AssociationRuleMining 클래스의 recommend 메서드에 설정 가능한 매개변수는 다음과 같습니다.

주요 매개변수

매개변수 유형 필수여부 기본값 설명
ratings Dataset O - Spark의 Dataset 유형인 평점 데이터셋
topN Integer O - 추천 아이템 수
itemId Object O - 추천 받을 아이템 ID

8.2.3.2 예제 코드 살펴보기

여기에서는 "직접 계산하기"의 계산 결과를 확인하기 위해 JUnit으로 작성된 예제 클래스의 소스 코드를 살펴봅니다. 다음은 r4tings-recommender 라이브러리에 포함된 연관 규칙 기반 필터링 추천을 위한 구현 클래스인 AssociationRuleMining 클래스를 이용하여 "직접 계산하기"의 계산 결과를 확인하기 위한 AssociationRuleMiningTest 클래스의 associationRuleMiningExamples는 테스트 메서드입니다.

AssociationRuleMiningTest.java

소스 코드에서 볼 수 있듯이 대부분 코드는 테스트를 처리하기 위한 것이지만 기본 흐름은 매우 단순합니다. 먼저 ❶ 매개변수를 바꿔가면서 실행하고 결과를 확인하기 위한 CSV 형식의 인자 목록을 설정합니다( 21~27행). 반복 실행되는 AssociationRuleMiningExamples 메서드에서는 테스트 인자들을 매개변수로 받습니다.

다음으로 ❷ Parquet 유형의 평점 데이터를 읽어 들이고(37행) ❸ 연관 규칙 기반 필터링 추천을 위해 필요한 매개변수를 설정합니다(39행~44행). 다음으로 ❹ AssociationRuleMining 클래스의 인스턴스를 생성하고(46행) ❺ 평점 데이터와 추천 아이템 수, 그리고 추천받을 아이템 ID를 전달하여 아이템을 추천합니다 (48행).

마지막으로 ❻ "직접 계산하기"에서 계산해 본 결과에 해당하는 기댓값(Expected)과 예제 코드의 실행 결과인 실제 값(Actual)의 소수 자릿수 7자리까지 비교합니다(52행).

8.2.3.3 실행 결과 확인하기

여기에서는 앞서 살펴본 테스트 클래스인 AssociationRuleMiningTest 클래스의 테스트 메서드인 AssociationRuleMiningExamples의 실행 결과를 살펴봅니다. 다음과 같이 명령줄 인터페이스(CLI, Command line interface)에서 빌드 도구인 Gradle Wrapper로 AssociationRuleMiningTest 클래스의 테스트 메서드인 AssociationRuleMiningExamples를 실행해 봅니다.

./gradlew :recommender-examples:test --tests com.r4tings.recommender.examples.ch08.AssociationRuleMiningTest.associationRuleMiningExamples

다음은 반복 실행 테스트를 위한 테스트 인자 목록입니다

테스트 인자 목록

데이터 경로 정렬(내림차순) 최소 지지도 임곗값 최소 신뢰도 임곗값 Top-N 상세 출력 아이템(조건절) 순위 아이템(결과절) 지지도 신뢰도 향상도 확신도 레버리지
dataset/r4tings, ratings.parquet LIFT 0.5 0.5 3 true i3 1 i7 0.6 0.75 1.25 1.6 0.12

예제 코드의 실행 결과는 다음과 같습니다.

예제 코드 실행 결과더보기

흥미도 측도인 ❶ 지지도, ❷ 신뢰도, ❸ 향상도를 사용한 연관 규칙 기반 아이템 추천에 대한 테스트 케이스가 성공적으로 종료(PASSED)되었음을 확인할 수 있습니다. 또한, 실행 결과는 "직접 계산하기"에서 계산해 본 내용을 쉽게 확인하기 위해 처리 과정에서 파생된 상세 출력 정보도 함께 보여주고 있습니다.

한글:7280 영어:7954 숫자:1637

추천 시스템: 워크북

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.