연관 규칙 분석 | 08: Association Rule Mining (연관규칙분석) 상위 149개 답변

당신은 주제를 찾고 있습니까 “연관 규칙 분석 – 08: Association Rule Mining (연관규칙분석)“? 다음 카테고리의 웹사이트 https://you.charoenmotorcycles.com 에서 귀하의 모든 질문에 답변해 드립니다: https://you.charoenmotorcycles.com/blog. 바로 아래에서 답을 찾을 수 있습니다. 작성자 고려대학교 산업경영공학부 DSBA 연구실 이(가) 작성한 기사에는 조회수 1,264회 및 좋아요 30개 개의 좋아요가 있습니다.

연관규칙분석, 장바구니분석 (Association Rule Analysis, Market Basket Analysis은 고객의 대규모 거래데이터로부터 함께 구매가 발생하는 규칙을 도출하여, 고객이 특정 상품 구매 시 이와 연관성 높은 상품을 추천한다.

Table of Contents

연관 규칙 분석 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 08: Association Rule Mining (연관규칙분석) – 연관 규칙 분석 주제에 대한 세부정보를 참조하세요

고려대학교 공학대학원 스마트제조학과
비즈니스 애널리틱스
8장: 연관규칙분석
https://github.com/pilsung-kang/Business-Analytics-ITS504-

연관 규칙 분석 주제에 대한 자세한 내용은 여기를 참조하세요.

8. 연관 규칙 분석(Association Rule Analysis) with Python

연관 규칙 분석(Association Rule Analysis : ARA)은 항목(item)들 관계를 If-Then 형식으로 찾아나가는 분석 방법을 말하며 일종의 규칙 기반 …

+ 더 읽기

Source: zephyrus1111.tistory.com

Date Published: 6/25/2021

View: 890

연관규칙분석(A Priori Algorithm) – ratsgo’s blog

이번 글에서는 연관규칙분석(A Priori Algorithm)에 대해 살펴보도록 하겠습니다. 이번 글 역시 고려대 강필성 교수님 강의를 정리했음을 먼저 …

+ 더 읽기

Source: ratsgo.github.io

Date Published: 4/12/2021

View: 499

연관규칙분석이란? 연관규칙분석 예시 3가지 – 끄적

연관규칙분석은 추천 시스템의 기저 알고리즘이다. 우리가 알고 있는 유튜브 알고리즘, 넷플릭스에서 나에게 맞는 콘텐츠 추천도 비슷한 예이다. 그룹을 …

+ 여기를 클릭

Source: tr.educoco.kr

Date Published: 8/29/2022

View: 1802

[python] 연관규칙분석(ASSOCIATION RULE ANALYSIS)

연관 규칙 분석이란 어떤 두 아이템 집합이 번번히 발생하는가를 알려주는 일련의 규칙들을 생성하는 알고리즘입니다. 경영학에서 장바구니 분석(Market …

+ 여기에 표시

Source: hezzong.tistory.com

Date Published: 4/1/2022

View: 1845

11장 연관규칙

장바구니 분석(market basket analysis)에 대한 위의 예제 외에도 웹 사용 마이닝, 침입 탐지,. 연속 생산 및 생물 정보학을 비롯한 많은 분야에서 연관규칙이 …

+ 여기에 자세히 보기

Source: contents2.kocw.or.kr

Date Published: 2/11/2021

View: 5928

R 분석과 프로그래밍/R 연관규칙(Association Rule)

[R 연관규칙(Association Rule)] 연관규칙분석, 장바구니분석(Market Basket Analysis) · 가령, · {맥주} –> {기저귀} · : 맥주를 사는 고객은 기저귀도 …

+ 여기에 표시

Source: rfriend.tistory.com

Date Published: 6/13/2022

View: 1748

[빅데이터분석기사] 연관규칙분석(Association Rule Analysis)

연관분석이란, 대량의 트랜잭션 정보로부터 개별 데이터(변수) 사이에서 연관규칙(x면 y가 발생)을 찾는 것을 말한다. 가령 슈퍼마켓의 구매내역에서 특정 …

+ 자세한 내용은 여기를 클릭하십시오

Source: it-utopia.tistory.com

Date Published: 12/15/2021

View: 5402

[R] 비지도 학습의 방법 : 연관분석 (Association Analysis)

이렇게 A라는 제품을 구매하였을 때, B라는 제품도 함께 구매하는 규칙의 패턴을 구하고자 하는 것이 연관규칙 분석의 목적입니다.

+ 여기에 표시

Source: kerpect.tistory.com

Date Published: 6/19/2022

View: 2571

연관규칙(Association Rules)분석 (1/2), 잘 쓰고 있는걸까? – velog

정리하면, 연관규칙분석의 큰 장점은 : 1. 분석을 위한 복잡한 가정이 필요없다. 그만큼 빠르게 접근할 수 있고, 상대적으로 사전 지식이 부족해도 …

+ 여기에 더 보기

Source: velog.io

Date Published: 4/27/2021

View: 7273

주제와 관련된 이미지 연관 규칙 분석

주제와 관련된 더 많은 사진을 참조하십시오 08: Association Rule Mining (연관규칙분석). 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

08: Association Rule Mining (연관규칙분석)
08: Association Rule Mining (연관규칙분석)

주제에 대한 기사 평가 연관 규칙 분석

  • Author: 고려대학교 산업경영공학부 DSBA 연구실
  • Views: 조회수 1,264회
  • Likes: 좋아요 30개
  • Date Published: 2020. 11. 30.
  • Video Url link: https://www.youtube.com/watch?v=AUfYCH9KsoE

[이재호 강좌] 오렌지 제9강 연관 분석(Association Analysis)

알림: 본 강좌의 모든 예제와 오렌지 파일은 강좌 하단에 zip 파일로 제공됩니다. 강좌의 내용을 따라하시면서 활용해주세요. -스마투스비즈니스리뷰지 알림-

목차

1. 연관분석의 소개

2. 추천시스템의 개관

3. A priori 알고리즘 소개

4. 오렌지3에서 채택한 FP growth 알고리즘 소개

5. 연관 분석의 한계와 이번 장의 정리

6. 오렌지3 실습

7. 파일 다운받기

8. 참고문헌

1. 연관 분석의 소개

지난 강좌에서 우리는 비지도 학습 중 군집 분석을 다루었다.

이번 강좌에서는 비지도학습 중에서 연관 분석을 다룬다.

연관 분석 또는 연관 규칙(association rule) 학습은 대형 데이터베이스에서 변수 간의 흥미로운 관계를 발견하기 위한 규칙-기반 기계 학습 방법이다.

1.1 연관 규칙 분석

연관 규칙 분석의 정의

대량의 트랜잭션 정보(예: 고객의 쇼핑 이력)로부터 개별 데이터(변수) 사이에서 연관규칙(x면 y가 발생)을 찾는 것

이다.

가령 슈퍼마켓의 구매내역에서 특정 물건의 판매 발생 빈도를 기반으로 ‘A물건을 구매하는 사람들은 B물건을 구매하는 경향이 있다.’라는 규칙을 찾을 수 있다.

다른 말로 장바구니 분석(Market Basket Analysis)이라고 한다.

용어 정의: 트랜젝션(transaction)

트랜잭션(Transaction)은 관계형 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다. 대게 관계형 데이터베이스에서 SQL 언어로 수행된다.

데이터베이스는 여러 사람들이 데이터를 공유하고 사용할 목적으로 사용된다. 그렇기 때문에 다수의 사람들이 동시에 사용하더라도 데이터에 문제가 없어야 한다.

트랜잭션은 모든 명령문을 완벽하게 처리하거나, 하나의 명령문이라도 문제가 발생하면 모든 명령문을 수행하지 않고 데이터를 보존하는 기능을 하고 해야 한다.

1.2 연관 규칙 분석은 왜 비지도 학습인가?

연관 규칙 분석은 왜 비지도학습인가?

지도학습에서 학습한 바와 같이 어떤 문제에 대한‘정답’에 해당하는 사전정보가 없는 상태(비지도 상태, 선생님이 답을 알려 주지 않는 상황)에서 유용한 정보나 패턴을 탐색적으로 발견하기 때문이다.

비지도 학습은 목적변수(혹은 반응변수, 종속변수, 목표변수, 출력값)에 대한 정보 없이 학습이 이루어지며, 예측(회귀/분류)의 문제보다는 주로 현상의 기술(Description)이나 특징 도출, 패턴 도출 등의 문제에 활용된다.

1990년도 초반에 IBM의 라케시 아그라왈(Rakesh Agrawal)이 영국의 Marks & Spencer 마켓에서 CRM(고객 관계 관리, Customer Relationship Management) 시스템을 바탕으로 소비자 분석을 실시했다.

Marks & Spencer의 임원이 IBM의 정보 검색 전문가인 라케시 아그라왈에게 데이터베이스 문제에 대한 조언을 요청했기 때문이었다. 해당 백화점은 온갖 종류의 데이터를 수집하고 있었지만 어떻게 해야 할지 몰랐다.

그래서 아그라왈과 그의 팀은 개방형 쿼리를 요청하기 위한 알고리즘을 고안하기 시작했고, 결국 데이터 마이닝 과학에서 반드시 읽어야 할 1993년 논문을 저술했다. 이 보고서는 650개 이상의 다른 연구에서 인용되었으며 동종 논문 중 가장 널리 인용된 논문 중 하나이다[참고문헌 1].

논문 출처:

Rakesh Agrawal, Tomasz Imielinski, Arun N. Swami: Mining Association Rules between Sets of Items in Large Databases. SIGMOD Conference 1993: 207-216

Marks & Spencer 백화점의 사례에서 그는 ‘기저귀’와 ‘맥주’의 구매 여부에 대한 상관관계를 분석하였다. 아그라왈은 ‘기저귀를 산 사람 중 40%’가 맥주를 구매했다는 사실에 주목하고 기저귀를 산 사람에게 맥주를 ‘추천’하면 어떻게 될지를 생각해보자고 하였다.

당연히 이러한 ‘상품의 추천’은 매출 증가라는 ‘결과’를 가져왔다.

이후 이러한 연관 분석은 상업적 효과성이 입증되어 널리 연구, 개발되었다.

이러한 연관 분석은 상품을 개인에게 추천하는 추천 시스템의 발전에도 크게 기여하였다.

1.3 이번 강좌의 구성

오렌지3에 대한 본 강좌에서는 ‘추천 시스템’을 본격적으로 다루지는 않지만, 머신 러닝을 활용한 추천 시스템의 연구 및 개발 분야는 매우 활발하게 현업에 적용되는 분야이다.

따라서, 이번 강좌에서는 추천시스템에 대해서 간단히 개관하고 가장 기초 연관분석 알고리즘인 A priori 알고리즘을 소개한다.

그리고, 후반부에서는 오렌지3에서 채택하고 있는 A priori 알고리즘의 개량형 알고리즘인 FP-Growth 알고리즘에 대해서 소개한다.

끝으로 오렌지3로 FP-Growth에 기반한 알고리즘들을 실습함으로써 연관분석의 이해와 실무 능력을 함양하고자 한다.

1.4 연관 분석을 위한 기초 개념 소개

먼저, 연관 분석은 조건 결과의 빈도수를 기반으로 표현되기 때문에 비교적 결과를 쉽게 이해할 수 있다. 구매내역의 자료 구조를 가지기 때문에 특별한 전처리 과정을 필요로 하지 않는다. 그러나 품목의 개수가 늘어남에 따라 분석에 필요한 계산의 수가 기하급수적으로 증가하는 단점이 있다.

[그림] 연관규칙 분석의 개념도

연관규칙분석은 이름에서 의미하는 그대로 규칙을 기반으로 한다.

예를 들어,

dataset=[

[‘식빵’,’우유’],

[‘생수’,’우유’,’계란’,’고등어’],

[‘우유’,’사과’,’유지’]

]

와 같은 데이터 셋이 있을 때,

규칙은

– 우유를 산 사람은 식빵을 산다.

– 우유를 산 사람은 계란을 산다.

– 우유를 산 사람 휴지를 산다.

등등 많은 규칙들을 생성할 수 있다.

그렇다면 어떤 규칙이 좋은 규칙인지 어떻게 판단할 수 있을까?

좋은 규칙을 판단하는 세가지 지표가 있다.

신뢰도(Confidence)

항목 A를 포함한 거래 중에서 항목 A와 항목 B가 같이 포함될 확률을 구한다. 즉 우유를 구매했을 때 식빵이 장바구니로 함께 들어갈 확률이 다.

지지도(Support)

전체 거래 중 항목 A와 B를 동시에 포함하는 거래의 비율이다. 장을 본 목록을 확인했을 때 우유와 식빵이 꼭 함께 있을 확률이다

향상도(Lift)

A가 주어지지 않은 상태에서 B의 확률에 대하여 A가 주어졌을 때 B의 확률 증가비율이다. 만일 A에 대해 B가 등장할 경우와 A에 대해 C가 등장할 경우의 두 신뢰도가 같다면 어떻게 해야 할까?

대개 이럴때 향상도 지표가 활용된다. A에 대해 B가 등장 가능성이 높은지 C가 등장 가능성이 더 높은지를 확인하는 지표로 향상도가 있다

향상도(lift) 값이 1이면 서로 독립적인 관계이며 1보다 크면 두 품목이 서로 양의 상관관계, 1보다 작으면 두 품목이 서로 음의 상관관계이다. A와 B가 독립이면 분모, 분자가 같기 때문에 1이 나온다.

지지도는 규칙에 대한 유용성을 나타내는 지표로 볼 수 있다.

신뢰도는 규칙에 대한 확실성을 나타내는 지표로 볼 수 있다.

지지도가 만일 2%라면, 분석대상 전체 트랜젝션에서 특정 아이템을 구매한 비율이 2%임을 의미한다.

규칙, <컴퓨터를 구매한 사람이 아래한글 소프트웨어를 구매한다>에 대해서 Computer => 아래한글 software의 신뢰도(Confidence)가 60%라면, 컴퓨터를 구매한 고객 중에서 아래한글 S/W을 구매한 비율이 60%을 의미한다.

연관 규칙 분석을 수행시, 왜 효율적인 알고리즘이 필요한지를 생각해보고 본 강좌에서 다룰 2가지 알고리즘에 대해서 논의한다.

상품 거래에서 나타나는 모든 상품 품목 항목들의 집합을 Item Set이라고 하고 줄여서 I={I1, I2, …, In}라고 할 때, 모든 가능한 부분집합의 개수는 M=2n-1이다. 여기서 -1을 한 이유는 공집합은 상품이 없기 때문에 아무 의미가 없는 집합이라서 뺐기 때문이다.

이때 모든 발생가능한 연관규칙의 개수는 3n-2n+1+1이다. 이는 상품 품목의 개수가 하나씩 증가할 때 마다 발생가능한 즉 우리가 고려해야 할 연관규칙의 개수는 지수적으로 증가함을 알수 있다.

출처:

https://blog.naver.com/PostView.naver?blogId=diana_seoul&logNo=222067115578&categoryNo=16&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=search

컴퓨터 알고리즘의 계산 성능에 대해서는 아래의 그림을 참조하자.

여기서 n은 상품 품목의 개수이다.

[그림] 알고리즘들의 시간 복잡도의 그래프

우리가 상품간의 연관성을 파악하기 위해서 지지도를 계산한다고 하면, 고려해야 할 부분 집합의 개수가 M=2n-1이므로 이는 손으로 계산할 수 있는 양이 아니다. 따라서 효율적인 컴퓨터 알고리즘을 필요로 하게 된다.

본 강좌에서는 이를 계산하기 위한 2가지 알고리즘을 소개한다.

1.5 본 강좌에서 다루는 연관규칙분석 알고리즘 2가지

연관규칙분석의 대표적인 알고리즘은 2가지만 소개한다.

Apriori 알고리즘과 FP-Growth 이다.

Apriori 알고리즘은 알고리즘 구현이 비교적 간단하며 FP-Growth 알고리즘은 실행 성능이 뛰어나다는 장점이 있다.

본 강좌에서 Apriori algorithm는 3절에서 다루고, FP-Growth 알고리즘은 4절에서 다룬다.

2. 추천시스템의 개관

연관 분석은 왜 하는 것일까?

그것은 연관 분석을 통해서 고객의 상품 구매 행위에 담긴 ‘정보’를 추출하여 연관도가 높은 상품을 ‘배치’, ‘추천’하는데 유용하기 때문이다.

[그림] 연관 분석을 통한 ‘고객 상품 추천’과 ‘매장 상품 배치’ 최적화 도식

추천시스템(recommendation system)이란 정보 필터링 (IF) 기술의 일종으로, 특정 사용자가 관심을 가질 만한 정보 (상품, 영화, 음악, 도서, 뉴스, 이미지, 웹 페이지 등)를 추천하는 것이다.

[그림] 추천 시스템의 개요도

추천은 일종의 사용자의 속마음을 맞춰가는 예측과 같다. 왜냐하면, 추천은 상대방이 선호할 만한 결과를 제안하는 것이기 때문이다. 사용자에게 정보를 제공했을 때 과연 어떤 반응을 보일 것인가를 예측하는 것 또한 추천이 할 일이다. 긍정의 반응을 이끌어 낼 만한 것이 추천의 대상입이다(예: 유투브, 쇼핑몰 등).

추천 시스템에는 다양한 기법들이 사용된다.

추천 시스템의 간단한 역사는 아래의 그림과 같다.

[그림] 추천 시스템의 역사

이러한 기법들은 소셜 북마크 사이트에서 링크를 사람들에게 추천하고 영화 품평 사이트의 품평 데이터 세트에서 영화를 추천하는 방법 등에 활용된다.

이에 관해서는 많은 연구와 문헌들이 존재하는데, 짧게 요약하면 아래와 같다[참고문헌 1].

상품 추천에는 순차분석 (Sequence Analysis), Collaborative Filtering , Contents-based recommendation 등 여러가지 분석 기법이 존재한다.

그 중 하나가 바로 연관 규칙 분석이다.

연관규칙분석, 장바구니분석 (Association Rule Analysis, Market Basket Analysis은 고객의 대규모 거래데이터로부터 함께 구매가 발생하는 규칙을 도출하여, 고객이 특정 상품 구매 시 이와 연관성 높은 상품을 추천한다.

연관규칙분석은 거래(transaction)와 항목(item)으로 구성되어 있는 정보가 있는 경우에 수행 가능하다. 대게 관계형 데이터베이스(relational Database)에 거래 정보가 저장되어 있다.

순차분석 (Sequence Analysis)은 고객의 시간의 흐름에 따른 구매 패턴을 도출하여, 고객이 특정 상품 구매 시 일정 시간 후 적시에 고객A에게 상품을 추천한다.

[그림] 대표적인 추천 시스템인 콘텐츠 기반 필터링과 협업 필터링의 개념도(그림은 필자가 재구성)

콘텐츠 기반의 추천(Contents-based recommendation)은 고객이 과거에 구매했던 상품들의 속성과 유사한 다른 상품 아이템 중 미구매 상품을 추천한다.

협력 필터링(Collaborative Filtering)은 모든 고객의 상품 구매 이력을 수치화하고, 추천 대상이 되는 고객A와 다른 고객B에 대해 상관계수를 비교해서, 서로 높은 상관이 인정되는 경우 고객B가 구입 완료한 상품 중에 고객A가 미구입한 상품을 고객A에게 추천한다.

추천 시스템은 넷플릭스, 유투브, 아마존 닷컴 등 플랫폼 기업들이 앞다투어 최신 기법들을 개발하는 분야로써 이 분야의 최신 추천 시스템에 관심있는 독자께서는 많은 자료가 인터넷에 있으므로 위의 그림에 나온 키워드(예: 협업 필터링 등)를 중심으로 내용을 찾아서 학습하자.

파이썬과 같은 전산 언어와 데이터베이스 학습을 병행하면서 자신만의 추천 시스템을 개발 할 수 있다. 관심있는 독자들은 인터넷에 자료가 많으니 학습하자.

3. A priori 알고리즘 소개

Apriori 알고리즘은 빈발(가장 빈번하게 발생하는)하는 아이템 세트를 찾기 위한 목적으로 제안된 최초의 알고리즘이다.

라케시 아그라왈과 스리칸트에 의해 1994년에 Apriori(선험적 알고리즘 또는 사전 지식을 활용한 알고리즘)로 알려지게 되었다[참고문헌 2].

연관규칙 탐색 알고리즘 중에서 Apriori 알고리즘은 후보항목집합을 구성한 후 사전지식(priori knowledge)을 이용하여 빈발 패턴 아이템(또는 항목) 집합을 생성하는 방법이다.

어떤 Item 집합의 존재가 다른 Item 집합의 존재를 암시하는 것을 의미하며 다음과 같이 표시한다.

형식은 아래와 같다.

(Item set A) => (Item set B ) ( if A then B : 만일 A 가 일어나면 B 가 일어난다. )

이 기법은 주로 함께 구매하는 상품의 조합이나 서비스 패턴 발견하는데 이용되며, 특정 제품 또는 사건들이 동시에 발생 하는 패턴을 파악하는데 이용된다.

용어 정의: 빈발 패턴 아이템집합(frequent pattern itemset)

빈발패턴이라는 용어는 주어진 데이터 집합에서 자주 발생하는 패턴(예, 상품 품목 집합)으로 우유와 시리얼 같이 트랜젝션 데이터 집합에서 빈번하게 발생하는 항목집합에 해당한다.

빈발 패턴을 찾는 작업은 데이터에서 연관관계, 상관관계, 관심대상 관계를 분석하는 데 있어, 중요한 역할을 한다. 그리고 데이터분류, 군집화 등 다른 데이터 마이닝 작업에 도움이 된다.

따라서 빈발 패턴 마이닝은 데이터 마이닝 연구에서 중요한 부분으로 주요 관심 주제가 되었다.

이 알고리즘의 명칭은 뒷부분에서도 볼 수 있듯이, 알고리즘 빈발항목집합 특성에 대한 선행지식을 이용한다는 사실에 근거한다.

Apriori는 수준별 검색으로 알려진 반복접근법을 이용한다. 따라서, K반째 항목집합은 K+1번째 항목집합을 탐색하는데 사용한다.

Apriori 알고리즘은 후보항목집합을 구성한 후 사전지식(priori knowledge)을 이용하여 빈발항목집합을 생성하는 방법이다.

여기서, 빈발항목집합을 생성하기 위한 순서는 다음과 같다.

첫째, 1-빈발항목집합을 찾는다. 이 집합을 L1로 나타내면, L1은 2-빈발항목집합인 L2를 찾는데 사용되며 L2는 3-빈발항목집합 L3을 찾는데 이용되는 식으로 계속되어 더 이상의 k-번째 빈발항목집합이 없을 때까지 진행된다.

알고리즘의 작동 예시는 다음 그림을 참조하자.

[그림] Apriori 알고리즘의 작동 예시

이것을 정리하자면 다음과 같다.

Step 1

k개의 아이템을 가지고 단일항목집단을 생성한다.

Step 2

단일항목집단에서 지지도 계산 후 최소 지지도 값(minimum support) 이상의 항목만 선택한다.

본 예시에서는 데이터분석가가 설정한 2라는 값을 최소 지지도 값으로 설정하였다.

최소 지지도 이상의 값만 선택하는 것을 가지치기(pruning)이라고 한다.

Step 3

Step 2에서 선택된 항목 만을 대상으로 2개항목집단을 생성한다.

이를 self join 과정이라고 하는데, 1-frequent itemset, 즉 단일항목집단인 ( {A}, {B}, {C}, {D}. {E} ) 들을 가지고 크기가 2인 모든 항목집단(itemset)을 만드는 과정이다.

그 결과 {A, B}, {A, C}, {A, E}, {B, C}, {B, D}, {B, E}, {C, E}가 생성된다.

Step 4

2개항목집단에서 최소 지지도 혹은 신뢰도 이상의 항목만 선택한다(가지치기).

Step 5

위의 과정을 k개의 k-item frequent set을 생성할 때까지 반복한다.

Apriori 알고리즘의 장점

이해하기 쉬운 알고리즘으로써, 알고리즘내의 가지치기 연산은 대규모 데이터베이스의 규모가 큰 항목 집합에서도 쉽게 구현할 수 있다.

Apriori 알고리즘의 단점

항목 집합이 매우 크고 최소 지원이 매우 낮게 유지되는 경우 계산량이 많이 필요하다. 즉 시간이 많이 소모된다.

또한,

실제 많은 콘텐츠 서비스 관련 응용분야에서는 낮은 빈도를 가짐에도 불구하고 빈발항목으로 구성해야 할 경우가 많이 발생한다.

이런 경우 Apriori 알고리즘에서는 최소 지지도를 낮게 설정하여 문제를 해결할 수 있지만, 이럴 경우 후보항목집합들이 많이 늘어나게 되어 탐색 시간에 대한 효율성이 떨어진다.

4. 오렌지3에서 채택한 FP-Growth 알고리즘 소개

오렌지3는 연관 분석(associate analysis)을 위해서 FP-Growth 알고리즘을 모듈에 탑재하였고 본 강좌에서는 이를 기반으로 실습을 수행한다.

빈출 패턴 성장(FP-Growth: frequent Pattern Growth algorithm) 알고리즘

FP-Growth 알고리즘은 Han과 Pei, Yin이 2000년도에 제안한 알고리즘으로써, Apriori 알고리즘에서 단점으로 생각되었던 DB 스캔(검색) 횟수와 후보 집합 생성 과정을 효율적으로 개선한 알고리즘이다[참고문헌 3].

Han, J., Pei, J., & Yin, Y. (2000). Mining frequent patterns without candidate generation. ACM sigmod record, 29(2), 1-12.

각 항목들의 지지도를 계산하여 FP-Growth 알고리즘만의 독특한 방식으로 헤더테이블(Header Table)과 트리(Tree) 및 연결리스트(Linked-List) 구조를 채택하여 속도의 장점을 취한다.

여기서 잠깐, Header Table/Tree/Linked-List는 무엇인가?

위의 용어들은 컴퓨터 프로그래밍에서 자료 구조(Data Structure)라는 이름으로 개발된 자료를 담는 구조물들이다.

좀더 공부하고 싶은 경우에는 인터넷을 통해서 많은 자료들이 있으므로 프로그래밍에 관심이 있는 경우에는 공부해두자.

기존의 Apriori 알고리즘은 아이템 집합의 수를 제한함으로써 연관규칙 생성을 효율화했지만 데이터 집합에 있는 각각의 아이템 항목들을 조회하면서 빈발항목 집합의 조건에 포함되는지를 계속 판단해줘야 한다.

이는 데이터집합의 규모가 매우 큰 빅데이터 처리 상황에서는 계산 부담이 매우 커진다는 단점을 보인다.

따라서 더욱 효율적으로 빈발항목을 찾아내는 알고리즘에 대한 연구들이 시작되었다.

빈출 패턴 성장(FP-Growth) 알고리즘은 이런 목적으로 탄생하였다.

기본적으로 최소 지지도 임계치를 사용자가 설정해주면 이 임계치 이상의 항목 집합을 찾아서 최소 신뢰도를 넘는 연관규칙을 생성한다는 점은 Apriori 알고리즘과 동일하다.

차이점은 빈발항목 집합을 찾아낼 때 개선된 자료구조를 채택하여 검색시간을 크게 줄인다는 점이다.

이때 사용하는 자료구조가 바로 트리(Tree)이다.

트리란 아래와 같이 A,B,…L과 같은 데이터가 있을 때(이때, A는 상품이 될 수도 있고, 사람의 이름이 될 수도 있다), 이를 계층적으로 표현한 자료 구조이다. 여기서 A, B, … L은 노드(node)라고 하며 트리의 제일 위에 놓인 루트 노드부터 상위에서 하위 노드로 연결된 링크를 따라가면서 각각의 데이터를 조회 할 수 있다.

[그림] 트리의 구성요소들

트리는 다양한 알고리즘에서 기반 자료구조로 활용되고 인터넷에 많은 자료가 있으므로 꼭 학습해두자.

FP-Growth 방법의 핵심 아이디어는 연관 규칙을 트리로 만들어 속도의 문제를 개선한다는 것이다.

이때 사용하는 개선된 자료구조가 독특하게 개발된 FP-Tree(Frequent Pattern Tree)이다.

FP-Tree는 일반적인 Tree 자료 구조와 유사하지만, 유사한 아이템 항목들 간에 서로 연결링크(linked list)를 가지고 있다는 점에서 차이점이 있다.

이 FP-Tree를 생성하는 절차는 우선 상품에 대한 정보를 가지고 있는 데이터베이스에서 아이템 항목의 발생횟수를 계수(Counting)한 뒤, 헤더 테이블이라는 자료구조에 저장하여 트리를 만든다.

FP-Growth 알고리즘에서 FP-Tree를 만드는 과정은 아래 예시도와 같다.

[그림] FP-Growth 알고리즘에서 생성되는 FP-Tree 구성과정도

이후 최소 지지도 임계값을 만족시키는 항목은 그대로 두고, 만족하지 못하는 아이템 항목들은 버린다(이를 가지치기 pruning이라고도 함). 이후 항목들은 내림차 순으로 정렬된다.

이렇게 줄여진 데이터세트를 가지고 가장 긴 트리 가지가 있는 곳에서부터 사용자가 세팅해서 주어진 값인 최소 지지도 임계치 값을 활용하여 조건에 부합하는 모든 아이템 항목들을 탐색한다.

최소 지지도 임계값을 만족하는 단독 아이템이 없으면, FP-Tree는 확장을 멈춘다.

FP-Growth 알고리즘의 실행과정을 다음과 같은 순서로 이해해보자.

FP-Growth는 초기 작업이 Apriori와 동일하다. Tree 구조를 활용했다는 점만 다르다. 알고리즘을 적용하는 순서는 다음과 같다.

Step 1

모든 거래를 확인해 각 아이템마다의 지지도를 계산하고 최소 지지도 이상의 아이템만 선택한다.

Step 2

모든 거래에서 빈도가 높은 아이템 순서대로 순서를 정렬(여기서 부터 달라짐)한다.

Step 3

부모 노드를 중심으로 거래를 자식 노드로 추가해주면서 tree를 생성한다.

Step 4

새로운 아이템이 나올 경우에는 부모 노드부터 시작하고, 그렇지 않으면 기존의 노드에서 확장한다.

Step 5

위의 과정을 모든 거래에 대해 반복하여 FP-Tree를 만들고 최소 지지도 이상의 패턴만을 추출한다.

FP-Growth 알고리즘은 FP-Tree 자료구조를 채택함으로써 전체 데이터 집합을 단 2회만 검색하게 된다.

여기서 2회의 검색은 다음과 같이 발생한다.

2회의 검색은 1번째 검색시 모든 아이템 항목들의 발생빈도를 계산후 FP-Tree에 저장한다.

2번째 검색시 사용자가 미리 설정해준 최소 지지도 값에 의한 조건을 이용하여 빈발 아이템들만 조회한다.

이는 Apriori 알고리즘에 비해서 매우 빠른 속도를 보장해준다.

5. 연관 분석의 한계와 이번 장의 정리

다음은 연관 분석 알고리즘의 한계에 대해서 알아보자.

첫번째는 최소 지지도(support) 값에 대한 주관적 설정의 문제이다.

이번 강좌에서는 최소 지지도에 대한 개념이 자주 등장했다. 최소 지지도는 아이템이 많아지게 되면서 데이터 분석가인 사용자(독자 여러분)가 직접 지정하는 값이었다. 아이템 셋을 얼마나 뽑아낼지, 얼마나 상관관계가 괜찮은지에 따라 지지도 값을 설정해주어야 한다.

그러나, 최소 지지도를 선정하는 정답은 존재하지 않는다. 계산 공식이 존재하지 않으며 여러 지표들을 조합해서 분석하면서 최적의 값(즉, 최소 지지도 값의 설정)의 설정을 시도한다.

실제 추천 서비스에서는 최소 지지도 값이 매번 바뀌므로 계산하는 공식이 필요한데, 사실상 만들기는 불가해서 자동화된 방식으로 적용하기가 어렵다.

그럼에도 불구하고 구매행위에 대해 많은 패턴 정보들을 보여주는 장점이 있기 때문에 장바구니 데이터 분석용 EDA(Explorative Data Analysis: 탐색적 데이터 분석)에서 많이 활용하고 있다.

두번째는 인과를 파악하기 어렵다는 문제이다.

연관 규칙 분석에서 연관성은 쉽게 파악할 수 있는데(예: 상품 A를 사면서 B를 사더라(연관구매)) 원인과 결과에 대한 정보를 명확하게 추출하기는 어렵다.

이렇게 원인과 결과를 확실하게 분석하고 싶다는 욕구에 의해서 Casual Inference라는 연구분야가 도출되었다. 인과 추론에 관심있는 분들은 Casual Inference 키워드로 공부해보자.

세번째는 너무 세분화한 품목을 갖고 연관규칙을 찾으면 의미 없는 분석이 될 수도 있다. 이 경우에, 적절한 구분되는 큰 범주로 구분해 전체 분석에 포함시킨 후 그 결과 중에서 세부적으로 연관규칙을 찾는 작업을 수행할 수 있다.

네번째는 거래량이 적은 품목은 당연히 포함된 거래수가 적을 것이고 규칙 발견 시 제외하기가 쉽다. 이 경우에, 해당 상품의 품목이 관련성을 살펴보고자 하는 중요한 품목이라면 유사한 품목들과 함께 범주로 구성하는 방법 등을 통해 연관성 규칙의 과정에 포함시킬 수 있다 [참고문헌 4].

이런 한계들 때문에 협력 필터링(Collaborative Filtering) 계열 알고리즘이 부상하기 시작했고, 목적에 따라 사용자 기반(user based) 추천, 품목 기반(item based) 추천 기법들이 개발되었다.

또한, CF의 한계와 더 좋은 성능을 위해서 딥러닝을 활용하고 있으며, 최근에는 개인화 추천까지 발전해오고 있다.

FP-Growth 알고리즘의 수행절차를 애니메이션으로 보고 싶다면 아래의 링크를 클릭하자.

https://towardsdatascience.com/understand-and-build-fp-growth-algorithm-in-python-d8b989bab342

이번 강좌를 정리하자.

연관규칙 분석을 위한 2개의 알고리즘이 소개되었다(아래 표 참조).

[표] 세대별 연관 규칙 분석 알고리즘과 그 특징

아래 그림은 알고리즘의 사용자인 데이터 분석가가 자신이 원하는 최소지지도 값을 입력한 뒤 수행되는 두가지 알고리즘의 계산량 절감 전략을 도식화한 것이다.

[그림] 연관 규칙 분석의 두가지 알고리즘의 특징도

다음 표는 이번 강좌에서 학습한 2개의 알고리즘의 특성을 표로 정리하한 것이다.

[표] Apriori와 FP-Growth 알고리즘의 특성비교표

6. 오렌지3 실습

아래 그림은 이번 강좌에서 실습할 화면 구성도이다.

[그림] 연관분석 실습 화면 구성도

이번 시간에서 사용할 데이터는 아래 그림과 같다.

[그림] shopping_analysis.csv 파일의 내용

외와 같이 구성한 뒤 아래의 화면과 같이 Frequent Itemset 위젯을 누르자.

[그림] Frequent Itemset (빈발 항목 집합) 생성 위젯 화면

[그림] Find Itemset을 클릭후 산출된 결과 화면

위의 그림은 Find Itemset을 클릭후 산출된 결과 화면이다. 여기서 Minimal Support 값을 0.0001% 즉 최소값으로 설정하였고, Max number of itemsets 값은 기본값 10000을 설정하였다.

Fileter Itemsets는 빈칸으로 두었다. 이 값은 오른쪽에 생성되는 목록들이 너무 많아서 시간이 많이 생성시, 특정 항목의 목록들만 생성하기 위해서 제공되는 유틸리티 모듈이다.

Contains 값에 <우>를 입력하고 Find Itemsets를 클릭하면 아래의 화면이 생성된다.

[그림] Filter Itemsets의 <우>라는 단어를 입력하여 산출된 결과 화면

위의 그림에서 산출된 값은 이런 의미이다. 위에서 2줄만 해석해보자.

먼저, 첫번째 줄은 우유=1에 support 값 4 그리고 % 80이다.

이 값은 5번의 고객 트랜잭션에서 우유라는 상품을 1개를 샀을 때 발생하는 지지도 값(support 값)과 그때의 빈도수(%)를 나타낸다. 아래의 그림을 보자.

[그림] shopping_analysis.csv에서 상품 <우유>를 1개씩만 구매한 고객 행위 분석도

다음으로 두번째 줄은 우유=1, 기저귀=1, support 3, 60%이다.

이 값은 아래 그림에서 우유과 기저귀 상품이 동시에 1개씩 구매한 고객 행위의 기록을 보면 된다. 5개의 트랜젹션 중에서 3,4,5에서 구매가 발생했음을 알수 있다. 이 값들에 대한 support와 빈도를 계산해보면 3과 60%가 산출된다.

[그림] 2번째 줄의 해석을 위한 고객 행위 분석도

이제 FP-Growth 화면을 보자.

Association Rules 위젯을 실행하면 다음 그림과 같다.

[그림] Association Rules 위젯의 실행 결과

FP-Growth 알고리즘이 산출하는 규칙들의 목록을 볼 수 있다.

첫번째 줄만 해석해 보면, 규칙 {맥주=1 → 기저귀 =1}이 생성되었다. 이 말은 맥주 1개를 산 사람이 기저귀 1개를 살 확률이 support 값 만큼 즉 60%이라는 말이다.

왼쪽의 항목들을 보면 여러가지 척도 값들이 나왔음을 알 수 있다.

해당 척도들은 주어진 규칙이 얼마나 좋은지를 나타내는 값이다.

향상도(lift) 값이 1이면 서로 독립적인 관계이며 1보다 크면 두 품목이 서로 양의 상관관계, 1보다 작으면 두 품목이 서로 음의 상관관계이다. A와 B가 독립이면 분모, 분자가 같기 때문에 1이 나온다. 여기서는 1.25이므로 양의 상관관계를 가진다고 할 수 있다.

지지도(support)는 규칙에 대한 유용성을 나타내는 지표로 볼 수 있다. 여기서는 지지도가 60%인데 이 말은 분석대상인 전체 트랜젝션에서 해당 아이템을 구매한 비율이 60%임을 의미한다.

신뢰도(confidence)는 규칙에 대한 확실성을 나타내는 지표로 볼 수 있다. 여기서는 100%인데, 이 말은규칙, <맥주를 구매한 사람이 기저귀를 구매한다>에 대해서 맥주를 구매한 고객 중에서 기저귀를 구매한 비율이 100%을 의미한다.

그 외에, 영향력(leverage)값과 확신 값(conviction) 등의 수치가 나와 있다.

영향력(leverage)값은 상품 A와 상품 B가 서로 독립이라고 기대할 때의 빈도수와 관측된 빈도수 X와 Y가 서로 함께 나타나는 값 간의 차이를 계산한 값이다.

Leverage(X→Y) = support(X→Y) – support(X)*support(Y)

이 값은 -1에서 1까지의 구간 값을 결과값으로 취하며, 이 값이 0보다 클 때는 해당 규칙들은 우리가 필요로 하는 규칙이다. 이 값이 0보다 작을 때는 X, Y가 음의 상관관계를 가진다고 판단한다. 이 값이 0이라는 것은 X와 Y가 서로 독립임을 의미한다.

확신 값(conviction)은 X가 Y없이 발생할 때의 기대 빈도 값의 비율로 해석된다.

확신 값이 높으면 연관규칙의 사전 사건(consequent)은 결과 사건(antecedent)에 강하게 의존적이다. 만일 상품간의 연관 구매가 독립적으로 일어난 사건이면, 확신 값은 1이 된다.

[그림] 사전 사건(antecedent)과 결과 사건(consequent)의 표기 및 해석도

두번째 실습 예제는 아래의 그림과 같다.

실습 방식은 실습 1과 동일하며, 차이점은 파일의 크기가 커서, Filter를 통해서 관심있는 상품에 대한 연관규칙들만 추출할 수 있는 것을 실습하는데 그 목적이 있다.

먼저 입력 데이터인 association_rule_market_basket.csv 파일을 로드하자.

[그림] 입력 데이터의 내용(엑셀에서 가시화)

다음 그림은 Fliter를 이용해서 관심있는 상품(potato)에 대한 연관규칙만 추출한 결과를 가시화한 것이다.

[그림] Fliter를 이용해서 관심있는 상품(potato)에 대한 연관규칙만 추출한 결과

7. 파일 다운받기

8. 참고문헌

[1]

Rakesh Agrawal, Tomasz Imielinski, Arun N. Swami: Mining Association Rules between Sets of Items in Large Databases. SIGMOD Conference 1993: 207-216

[2]

Agrawal, R., & Srikant, R. (1994, September). Fast algorithms for mining association rules. In Proc. 20th int. conf. very large data bases, VLDB (Vol. 1215, pp. 487-499).

[3]

Han, J., Pei, J., & Yin, Y. (2000). Mining frequent patterns without candidate generation. ACM sigmod record, 29(2), 1-12.

[4]

https://blog.naver.com/PostView.naver?blogId=diana_seoul&logNo=222067115578&categoryNo=16&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=search

[5] conviction, levereage 척도 설명

필자 소개

이재호는 현재 스마투스 디지털 경제연구원의 연구위원이다. 산업공학전공으로 동국대학교에서 공학박사를 학위를 취득하였고, ㈜유플러스네트웍스의 연구소장과 동국대학교 산업AI연구센터의 연구초빙교수를 역임하였다. 주연구분야는 AI, 디지털 트랜스포메이션, ICT 서비스 연구 및 분석 등 이다. 현재 연구관심사는 AI에 관심을 둔 독자/시민들을 위한 머신러닝 강좌/서비스 개발, 디지털 전환 기업을 위한 연구 /컨설팅이다.

8. 연관 규칙 분석(Association Rule Analysis) with Python

이번 포스팅에서는 데이터 간의 관계를 탐색하기 위한 방법으로 마케팅 분야에서 많이 활용되고 있는 연관 규칙 분석(마케팅에서는 장바구니 분석이라고도 한다) 대해서 알아보고자 한다.

여기서 다루는 내용은 다음과 같다.

1. 연관 규칙 분석이란 무엇인가?

2. 연관 규칙 분석 방법

3. 고려 사항

4. 예제 with Python

1. 연관 규칙 분석이란 무엇인가?

– 정의 –

연관 규칙 분석(Association Rule Analysis : ARA)은 항목(item)들 관계를 If-Then 형식으로 찾아나가는 분석 방법을 말하며 일종의 규칙 기반 학습(Rule-Based Learning) 방법이다. 특히 마케팅에서는 고객들의 상품 구매 데이터를 이용하여 품목 간의 연관성을 알아본다는 의미에서 장바구니 분석(Market Basket Analysis)이라고도 한다.

– 왜 필요한가? –

연관 규칙 분석은 대용량 데이터베이스에서 기존에는 발견할 수 없었던 항목(item) 간 흥미로운 관계를 탐색할 수 있다는 장점이 있다. 아래 그림은 대형 마켓에서 고객들의 상품 구매 정보를 바탕으로 연관 규칙 분석을 수행하고 이를 활용하는 과정을 나타낸 것이다.

연관 규칙 분석을 이용하면 특정 상품을 구입한 고객이 어떤 상품을 추가로 구매하는지 알아낼 수 있다(삼겹살과 채소). 이를 통하여 효율적인 상품 진열은 무엇인지, 어떤 상품을 묶음으로 하면 좋을지를 알 수 있고 이를 통해 마케팅 전략을 수립할 수 있다.

– 응용 분야 –

위에서 소개한 마켓에서의 연관 규칙 분석을 사용하는 것외에도 호텔에서 고객들이 이용하는 서비스의 관계를 이용하여 특정 서비스를 받은 고객이 어떤 서비스를 원하는지 미리 파악하고자 할 때 연관 규칙 분석을 사용할 수 있다. 또한 웹사이트에서 고객들이 사용하는 웹 페이지간 연관관계를 이용하여 특정 웹페이지를 추천해주고 싶은 경우에도 연관 규칙 분석을 사용할 수 있다.

반응형

2. 연관 규칙 분석 방법

2.1 연관 규칙 분석 측도

먼저 어느 대형 마트의 거래 내역이 다음과 같이 주어졌다고 해보자.

고객 번호 품목 1 삼겹살, 상추 2 삼겹살, 상추, 사이다 3 삼겹살, 깻잎 4 닭고기, 샤워 타올 5 닭고기, 콜라, 사이다

이제 이 거래 내역을 이용하여 아래와 같이 구매 행렬을 만들어보자.

삼겹살 상추 사이다 깻잎 닭고기 샤워 타올 콜라 삼겹살 3 2 1 1 0 0 0 상추 2 2 1 0 0 0 0 사이다 1 1 2 0 1 0 1 깻잎 1 0 0 1 0 0 0 닭고기 1 0 1 0 2 1 1 샤워 타올 0 0 0 0 1 1 0 콜라 0 0 1 0 1 0 1

위에서 만든 구매 행렬을 보면 삼겹살과 상추를 동시에 구매한 건수가 2이므로 “삼겹살을 구입하는 고객은 상추도 구입한다”라는 연관 규칙을 얻을 수 있다. 하지만 모든 연관 규칙이 유용하진 않을 것이다. 이에 따라 어떤 규칙이 유용한지를 정량적으로 측정하는 측도(지표)가 필요하다. 연관 규칙이 유용한지 알아보기 위한 여러 가지 측도를 알아보자.

1) 신뢰도(Confidence) – X를 포함하는 거래 내역 중, Y가 포함된 비율이 높아야 한다.

여기서는 비율을 확률로 표시하겠다. 이것은 “X 이면 Y이다.”라고 말하려면 $P(Y | X) = P(X \cap Y)/P(X)$ 값이 높아야함을 의미한다. 다시 말해 $P(Y | X)$이 높아야 “X 이면 Y이다.”라는 규칙을 신뢰할 수 있게 된다. 이러한 의미에서 $P(Y|X)$를 신뢰도라고 한다.

예를들어 “삼겹살을 사는 사람은 상추도 구입한다”라는 규칙의 신뢰도를 계산하면

$$P(\text{상추} | \text{삼겹살}) = \frac{2}{5}/\frac{3}{5} = \frac{2}{3}$$

이다.

이번엔 “삼겹살을 사는 사람은 사이다도 구입한다”라는 규칙의 신뢰도를 계산하면

$$P(\text{사이다}|\text{삼겹살}) = \frac{1}{5}/\frac{3}{5} = \frac{1}{3}$$

이다. 따라서 신뢰도가 더 높은 “삼겹살을 사는 사람은 상추도 구입한다”는 규칙이 “삼겹살을 사는 사람은 사이다도 구입한다”라는 규칙보다 더 신뢰하겠다는 것이다. 어찌 보면 당연하다.

2) 지지도(Support) – X와 Y를 동시에 포함하는 비율이 높아야 한다.

“상추를 구입하는 사람은 사이다도 구입한다”라는 규칙의 신뢰도를 계산해보자.

$$P(\text{사이다}|\text{상추}) = \frac{1}{5}/\frac{2}{5}=\frac{1}{2}$$

즉, “상추를 구입하는 사람은 사이다도 구입한다”라는 규칙이 “삼겹살을 사는 사람은 상추도 구입한다”는 규칙보다 더 신뢰한다는 말이 된다. 하지만 사이다와 상추를 동시에 포함하는 거래 건수는 5개 중 1개뿐이다. 따라서 “상추를 구입하는 사람은 사이다도 구입한다”한다는 규칙은 아직 지지받기에는 발생 횟수가 충분하지 않다. 즉, “X이면 Y이다.”라는 규칙이 지지받기 위해서는 실제로 $X, Y$를 동시에 포함하는 비율 $P(X \cap Y)$이 높아야 된다는 것이다. 이러한 의미에서 $P(X \cap Y)$를 지지도라고 한다.

예를 들어 “삼겹살을 사는 사람은 상추도 구입한다”라는 규칙의 지지도는 다음과 같다.

$$P(\text{삼겹살}, \text{상추}) = \frac{2}{5} $$

따라서 “삼겹살을 사는 사람은 상추도 구입한다”라는 규칙의 지지도가 “상추를 구입하는 사람은 사이다도 구입한다”라는 규칙의 지지도보다 높다.

3) 향상도(Lift) – 지지도와 신뢰도만으로 충분한가?

만약 $X \Rightarrow Y$라는 규칙이 있다고 하자. 그렇다면 실제로 $X$는 $Y$라는 사건을 설명하기에 의미 있는 사건 또는 변수라고 할 수 있을까? 아닐 것이다. 예를 들어 신뢰도를 계산했더니 $P(Y|X)=0.9$가 나왔다. 0.9 정도면 높다고 생각하여 $X \Rightarrow Y$라는 규칙이 의미 있다고 생각할 것이다. 하지만 $Y$가 발생한 비율이 $p(Y)=0.9$였다고 생각해보자. 그렇다면 $P(Y | X) = P(Y)$가 된다. 즉, $X$와 $Y$는 독립이 되어 $X$는 $Y$를 설명하는데 아무런 도움을 주지 못한다. 따라서 주어진 규칙이 진짜로 의미가 있는지 알아보기 위하여 $P(Y|X)/P(Y)$를 계산하게 되는데 향상도(Lift)라 한다.

향상도의 값이 1이면 $X$와 $Y$는 아무런 관계가 없게 된다. 만약 1보다 크다면 $X$가 $Y$의 발생할 확률을 $X$를 고려하지 않을 경우보다 증가시킨다는 뜻이며 이는 $X$가 $Y$의 발생을 예측하는데 좋다고 할 수 있다. 반대로 1 보다 작으면 $X$가 $Y$의 발생 확률을 $X$를 고려하지 않았을 경우보다 감소시킨다는 뜻이 된다. 이는 $X$가 $Y$의 발생 감소를 예측하는데 좋다고 할 수 있으며 $X$와 $Y$가 일종의 음의 상관관계를 나타낸다고 할 수 있다.

“삼겹살을 사는 사람은 상추도 구입한다”라는 규칙의 향상도를 구해보자.

$$ P(\text{상추}|\text{삼겹살})/P(\text{상추}) = \frac{2}{3}/\frac{2}{5} = \frac{5}{3}$$

4) 레버리지(Leverage) – 향상도(Lift)는 비율을 이용한다면 레버리지(Leverage)는 차이를 이용한다!

향상도는 $X$ 와 $Y$의 독립 여부를 판단하기 위하여 $P(Y|X) / P(Y)$를 이용했다면 레버리지는 $P(X\cap Y)- P(X)P(Y)$를 계산한다. 따라서 레버리지가 0에 가깝다면 $X$와 $Y$는 독립, 즉 $X$와 $Y$는 상호 연관성이 없다고 할 수 있으며 레버리지가 양수라면 향상도가 1보다 큰 경우와 같으며 레버리지가 음수이면 향상도가 1보다 작은 경우와 같다.

“삼겹살을 사는 사람은 상추도 구입한다”라는 규칙의 레버리지를 구해보자.

$$P(\text{삼겹살}, \text{상추}) – P(\text{삼겹살})P(\text{상추}) = \frac{2}{5}-\frac{3}{5}\frac{2}{5} = \frac{4}{25} $$

결국 향상도와 레버리지는 같은 역할을 하는데 굳이 레버리지라는 측도를 도입한 이유는 무엇일까? 곰곰이 생각해보았다. 아마도 향상도는 비율이기 때문에 계산의 불안정성(분모가 0에 가까운 아주 작은 수일 때)이 있기 때문에 계산상으로 안정적인 레버리지를 고려하는 것이라 생각했다. 물론 레버리지가 아주 작다고(0.01-0.005=0.005)해도 향상도(0.01/0.005=2)는 비율이기 때문에 커질 수 있다. 다시 말하면 레버리지가 작아서 $X$, $Y$의 관계를 제대로 알 수 없었지만 향상도를 이용하면 그 관계를 좀 더 분명하게 알아낼 수다는 장점이 있어서 향상도 또한 중요하다.

5) Conviction – 어떤 일이 생길 것에 관심을 갖는 것처럼 어떤 일이 생기지 않는 것에도 관심을 가져보자!

규칙 $X\Rightarrow Y$의 Conviction은 $P(Y^c)/P(Y^c|X)$로 정의한다. Conviction 값이 1이면 $X, Y$는 상호 연관성이 없는 즉, 독립을 의미한다. Conviction이 1보다 크다면 $X$가 주어졌을 경우 $Y$가 발생하지 않는 경우가 $X$를 고려하지 않았을 경우보다 줄어들었다는 것을 의미한다. 반대로 말하면 $X$가 $Y$의 발생 여부를 예측하는데 유용한 품목이 되는 것이다. 비슷한 논리로 Conviction이 1보다 작으면 $X$는 $Y$의 발생 여부를 예측하는데 유용하지 않은 품목이 되는 것이다.

“삼겹살을 사는 사람은 상추도 구입한다”라는 규칙의 Conviction을 구해보자.

$$ P(\text{상추}^c)/P(\text{상추}^c|\text{삼겹살}) = P(\text{상추}^c)/[1-P(\text{상추}|\text{삼겹살})] =\frac{3}{5}/(1-\frac{2}{3}) = \frac{9}{5}$$

6) All-Confidence – 높은 지지도를 갖는 규칙을 고려하자~!!

All-Confidence는 Omiecinski의 2003년 논문 “Alternative Interest Measures for Mining Associations in Databases”에서 소개한 측도이며 품목 집합(item set) $(X, Y)$의 All-Confidence는 다음과 같이 정의한다.

$$\text{All-Confidence}(X, Y) = P(X \cap Y)/\max [P(X), P(Y)]$$

All-Confidence는 $X$와 $Y$의 지지도 중 높은 것을 선택하여 만들어진 규칙을 고려하겠다는 것이다.

또한 특정 품목 집합의 All-Confidence이 특정 값 $c$보다 크다면 그 집합의 부분 집합으로 이루어진 All-Confidence 또한 $c$보다 크다는 성질인 Downward Closure Property(DCP)를 만족한다. DCP는 의미 있는 규칙을 뽑아낼 때 필요한 품목 조합 연산을 크게 줄여줄 수 있다.

품목 집합 ‘삼겹살, 상추’의 All-Confidence를 구해보자.

$$\begin{align} \text{All-Confidence}(\text{삼겹살}, \text{상추}) &= P(\text{삼겹살}, \text{상추})/\max [P(\text{삼겹살}), P(\text{상추})] \\ &= P(\text{삼겹살}, \text{상추})/P(\text{삼겹살}) \\ &= \frac{2}{5}/\frac{3}{5} \\ &= \frac{2}{3} \end{align}$$

따라서 “상추$\Rightarrow$삼겹살”과 “삼겹살$\Rightarrow$상추” 중에서 “삼겹살 $\Rightarrow$상추”를 고려한다.

7) Collective Strength – 지지도와 신뢰도를 믿을 수 없다! 새로운 측도가 필요하다~!!

Aggarwal는 1998년 논문 “Mining Associations with the Collective Strength Approach”에서 지지도와 신뢰도를 잘못 설정할 경우 “$X \Rightarrow Y$”와 “$X \Rightarrow

eg Y$”를 동시에 뽑아내는 모순적인 결과를 얻을 수 있다는 점을 지적하면서 Collective Strength라는 개념을 도입했다. 품목 집합 $X, Y$의 Collective Strength $CS(X,Y)$는 다음과 같이 정의한다.

$$CS(X, Y) = \frac{1-V(X,Y)}{1-E(V(X, Y))}\frac{E(V(X,Y))}{1-V(X,Y)}$$

여기서 $V(X, Y) = P(X\cap Y^c)+P(X^c \cap Y)$이고 $E(V(X, Y))$는 $V(X, Y)$의 기대값을 $X$와 $Y$의 독립을 가정하여 얻은 값으로 다음과 같다.

$$E(V(X,Y)) = 1-P(X)P(Y)-[1-P(X)][1-P(Y)]$$

참고로 $V(X,Y)$를 Violation이라 한다.

C(X, Y)는 0부터 무한대의 값을 가질 수 있으며 1인 경우 $X, Y$는 독립이라고 가정한다. 만약 1보다 작은 경우 어느 한 품목의 발생이 다른 품목의 발생 가능성을 낮추는 일종의 음의 상관관계가 존재한다고 해석할 수 있으며 0인 경우 완벽한 음의 상관관계가 존재한다고 볼 수 있다. 만약 1보다 큰 경우 어느 한 품목의 발생이 다른 품목의 발생 가능성을 높이는 양의 상관관계가 존재하며 무한대인 경우 완벽한 양의 상관관계가 존재한다고 해석할 수 있다.

품목 집합 ‘삼겹살, 상추’의 Collective Strength를 구해보자.

$$V(\text{삼겹살}, \text{상추}) = \frac{1}{5}+0 = \frac{1}{5} \\ E(V(\text{삼겹살}, \text{상추})) = 1-\frac{3}{5}\cdot\frac{2}{5}-\frac{2}{5}\cdot\frac{3}{5} = \frac{13}{25}$$

따라서

$$CS(\text{삼겹살}, \text{상추}) = \frac{1-\frac{1}{5}}{1-\frac{13}{25}}\frac{\frac{13}{25}}{\frac{1}{5}} = \frac{13}{3}$$

‘삼겹살, 상추’의 Collective Strength가 1보다 크므로 삼겹살과 상추는 양의 상관관계를 갖는 연관 규칙이라 할 수 있다.

8) Cosine Similarity – 나도 끼워줘!!

품목 집합 $X, Y$의 Cosine Similarity는 다음과 같이 정의한다.

$$\cos (X,Y) = \frac{P(X, Y)}{\sqrt{P(X)\sqrt{P(Y)}}}$$

Cosine Similarity는 0부터 1의 값을 가지며 0인 경우는 완벽한 음의 상관관계, 1인 경우는 완벽한 양의 상관관계를 의미한다.

‘삼겹살, 상추’의 Collective Strength를 구해보자.

$$\begin{align}\cos (\text{삼겹살}, \text{상추}) &= P(\text{삼겹살}, \text{상추})/\left [\sqrt{P(\text{삼겹살})}\sqrt{P(\text{상추})}\right ] \\ &= \frac{2}{5}/\left [\sqrt{\frac{3}{5}}\sqrt{\frac{2}{5}} \right ] = 0.82 \end{align}$$

2.2 연관 규칙 분석 절차

품목이 많아질수록 예를 들어 $p$개이면 고려해야 할 품목 집합수는 $2^p-2$(공집합과 전체집합 제외)이므로 $p$가 커진다면 모든 품목 집합을 고려하는 것은 현실적으로 불가능하다. 이번 포스팅에서는 최소 지지도, 최소 신뢰도를 갖는 연관 규칙을 찾는 대표적인 방법으로 Apriori 알고리즘을 소개한다. 내용

Apriori 알고리즘은 2단계로 이루어진다.

1. 빈발 품목 집합(Frequent Item Set) 생성

2. 연관 규칙 생성

2.2.1 빈발 품목 집합(Frequent Item Set) 생성

빈발 품목 집합(Freqeunt Item Set)은 각 품목별로 발생 횟수(비율)가 특정 값 이상인 품목을 모아놓은 집합을 말한다. Apriori 알고리즘은 다음과 같이 빈발 품목 집합을 찾는다.

1) 최소 지지도(최소 발생 비율)를 설정한다.

$p = 1, 2, 3, \cdots$에 대하여

2) $p$개의 품목을 갖는 품목 집합 중에서 최소 지지도를 넘는 품목을 찾는다.

3) 위에서 찾은 품목 중에서 최소 지지도를 넘는 $p+1$개 품목 집합을 찾는다.

위 과정을 반복하면 최소 지지도가 넘는 빈발 품목 집합을 찾을 수 있다. 1)에서 최소 지지도를 설정해야 하는데 설정하는 절대적인 방법은 없으며 순전히 분석자의 몫이다.

2.2.2 연관 규칙 생성

빈발 품목 집합의 공집합을 제외한 모든 부분집합을 고려하고 이 중에서 최소 신뢰도를 넘는 연관 규칙을 찾는다.

3. 고려 사항

– 유용한 연관 규칙 선별 –

연관 규칙 분석으로부터 찾은 모든 연관 규칙(또는 연관성)이 유용하지는 않을 것이다. 왜냐하면 이러한 규칙들은 유용한 규칙, 너무 뻔한 규칙, 연관성을 찾기 힘든 규칙이 있기 때문이다. 예를 들어 “토요일에 대형 마켓을 찾는 남성은 아기 기저귀와 함께 맥주를 같이 사는 경향이 있다”는 규칙(정보)는 마케팅 전략에 직접적으로 사용될 수 있기 때문에 유용한 정보라 할 수 있다. 반면, “아이폰을 사는 고객은 아이폰을 사는 경향이 있다.”는 정보는 어찌 보면 뻔한 것이기 때문에 가치있는 규칙이라 할 수 없다. 마지막으로 “식료품을 파는 곳에서 선풍기가 많이 팔린다.”는 규칙은 연관성을 찾기 힘들 것이다. 연관 규칙 분석을 통하여 얻어진 규칙들 중에서 어떤 규칙이 유용한지는 분석자의 판단에 달려있다.

-적절한 품목 선택-

어떤 품목을 선택하는가는 분석 목적에 달려있다. 품목을 소주, 맥주, 막걸리 등으로 세분화할 수도 있으며 소주, 맥주, 막걸리를 하나의 상위 개념인 술로 묶을 수도 있을 것이다. 일반적으로 상위 개념을 품목으로 정하여 연관 규칙을 찾은 후, 이를 세분화하여 추가적으로 연관 규칙 분석을 수행한다. 예를 들어 술과 양식이라는 상위 카테고리로 규칙을 찾았다면 술을 맥주, 소주, 막걸리 등으로 세분화하고 양식도 피자, 햄버거, 치킨 등으로 세분화한 뒤 연관 규칙 분석을 수행하는 것이 일반적이다.

-연관 규칙 발굴-

연관 규칙을 선택할 때 어떻게 표현되어있는지도 중요하다. 예를들어 “목요일에 기저귀를 사는 사람은 맥주도 산다”라는 규칙이 “목요일에 방문하는 고객은 기저귀와 맥주를 산다”에 비해 조건은 보다 구체적이고 결과는 더 단순하므로 해석이 쉽고 의미 있는 규칙이 될 수 있다. 즉, 가정은 구체적이고 결과는 단순한 것이 좋을 수 있다. 또한 향상도가 1보다 작은 경우는 결과를 부정하여 새롭게 만들어낸 규칙이 의미가 있을 수도 있다. 예를 들어 “아이스크림을 사는 사람은 40대 이상이다”라는 규칙의 향상도가 1보다 작다면 “아이스크림을 사는 사람은 40대 미만이다”라는 규칙을 점검해보자는 뜻이다.

-계산 문제-

품목의 수가 증가하면 계산량은 엄청나게(exponential 하게) 증가하며 연관 규칙을 찾아내는데 엄청난 시간이 소요된다. 이러한 문제점 때문에 최소 지지도보다 작은 규칙들은 선택하지 않는 가지치기(minimum support pruning)를 적용한다.

반응형

4. 예제 with Python

먼저 데이터를 다운 받아준다.

store_data.csv 0.29MB store_data_description.txt 0.00MB

필요한 모듈을 임포트하고 데이터를 불러온다.

import matplotlib.pyplot as plt import matplotlib.colors as mcl import pandas as pd import numpy as np from matplotlib.colors import LinearSegmentedColormap from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori, association_rules

store_df = pd.read_csv(‘../dataset/store_data.csv’, header=None)

Python에서는 mlxtend 라이브러리를 이용하여 연관 규칙 분석을 수행할 수 있다. 먼저 빈발 품목 집합을 구해보자. 우선 각 행에 대해서 품목을 리스트로 만들어주고 이를 다시 리스트로 모아줘야 한다. 즉, 리스트의 리스트를 만들어줘야 한다.

records = [] for i in range(len(store_df)): records.append([str(store_df.values[i,j]) \ for j in range(len(store_df.columns)) if not pd.isna(store_df.values[i,j])])

다음으로 mlxtend를 사용하기 위한 데이터프레임을 만들어준다. 이 데이터프레임은 각 행별로 품목이 포함되어 있으면 1 아니면 0으로 되어있다.

te = TransactionEncoder() te_ary = te.fit(records).transform(records, sparse=True) te_df = pd.DataFrame.sparse.from_spmatrix(te_ary, columns=te.columns_)

이제 빈발 품목 집합을 만들어보자. 최소 지지도는 0.005, 품목 집합 최대 개수는 3개로 설정했다. use_columns를 True로 설정하면 품목 집합을 칼럼 이름으로 지정한다. 그리고 진행 상황을 보기 위해 verbose=1로 지정했다(하지만 프로그레스 바는 나오지 않는다). 그리고 length라는 칼럼을 만들어 품목 집합 개수를 나타냈고 지지도를 기준으로 내림차순 하였다.

frequent_itemset = apriori(te_df, min_support=0.005, max_len=3, use_colnames=True, verbose=1 ) frequent_itemset[‘length’] = frequent_itemset[‘itemsets’].map(lambda x: len(x)) frequent_itemset.sort_values(‘support’,ascending=False,inplace=True)

다음 코드는 연관 규칙을 뽑아내는 코드이다. 신뢰도가 0.005 이상인 연관 규칙만 뽑아낸다. 또한 앞에서 소개한 여러 가지 측도를 계산하여 칼럼으로 추가하였다.

association_rules_df = association_rules(frequent_itemset, metric=’confidence’, min_threshold=0.005, ) all_confidences = [] collective_strengths = [] cosine_similarities = [] for _,row in association_rules_df.iterrows(): all_confidence_if = list(row[‘antecedents’])[0] all_confidence_then = list(row[‘consequents’])[0] if row[‘antecedent support’] <= row['consequent support']: all_confidence_if = list(row['consequents'])[0] all_confidence_then = list(row['antecedents'])[0] all_confidence = {all_confidence_if+' => ‘+all_confidence_then : \ row[‘support’]/max(row[‘antecedent support’], row[‘consequent support’])} all_confidences.append(all_confidence) violation = row[‘antecedent support’] + row[‘consequent support’] – 2*row[‘support’] ex_violation = 1-row[‘antecedent support’]*row[‘consequent support’] – \ (1-row[‘antecedent support’])*(1-row[‘consequent support’]) collective_strength = (1-violation)/(1-ex_violation)*(ex_violation/violation) collective_strengths.append(collective_strength) cosine_similarity = row[‘support’]/np.sqrt(row[‘antecedent support’]*row[‘consequent support’]) cosine_similarities.append(cosine_similarity) association_rules_df[‘all-confidence’] = all_confidences association_rules_df[‘collective strength’] = collective_strengths association_rules_df[‘cosine similarity’] = cosine_similarities

결과를 5행만 출력해보자.

max_i = 4 for i, row in association_rules_df.iterrows(): print(“Rule: ” + list(row[‘antecedents’])[0] + ” => ” + list(row[‘consequents’])[0]) print(“Support: ” + str(round(row[‘support’],2))) print(“Confidence: ” + str(round(row[‘confidence’],2))) print(“Lift: ” + str(round(row[‘lift’],2))) print(“=====================================”) if i==max_i: break

첫 행을 보면 ‘mineral water’를 사는 고객은 ‘spaghetti’를 산다는 규칙은 지지도가 0.06, 신뢰도가 0.25 그리고 향상도는 1.44라는 것을 알 수 있다. 향상도가 1보다 크므로 ‘mineral water’와 ‘spaghetti’는 일종의 양의 상관관계가 있다고 해석할 수 있다.

아래 코드는 연관 규칙 분석 결과를 시각화하는 방법이다. 지지도를 x축으로 신뢰도를 y축으로 하고 컬러 맵은 각 측도를 이용하여 표현하였다.

support = association_rules_df[‘support’] confidence = association_rules_df[‘confidence’] h = 347 s = 1 v = 1 colors = [ mcl.hsv_to_rgb((h/360, 0.2, v)), mcl.hsv_to_rgb((h/360, 0.55, v)), mcl.hsv_to_rgb((h/360, 1, v)) ] cmap = LinearSegmentedColormap.from_list(‘my_cmap’,colors,gamma=2) measures = [‘lift’, ‘leverage’, ‘conviction’, ‘all-confidence’, ‘collective strength’, ‘cosine similarity’] fig = plt.figure(figsize=(15,10)) fig.set_facecolor(‘white’) for i, measure in enumerate(measures): ax = fig.add_subplot(320+i+1) if measure != ‘all-confidence’: scatter = ax.scatter(support,confidence,c=association_rules_df[measure],cmap=cmap) else: scatter = ax.scatter(support,confidence,c=association_rules_df[‘all-confidence’].map(lambda x: [v for k,v in x.items()][0]),cmap=cmap) ax.set_xlabel(‘support’) ax.set_ylabel(‘confidence’) ax.set_title(measure) fig.colorbar(scatter,ax=ax) fig.subplots_adjust(wspace=0.2, hspace=0.5) plt.show()

이제 분석 목적에 맞게 본인이 원하는 연관 규칙을 최종적으로 선택하면 되는데 분석자의 주관 또는 도메인 전문가와 상의하여 고르는 방법 외에는 특별한 방법은 없는 것 같다.

참고자료

Association Rule Mining via Apriori Algorithm in Python – https://stackabuse.com/association-rule-mining-via-apriori-algorithm-in-python/

김용대 외 3명 – R을 이용한 데이터마이닝

Association Pattern Mining – https://cs.nju.edu.cn/zlj/Course/DM_16_Lecture/Lecture_4.pdf

Aggarwal(1998) – Mining Associations with the Collective Strength Approach

Omiecinski(2003) – Alternative Interest Measures for Mining Associations in Databases

연관규칙분석이란? 연관규칙분석 예시 3가지

반응형

연관규칙분석 예시로 배우는 연관 규칙 분석

연관규칙분석이란?

연관규칙분석은 추천 시스템의 기저 알고리즘이다. 우리가 알고 있는 유튜브 알고리즘, 넷플릭스에서 나에게 맞는 콘텐츠 추천도 비슷한 예이다.

그룹을 알고 있을 경우에는 지도 학습을 한다. 군집분석은 순수하게 군집으로 쪼개고 싶을 때 사용하며, 의사결정트리는 어떻게 쪼개져 있는지 알 때 사용한다. youtube 광고에서 의사결정트리는 어떻게 나타날까?

데이터를 분석할 때

1. 어떤 군집인지 모르면 군집을 먼저 나눈다.

2. 군집이 나와있으면 기준이 나와있으니 의사결정나무로 돌린다.

ⓒ이상철 교수님 유튜브

연관규칙분석은 영수증 분석을 많이 한다. 아래 표를 보면 1-10번까지 있고 이 중 같은 물품을 구입한 사람의 확률들을 구한다.

ⓒ 고려대 DSBA 유튜브

동일한 물품을 구한 사람들을 보면 라면과 달걀은 통계적으로 상관없다. 우연으로 구매할 확률과 통계가 같다. 그래서 원인과 결과의 직접적인 인과관계가 아니며, 둘 또는 그 이상 품목들 사이의 상호 관련성의 규칙임을 알 수 있다.

ⓒ 고려대 DSBA 유튜브

연관규칙분석 측정도구

연관규칙분석을 구하는 방법은 지지도(support), 신뢰도(confidence), 향상도(lift)가 있다. 그렇다면 지지도와 신뢰도 향상도는 어떻게 계산하는 것인지 아래에서 확인해보세요.

지지도

지지도는 라면과 콜라를 함께 구매할 확률이다.

ⓒ 고려대 DSBA 유튜브

신뢰도

다음으로 신뢰도는 라면을 구입한 사람이 콜라도 구입할 확률이다. 라면을 포함하는 거래에 라면과 콜라가 같이 포함될 확률로 조건부 확률과 유사합니다. 라면을 구매했을 때 콜라의 확률로 라면의 확률을 라면과 콜라가 동시에 포함될 확률을 나눠 계산한다.

ⓒ 고려대 DSBA 유튜브

향상도

연관규칙분석의 향상도는 많이 팔리는 인기상품을 알아낼 때 사용한다. 여기서 분자는 신뢰도이고, 분모는 콜라의 인기도로 볼 수 있습니다.

라면이 없을 때의 콜라의 확률에 비해 라면이 주어졌을 때 콜라의 증가 비율을 계산하여 예측합니다. 향상도가 1보다 작으면 별로 좋지 못한 추천 결과가 됩니다.

ⓒ 고려대 DSBA 유튜브

Priori 알고리즘

두 개짜리 아이템 후보군을 선정할 때 양파가 들어간 것은 구분하지 않는다.

아이템 3개짜리 조합을 고려할 때는 라면과 참치는 구분하지 않는다.

일정 개수가 되면 연관 있는 것들이 줄어든다.

ⓒ 고려대 DSBA 유튜브

연관규칙분석은 둘 또는 그 이상 품목들 사이의 상호 관련성의 규칙임을 알 수 있다.

ⓒ 고려대 DSBA 유튜브

고려대학교 DBSA 연관규칙분석 강의

ⓒ 고려대 DSBA 유튜브

ⓒ 고려대 DSBA 유튜브

ⓒ 고려대 DSBA 유튜브

ⓒ 고려대 DSBA 유튜브

ⓒ 고려대 DSBA 유튜브

ⓒ 고려대 DSBA 유튜브

연관규칙분석 사례

올리브영 장바구니 분석

연관규칙분석 사례 3가지를 살펴보자. 먼저 올리브영 장바구니 분석이다. 올리브영 음료 매출이 저조하여 음료 매출을 향상시키기 위해 연관규칙분석을 사용하였다.

연관규칙분석 사례

음료 매출을 향상시키기 위해 매출 데이터를 분석하였다. 그 결과 첫째, 여성이 아침시간에 음료 소비가 많다. 둘째, 헬스 초코바 같은 스낵류를 함께 구입한다는 것을 발견하였다.연관규칙분석을 활용한다면 구글 애즈 유튜브 광고는 어떻게 보여질까?

결과에 따른 데이터 활용 방안으로 음료 추가 대신 간단하게 아침대용으로 먹을 스낵류를 추가하였고 그 결과 음료 매출이 향상되었다.

농식품 소비자 패널조사 자료

다음 연관규칙분석 사례는 소비자의 신선식품 구매 패턴 분석이다. 농식품 소비자의 패널 조사이다. 사람들의 소비한 물품을 연령별, 계절별로 구매내역 자료를 나누었다.

연관규칙분석 사례

상황인식 음악 추천 시스템

다음은 연관 규칙을 이용한 상황인식 음악 추천 시스템이다. 데이터 베이스에서 위치와 시간 정보, 음악 정보, 사용자 정보와 같은 상황정보를 수집하고 데이터 마이닝을 하고 그에 따라 추천 모듈을 만든다.

연관규칙분석 사례

이상으로 연관 규칙 분석의 정의와 연관규칙분석 예시 3가지에 대해 알아보았다. 연관 규칙 분석을 하기 전에 왜 분석을 해야될까? 이는 사용자의 요구를 알기 위해서로 생각된다. 아래에서 요구분석에 관해 알아보자.

https://tr.educoco.kr/24

다양한 데이터 분석 방법에 대해 공부하는 중으로 이번에는 연관규칙분석을 알아보았다. 위의 내용 중 잘못된 것이 있다면 댓글로 남겨주세요. 감사합니다!!

반응형

[python] 연관규칙분석(ASSOCIATION RULE ANALYSIS)

연관규칙분석이란?

연관 규칙 분석이란 어떤 두 아이템 집합이 번번히 발생하는가를 알려주는 일련의 규칙들을 생성하는 알고리즘입니다. 경영학에서 장바구니 분석(Market Basket Analysis)으로 알려진 이 알고리즘은 누구나 한 번쯤 경험해보았을 것입니다. 오늘은 최근 인터넷 쇼핑 및 상품 진열 등 다양한 컨텐츠 기반 추천(contents-based recommendation)에 널리 사용되고 있는 이 연관규칙분석 알고리즘에 대해 알아보고자 합니다.

사실 상품 추천에는 순차분석 (Sequence Analysis), Collaborative Filtering , Contents-based recommendation 등 여러가지 분석 기법이 존재합니다. 그 중 하나가 바로 연관규칙분석입니다. 연관규칙분석은 거래(transaction)와 항목(item)으로 구성되어 있는 경우 분석이 가능합니다.

연관규칙분석, 장바구니분석 (Association Rule Analysis, Market Basket Analysis) : 고객의 대규모 거래데이터로부터 함께 구매가 발생하는 규칙 ( 예 : A à 동시에 B) 을 도출하여 , 고객이 특정 상품 구매 시 이와 연관성 높은 상품을 추천

순차분석 (Sequence Analysis) : 고객의 시간의 흐름에 따른 구매 패턴 (A à 일정 시간 후 B) 을 도출하여 , 고객이 특정 상품 구매 시 일정 시간 후 적시에 상품 추천

Collaborative Filtering : 모든 고객의 상품 구매 이력을 수치화하고 , 추천 대상이 되는 고객 A 와 다른 고객 B 에 대해 상관계수를 비교해서 , 서로 높은 상관이 인정되는 경우 고객 B 가 구입 완료한 상품 중에 고객 A 가 미구입한 상품을 고객 A 에게 추천

Contents-based recommendation : 고객이 과거에 구매했던 상품들의 속성과 유사한 다른 상품 아이템 중 미구매 상품을 추천 ( ↔ Collaborative Filtering 은 유사 고객 을 찾는 것과 비교됨 )

Who-Which modeling : 특정 상품 ( 군 ) 을 추천하는 모형을 개발 ( 예 : 신형 G5 핸드폰 추천 스코어모형 ) 하여 구매 가능성 높은 ( 예 : 스코어 High) 고객 ( 군 ) 대상 상품 추천

연관규칙분석에서 규칙의 효용성

연관규칙분석은 이름에서 의미하는 그대로 규칙 베이스로 합니다. 여기서 예시를 한 번 봅시다.

dataset=[[‘사과’,’치즈’,’생수’], [‘생수’,’호두’,’치즈’,’고등어’], [‘수박’,’사과’,’생수’], [‘생수’,’호두’,’치즈’,’옥수수’]]

위와 같은 데이터 셋이 있을 때,

1 : (사과,치즈.생수)

2: (생수,호두,치즈,고등어)

3: (수박,사과,생수)

4: (생수,호두,치즈,옥수수)

규칙

– 사과를 산 사람은 생수를 산다.

– 생수를 산 사람은 고등어를 산다.

– 치즈를 산 사람 생수를 산다.

등등 엄청나게 많은 규칙들을 생성할 수 있습니다. 그렇다면 어떤 규칙이 좋은 규칙인지 어떻게 판단할 수 있을까요?

좋은 규칙을 판단하는 세가지 지표가 있습니다.

지지도(support) : 한 거래 항목 안에 A와 B를 동시에 포함하는 거래의 비율. 지지도는 A와 B가 함께 등장할 확률 이다. 전체 거래의 수를 A와 B가 동시에 포함된 거래수를 나눠주면 구할 수 있다.

신뢰도(confidence) : 항목 A가 포함하는 거래에 A와 B가 같이포함될 확률. 신뢰도는 조건부 확률과 유사하다. A가 일어났을 때 B의 확률 이다. A의 확률을 A와 B가 동시에 포함될 확률을 나눠주면 구할 수 있다.

A가 일어났을 때 B의 확률 향상도(lift) : A가 주어지지 않을 때의 품목 B의 확률에 비해 A가 주어졌을 때 품목 B의 증가 비율. B의 확률이 A가 일어났을 때 B의 확률을 나눴을 때 구할 수 있다. lift 값은 1이면 서로 독립적인 관계 이며 1보다 크면 두 품목이 서로 양의 상관관계, 1보다 작으면 두 품목이 서로 음의 상관관계 이다. A와 B가 독립이면 분모, 분자가 같기 때문에 1이 나온다.

연관규칙분석 알고리즘

연관규칙분석의 대표적인 알고리즘은 3가지로 분류할 수 있습니다. 하지만 저는 가장 많이 쓰이고 예제도 많은 Apiori 알고리즘에 대해서만 다루려고 합니다. Apiori 알고리즘이 널리 쓰이는 이유는 알고리즘 구현이 비교적 간단하고 높은 수준의 성능을 보이기 때문입니다.

1. Apriori algorithm

2. FP-Growth algorithm

3. DHP algorithm

Example) 장바구니 분석

사실 지금까지는 Apriori 알고리즘을 왜 사용해야하는지 그 개념이 무엇인지를 알기 위한 과정이였습니다. 대략적인 과정을 알았으니 간단한 예제를 통해 어떻게 활용할 수 있을지 알아봅시다.

1. 필요한 모듈 import

import pandas as pd from mlxtend.preprocessing import TransactionEncoder from mlxtend.frequent_patterns import apriori, association_rules

– pandas : 파이썬에서 사용하는 데이터분석 라이브러리로, 행과 열로 이루어진 데이터 객체를 만들어 다룰 수 있게 되며 보다 안정적으로 대용량의 데이터들을 처리하는데 매우 편리한 도구

– mlxtend : 일상적인 데이터 사이언스 작업에 유용한 도구들로 구성된 파이썬 라이브러리

2. 데이터 셋 생성 및 가공

dataset = [[‘Milk’, ‘Onion’, ‘Nutmeg’, ‘Eggs’, ‘Yogurt’], [‘Onion’, ‘Nutmeg’, ‘Eggs’, ‘Yogurt’], [‘Milk’, ‘Apple’, ‘Eggs’], [‘Milk’, ‘Unicorn’, ‘Corn’, ‘Yogurt’], [‘Corn’, ‘Onion’, ‘Onion’, ‘Ice cream’, ‘Eggs’]] te = TransactionEncoder() te_ary = te.fit(dataset).transform(dataset) df = pd.DataFrame(te_ary, columns=te.columns_)

데이터 셋 생성과정은 문제 없이 이해할 수있을 것 입니다. 마지막 두 줄에 대해서만 따로 알아봅시다.

주어진 코드에서 fit 함수를 통해 dataset은 고유한 라벨을 갖게 되고 , transform함수를 통해서 파이썬 리스트를 one-hot 인코딩 된 numPy 배열로 변환합니다. one-hot 인코딩에 대한 자세한 설명을 원하시면 다음 글을 참고해 주시기 바랍니다. ( https://teddylee777.github.io/machine-learning/python-numpy%EB%A1%9C-one-hot-encoding-%EC%89%BD%EA%B2%8C%ED%95%98%EA%B8%B0 )

배열을 출력해 보면 다음과 같이 확인 할 수 있습니다. 즉, 이 과정을 거치면 (Apple, Corn, Eggs, Ice cream, Milk, Nutmeg, Onion, Unicorn, Yogurt) 을 컬럼으로 갖고 아이템의 유무에 따라 True, false로 표현 된 배열을 갖게 됩니다.

3. Apriori 알고리즘 활용

frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)

우리는 Apriori 알고리즘을 활용하여 지지도가 0.5 이상인 것들을 알아낼 수있습니다.

지지도가 0.5 이상인 항목

dataset =

[[ ‘Milk’ , ‘Onion’ , ‘Nutmeg’ , ‘Eggs’ , ‘Yogurt’ ] ,

[ ‘Onion’ , ‘Nutmeg’ , ‘Eggs’ , ‘Yogurt’ ] ,

[ ‘Milk’ , ‘Apple’ , ‘Eggs’ ] ,

[ ‘Milk’ , ‘Unicorn’ , ‘Corn’ , ‘Yogurt’ ] ,

[ ‘Corn’ , ‘Onion’ , ‘Onion’ , ‘Ice cream’ , ‘Eggs’ ]]

즉, 5개의 장바구니 중에 Eggs는 4개에 들어가 있으므로 80%의 확률을 갖는다고 할 수 있습니다.

association_rules(frequent_itemsets, metric=”lift”, min_threshold=1)

association_rules 함수를 이용하여 지지도가 0.5가 넘는 항목에 대해 향상도가 양의 상관관계에 있는 것이 무엇인지 알아봅시다.

여기서는 egg와 Onion이 양의 상관관계가 있는 것으로 확인 되네요.

Reference

– https://rfriend.tistory.com/190

– https://ratsgo.github.io/machine%20learning/2017/04/08/apriori/

– https://ordo.tistory.com/89?category=751589

– http://www.birc.co.kr/2017/01/05/%EC%97%B0%EA%B4%80%EC%84%B1-%EB%B6%84%EC%84%9D%EC%9E%A5%EB%B0%94%EA%B5%AC%EB%8B%88-%EB%B6%84%EC%84%9D-%EC%88%9C%EC%B0%A8-%EC%97%B0%EA%B4%80%EC%84%B1-%EB%B6%84%EC%84%9D/

– https://blog.naver.com/eqfq1/221444712369

– https://dbdp.tistory.com/58

– https://jfun.tistory.com/104

– https://doorbw.tistory.com/172

-http://rasbt.github.io/mlxtend/

R, Python 분석과 프로그래밍의 친구 (by R Friend) :: [R 연관규칙(Association Rule)] 연관규칙분석, 장바구니분석(Market Basket Analysis)

지난 포스팅에서 기계학습의 정의, 학습 및 과적합(overfitting)에 대한 큰 그림, 개략적이고 이론적인 내용을 다루었습니다.

이번 포스팅부터는 기계학습 분석 기법의 각론으로 들어가보겠습니다.

먼저, Y값(종속변수, 목표변수)이 없는 상태에서 데이터 속에 숨겨져 있는 패턴, 규칙을 찾아내는 비지도학습(unsupervised learning)의 하나인 ‘연관규칙분석(Association Rule Analysis)’, 혹은 유통업계에서 사용하는 용어로 ‘장바구니분석(Market Basket Analysis)’에 대해서 알아보겠습니다.

보통 기계학습, 데이터마이닝 교육을 받는다고 하면 단골메뉴로 나오는 분석 기법이기도 하며, “맥주와 기저귀” 사례(이거 가짜 사례임… -_-‘)와 함께 많이 회자되곤 합니다. 그러다 보니 ‘회귀분석’ 만큼이나 분석 강의 좀 들어봤다 하는 사람이면 열에 아홉은 연관규칙분석을 들어는 봤고, 그러다보니 만만하게(?) 보는 것도 좀 있는 것 같고요, rule이 엄청 많이 나오는데 그중에서 쓸모있는 것은 별로 찾지 못해서 재미를 잘 못보고 평가절하받는 기법인것도 같습니다.

B2C 업종에 종사하는 분이라면 약방의 감초처럼 빼놓을 수 없는게 상품추천(recommendation) 일텐데요, 추천을 위해 많이 사용하는 분석 기법이 연관규칙분석, 순차분석입니다.

상품 추천에 사용하는 분석기법들을 아주 간략히 소개하자면,

연관규칙분석, 장바구니분석 (Association Rule Analysis, Market Basket Analysis) : 고객의 대규모 거래데이터로부터 함께 구매가 발생하는 규칙 ( 예 : A à 동시에 B) 을 도출하여 , 고객이 특정 상품 구매 시 이와 연관성 높은 상품을 추천

순차분석 (Sequence Analysis) : 고객의 시간의 흐름에 따른 구매 패턴 (A à 일정 시간 후 B) 을 도출하여 , 고객이 특정 상품 구매 시 일정 시간 후 적시에 상품 추천

Collaborative Filtering : 모든 고객의 상품 구매 이력을 수치화하고 , 추천 대상이 되는 고객 A 와 다른 고객 B 에 대해 상관계수를 비교해서 , 서로 높은 상관이 인정되는 경우 고객 B 가 구입 완료한 상품 중에 고객 A 가 미구입한 상품을 고객 A 에게 추천

Contents-based recommendation : 고객이 과거에 구매했던 상품들의 속성과 유사한 다른 상품 아이템 중 미구매 상품을 추천 ( ↔ Collaborative Filtering 은 유사 고객 을 찾는 것과 비교됨 )

Who-Which modeling : 특정 상품 ( 군 ) 을 추천하는 모형을 개발 ( 예 : 신형 G5 핸드폰 추천 스코어모형 ) 하여 구매 가능성 높은 ( 예 : 스코어 High) 고객 ( 군 ) 대상 상품 추천

등이 있습니다.

상품 추천은 이미 몇 십년 전부터 실전에 적용이 되어 왔고, 그 선진 업체들의 경우 효과를 톡톡히 보고 있습니다.

추천은 그 자체로 환전성이 있기 때문에 가치가 있다. 넷플릭스의 경우 대여되는 영화의 2/3가 추천을 통해 발생했으며, 구글 뉴스(Google News)의 경우 38% 이상이 추천을 통해서 조회가 발생하는 것으로 알려져 있다. 또한 아마존의 경우에도 추천을 통해 판매가 전체 매출액의 35%를 넘는다. …

* 출처 : 넷플릭스의 빅데이터, 인문학적 상상력과의 접점, 조영신, KISDI 동향 Focus

물론 연관규칙이나 순차분석만 가지고 상품추천하는 것은 아닙니다만, 연관규칙분석, 순차분석은 상품추천에 활용할 수 있는 가장 기본적인 분석기법임에는 틀림없습니다. 아래에 넥플릭스에서 상품추천에 이용하는 알고리즘 소개글을 보면 사용할 수 있는 데이터를 모조리 모아서, 분석기법을 여러개 조합해서 상품추천을 하고 있는것으로 보입니다.

넥플릭스는 이용자들이 동영상에 매긴 별점과 위치정보, 기기정보, 플레이버튼 클릭 수, 평일과 주말에 따른 선호 프로그램, 소셜 미디어 내에서 언급된 횟수 등을 분석해 알고리즘을 개발했다. * 출처 : 넷플릭스의 빅데이터, 인문학적 상상력과의 접점, 조영신, KISDI 동향 Focus

암튼, 서두가 길었습니다. 연관규칙 본론으로 들어가겠습니다.

규칙(rule)이란 “if condition then result ” (if A –> B) 의 형식으로 표현을 합니다.

연관규칙(association rule)은 특정 사건이 발생하였을 때 함께 (빈번하게) 발생하는 또 다른 사건의 규칙을 말합니다.

연관규칙에서 사용하는 기본 용어에 대해서 짚고 넘어가자면,

항목 집합 (Item set) : 전체 Item (I) 중에서 가능한 부분 집합,

항목 집합의 집합 (The set of item sets) : Item의 부분집합들로 구성된 집합,

연관규칙을 다시 좀 어려운 위의 용어를 사용해서 써보자면, 연관규칙이란 특정 항목 집합이 발생하였을 때 또 다른 항목 집합이 발생하는 규칙을 말합니다.

가령, {맥주} –> {기저귀} : 맥주를 사는 고객은 기저귀도 같이 산다 {남성, 금요일, 맥주} –> {기저귀} : 금요일에 맥주를 사는 남성 고객은

기저귀도 같이 산다 같은 규칙이 연관규칙의 예가 되겠습니다.

연관규칙분석, 장바구니분석, 순차분석… 용어가 좀 헷갈릴 수 도 있는데요, 개념 이해를 위해 비교를 해보자면요,

연관규칙(association rule)은 “What goes WITH what?” 즉, 동시 구매품목에 관심을 가지는데 비해서, 순차분석(sequeuce analysis)은 “What goes AFTER what?” 처럼 시간의 순서에 따른 규칙에 관심을 가집니다. 연관분석할 때는 주문번호, 고객ID, 구매상품코드만 있으면 되는데요, 순차분석을 하려면 “Time-stamp” 변수가 추가로 꼭 필요합니다.

장바구니분석(Market basket analysis)는 연관규칙을 유통업에서 부르는 용어입니다. 도식화하자면 장바구니분석은 연관규칙의 부분집합(?)이라고도 할 수 있겠네요.

유통업에서 장바구니분석(연관분석)을 통해 상품 추천뿐만이 아니라 상품 진열이라든지 상품 패키징, 번들링, (홈쇼핑의 경우) 방송순서나 카달로그 배치 등 다방면에 적용을 할 수 있습니다.

연관규칙은 유통업말고도 여러 업종에서 사용되는데요, 의료계에서는 암 데이터 분석에서 단백질 서열과 자주 발견되는 DNA 패턴을 찾는다던지, 증상과 질병 간 연관관계 등을 찾는데 연관규칙을 사용합니다.

순차분석은 의료비 허위 청구 순서 패턴을 찾는다던지, 휴대폰서비스 이용 부당행위 사전 조합 식별, 불량 유발 공정/장비 패턴 탐지, 웹사이트나 모바일앱의 메뉴별 클릭 스트림 분석 등을 하는데 사용할 수 있습니다.

다음번 포스팅에서는 연관규칙의 평가 척도 (지지도, 신뢰도, 향상도)에 대해서 알아보도록 하겠습니다.

이번 포스팅이 도움이 되었다면 아래의 ‘공감 ~♡’를 꼬옥 눌러주세요. ^^

반응형

[빅데이터분석기사] 연관규칙분석(Association Rule Analysis)

반응형

연관분석

연관분석이란, 대량의 트랜잭션 정보로부터 개별 데이터(변수) 사이에서 연관규칙(x면 y가 발생)을 찾는 것을 말한다. 가령 슈퍼마켓의 구매내역에서 특정 물건의 판매 발생 빈도를 기반으로 ‘A 물건을 구매하는 사람들은 B 물건을 구매하는 경향이 있다.’라는 규칙을 찾을 수 있다. 다른 말로 장바구니 분석(Market Basket)이라 한다.

연관규칙

조건 결과의 빈도수를 기반으로 표현되기 때문에 비교적 결과를 쉽게 이해할 수 있다. 구매내역의 자료 구조를 가지기 때문에 특별한 전처리 과정을 필요로 하지 않는다. 그러나 품목의 개수가 늘어남에 따라 분석에 필요한 계산의 수가 기하급수적으로 증가하는 단점이 있다.

넷플릭스(Netflex)도 연관규칙을 추천 알고리즘에 적용했다. A영화에 대한 시청 결과가 B나 C영화를 선택할 가능성에 얼마나 영향을 미치는지 계산하는 조건부 확률로 콘텐츠 추천의 모델을 만들었다.

신뢰도(Confidence)

항목 A를 포함한 거래 중에서 항목 A와 항목 B가 같이 포함될 확률을 구한다. 즉 우유를 구매했을 때 식빵이 장바구니로 함께 들어갈 확률이 바로 신뢰도인 것이다. 간단한 수식이므로 알아두고 실생활에서 활용해보자.

지지도(Support)

전체 거래 중 항목 A와 B를 동시에 포함하는 거래의 비율이다. 장을 본 목록을 확인했을 때 우유와 식빵이 꼭 함께 있을 확률이다.

향상도(Lift)

A가 주어지지 않은 상태에서 B의 확률에 대하여 A가 주어졌을 때 B의 확률 증가비율이다. 만일 A에 대해 B가 등장할 경우와 A에 대해 C가 등장할 경우의 두 신뢰도가 같다면 어떻게 해야 할까? 대개 이럴 때 향상도 지표가 활용된다. A에 대해 B가 등장 가능성이 높은지 C가 등장 가능성이 더 높은지를 확인하는 지표로 향상도가 있다.

분석 연습

마트에서 구매하는 품목을 바탕으로 연관분석의 개념을 이애하기 위한 목적으로 분석 코딩을 실시하였다. 간단한 구매내역 데이터를 직접 작성하여 어떤 항목과 항목이 서로 연관성이 있는지를 확인한다.

1) 연관규칙에서 필요한 라이브러리와 모듈을 불러온다.

import pandas as pd

from mlxtend.preprocessing import TransactionEncoder

from mlxtend.frequent_patterns import apriori, association_rules

pandas는 파이썬에서 사용하는 데이터 분석 라이브러리로, 행과 열로 이루어진 데이터 객체를 만들어 사용하며, 대용량의 데이터를 처리하는데 매우 편리한 도구이다.

mlxtend는 통계분석 기능을 지원해주는 파이썬 라이브러리이다.

연관규칙(Association Rule) 적용을 위해서는 각 항목들이 dataset 안에서 어떤 빈도로 나타났는지 또는 어떤 항목과 함께 나왔는지를 파악하는 것이 필수적이다. 하지만 dataset이 큰 경우 이를 모든 항목들에 대해 검사하는 것은 매우 비효율적이다. 이를 해결하기 위해 사용되는 연관규칙분석의 대표적인 알고리즘이 Apriori 알고리즘이다.

2) dataset이 아래와 같이 구성되어 있을 때 연관규칙을 확인해보자.

dataset은 5가지의 장바구니에 담긴 품목들을 나타내고 있다.

dataset = [[‘Milk’, ‘Onion’, ‘Nutmeg’, ‘Eggs’, ‘Yogurt’],

[‘Onion’, Nutmeg’, ‘Eggs’, ‘Yogurt’],

[‘Milk’, ‘Apple’, ‘Eggs’],

[‘Milk’, ‘Unicorn’, ‘Corn’, ‘Yogurt’],

[‘Corn’, ‘Onion’, ‘Onion’, ‘Ice cream’, ‘Eggs’]]

te = TransactionEncoder()

te_ary = te.fit(dataset).transform(dataset)

df = pd.Dataframe(te_ary, column=te.columns_)

TransactionEncoder 객체를 사용하여 이 dataset을 일반적인 기계 학습에 적합한 배열 형식으로 변환할 수 있다.

fit 함수를 통해 dataset은 고유한 라벨을 갖게 되고, transform 함수를 통해 파이썬 리스트를 원-핫 인코딩(One-hot encoding) 된 numpy 배열로 변환할 수 있다.

원-핫 인코딩이란 어떤 변수의 값을 0과 1로만 표현하는 방식이다.

여기서는 False와 True를 통하여 품목이 없는 경우와 있는 경우를 표현하였다.

3) 원-핫 인코딩의 결과를 중간 과정에서 확인해보자.

0번 바구니부터 4번 바구니까지 총 5개의 장바구니 요약표가 작성됐다.

해당 품목이 있으면 True, 없으면 False이다.

4) 관심항목 대상으로 지지도, 신뢰도, 향상도를 확인한다.

아래 결과표는 Pandas에서 제공하는 association_rules 함수를 사용해 얻은 결과이다.

연관규칙분석 결과, 달걀과 양파 두 품목 모두를 구매할 확률(지지도)은 0.6이고 달걀 품목을 구매했을 때 양파 품목까지 함께 구매할 가능성(신뢰도)은 0.75, 양파를 구매했을 때 달걀을 구매할 가능성은 1=(100%)로 나타났다.

연관분석에 대한 결과 해석은 어느 하나의 지표만 보고 판단하지 않는다. 지지도와 신뢰도, 향상도 외에도 필요한 지표들을 종합하여 결론을 내린다. 여기서는 달걀과 양파가 연관성이 높은 편임을 알 수 있다.

특히 지지도와 신뢰도 그리고 향상도는 위와 같이 품목별 관계성을 직관적으로 보여주므로 품목간 관계정도의 서열을 확인하는 데 유용하다.

함께 보면 좋은 글

[빅데이터분석기사] 교차분석(Cross-tabulation Analysis)

[빅데이터분석기사] 상관분석(Correlation Analysis)

[빅데이터분석기사] 회귀분석(Regression Analysis)

[빅데이터분석기사] 로지스틱 회귀분석(Logistic Regression Analysis)

[빅데이터분석기사] 시계열분석(Time-series Analysis)

반응형

[R] 비지도 학습의 방법 : 연관분석 (Association Analysis)

728×90

반응형

연관분석 (Association Analysis)

: 연관분석은 군집분석에 의해서 그룹핑된 cluster를 대상으로 해당 그룹에 대한 특성을 분석하는 방법으로 장바구니 분석이라고 합니다. 즉, 유사한 개체들을 클러스터로 그룹화하여 각 집단의 특성 파악합니다. 예를 들어, 제가 마트에서 ’씨리얼’ 이라는 제품을 샀으면 그와 함께 먹을 우유도 같이 구매할 확률이 높을 것입니다. 이렇게 A라는 제품을 구매하였을 때, B라는 제품도 함께 구매하는 규칙의 패턴을 구하고자 하는 것이 연관규칙 분석의 목적입니다. 유튜브, 넷플릭스 등의 플랫폼들은 모두 이러한 알고리즘들을 기반으로 컨텐츠들을 추천해주고 있습니다.

연구 분석의 기본 개념

지지도(support)

: 전체 데이터에서 관광지 X, Y에 대한 방문을 모두 포함하는 비율 (2개 이상 컬럼)

– X -> Y 지지도 식 = X, Y 동시에 방문한 관광객 수 / 전체 관광객 수

= n(A, B) : 두 항목(X, Y)이 동시에 포함 수 / n : 전체 수

신뢰도(confidence)

: 관광지 X를 방문하였을 때, Y를 같이 방문할 조건부 확률

– X -> Y 신뢰도 식 = X,Y 동시에 방문한 관광객 수 / X 방문 관광객 수

= X와 Y를 포함한 수 / X를 포함한 수

– 값이 클수록 X를 방문하였을 때, Y를 같이 방문하는 비율이 높음 ( X를 방문하였을 때, Y를 방문할 비율 )

향상도(Life)

: 관광지 X를 방문하였을 때, Y를 같이 방문하는 경우와 관광지 X의 방문여부에 상관없이 Y를 방문한 경우의 비율 ( 관광지 간의 독립성과 상관성을 나타내는 척도 )

– 하위 항목들이 독립에서 얼마나 벗어나는지의 정도를 측정한 값

– 향상도 식 = X,Y 를 동시에 방문한 관광객 비율 / (X를 방문한 관광객 비율 * Y를 방문한 관광객 비율)

= 신뢰도 / Y가 포함될 거래율

– 향상도가 1에 가까우면 : 두 상품이 독립

– 1보다 작으면 : 두 상품이 음의 상관성(감기약과 위장약) – 공통점을 가지지만 다른 기능

– 1보다 크면 : 두 상품이 양의 상관성

– 분자와 분모가 동일한 경우 : Lift == 1, X와 Y가 독립(상관없음)

– 분자와 분모가 동일한 경우 : Lift != 1, X와 Y가 독립이 아닌 경우(상관있음)

– 규칙 생성에서 support 값을 높게 설정할 수록 적은 수의 규칙만이 생성이 됩니다.(즉, 발생빈도가 높은 규칙들만 생성이 된다는 의미입니다.)

– confidence 수치가 높으면 관광지 X를 방문하면 Y를 방문할 확률이 높아지는 것과 같습니다.

= confidence 확률식

연관분석 추가 설명

– 데이터베이스에서 사건의 연관규칙을 찾는 무방향성 데이터마이닝 기법

– 마케팅에서 고객의 장바구니에 들어있는 품목 간의 관계 탐구

– 어떤 사건이 얼마나 자주 동시에 발생하는가를 표현하는 규칙 또는 조건

– y변수가 없는 비지도 학습에 의한 패턴 분석

무방향성(x -> y변수 없음)

– 사건과 사건 간 연관성(관계)를 찾는 방법 (예 : 기저귀와 맥주)

예) 장바구니 분석 : 장바구니 정보를 트랜잭션이라고 하며, 트랜잭션 내의 연관성을 살펴보는 분석기법

– 분석절차 : 거래내역 -> 품목 관찰 -> 규칙(Rule) 발견

– 관련분야 : 대형 마트, 백화점, 쇼핑몰 판매자 -> 고객 대상 상품추천

1. 고객들은 어떤 상품들을 동시에 구매하는가?

2. 라면을 구매한 고객은 주로 다른 어떤 상품을 구매하는가?

– 활용방안 : 위와 같은 질문에 대한 분석을 토대로 고객들에게

1) 상품정보 발송

2) 텔레마케팅를 통해서 패키지 상품 판매 기획,

3) 마트의 상품진열

1. 연관규칙 평가 척도

실습) 트랜잭션 객체를 대상으로 연관규칙 생성

① 연관분석을 위한 패키지 설치

install.packages(“arules”) library(arules) #read.transactions()함수 제공

② 트랜잭션(transaction) 객체 생성

tran<- read.transactions("tran.txt", format="basket", sep=",") # 트랜잭션 객체 생성. tran # 6개의 트랜잭션과 5개의 항목(상품) 생성 - 출력값 - transactions in sparse format with 6 transactions (rows) and 5 items (columns) read.transactions : 트랜잭션의 형태로 변형 - 필수 ③ 트랜잭션 데이터 보기 inspect(tran) - 출력값 - items [1] {라면,맥주,우유} [2] {고기,라면,우유} [3] {고기,과일,라면} [4] {고기,맥주,우유} [5] {고기,라면,우유} [6] {과일,우유} insect : 트랜잭션을 배열의 형태로 출력 ④ 규칙(rule) 발견 - apriori rule<- apriori(tran, parameter = list(supp=0.3, conf=0.1)) # 16 rule inspect(rule) # 규칙 보기 - supp, conf 가 높을수록 규칙성은 적어질 것이고, 낮을수록 규칙성은 많아질 것 입니다. 맥주 -> 우유 vs 우유 -> 맥주 : 지지도는 같지만 신뢰도는 조건부 확률이므로 다르게 나타납니다.

rule<- apriori(tran, parameter = list(supp=0.1, conf=0.1)) # 35 rule inspect(rule) # 규칙 보기 2. 트랜잭션 객체 생성 실습) single 트랜잭션 객체 생성 stran <- read.transactions("demo_single",format="single",cols=c(1,2)) inspect(stran) - 출력값 - items transactionID [1] {item1} trans1 [2] {item1,item2} trans2 single : 트랜잭션 구분자(Transaction ID)에 의해서 상품(item)이 대응된 경우 basket : 여러 개의 상품(item)으로 구성된 경우(Transaction ID 없이 여러 상품으로만 구성된 경우) cols : single인 경우 읽을 컬럼 수 지정(basket은 생략) - demo_single 실습) 중복 트랜잭션 제거 ① 트랜잭션 데이터 가져오기 stran2<- read.transactions("single_format.csv", format="single", sep=",", cols=c(1,2), rm.duplicates=T) sep : 각 상품(item)을 구분하는 구분자 지정. rm.duplicates=T : 중복되는 트랜잭션은 제외하고 출력. ② 트랜잭션과 상품 수 확인 stran2 - 출력값 - transactions in sparse format with 248 transactions (rows) and 68 items (columns) ③ 요약 통계 제공 summary(stran2) # 248개 트랜잭션에 대한 기술통계 제공 inspect(stran2) # 트랜잭션 확인 - inspect(stran2) 실습) 규칙 발견(생성) ① 규칙 생성하기 astran2 <- apriori(stran2) # supp=0.1, conf=0.8와 동일함 astran2 <- apriori(stran2, parameter = list(supp=0.1, conf=0.8)) # 위의 코드와 동일 astran2 출력값 : set of 102 rules attributes(astran2) . . . ② 상위 6개 향상도 내림차순으로 정렬하여 출력 inspect(head(sort(astran2, by="lift"))) # sort : 정렬 실습) basket 트랜잭션 객체 생성 btran <- read.transactions("demo_basket",format="basket",sep=",") inspect(btran) # 트랜잭션 데이터 보기 - 출력값 - items [1] {item1,item2} [2] {item1} [3] {item2,item3} 트랜잭션 구분자(Transaction ID) 없이 상품으로만 구성된 데이터 셋을 대상으로 트랜잭션 객체를 생성할 경우 format="basket" 속성 지정 - demo_basket 3. 연관규칙 시각화 Adult 데이터 셋 더보기 Adult 데이터 셋 arules 패키지에서 제공되는 Adult는 성인을 대상으로 인구소득에 관한 설문 조사 데이터를 포함하고 있는 AdultUCI 데이터셋을 트랜잭션 객체로 변환하여 준비된 데이터 셋이다. AdultUCI 데이터 셋은 전체 48,842개의 관측치와 15개 변수로 구성된 데이터 프레임이다. Adult 데이터셋은 종속 변수(Class)에 의해서 년간 개인 수입이 $5만 이상인지를 예측하는 데이터 셋으로 transactions 데이터로 읽어 온 경우 48,842개의 transaction 과 115 개의 item 으로 구성된다. 위의 데이터 셋을 활용하여 살펴보도록 하겠습니다. 실습) 다양한 신뢰도와 지지도 적용 지지도를 20%로 높인 경우 1,306개 규칙 발견 ar1<- apriori(Adult, parameter = list(supp=0.2)) 지지도 20%, 신뢰도 95% 높인 경우 348개 규칙 발견 ar2<- apriori(Adult, parameter = list(supp=0.2, conf=0.95)) # 신뢰도 높임 지지도 30%, 신뢰도 95% 높인 경우 124개 규칙 발견 ar3<- apriori(Adult, parameter = list(supp=0.3, conf=0.95)) # 신뢰도 높임 지지도 35%, 신뢰도 95% 높인 경우 67 규칙 발견 ar4<- apriori(Adult, parameter = list(supp=0.35, conf=0.95)) # 신뢰도 높임 지지도 40%, 신뢰도 95% 높인 경우 36 규칙 발견 ar5<- apriori(Adult, parameter = list(supp=0.4, conf=0.95)) # 신뢰도 높임 실습) 규칙 결과보기 ① 상위 6개 규칙 보기 inspect(head(ar5)) ② confidence(신뢰도) 기준 내림차순 정렬 상위 6개 출력 inspect(head(sort(ar5, decreasing=T, by="confidence"))) ③ lift(향상도) 기준 내림차순 정렬 상위 6개 출력 inspect(head(sort(ar5, by="lift"))) 실습) 연관규칙 시각화 ① 패키지 설치 install.packages("arulesViz") library(arulesViz) ② 연관규칙 시각화 plot(ar3, method='graph', control=list(type='items')) 실습) Groceries 데이터 셋으로 연관분석하기 Groceries 데이터 셋 더보기 Groceries 데이터 셋 arules 패키지에서 제공되는 Groceries 데이터 셋은 1개월 동안 실제 로컬 식료품 매장에서 판매되는 트랜잭션 데이터를 포함하고 있다. 전체 9,835개의 트랜잭션(transaction)과 항목(item) 169 범주를 포함하고 있다. 위의 데이터를 활용하여 살펴보도록 하겠습니다. ① data.frame으로 형 변환 Groceries.df<- as(Groceries, "data.frame") head(Groceries.df) - 출력값 - items 1 {citrus fruit,semi-finished bread,margarine,ready soups} 2 {tropical fruit,yogurt,coffee} 3 {whole milk} 4 {pip fruit,yogurt,cream cheese ,meat spreads} 5 {other vegetables,whole milk,condensed milk,long life bakery product} 6 {whole milk,butter,yogurt,rice,abrasive cleaner} ② 지지도 0.001, 신뢰도 0.8 적용 규칙 발견(410 rule(s)) rules <- apriori(Groceries, parameter=list(supp=0.001, conf=0.8)) inspect(rules) -> 410개

③ 규칙을 구성하는 왼쪽(LHS) -> 오른쪽(RHS)의 item 빈도수 보기

library(arulesViz) plot(rules, method=”grouped”)

728×90

반응형

키워드에 대한 정보 연관 규칙 분석

다음은 Bing에서 연관 규칙 분석 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 08: Association Rule Mining (연관규칙분석)

  • 연관규칙분석

08: #Association #Rule #Mining #(연관규칙분석)


YouTube에서 연관 규칙 분석 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 08: Association Rule Mining (연관규칙분석) | 연관 규칙 분석, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  인사 급여 관리 시스템 | 나는 이 책으로 인사업무 10년을 해왔습니다. 166 개의 자세한 답변

Leave a Comment