연관분석(Association Analysis)

김예신·2022년 3월 30일
0

연관분석이란?


상품이나 서비스를 구매하는 등 일련의 거래나 사건 안에 존재하는 항목 간의 일정한 연관 규칙을 발견하는 분석이다.

장바구니 분석(Basket Analysis)이라고도 하나, 엄밀히 짚고 넘어가면 장바구니 분석은 유통업에서 부르는 용어이고 연관분석의 한 종류라고 볼 수 있다.

연관분석 알고리즘으로는 Apriori, FP-Growth, FPV 가 있다.



연관규칙의 형태


💡 ‘A를 구매했을 때, B 또한 구매할것이다’ 와 같이 if A, then B의 패턴으로 이루어져있다.

  • 맥주를 구매하는 사람은 기저귀를 함께 구매한다.
  • 샌드위치를 먹는 사람은 탄산수를 함께 마신다.
  • 사탕을 구매하는 사람은 키보드를 함께 구매한다.



연관분석 측정지표


대표적인 연관규칙 측정지표로는 지지도, 신뢰도, 향상도가 있으며, 산업의 특성에 따라 중요한 지표가 달라진다.


지지도(Support)

A → B 의 지지도는 전체 거래중에서 A와 B가 동시에 판매되는 거래의 비율을 의미한다.

지지도=P(AB)=AB를모두포함하는거래수전체거래수지지도 = P(A\cap B) = { A와 B를 모두 포함하는 거래 수 \over 전체 거래수}

모든 경우의 수를 분석하는 것은 불필요한 연산을 증가시키므오로 최소지지도라는 것을 설정해 이 값이 임곗값을 넘는 품목에 대한 규칙을 도출한다.

A → B의 지지도값과 B → A의 값은 값고 1에 가까울수록 연관성이 높다고 할 수 있다.



신뢰도(Confidence)

A → B의 신뢰도는 A의 거래 중에서 B가 포함된 거래의 비율로, 상품 간에 존재하는 연관성의 정도를 측정하는 데 사용된다.
A를 구매했을 때 B도 구매할 조건부 확률이라고도 할 수 있다.

신뢰도=P(AB)P(A)=AB를모두포함하는거래수A를포함하는거래수=지지도P(A)신뢰도={P(A\cap B) \over P(A)} = {A와 B를 모두 포함하는 거래 수 \over A를 포함하는 거래 수} = {지지도 \over P(A)}

A → B의 신뢰도 값과 B → A의 신뢰도 값은 다르고 값이 1에 가까울수록 연관성이 높다.



향상도(Lift)

A → B의 향상도는 A를 구매하지 않았을 때 B를 구매할 확률 대비 A를 구매했을 때 B를 구매 할 구매확률의 증가 비율을 의미한다.

향상도=P(AB)P(A)P(B)=AB를포함하는거래수전체거래수A포함거래수B포함거래수=신뢰도P(B)향상도={P(A\cap B) \over P(A)P(B)}={A와 B를 포함하는 거래수 * 전체 거래수 \over A 포함 거래수 * B 포함 거래수} = {신뢰도 \over P(B)}
향상도 > 1우연적 기회보다 높은 확률
향상도 = 1독립
향상도 < 1우연적 기회보다 낮은 확률

향상도가 1이면 두 품목은 독립이고(관련이 없음),

1보다 작으면 상관관계를 가지며 A를 구매하면 B를 구매하지 않을 확률이 구매할 확률보다 큼을 의미한다.

향상도가 1보다 크면 두 품목은 양의 상관관계를 가지고 임의로 B를 구매할 확률보다 A를 구매했을 때 B를 구매할 확률이 더 큼을 의미한다.

향상도는 지지도와 마찬가지로 A → BB → A 의 값이 같은 대칭적 지표이다.



연관분석 예시


마트 거래내역

거래번호품목
1삼겹살, 쌈장, 콜라
2항정살, 상추
3사이다, 콜라
4삼겹살, 쌈장, 사이다
5삼겹살, 쌈장, 상추

거래 번호는 한 명의 고객이 함께 구매한 상품을 나타내며 이를 트랜잭션(Transaction)이라고 한다. 위 표는 총 5개의 트랜잭션으로 구성된다.

거래내역이 주어지면 아래 같은 동시 구매표를 작성할 수 있다.

거래내역을 이용한 동시구매표(구매행렬표)

삼겹살쌈장사이다콜라상추항정살
삼겹살331110
쌈장331110
사이다112100
콜라111200
상추110021
항정살000011

대각선상에 있는 셀들은 해당 상품의 판매횟수를 표시하고 각 셀을 통해 고객들이 어떤 상품을 함께 구매했는지 파악할 수 있다. 삼겹살을 예로 들면 총 3회 판매되었고, 쌈장과 함께 3번 같이 구매되었다.

동시 구매 교차표는 대칭행렬의 모습을 보인다.



Python을 이용한 Apriori 코드

Apriori 알고리즘


apriori 알고리즘은 지지도를 사용해 빈발 항목 집합을 판별하고 이를 통해 계산의 복잡도를 감소시키는 알고리즘이다. [CODE LINK]





노션에 정리되어있던 글을 그대로 복사 붙여넣기 했는데 마크다운을 사용해 깔끔하게 옮겨지는 것이 신기하다... (원문)

profile
life is dancing

0개의 댓글