예측·머신러닝 · 개념 가이드
연관규칙 분석: Apriori와 ECLAT
13개 항목 · Apriori와 ECLAT 통합
01연관규칙 분석이란?
연관규칙 분석(Association Rule Analysis)은 하나의 거래나 사건 안에서 어떤 항목들이 자주 함께 나타나는지를 찾는 방법입니다. 장바구니 분석으로 널리 알려졌지만, 웹 행동·콘텐츠 이용·의료 기록·설비 고장처럼 여러 항목이 동시에 기록되는 자료에도 사용할 수 있습니다.
예를 들어 고객 10,000명의 구매 영수증을 살펴봤더니 빵과 버터를 함께 산 거래에서 우유도 자주 나타났다고 해보겠습니다. 연관규칙은 이 패턴을 {빵, 버터} → {우유}처럼 표현하고, 단순히 몇 번 나타났는지뿐 아니라 전체 거래에서 얼마나 흔한지와 우연한 동시구매보다 얼마나 강한지를 수치로 평가합니다.
여기서 화살표는 원인과 결과를 뜻하지 않습니다. “빵과 버터를 사면 우유를 사게 된다”가 아니라, 현재 자료에서 앞 항목이 포함된 거래에 뒤 항목이 얼마나 자주 함께 나타났는지를 나타냅니다.
Transaction mockup
영수증을 거래×항목 행렬로 바꿉니다
한 거래 안에 상품이 있으면 1, 없으면 0으로 표시하면 반복되는 조합을 계산할 수 있습니다.
빵 ∩ 우유
50%
3/6 거래
우유 ∩ 커피
50%
3/6 거래
빵 ∩ 잼
0%
0/6 거래
이 페이지에서는 연관규칙에서 가장 널리 쓰이는 Apriori와 ECLAT를 함께 다룹니다. 두 방법은 같은 빈발 항목집합을 찾을 수 있지만, 후보를 탐색하고 거래자료를 계산하는 방식이 다릅니다.
어떤 항목 조합이 충분히 자주 나타나며, 그 조합에서 실무적으로 의미 있는 규칙을 만들 수 있을까요?
02어떤 문제에 사용할 수 있는가?
연관규칙은 결과변수 하나를 미리 지정해 예측하는 분석이 아닙니다. 각 거래에 포함된 항목들의 반복적인 동시출현 구조를 탐색하여 다음 행동이나 상품구성에 활용할 후보를 찾습니다.
| 분야 | 하나의 거래 | 찾으려는 패턴 |
|---|---|---|
| 유통·커머스 | 한 번의 주문에 포함된 상품 | 함께 구매되는 상품 조합 |
| 웹·앱 | 한 세션에서 사용한 기능 | 같이 이용되는 기능 흐름 |
| 콘텐츠 | 한 사용자가 본 콘텐츠 묶음 | 함께 소비되는 주제 |
| 의료 | 한 환자에게 함께 기록된 진단·처방 | 동반 질환·처방 조합 |
| 제조 | 한 고장 사례에서 발생한 경보 | 함께 나타나는 이상 신호 |
거래의 정의가 달라지면 규칙도 달라집니다. 같은 고객의 한 달 구매를 하나의 거래로 묶을지, 주문 한 건을 거래로 볼지 먼저 정해야 합니다. 시간창을 지나치게 넓히면 우연히 함께 포함되는 항목이 많아지고, 너무 좁히면 실제 연관을 놓칠 수 있습니다.
- 상품 진열이나 번들 후보를 찾고 싶을 때
- 교차판매·추천 규칙의 탐색 후보가 필요할 때
- 반복되는 증상·고장·행동 조합을 발견하고 싶을 때
- 정답 라벨 없이 항목 간 동시출현 구조를 살펴보고 싶을 때
03거래·항목집합·규칙의 차이
거래와 항목
거래(Transaction)는 함께 관측된 항목들의 묶음입니다. T1={빵, 우유, 버터}처럼 표현하며, 상품 하나하나가 항목(Item)입니다. 거래자료는 보통 행이 거래, 열이 항목인 0/1 행렬이나 각 거래의 항목 목록으로 저장됩니다.
항목집합
{빵, 우유}처럼 하나 이상의 항목을 묶은 것이 항목집합(Itemset)입니다. 전체 거래 중 일정 비율 이상에서 나타나는 조합을 빈발 항목집합(Frequent Itemset)이라고 합니다. Apriori와 ECLAT의 직접적인 탐색 대상은 먼저 이 빈발 항목집합입니다.
연관규칙
빈발 항목집합을 찾은 뒤 서로 겹치지 않는 선행부(Antecedent)와 후행부(Consequent)로 나누어 X → Y 규칙을 만듭니다. {빵, 버터, 우유}에서 {빵, 버터} → {우유}, {우유} → {빵, 버터}처럼 방향이 다른 여러 규칙이 나올 수 있습니다.
| 구성 | 예시 | 역할 |
|---|---|---|
| 거래 | T1={빵, 우유, 버터} | 함께 관측된 한 단위 |
| 항목집합 | {빵, 우유} | 동시출현 조합 |
| 선행부 X | {빵, 버터} | 조건으로 보는 항목 |
| 후행부 Y | {우유} | 함께 나타나는지 확인할 항목 |
| 규칙 | {빵, 버터} → {우유} | 방향을 붙인 동시출현 패턴 |
04지지도·신뢰도·향상도
규칙의 품질은 지지도(Support), 신뢰도(Confidence), 향상도(Lift)를 함께 봅니다. 세 지표는 서로 다른 질문에 답하므로 하나만 높다고 좋은 규칙으로 판단하지 않습니다.
지지도: 규칙 조합이 전체에서 얼마나 자주 나타나는가?
support(X → Y)=P(X∩Y)입니다. 전체 1,000건 중 빵과 우유를 함께 산 거래가 120건이면 지지도는 0.12입니다. 지지도가 너무 낮으면 소수 사례에 의존한 불안정한 규칙일 수 있습니다.
신뢰도: X가 있을 때 Y도 나타나는 비율은 얼마인가?
confidence(X → Y)=P(Y|X)=support(X∩Y)/support(X)입니다. 빵을 산 200건 중 우유도 산 거래가 120건이면 신뢰도는 0.60입니다.
향상도: Y가 원래 흔한 정도를 넘어서는가?
lift(X → Y)=confidence(X → Y)/support(Y)입니다. 우유가 전체 거래의 30%에서 나타나고 규칙의 신뢰도가 60%라면 향상도는 2.0입니다. 빵이 포함될 때 우유가 평소보다 2배 자주 나타난다는 뜻입니다.
Metric mockup
같은 규칙을 세 질문으로 나누어 봅니다
전체 1,000건, 빵 200건, 우유 300건, 두 상품 동시구매 120건의 예시입니다.
12%
전체에서 두 상품이 함께 나온 비율
60%
빵 거래 중 우유도 포함된 비율
2.00
우유의 기준빈도보다 2배 자주 동반
| 지표 | 값의 기준 | 주의점 |
|---|---|---|
| 지지도 | 클수록 자주 관측 | 희귀하지만 중요한 규칙을 놓칠 수 있음 |
| 신뢰도 | 클수록 X에서 Y 동반 비율이 높음 | Y 자체가 흔하면 과장될 수 있음 |
| 향상도 | 1보다 크면 양의 연관 | 표본이 적으면 큰 값도 불안정 |
X → Y와 Y → X의 지지도와 향상도는 같지만 신뢰도는 다를 수 있습니다. 신뢰도에는 선행부가 포함된 거래 수가 분모로 들어가기 때문입니다.
05Apriori는 어떻게 찾는가?
Apriori는 “어떤 항목집합이 빈발하지 않으면 그 항목집합을 포함하는 더 큰 조합도 빈발할 수 없다”는 하향 폐쇄성(Apriori Principle)을 이용합니다. 지지도가 낮은 조합의 확장을 일찍 중단해 탐색공간을 줄입니다.
Apriori search
빈발한 조합만 다음 단계로 확장합니다
최소 지지도 5% 예시입니다. 잼이 2%라면 잼을 포함하는 더 큰 조합도 탐색하지 않습니다.
빵
18%
우유
30%
버터
11%
잼
2%
빵·우유
12%
빵·버터
7%
우유·버터
6%
빵·잼
제거
빵·우유·버터
5%
1단계. 빈발 1-항목집합을 찾습니다
각 상품의 지지도를 계산하고 최소 지지도 이상인 항목만 남깁니다. 우유가 30%, 빵이 20%, 잼이 2%인데 최소 지지도가 5%라면 잼은 이 단계에서 제거됩니다.
2단계. 후보 조합을 생성하고 가지치기합니다
남은 1-항목집합을 결합해 2-항목 후보를 만들고 지지도를 계산합니다. 빈발한 2-항목집합에서 3-항목 후보를 만들되, 그 부분집합 중 하나라도 빈발하지 않으면 후보 전체를 계산하기 전에 제거합니다.
3단계. 빈발 항목집합에서 규칙을 만듭니다
최소 지지도를 통과한 항목집합을 가능한 선행부와 후행부로 나눕니다. 그 뒤 최소 신뢰도와 향상도, 최대 규칙 길이 등의 조건으로 실제 보고할 규칙을 거릅니다.
Apriori는 단계별 후보가 명확하여 원리를 설명하기 쉽지만, 항목 수가 많거나 최소 지지도가 낮으면 후보 조합이 폭발하고 거래자료를 여러 번 스캔할 수 있습니다.
06ECLAT는 어떻게 찾는가?
ECLAT(Equivalence Class Transformation)는 거래별 항목목록 대신 각 항목이 나타난 거래 ID 집합을 저장하는 수직형 자료구조를 사용합니다. 지지도는 TID 집합의 교집합 크기로 계산합니다.
ECLAT search
거래 ID의 교집합이 곧 동시출현 건수입니다
수평형 장바구니를 항목별 TID 집합으로 바꾸면 거래자료를 반복 스캔하지 않고 조합의 지지도를 계산할 수 있습니다.
빵 ∩ 우유
{T1, T3}
support = 2/4 = 50%
공통 거래 ID 두 개
수평형 자료를 수직형 TID 집합으로 바꿉니다
T1={빵, 우유}, T2={빵, 버터}, T3={빵, 우유, 버터}, T4={우유}라면 빵={T1,T2,T3}, 우유={T1,T3,T4}, 버터={T2,T3}로 저장합니다.
교집합으로 조합의 지지도를 구합니다
{빵, 우유}의 TID 집합은 {T1,T2,T3}∩{T1,T3,T4}={T1,T3}입니다. 전체 4건 중 2건이므로 지지도는 0.50입니다. 더 큰 조합은 이 교집합에 다른 항목의 TID 집합을 다시 교차해 계산합니다.
깊이 우선으로 항목집합을 확장합니다
ECLAT는 공통 접두사를 가진 항목들을 묶어 깊이 우선으로 탐색합니다. 후보를 행렬 전체에서 다시 세기보다 이미 만든 TID 집합을 재사용하므로, 희소한 거래자료와 특정 조건에서는 Apriori보다 빠를 수 있습니다.
다만 항목이 매우 빈번해 TID 집합이 크거나 데이터가 메모리에 들어가기 어려우면 교집합 저장비용이 커질 수 있습니다. 구현에 따라 TID 대신 차집합(diffset)을 사용해 메모리를 줄이기도 합니다.
07Apriori와 ECLAT는 무엇이 다른가?
두 방법은 서로 다른 종류의 규칙을 찾는 분석이 아닙니다. 같은 최소 지지도와 같은 전처리를 사용하면 원칙적으로 같은 빈발 항목집합을 찾을 수 있으며, 차이는 그 집합을 탐색하고 계산하는 방식입니다.
| 비교 | Apriori | ECLAT |
|---|---|---|
| 자료 표현 | 거래×항목의 수평형 관점 | 항목별 거래 ID의 수직형 관점 |
| 탐색 순서 | 크기별 너비 우선 | 접두사 기반 깊이 우선 |
| 지지도 계산 | 후보를 거래자료에서 계수 | TID 집합 교집합 |
| 주요 강점 | 원리가 직관적이고 단계 추적이 쉬움 | 후보 스캔을 줄여 빠를 수 있음 |
| 주요 부담 | 낮은 지지도에서 후보 폭발 | 큰 TID 집합의 메모리 비용 |
| 최종 출력 | 빈발 항목집합과 규칙 | 빈발 항목집합과 규칙 |
따라서 “Apriori 규칙”과 “ECLAT 규칙”을 의미가 다른 결과처럼 해석하면 안 됩니다. 알고리즘 선택은 주로 데이터 크기·희소성·메모리·실행시간에 관한 계산 선택입니다. 결과 해석에는 어느 알고리즘을 썼는지보다 거래 정의와 임계값이 더 큰 영향을 줄 수 있습니다.
- 학습과 설명이 우선이고 항목 수가 크지 않다면 Apriori가 이해하기 쉽습니다.
- 후보 생성 비용이 크고 수직형 교집합이 효율적이라면 ECLAT를 고려합니다.
- 실제 데이터에서는 두 방법의 실행시간과 메모리를 같은 조건으로 측정해 선택합니다.
- 알고리즘을 비교할 때 최소 지지도·최대 길이·전처리를 동일하게 맞춥니다.
08분석은 어떻게 이루어지는가?
1단계. 분석 단위와 항목을 정의합니다
한 행이 주문인지 고객인지 세션인지 정하고, 동일 상품의 수량을 0/1 포함 여부로 바꿀지 결정합니다. 상품명이 조금씩 다른 중복코드와 취소·반품 거래를 정리합니다.
2단계. 항목 빈도와 거래 크기를 확인합니다
항목별 지지도, 거래당 항목 수, 지나치게 흔하거나 희귀한 항목을 살펴봅니다. “기타”, 배송비, 봉투처럼 거의 모든 거래에 나타나지만 행동 의미가 약한 항목은 사전에 제외할 수 있습니다.
3단계. 임계값과 탐색범위를 정합니다
최소 지지도·신뢰도·향상도와 규칙 최대 길이를 정합니다. 임계값을 결과를 본 뒤 계속 낮추면 우연한 규칙이 늘어나므로, 목적과 최소 사례 수를 기준으로 시작값을 정하고 민감도 분석을 합니다.
4단계. Apriori 또는 ECLAT로 빈발 항목집합을 찾습니다
계산환경에 맞는 알고리즘을 선택합니다. 같은 자료에서 알고리즘별 결과 수가 다르면 임계값·중복 항목·규칙 생성 설정이 같은지 먼저 확인합니다.
5단계. 규칙을 생성하고 중복을 줄입니다
지지도와 신뢰도를 통과한 규칙에서 향상도·레버리지·확신도 등을 확인하고, 더 짧은 규칙과 거의 같은 정보를 주는 중복 규칙을 제거합니다. 후행부를 특정 상품군으로 제한하면 실행 가능한 규칙에 집중할 수 있습니다.
6단계. 시간분할이나 미사용 자료에서 확인합니다
발견 기간과 검증 기간을 나누어 지지도·신뢰도·향상도가 유지되는지 확인합니다. 실제 추천이나 진열 변경을 적용한다면 A/B 테스트로 매출·전환·이익의 증분 효과를 평가합니다.
09결과는 어떻게 해석하는가?
온라인 식료품점의 주문 10,000건에서 최소 지지도 1%, 최소 신뢰도 30%, 최소 향상도 1.2로 규칙을 찾았다고 가정합니다.
| 규칙 | 지지도 | 신뢰도 | 향상도 |
|---|---|---|---|
| {파스타} → {토마토소스} | 4.8% | 62% | 2.07 |
| {빵, 버터} → {우유} | 2.4% | 48% | 1.60 |
| {기저귀} → {물티슈} | 1.7% | 35% | 2.50 |
| {생수} → {바나나} | 1.2% | 31% | 1.03 |
{파스타} → {토마토소스}는 전체 주문의 4.8%에서 두 상품이 함께 나타났고, 파스타 주문의 62%에 토마토소스가 포함됐으며, 토마토소스의 전체 구매율을 고려해도 2.07배 자주 함께 나타났습니다. 노출 빈도와 연관 강도가 모두 비교적 높아 번들·교차추천 후보가 될 수 있습니다.
{기저귀} → {물티슈}는 신뢰도는 35%로 첫 규칙보다 낮지만 향상도는 2.50으로 더 큽니다. 물티슈가 원래 흔하지 않은데 기저귀 거래에서는 상대적으로 자주 나타난다는 뜻입니다. 다만 전체 거래의 1.7%에 불과하므로 예상 도달 고객 수와 이익을 함께 계산해야 합니다.
{생수} → {바나나}는 지지도와 신뢰도 조건은 통과했지만 향상도 1.03으로 거의 독립에 가깝습니다. 바나나가 원래 흔해서 신뢰도가 높아 보였을 가능성이 있으므로 강한 연관규칙으로 보고하기 어렵습니다.
좋은 규칙은 지표가 하나만 높은 규칙이 아니라, 충분한 사례 수·기준빈도를 넘는 연관·실행 가능한 후행부를 함께 갖춘 규칙입니다.
10임계값과 규칙 수는 어떻게 조절하는가?
최소 지지도를 낮추면 희귀 조합까지 찾을 수 있지만 후보와 규칙 수가 급격히 늘어납니다. 최소 신뢰도를 높이면 조건부 동반 비율이 높은 규칙만 남지만, 후행부가 원래 흔한 규칙이 과대대표될 수 있습니다.
Interactive threshold lab
임계값을 낮추면 더 많은 규칙과 더 많은 잡음이 함께 들어옵니다
아래 수치는 원리를 보여주는 개념적 예시이며 업로드 데이터의 실제 분석결과가 아닙니다.
예상 규칙 수
84개
최소 지지도
2.0%
개념적 안정성
66%
지지도를 낮출수록 희귀 규칙을 발견할 수 있지만 후보 수가 빠르게 늘어납니다. 규칙 수만 줄이기보다 최소 거래 건수와 향상도, 검증기간 재현성을 함께 적용하세요.
| 설정 변화 | 얻는 것 | 잃을 수 있는 것 |
|---|---|---|
| 최소 지지도 낮춤 | 희귀 규칙 탐색 | 속도·안정성·해석 가능성 |
| 최소 신뢰도 높임 | 조건부 동반율이 높은 규칙 | 희귀하지만 lift가 큰 규칙 |
| 최소 향상도 높임 | 기준빈도를 넘는 연관 | 자주 팔리는 실용적 조합 |
| 최대 길이 줄임 | 간결한 규칙 | 복합 조건의 세부 패턴 |
규칙이 너무 많다면 임계값만 올리기 전에 같은 후행부를 가진 규칙을 묶고, 포함관계가 있는 중복 규칙을 제거하며, 최소 거래 건수를 함께 설정합니다. 예를 들어 지지도 0.1%가 수백만 거래에서는 충분한 사례지만 1,000건 자료에서는 한 건에 불과합니다.
11주의점과 흔한 오해
| 오해·문제 | 왜 문제인가 | 대응 |
|---|---|---|
| 신뢰도가 높으면 강한 연관이다 | 후행부 자체가 흔할 수 있음 | 향상도와 기준빈도 확인 |
| X → Y이므로 X가 Y를 유발한다 | 동시출현은 인과·시간순서를 보장하지 않음 | 시간정보·실험설계 사용 |
| 규칙이 많을수록 발견이 풍부하다 | 중복·우연 규칙이 급증함 | 가지치기·검증·업무 제약 적용 |
| lift가 매우 크면 무조건 중요하다 | 소수 거래에서 값이 불안정할 수 있음 | 지지도·건수·신뢰구간 확인 |
| 전체 기간을 섞어도 된다 | 가격행사·계절·정책변화가 혼합됨 | 기간별 안정성 검증 |
| 구매 여부만 보면 충분하다 | 가격·수량·이익과 실행비용을 놓침 | 후속 가치분석 결합 |
연관규칙 탐색은 수많은 조합을 동시에 확인하므로 우연히 커 보이는 규칙이 생깁니다. 단순 p값을 붙이는 것만으로 해결되지 않으며, 별도 기간 재현성·최소 사례 수·도메인 타당성·실험 검증을 함께 사용해야 합니다.
상품 추천에서 이미 장바구니에 들어간 상품이나 구매 이후에만 알 수 있는 정보를 선행부에 넣으면 데이터 누출이 생깁니다. 실제 추천 시점에 사용할 수 있는 정보만으로 규칙을 구성합니다.
12언제 다른 방법을 고려해야 하는가?
연관규칙은 함께 나타나는 항목 조합을 설명하는 데 강하지만, 고객마다 다음 구매확률을 정밀하게 예측하거나 항목 사이의 순서를 학습하는 목적에는 다른 방법이 더 적합할 수 있습니다.
| 목적 | 더 적합할 수 있는 방법 |
|---|---|
| 다음 상품의 개인별 확률 예측 | 분류모형·추천시스템 |
| 구매 순서와 전환 경로 분석 | 순차패턴·Markov 모형 |
| 비슷한 고객·상품 묶기 | 군집분석·임베딩 |
| 프로모션의 인과효과 확인 | A/B 테스트·인과추론 |
| 수량·가격·이익까지 최적화 | 수요모형·최적화 |
실무에서는 연관규칙으로 설명 가능한 후보를 발견하고, 추천모형이나 실험으로 실제 효과를 검증하는 방식이 자연스럽습니다. 탐색 결과를 곧바로 자동 의사결정 규칙으로 배포하지 않습니다.
13핵심 정리
- 연관규칙은 하나의 거래 안에서 반복적으로 함께 나타나는 항목 조합을 찾습니다.
- 빈발 항목집합을 먼저 찾고, 그 집합을 선행부와 후행부로 나누어 규칙을 만듭니다.
- 지지도는 노출 빈도, 신뢰도는 조건부 동반율, 향상도는 후행부의 기준빈도를 넘는 정도입니다.
- Apriori는 빈발하지 않은 부분집합을 이용해 후보를 가지치기하며 너비 우선으로 탐색합니다.
- ECLAT는 항목별 거래 ID 집합의 교집합으로 지지도를 계산하며 깊이 우선으로 탐색합니다.
- 두 알고리즘의 차이는 주로 계산 방식이며 같은 설정에서는 같은 빈발 항목집합을 목표로 합니다.
- 좋은 규칙은 지표뿐 아니라 사례 수·중복·기간 안정성·이익·실행 가능성을 함께 충족해야 합니다.
- 연관규칙의 화살표는 동시출현 방향일 뿐 시간순서나 인과효과를 증명하지 않습니다.