A상품을 구매할 경우 어떤 상품을 추천해야 좋을까?
라는 질문은 수많은 현업, 통계학자, 데이터 분석 전문가들의 고민거리이다.
여러가지 방식의 추천시스템들이 존재한다.
1. 사용자의 프로파일링 기반
2. 상품 기반
3. Segment 기반
4. 협업필터링 기반
여기서 설명하고자 할 것은, 가장 기초적이고 상식적인 추천 방식인 연관성 규칙(Association Rules)에 어떻게 보면, 가장 많이 사용하고 있는 방식이 지지도/신뢰도/향상도 방식이다.
그럼 지지도, 신뢰도, 향상도란 무엇일까?
어떤 사람이 맥주를 고르고, 그 이후 오징어를 구입했다고 가정해보자.
그럼 우리는 사람들은 맥주를 마시는 사람은 오징어를 고를 수 있다고 판단을 하게 된다.
그래서 맥주 주변에 오징어 상품을 배열하여, 나도 모르게 오징어까지 구입하게 만드는 것이 추천이다.
위와 같이 어떤 사용자의 장바구니(구매 리스트)를 기반으로 분석하는 것을 장바구니 분석이라고 하며, 이 장바구니 분석에서 사용하는 대표적인 것이 지지도, 신뢰도, 향상도이다.
보통, 지지도를 먼저 설명하지만 이해를 위해서, 가장 중요한 신뢰도부터 먼저 설명하도록 하자.
1. 신뢰도(Confidence)
우리가 추천 서비스를 만들기 위해서 어떤 프로젝트에 투입이 됐다고 가정을 해보자.
위와 같이 맥주와 오징어의 관계를 구하기 위해서, 어떻게 계산을 하게 될 것인가?
맥주를 구매할 때, 어떤 상품을 추천하는 것이 옳을까?
신뢰도라는 말을 알지 못해도 우리는 위 계산은 쉽게 할 수 있다.
장바구니에서 맥주의 출현 개수 중, 같이 구입한 상품의 개수를 판단하면 된다.
조금 더 쉬운 이해를 위해서, 구매자와 구매 리스트를 나열해 보았다.
여기서 구매자는 하나의 장바구니 리스트라고 보면 된다.
맥주를 기준으로 추천을 해야 되는 상품을 나열하자면 아래와 같을 것이다.
오징어(2), 치즈(1), 소주(1), 라면(1), 사이다(1), 콜라(1)
다시 정렬하면
2회 : 오징어
1회 : 치즈, 소주, 라면, 사이다, 콜라
위와 같은 수치로 나타낼 수 있다.
A상품에 대한 B상품의 신뢰도 = A상품과 B상품의 동시출현 횟수 / A상품의 출현 횟수
위 공식이 신뢰도인데, A상품의 신뢰도를 다시 적어보자면
2회(66%) : 오징어
1회(33%) : 치즈, 소주, 라면, 사이다, 콜라
가 된다.
"굳이 %(퍼센트)를 뽑을 필요가 있나?" 라고 반문하는 사람이 있을 수 있는데
신뢰도를 뽑는 이유는 특별한 기준을 잡기 위해서이다.
예를 들어, 50% 이상의 신뢰도만 의미가 있다라고 가정을 준다면, 위 데이터에서는
오징어를 제외한 치즈, 소주, 라면, 사이다, 콜라는 무의미한 데이터가 된다.
2. 지지도(Support)
지지도를 구하는 목적은, 우리가 구한 추천 데이터가 과연 올바른가? 라는 의문에서 시작을 한다.
예를 들어, 1000개의 물품이 있다. 총 1만번의 거래가 있었는데, 이때 A라는 상품은 단 한번밖에 거래가 안됐다고 가정을 해보자.
이때, A상품에 대한 데이터는 과연 효율성이 있을까? 라는 질문에서 탄생을 한다.
지지도를 구하는 목적은 위에 적은 것처럼, 추천할 만한 데이터 분석이다 라는 것을 판단하기 위해서 사용한다.
A와 B상품의 지지도 = A상품과 B상품을 같이 구입한 횟수 / 전체 구매 횟수
1만번의 거래가 있다고 가정할 때,
A상품과 B상품이 같이 구입한 횟수는 2번이라면,
2 / 10000 => 0.0002 라는 수치로 환산이 된다.
여기서, 신뢰도는 0.0001 이상만 가져온다라고 한다면, 표본이 적은 위와 같은 사례는 의미가 없는 데이터가 된다.
이렇게 필터링을 위해서, 지지도를 구하게 된다.
조금 더 쉽게 이해를 하기 위해서 위에서 설명한 그림으로 다시 지지도를 구해보도록 하자
맥주의 신뢰도는 위에서 구한 것과 같이 오징어가 66%의 신뢰도를 보여주었다. 그럼 지지도는 몇프로일까?
신뢰도는 "동시 출현 개수 / 기준 상품 리스트" 이었기 때문에 "2 / 3" 이라는 값이 나오게 되었다면,
지지도는 "동시 출현 개수 / 전체 구매리스트" 이기 때문에 "2 / 5"가 된다.
즉, 맥주와 오징어의 지지도는 40%가 된다. 신뢰도보다 뚝 떨어진 수치이다.
위 공식대로 보자면, 지지도는 절대 신뢰도보다 높을 수 없다. 같거나 낮을 수 밖에 없는 수치이다.
사실, 여기까지만 알아도, 대부분의 추천 시스템을 구축할 수 있다.
지지도로 인해서, 일정 이상의 데이터만 가져오고, 특정 이상값의 신뢰도를 추천한다라는 방식으로 일반적으로 구축을 수행하게 되는데 그럼 향상도는 어느 부분에서 쓰이게 되는 것일까???
3. 리프트(Lift) = 향상도(Improvement)
향상도란, 품목간의 의미를 파악하기 위해서 사용이 된다.
예를 들어 A라는 상품에서 신뢰도가 동일한 상품 B와 C가 존재할 때, 우리는 어떤 상품을 더 추천해야 좋을지를 판단한다.
A와 B = 40%
A와 C = 40%
라고 가정을 할 때,
A가 총 5번 등장했다면, B와 C는 A와 동시에 2번 등장했음을 알 수 있을 것이다.
전체 구매리스트는 총 50개 이고, 여기서 B는 총 5번 등장했고, C는 총 10번 등장했다면, 어떤 상품을 추천해야 옳을 것인가?
좀 더 쉽게 설명하자면, 위 데이터만 봤을 때, C의 등장은 B보다 2배 더 높으므로, 2배 더 높은 인기(상대적적 인기) 상품이라는 것을 알 수 있다.
향상도의 공식은
위와 같은데, 위 공식대로 나온 값이
1 : 두 품목이 서로 독립적인 관계
>1 : 두 품목이 서로 양의 상관 관계
<1 : 두 품목이 서로 음의 상관 관계
를 뜻하고 있다.
위 공식인 독립적, 양, 음이라는 수치보다는 일반적인 현업에서는 Confidence가 동일할 경우, Lift 값을 2차 정렬로 사용한다던지, Lift 값을 정렬 후, Confidence를 정렬하는 경우가 있는데
즉, 위와 같은 케이스에서는 B를 추천하는 것이 더 옳을 것이다.
그럼 B가 C보다 Lift가 높은지 계산을 수행해보자
A와 B 상품의 향상도 계산은
A와 B의 신뢰도 / (B상품 등장 횟수 / 전체 리스트) = 0.40 / (5/50) = 4
A와 C 상품의 향상도 계산은
A와 C의 신뢰도 / (C상품 등장 횟수 / 전체 리스트) = 0.40 / (10/50) = 2
가 되어서, A를 구입할 때, C보다 B를 상품추천하는 것이 더 옳다라는 것을 알 수 있을 것이다.
A상품을 대상으로 추천되는 상품이 C상품 하나밖에 없는데 이 상품이 음의 상관관계이면, 추천하지 말아야 하나?? 라는 질문을 할 수 있다.
사실 데이터 마이닝을 할 때, 수많은 삽질과 예상치 못한 고객들의 반응을 볼 수 있다.
이론적으로는 이건데 왜 이렇게 나오지? 등등....
공식이 하나로만 정리되면 편하련만 사이트 및 데이터의 특성에 따라 너무나도 예상치 못한 값들이 나오기 마련이다.
사실 데이터는 불확실하기 때문에 데이터 분석가가 필요한 것이다.
어떤 가설을 세워서 사이트를 구축하였는데 늘 문제가 있을 수 있다라는 마인드로 대비책을 세워야 한다. 정말 Lift가 낮은 것이 추천률이 높아질 수도 있다.
Case by Case이고, 이럴 경우를 대비하여 사용자의 특성까지도 고려해야 한다.
특정 사용자 집단은 어떤 구매 패턴등이 있다.
그렇기에 지지도 신뢰도 향상도는 하나의 추천 시스템 지수이며, 사이트, 그리고 데이터 별로 여러가지의 추천 방식을 사용해야 성공적인 프로젝트 수행을 할 수 있을 것이다.
'인공지능 및 데이터과학 > 머신러닝 및 딥러닝' 카테고리의 다른 글
추천시스템(Recommender System) (0) | 2020.01.03 |
---|---|
경사 하강법(Gradient Descent) 최적화 알고리즘 (0) | 2018.11.20 |
챗봇 및 기계번역에 특화된 문장 학습 모델, 시퀀스 투 시퀀스(Seq2Seq) (0) | 2018.03.30 |
퍼셉트론(Perceptron) - 2 (논리회로 편) (0) | 2017.09.05 |
퍼셉트론(Perceptron) - 1 딥러닝(Deep Learning)과 인공신경망(Neural Network)의 시작 (0) | 2017.09.03 |