brunch

You can make anything
by writing

C.S.Lewis

by Raphael Lee Apr 24. 2017

장바구니 분석 (Association Rule)

삼남매 아빠 = 애국자

분석이란 걸 위한 통계 완전 기초

Chapter 1. 통계 기본 함수

Chapter 2. 표준화/정규화

Chapter 3. 데이터 전처리 - Part II (part I 참조)

Break #1. 통계 실습을 위한 환경 구축 - Part I

Break #2. 통계 실습을 위한 환경 구축 - Part II

Chapter 4. 클러스터링, 장바구니 - Part I (장바구니 분석)

Chapter 5. 의사결정 나무 (Decision Tree), 회귀분석 (Regression), 신경망 분석 (Neural Network)

Chapter 6. 모형 평가, WoE


# 장바구니 분석은 로직의 난이도에 비해 예제 데이터를 만들기가 쉽지 않습니다.
# 장바구니 분석에 대해 이론을 설명해 놓은 사이트/블로그는 종종 볼 수가 있으므로, 약간의 차별성을 갖기 위해(^^) 미리 준비한 샘플 데이터와 코드를 병행하여 이야기를 풀어 나가겠습니다.

  샘플 코드와 데이터는 다음 주소에 가면 association_rule 디렉터리 아래에 샘플 및 프로그램이 준비되어 있습니다.

  https://github.com/RapaelLee/brunch


0. 들어가며

- 연관성 분석(Associaton Rule)에 대한 자료를 찾다보면, 경로 분석(Path Analysis)이라는 내용이 종종 같이 나오는데 두 개는 주안점으로 두는 부분이 다릅니다. 경로 분석은 인과관계를 가지는 변수들의 직접효과와 간접효과를 밝히는 데 집중하고, 연관성 분석은 여러 번 발생한 거래/사건 내에서 일정한 규칙을 찾아내는 것입니다. 즉, '다음에 무엇'과 '함께 무엇'의 차이입니다.

- 예제로도 준비하였지만 고객의 상품 구매 내역이 일반적으로 사용되나, 최근에는 트윗 분석등 빅 데이터 기반으로도 분석 영역이 확대되어 있습니다. R관련 예제를 찾다보면 트윗을 이용한 분석이 다수 발견됩니다.

- 분석을 하고난 후 결과를 보면 기존에 이미 알고 있는 결과가 나오는 경우가 종종 있습니다. 연관성 분석이라는 것은 건수 기반이기 때문에 가장 상위의 것은 이미 마케터 등이 많이 접한 결과일 수 있는거죠. 다만, 트윗 분석과 같이 육안으로 식별이 어려울 정도의 데이터를 분석하면 약간의 힌트를 얻을 수 있으리라 생각합니다.

- 일반적으로 낱개의 상품의 경우 충분한 건수가 도출되지 않는 경우가 있으므로 상품을 전략적으로 Cross-selling 또는 Up-selling 을 위한 군(group)으로 묶어 수행하면 보다 나은 결과를 얻을 수 있습니다.

- 예제로 준비한 내용은 임의의 고객이 매수한 주식을 기반으로 합니다.


1. 이론적 설명

1.1. 지지도 (Support)

  - (항목 A와 B가 동시에 포함된 사례수) / (전체 사례수)

  - 즉, 전체 거래에서 A와 B 종목을 모두 매수한 비중으로 얼마나 의미가 있는 규칙인지 판단할 수 있습니다.

1.2. 신뢰도 (Confidence)

  - A와 B가 동시에 포함된 사례수 / 품목 A가 포함된 사례수

  - A종목을 포함하는 거래 중 B종목이 동시에 거래되는 비중으로 A종목을 고객이 매수하였을 때, B종목을 매수할 확률을 나타냅니다.

1.3. 향상도 (Lift)

  - A 없을 때 B의 있을 확률 대비 A 있을 때 B 있을 확률의 비율

  - A종목과 B종목이 우연히 같이 거래된 확률보다 A종목과 B종목이 동시에 일어난 확률을 보는 것으로 A종목과 B종목의 상호 관계를 나타냅니다.


# 여기까지의 내용을 보면 아실 수 있겠지만, 결과가 도출되면 다음의 기준으로 해석하게 됩니다.

  - 일정 수준 이상의 지지도를 가지면서, 신뢰도와 향상도의 역순으로 데이터를 정렬하여 결과를 해석합니다.


2. Python + R 코드 설명

2.1. Python - 샘플 데이터 생성

  # 한줄 한줄 설명하는 것이 아니라 함수를 기준으로 설명하도록 하겠습니다.

  # 코드 상에서 발견되는 경로는 사용자 본인에 맞게 수정하셔서 사용하시면 됩니다.

  - inv_rayleigh_cdf (참조 사이트)

    - 일반적으로 난수(random value)를 충분히 생성하면 분포가 고르게 발생합니다. 그래서 혹시 연관성 분석에 알맞지 않은 데이터 분포를 발생시킬 수가 있어서, 분포가 한쪽으로 치우친 레일리 분포로 만드는 함수를 작성하였습니다.

  - create_tables

    - sqlite3 파일에 데이터를 저장하기 위한 테이블을 생성합니다.

  - load_data

    - 예제로 사용할 데이터를 sqlite3에 적재합니다.

  - build_sample

    - 난수 값을 발생시켜서 임의의 거래 데이터를 생성합니다. 그렇게 생성한 데이터를 sqlite3에 적재합니다.

  - __main__

    - 사전 정의된 함수를 실행합니다.

    - R 과 연동하여 R 함수 수행 후 결과를 얻는 부분은 연동이 안되는 분들을 위해 주석 처리하였습니다.


2.2. R - 연관성 분석

  - packages

    - 필요한 패키지를 다운로드, 설치 후 로드 합니다.

  - run_ar_sample

    - sqlite3에 접속하여 데이터를 추출한 후 연관성 분석을 실행합니다.


2.3. 결과

  - Python 을 실행하지 않고, R을 실행하면 다음 결과를 얻게 됩니다.

    - 결과에서 lhs는 Left Hand Side의 약자이고 rhs는 Right Hand Side의 약자입니다.

    - 종종 사양이 낮은 컴퓨터에서는 실행이 중단되는 경우가 있으니, 그럴 때는 지지도 또는 신뢰도의 최소 값을 높여서 실행해 보시기 바랍니다. (경우의 수를 줄여주는 효과를 발생시킵니다.)

  - 결과를 보면 GS홈쇼핑, 대한항공, 한독 종목을 매수한 고객은 미원상사 종목을 매수할 확률이 약83% 정도로 나타났습니다. 이에 따라 고객이 GS홈쇼핑, 대한항공, 한독 종목을 매수하면 미원상사 종목을 추천종목으로 표시할 수가 있겠습니다. 연관성 분석은 이처럼 상품 기준으로 데이터를 분석하여, 어떤 상품을 구매한 고객에게 다음으로 살 상품을 권장하는 방안을 만들 수 있습니다.


3. 마치며

  - 이상으로 연관성분석에 대한 이야기를 마치며, 다음 차례로는 클러스터링에 대한 이야기를 풀어보겠습니다.

매거진의 이전글 통계 실습을 위한 환경 구축 - Part II
작품 선택
키워드 선택 0 / 3 0
댓글여부
afliean
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari