이번 글은 코드잇 강의를 수강하면서 배운 내용을 주로 하여 정리되어 있습니다. (코드잇 스프린트 데이터 애널리스트 트랙 1기 훈련생)
순차 패턴 마이닝
순차 패턴 마이닝이란?
순차 패턴 마이닝(Sequential Pattern Mining)은 데이터에서 아이템 간의 순차적 관계를 분석하여 의미 있는 패턴을 발견하는 기법입니다.
연관 규칙 마이닝이 "어떤 물건들이 함께 구매되는가"를 분석하는 데 중점을 둔다면, 순차 패턴 마이닝은 "어떤 물건을 구매한 후에 다른 물건을 구매하는가"를 분석합니다.
즉, 특정 이벤트가 일어난 후 다음에 일어날 이벤트를 예측하는 데 초점을 맞추는 것이 특징입니다.
순차 패턴 마이닝의 특징
순차 패턴 마이닝은 연관 규칙 마이닝과 유사하게 ‘IF (조건) THEN (결과)’의 형식으로 패턴을 표현합니다. 그러나 두 방법론의 차이점은 시간의 흐름입니다. 연관 규칙에서는 조건과 결과가 동시에 발생하지만, 순차 패턴 마이닝에서는 조건이 먼저 발생하고 결과가 그 후에 발생해야 합니다.
예시 비교
- 연관 규칙:
- IF: 고객이 우유와 달걀을 함께 구매하면 (조건)
- THEN: 빵도 함께 구매할 가능성이 높다. (결과)
- 순차 패턴:
- IF: 고객이 금요일에 빵을 구매하면 (조건)
- THEN: 주말에 우유를 구매할 가능성이 높다. (결과)
순차 패턴 마이닝의 활용 예시
순차 패턴 마이닝은 다양한 분야에서 활용될 수 있으며, 아래와 같은 상황에서 유용합니다.
- 웹/앱 화면 기획
- 사용자가 웹사이트나 애플리케이션에서 어떤 순서로 페이지를 방문하는지 분석하여 사용자 경험(UX)을 개선할 수 있습니다. 예를 들어, 사용자들이 "로그인 → 상품 검색 → 상품 상세 페이지 → 장바구니 추가 → 결제"의 순서를 따른다면, 이러한 패턴을 반영하여 UI를 최적화할 수 있습니다.
- 매장 내 동선 최적화
- 매장에서 고객들이 어떤 경로로 이동하는지 분석하여 매장 구조를 최적화할 수 있습니다. 예를 들어, "입구 → A 섹션 → B 섹션 → 계산대"의 경로가 일반적이라면, 이를 바탕으로 상품 배치를 효율적으로 조정할 수 있습니다.
- CRM 마케팅
- 고객이 앞으로 어떤 제품이나 서비스를 구매할 가능성이 있는지 예측하여, 개인화된 마케팅 메시지를 보낼 수 있습니다. 예를 들어, "A 상품을 구매한 후 며칠 내에 B 상품을 구매하는 패턴"을 발견하면, B 상품의 할인 쿠폰을 발송하여 추가 구매를 유도할 수 있습니다.
- 이상 거래 탐지
- 금융 거래의 순서를 분석하여 의심스러운 거래를 감지할 수 있습니다. 예를 들어, "대량의 송금 → 새로운 계좌 개설 → 금융 상품 가입"이 일반적으로 사기 거래의 전조라면, 이러한 패턴을 탐지하여 보안 경고를 발송할 수 있습니다.
- 자연재해 예측
- 특정 자연 현상의 발생 순서를 분석하여 재해를 예측할 수 있습니다. 예를 들어, "미세지진 발생 → 동물의 이상 행동 → 지진운 발생"의 패턴을 분석하여 지진 발생 가능성을 예측하고 대비할 수 있습니다.
시퀀스 데이터
시퀀스 데이터(Sequence Data)는 시간의 흐름에 따라 순서가 있는 데이터를 의미합니다. 순차 패턴 마이닝에서는 이러한 시퀀스 데이터를 활용하여 특정 이벤트나 행동이 발생한 후에 이어서 발생할 가능성이 높은 패턴을 찾아냅니다. 이 데이터는 시간 순서뿐만 아니라, 각 시퀀스가 어떤 주체(예: 고객)와 관련된 것인지를 식별할 수 있어야 합니다.
시퀀스 데이터의 구성 요소
순차 패턴 마이닝에서 사용하는 시퀀스 데이터는 일반적으로 다음과 같은 정보를 포함합니다:
- 시퀀스 ID: 각 시퀀스를 식별하는 고유 번호.
- 이벤트 정보: 각 시퀀스에서 발생한 이벤트나 항목들의 목록.
- 주체 정보: 각 시퀀스가 어떤 주체(예: 사용자, 고객, 기계 등)에 의해 발생했는지를 식별하는 정보.
- 이벤트 시점: 각 이벤트가 발생한 날짜와 시간.
이 정보들을 통해 시간 순서에 따른 특정 주체의 행동 패턴을 분석할 수 있습니다.
시퀀스 데이터의 예시
연관 규칙 마이닝에서는 각 결제 건별로 함께 구매된 상품을 나열하여 데이터가 구성되지만, 순차 패턴 마이닝에서는 시간의 흐름을 고려한 시퀀스 데이터가 필요합니다.
예시 데이터
다음은 4명의 사용자가 5일 동안 온라인 학습 플랫폼에서 수강한 강의 데이터를 나타낸 예시입니다. 데이터에는 사용자 ID, 수강 ID, 수강 날짜, 그리고 수강한 강의 정보가 포함되어 있습니다.
사용자 ID (User ID) 수강 ID (Session ID) 수강 날짜 (Session Date) 수강 강의 (Lecture Name)
U1 | 2001 | 2024-05-01 | Python, Data Science |
U1 | 2002 | 2024-05-02 | Machine Learning |
U1 | 2003 | 2024-05-04 | Deep Learning, AI |
U2 | 2004 | 2024-05-01 | HTML |
U2 | 2005 | 2024-05-02 | CSS |
U3 | 2006 | 2024-05-03 | Python, AI |
U3 | 2007 | 2024-05-05 | Data Science |
U4 | 2008 | 2024-05-01 | HTML, CSS |
U4 | 2009 | 2024-05-02 | JavaScript |
시퀀스 데이터의 정리
위의 데이터를 바탕으로 사용자별 시퀀스 데이터를 구성해보면 다음과 같은 형식으로 표현할 수 있습니다:
- U1:
- < (Python, Data Science) > < Machine Learning > < (Deep Learning, AI) >
- U2:
- < HTML > < CSS >
- U3:
- < (Python, AI) > < Data Science >
- U4:
- < (HTML, CSS) > < JavaScript >
표기 방법의 의미
- < >: 꺾쇠 괄호는 상품 간의 순서가 존재한다는 의미를 나타냅니다. 예를 들어, < Machine Learning > < Deep Learning >은 사용자가 Machine Learning 강의를 수강한 후 Deep Learning 강의를 수강했다는 의미입니다.
- ( ): 괄호 안에 있는 상품들은 함께 구매된 것이므로 그 순서에는 의미가 없습니다. 예를 들어, (Python, Data Science)는 Python과 Data Science 강의를 함께 수강했음을 의미하며, 이 순서는 중요하지 않습니다.
순차 패턴 마이닝의 활용
이렇게 정리된 시퀀스 데이터를 바탕으로, 순차 패턴 마이닝을 통해 특정 이벤트가 발생한 후 이어서 발생할 가능성이 높은 패턴을 분석할 수 있습니다. 이러한 분석은 다양한 분야에서 주체의 행동 경로를 예측하거나, 시스템의 성능을 개선하는 데 매우 유용합니다.
PrefixSpan 알고리즘
PrefixSpan은 Prefix-projected Sequential Pattern Mining의 줄임말로, 시퀀스 데이터에서 특정 아이템을 접두사(Prefix)로 두고, 그 접두사로 시작되는 패턴을 탐색하는 알고리즘입니다.
PrefixSpan 알고리즘은 대용량의 시퀀스 데이터에서 빈발한 순차 패턴을 효율적으로 찾는 데 사용됩니다.
PrefixSpan 알고리즘의 주요 개념
- Prefix : 시퀀스에서 특정 행동이나 이벤트를 접두사로 설정하여 그 이후의 패턴을 탐색합니다. 예를 들어, 상품 A를 접두사로 설정한 후, A로 시작하는 모든 시퀀스를 탐색합니다.
- Projected Database : 특정 접두사를 기준으로 해당 접두사 이후의 시퀀스 부분을 모은 데이터베이스입니다. 각 접두사마다 별도의 Projected Database가 생성되며, 이 데이터베이스에서 빈발 패턴을 탐색합니다.
PrefixSpan 알고리즘의 프로세스
1단계: 단일 행동 시퀀스 생성 및 지지도 계산
먼저, 가능한 모든 단일 행동 시퀀스를 나열하고, 각 시퀀스의 발생 빈도를 계산합니다. 발생 빈도는 지지도 카운트(Support Count)(지지도의 분자 부분)로 표현되며, 특정 지지도 카운트 이하의 시퀀스는 필터링됩니다.
- 예시: 예를 들어, 로그인, 검색, 장바구니 추가, 구매와 같은 행동이 있으며, 리뷰 작성은 지지도 카운트가 낮아 제외됩니다.
2단계: 접두사별 탐색 영역 분리 (Projected Database 생성)
지지도를 통과한 각 행동을 접두사로 설정하고, 접두사별로 탐색 영역을 분리합니다. 이때 각 접두사의 Projected Database를 생성하는데, 원본 시퀀스에서 해당 접두사 이후의 부분만 남겨서 구성합니다.
- 예시: 로그인을 접두사로 설정하면, 로그인 후에 발생한 행동들로 Projected Database가 구성됩니다.
3단계: Projected Database에서 추가 패턴 탐색
각 접두사에 대해 Projected Database를 기반으로 추가 패턴을 탐색합니다. 접두사에 대한 Projected Database에서 다시 빈발 시퀀스를 찾아내고, 이를 바탕으로 탐색을 이어갑니다. 빈발하지 않은 시퀀스는 필터링됩니다.
- 예시: 로그인을 접두사로 두고 탐색한 결과, 로그인, 검색과 로그인, 장바구니 추가 시퀀스가 빈발 시퀀스로 남게 됩니다.
4단계: 트리 구조로 시퀀스 탐색
PrefixSpan 알고리즘은 접두사를 기반으로 시퀀스를 확장해나가며 트리 구조를 형성합니다. 각 접두사에 대해 가능한 모든 확장된 시퀀스를 탐색한 후, 빈발 시퀀스가 없는 경우 탐색을 종료합니다. 최종적으로는 이러한 트리 구조를 통해 전체 데이터에서 빈발한 시퀀스를 추출합니다.
- 예시: 로그인을 접두사로 한 트리를 확장해나가면서 로그인, 검색, 로그인, 장바구니 추가 등의 빈발 시퀀스를 최종적으로 도출합니다.
PrefixSpan 알고리즘의 장점
PrefixSpan 알고리즘은 기존의 순차 패턴 마이닝 알고리즘과 비교해 데이터의 불필요한 부분을 효과적으로 제거하면서 빈발 패턴을 탐색할 수 있는 효율적인 알고리즘입니다. 특히 대규모의 시퀀스 데이터를 다룰 때, 메모리 사용과 계산 효율성을 크게 개선할 수 있습니다.
파이썬으로 구현하는 PrefixSpan 알고리즘
데이터 준비 및 전처리
사용할 데이터를 준비하기 위해 이번 예시로 온라인 플랫폼의 사용자 행동 데이터를 불러오겠습니다. 데이터에는 각 사용자의 행동이 시간 순서대로 기록되어 있습니다.
import pandas as pd
df = pd.read_csv('data/online_user_actions.csv')
df.head()
PrefixSpan 알고리즘을 적용하려면 로그인, 검색, (장바구니 추가, 구매)와 같은 형태의 시퀀스 데이터가 필요합니다. 파이썬으로 구현할 때에는 [로그인, 검색, (장바구니 추가, 구매)]와 같이 전체적인 행동 시퀀스는 리스트(list)로, 동시에 발생한 행동들은 튜플(tuple)로 묶어주면 됩니다.
먼저, 데이터를 사용자별로 묶기 전에 행동명 기준으로 정렬하겠습니다. PrefixSpan 알고리즘은 일반적으로 튜플 내부의 아이템을 알파벳 순서로 정렬한 후 진행하는 경우가 많기 때문입니다.
df = df.sort_values('ActionName')
이제 각 사용자가 특정 시점에 수행한 행동들을 하나의 튜플로 묶어주겠습니다. 이후 사용자의 행동 순서에 따라 데이터를 리스트로 묶어야 하므로, 이 단계에서는 SessionID, UserID, ActionDate도 기준으로 함께 묶어주겠습니다.
df2 = df.groupby(['UserID', 'ActionDate', 'SessionID'])['ActionName'].apply(tuple).reset_index()
df2.head(
그 후, 데이터를 날짜 기준으로 정렬한 후, 사용자별로 리스트로 묶어주면 됩니다. 날짜 순서로 이미 정렬되어 있지만, 확실히 하기 위해 df2.sort_values('ActionDate')를 한 번 더 수행합니다.
df2 = df2.sort_values('ActionDate')
sequence_df = df2.groupby(['UserID'])['ActionName'].apply(list).reset_index()
sequence_df.head()
PrefixSpan 알고리즘 구현
이제 한 세션 내에서 발생한 행동은 튜플에, 전체적인 시퀀스 데이터는 리스트에 담긴 사용자별 시퀀스 데이터가 준비되었습니다. 이 데이터를 기반으로 PrefixSpan을 사용해 시퀀스 패턴을 탐색할 수 있습니다.
from prefixspan import PrefixSpan
ps = PrefixSpan(sequence_df['ActionName']
frequent() 함수를 사용하여 특정 지지도 카운트 이상의 패턴을 출력할 수 있습니다. 예를 들어 frequent(2)를 입력하면, 지지도 카운트가 2 이상인 패턴을 확인할 수 있습니다.
또한 topk() 함수를 사용하면 가장 높은 지지도 카운트를 가진 패턴을 찾을 수 있습니다. topk(3)이라고 입력하면 상위 3개의 패턴이 출력됩니다.
# 특정 지지도 카운트 이상의 패턴 출력
ps.frequent(2)
# 상위 k개의 패턴 출력
ps.topk(3)
위 결과에서 지지도 카운트가 2를 넘는 패턴이 적게 나타날 수 있습니다. 이는 prefixspan 라이브러리의 계산 방식이 특정 시퀀스 처리에 있어 다소 엄격한 접근 방식을 취하기 때문입니다. 예를 들어, <(검색, 클릭), 장바구니 추가>라는 시퀀스가 있을 때, 라이브러리는 <(검색, 클릭), 장바구니 추가> 전체를 하나의 패턴으로 인정하며, 튜플로 묶인 행동들을 개별적으로는 처리하지 않습니다.
장바구니 분석 정리(데이터 마이닝 프로세스)
장바구니 분석을 통해 학습한 데이터 마이닝의 핵심 프로세스
- 데이터 전처리
- 데이터를 분석에 적합한 형태로 가공하는 과정입니다.
- 결측치 처리, 이상치 제거, 데이터 변환 등의 작업이 포함됩니다.
- 이 단계는 분석의 정확성과 신뢰성을 높이는 데 매우 중요합니다.
- 규칙 및 패턴 추출
- 연관 규칙 마이닝에서는 빈발 아이템 집합(Frequent Itemset)을 추출하고, 이를 바탕으로 규칙을 생성합니다.
- 순차 패턴 마이닝에서는 빈발 시퀀스(Frequent Sequence)를 찾아내어 패턴을 정리합니다.
- 이를 위해 Apriori, FP-Growth, PrefixSpan과 같은 알고리즘이 사용됩니다.
- 평가 지표 활용
- 추출된 규칙 및 패턴의 품질을 평가하기 위해 지지도(Support), 신뢰도(Confidence), 향상도(Lift) 등의 지표를 사용합니다.
- 어떤 지표를 선택하고, 어떻게 해석할지는 분석가의 경험과 비즈니스 목표에 따라 달라집니다.
- 의미 있는 규칙 및 패턴 도출
- 비즈니스 상황에 맞는 의미 있는 규칙 및 패턴을 선정하고, 이를 바탕으로 인사이트를 도출합니다.
- 이러한 인사이트는 상품 추천, 고객 행동 분석, 매장 동선 최적화 등 다양한 응용으로 이어질 수 있습니다.
순차 패턴 마이닝은 데이터에서 시간의 흐름에 따른 패턴을 분석하여 예측 가능한 인사이트를 도출하는 강력한 도구입니다. 이 글을 통해 순차 패턴 마이닝의 기본 개념부터 PrefixSpan 알고리즘의 구현까지 살펴보았습니다. 이를 통해 여러분도 다양한 분야에서 데이터 분석에 적용하여 더 나은 비즈니스 결정을 내리는 데 도움이 되길 바랍니다.
출처 및 참고자료 : 코드잇 사이트 강의 '장바구니 분석' https://www.codeit.kr/topics/market-basket-analysis
'프로그래밍 > 데이터 분석' 카테고리의 다른 글
[데이터 분석 심화 개념] 웹 자동화 개념 정리 2️⃣ (웹사이트 가져오기) (0) | 2024.08.19 |
---|---|
[데이터 분석 심화 개념] 웹 자동화 개념 정리 1️⃣ (웹의 기본 요소) (0) | 2024.08.18 |
[데이터 분석 심화 개념] 장바구니 분석 개념 정리 2️⃣ (연관 규칙 알고리즘) (1) | 2024.08.15 |
[데이터 분석 심화 개념] 장바구니 분석 개념 정리 1️⃣ (장바구니 분석의 개념, 연관 규칙 마이닝의 개념과 규칙 평가 지표) (0) | 2024.08.12 |
[데이터 분석 심화 개념] 차원 축소 개념 정리 (0) | 2024.08.04 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!