본문 바로가기
수학&통계학

연관규칙 분석

by 코스믹구구 2026. 5. 16.
마트에서 기저귀를 산 사람이 맥주도 함께 구매하는 경향이 있다는 유명한 이야기가 있다.
이처럼 데이터에서 항목들 사이의 숨겨진 연관 관계를 발견하는 것이 연관규칙 분석(Association Rule Analysis)이다.
장바구니 분석(Market Basket Analysis)이라고도 불리며, 추천 시스템·마케팅·의료·유통 등 다양한 분야에서 활발히 사용된다.

1. 연관규칙 분석이란?

연관규칙 분석은 대규모 거래 데이터에서 함께 자주 나타나는 항목들의 조합과 그 관계의 방향성을 규칙으로 표현하는 데이터 마이닝 기법이다.

연관규칙은 다음과 같은 형태로 표현된다.

A → B (A이면 B이다)
A: 선행 항목집합 (Antecedent) — 조건부
B: 후행 항목집합 (Consequent) — 결과부
예) {맥주, 안주} → {콜라} : "맥주와 안주를 사면 콜라도 산다"

어떤 데이터에 사용하는가?

연관규칙 분석은 거래(Transaction) 데이터를 다룬다. 각 거래는 여러 항목(Item)의 집합으로 구성된다.

📌 거래 데이터 구조 예시 — 편의점 구매 내역
거래 ID 구매 항목
T001 맥주, 안주, 콜라
T002 맥주, 안주
T003 우유, 빵, 버터
T004 맥주, 콜라
T005 우유, 빵
T006 맥주, 안주, 우유
T007 빵, 버터, 콜라
T008 맥주, 안주, 콜라

전체 8건의 거래에서 "맥주와 안주를 함께 사면 콜라도 사는가?"와 같은 패턴을 찾는다.

연관규칙 분석의 활용

  • 추천 시스템: "이 상품을 구매한 고객이 함께 구매한 상품"
  • 진열 위치 최적화: 함께 자주 구매하는 상품을 가까이 배치
  • 묶음 상품 기획: 자주 함께 구매되는 상품을 세트 상품으로 구성
  • 의료 진단: 함께 나타나는 증상·질병 패턴 발견
  • 웹 클릭 분석: 연이어 방문하는 페이지 패턴 발견
  • 보험 사기 탐지: 함께 나타나는 의심 항목 조합 발견

 

2. 핵심 지표 3가지 — 지지도, 신뢰도, 향상도

연관규칙의 품질을 평가하는 세 가지 핵심 지표가 있다. 위의 편의점 데이터(총 8건)를 예시로 함께 계산해보자.

① 지지도 (Support)

지지도는 전체 거래 중 해당 항목집합이 등장하는 비율이다. "이 조합이 얼마나 자주 나타나는가?"를 측정한다. 규칙의 통계적 중요성을 나타낸다.

Support(A → B) = P(A ∩ B) = (A와 B를 모두 포함한 거래 수) / (전체 거래 수)
범위: 0 ~ 1 (또는 0% ~ 100%)
높을수록: 이 조합이 자주 등장한다 → 통계적으로 신뢰할 수 있는 규칙
📌 지지도 계산 예시
{맥주, 안주} → {콜라} 규칙
맥주, 안주, 콜라를 모두 포함한 거래: T001, T008 → 2건
전체 거래: 8건

Support({맥주, 안주} → {콜라}) = 2/8 = 0.25 (25%)

해석: 전체 거래의 25%에서 맥주·안주·콜라가 함께 구매되었다.
지지도만으로는 부족한 이유
지지도가 높아도 우연일 수 있다.
맥주가 원래 너무 많이 팔려서 어떤 것과도 같이 등장할 수 있기 때문.
→ 신뢰도와 함께 봐야 한다.

 

② 신뢰도 (Confidence)

신뢰도는 A를 구매한 거래 중에서 B도 함께 구매한 비율이다. "A를 샀을 때 B도 살 확률이 얼마나 되는가?"를 측정한다. 규칙의 조건부 확률을 나타낸다.

Confidence(A → B) = P(B|A) = Support(A ∩ B) / Support(A)
= (A와 B를 모두 포함한 거래 수) / (A를 포함한 거래 수)
범위: 0 ~ 1 (또는 0% ~ 100%)
높을수록: A가 있을 때 B도 있을 가능성이 높다
📌 신뢰도 계산 예시
{맥주, 안주} → {콜라}
맥주 AND 안주를 포함한 거래: T001, T002, T006, T008 → 4건
맥주 AND 안주 AND 콜라를 포함한 거래: T001, T008 → 2건

Confidence = 2/4 = 0.5 (50%)

해석: 맥주와 안주를 산 사람 중 50%는 콜라도 샀다.
신뢰도만으로는 부족한 이유
콜라가 원래 70%의 거래에서 팔린다면?
맥주+안주 → 콜라의 신뢰도(50%)가 콜라 단독 구매율(70%)보다 낮다.
→ 맥주+안주는 오히려 콜라 구매를 억제하는 것!
→ 향상도가 이 문제를 해결한다.

 

③ 향상도 (Lift)

향상도는 A와 B가 독립일 때 기대되는 빈도 대비 실제로 함께 등장하는 정도를 나타낸다. "A가 B의 구매를 얼마나 향상(Lift)시키는가?"를 측정하며, 연관성의 실질적인 강도를 파악하는 가장 중요한 지표다.

Lift(A → B) = Confidence(A → B) / Support(B) = P(B|A) / P(B)
= Support(A ∩ B) / (Support(A) × Support(B))
Lift > 1: 양의 연관 (A가 B 구매를 촉진)
Lift = 1: 독립 (A와 B는 무관)
Lift < 1: 음의 연관 (A가 B 구매를 억제)
📌 향상도 계산 예시
{맥주, 안주} → {콜라}
Support({맥주, 안주, 콜라}) = 2/8 = 0.25
Support({맥주, 안주}) = 4/8 = 0.5
Support({콜라}) = T001+T004+T007+T008 = 4건 → 4/8 = 0.5

Lift = 0.25 / (0.5 × 0.5) = 0.25 / 0.25 = 1.0

해석: 향상도 = 1.0 → 맥주+안주와 콜라는 독립 관계. 이 규칙은 의미 없다.
더 의미 있는 규칙 예시: {우유} → {빵}
Support({우유, 빵}) = T003+T005 = 2건 → 2/8 = 0.25
Support({우유}) = T003+T005+T006 = 3건 → 3/8 = 0.375
Support({빵}) = T003+T005+T007 = 3건 → 3/8 = 0.375

Confidence = 0.25 / 0.375 = 0.667 (67%)
Lift = 0.25 / (0.375 × 0.375) = 0.25 / 0.141 ≈ 1.78

해석: Lift = 1.78 > 1 → 우유를 사면 빵도 살 가능성이 독립일 때보다 78% 더 높다.

 

3. 추가 지표 — 레버리지, 확신도

레버리지 (Leverage)

향상도와 비슷한 목적이지만 비율이 아닌 차이로 표현한다. A와 B가 독립일 때 기대 빈도와 실제 빈도의 차이다.

Leverage(A → B) = Support(A ∩ B) − Support(A) × Support(B)
Leverage > 0: 양의 연관 (기대보다 많이 함께 등장)
Leverage = 0: 독립
Leverage < 0: 음의 연관

확신도 (Conviction)

규칙 A → B의 반례(A는 있지만 B는 없는 경우)가 발생할 확률을 기반으로 한 지표다. 향상도와 달리 방향성(비대칭성)이 있다. A → B와 B → A의 값이 다르다.

Conviction(A → B) = (1 − Support(B)) / (1 − Confidence(A → B))
값이 클수록 규칙이 강함 (∞에 가까울수록 완벽한 규칙)
Conviction = 1: A와 B는 독립
Conviction < 1: 음의 연관

 

4. 빈발 항목집합 (Frequent Itemset)

연관규칙을 생성하기 전에 먼저 최소 지지도(min_support) 이상인 항목집합을 찾아야 한다. 이를 빈발 항목집합(Frequent Itemset)이라 한다.

💡 왜 빈발 항목집합을 먼저 찾는가?
n개의 항목이 있으면 가능한 규칙의 수는 2^n − 2개다.
항목이 1,000개인 대형 마트라면 2^1000개의 조합을 모두 검사하는 것은 현실적으로 불가능.
→ 지지도가 충분히 높은 항목집합만 먼저 골라내면 검사해야 할 후보를 대폭 줄일 수 있다.

단조성 (Apriori 원리)

빈발 항목집합 탐색의 핵심 원리다.

단조성 원리 (Apriori Property)
"어떤 항목집합이 빈발하면,
그 부분집합도 반드시 빈발하다"

반대로:
"어떤 항목집합이 비빈발하면,
그것을 포함하는 모든 상위집합도 비빈발하다"
왜 중요한가?
{맥주, 안주, 콜라}가 비빈발이면
{맥주, 안주, 콜라, 소주}도 자동으로 비빈발.

→ 비빈발 집합의 상위집합 탐색을 통째로 건너뛸 수 있다 (가지치기)
→ 탐색 공간을 대폭 줄여 효율적 탐색 가능

 

반응형

 

5. 연관규칙 분석 알고리즘

① Apriori 알고리즘

1994년 Agrawal이 제안한 가장 고전적인 알고리즘이다. 단조성 원리(Apriori Property)를 이용해 후보 집합을 단계적으로 생성·정제한다.

📌 Apriori 알고리즘 작동 과정 (min_support = 0.25 = 2/8건)
STEP 1: 1-항목집합 후보 생성 및 필터
전체 항목별 등장 횟수:
맥주: 5건(62.5%) 안주: 4건(50%) 콜라: 4건(50%)
우유: 3건(37.5%) 빵: 3건(37.5%) 버터: 2건(25%)

→ 모두 min_support(25%) 이상 → 모두 빈발 1-항목집합
STEP 2: 2-항목집합 후보 생성 및 필터
빈발 1-항목집합에서 조합 생성:
{맥주,안주}: 4건(50%) ✓ {맥주,콜라}: 3건(37.5%) ✓
{맥주,우유}: 1건(12.5%) ✗ → 제거
{우유,빵}: 2건(25%) ✓ {빵,버터}: 2건(25%) ✓
{맥주,버터}: 0건(0%) ✗ → 제거 ...

→ 지지도 < 25%인 항목집합 제거 (가지치기)
STEP 3: 3-항목집합 후보 생성 (빈발 2-항목집합에서)
{맥주,안주,콜라}: 2건(25%) ✓
{우유,빵,버터}: 1건(12.5%) ✗ → 제거
...

→ 반복하여 더 이상 빈발 k-항목집합이 없을 때 종료
STEP 4: 빈발 항목집합에서 연관규칙 생성
{맥주, 안주} → {콜라}: Confidence = 2/4 = 50%
{콜라} → {맥주, 안주}: Confidence = 2/4 = 50%
{우유} → {빵}: Confidence = 2/3 = 67% ← 신뢰도가 높은 규칙

min_confidence 이상인 규칙만 최종 채택
⚠️ Apriori의 한계
1. 여러 번의 데이터베이스 스캔: k-항목집합마다 전체 데이터를 다시 읽어야 함
2. 대용량에서 느림: 후보 집합이 여전히 매우 많을 수 있음
3. 메모리 문제: 후보 집합을 메모리에 저장해야 함
→ 이를 개선한 FP-Growth 알고리즘이 등장

② FP-Growth 알고리즘 (Frequent Pattern Growth)

2000년 Han이 제안한 알고리즘으로, Apriori의 단점을 해결한다. 데이터를 FP-Tree라는 압축된 트리 구조에 저장해서 데이터베이스를 단 2번만 스캔하고, 후보 집합 없이 빈발 패턴을 찾는다.

📌 FP-Growth 핵심 아이디어
① 데이터 압축 (1차 스캔: 빈발 항목 빈도 파악)
항목 빈도 순으로 정렬: 맥주(5) → 안주(4) → 콜라(4) → 우유(3) → 빵(3) → 버터(2)
② FP-Tree 구성 (2차 스캔: 트리에 삽입)
각 거래를 빈도 내림차순으로 재정렬 후 트리에 삽입.
T001: 맥주→안주→콜라 T002: 맥주→안주 T003: 우유→빵→버터 ...

공통 접두사가 있는 거래들이 같은 경로를 공유 → 트리로 압축
③ 조건부 FP-Tree로 빈발 패턴 마이닝
각 빈발 항목에 대해 조건부 FP-Tree를 만들어 재귀적으로 빈발 집합 탐색.
Apriori처럼 반복적으로 데이터를 스캔하지 않아 훨씬 빠름.
Apriori
데이터 스캔: k번 (단계마다)
후보 집합: 생성·저장
장점: 단순하고 이해하기 쉬움
단점: 느리고 메모리 소모
적합: 소규모 데이터
FP-Growth
데이터 스캔: 2번
후보 집합: 생성하지 않음
장점: 빠르고 메모리 효율
단점: FP-Tree 구성이 복잡
적합: 대규모 데이터

③ ECLAT 알고리즘

Apriori, FP-Growth와 다른 방식으로 데이터를 표현한다. 각 항목이 등장하는 거래 ID 목록(TID-list)을 유지하고, 두 항목집합의 교집합으로 지지도를 빠르게 계산한다. 메모리에 데이터를 세로 방향으로 저장해서 세로 데이터 형식(Vertical Data Format)이라고도 한다.

 

6. 파라미터 설정 — 얼마나 엄격하게 필터링할 것인가

연관규칙 분석을 수행할 때 두 가지 임계값을 설정해야 한다.

최소 지지도 (min_support)
너무 낮으면: 의미 없는 규칙까지 모두 포함. 계산량 폭발
너무 높으면: 중요하지만 드문 패턴을 놓침

일반적으로 0.01 ~ 0.05 (1~5%) 사용.
데이터 크기와 도메인에 따라 조정.
최소 신뢰도 (min_confidence)
너무 낮으면: 신뢰할 수 없는 규칙 포함
너무 높으면: 너무 당연한 규칙만 남음

일반적으로 0.5 이상 (50%) 사용.
비즈니스 목적에 따라 다름.
💡 실무 파라미터 설정 팁
• min_support는 작게 시작해서 규칙이 너무 많으면 높이는 방식으로 조정
• min_confidence는 0.5 이상을 기본값으로, 비즈니스적으로 의미 있는 수준 선택
향상도(Lift) > 1인 규칙만 사용하는 것이 핵심 — 신뢰도가 높아도 향상도 < 1이면 쓸모없는 규칙
• 결과 규칙이 너무 많으면: min_lift > 1.2 등 추가 필터 적용

 

7. 연관규칙 해석 시 주의사항

방향성 — A→B와 B→A는 다르다

연관규칙은 방향이 있다. 신뢰도와 향상도는 방향에 따라 달라진다. 지지도만 같고 신뢰도는 다를 수 있다.

📌 방향성 예시
{기저귀} → {맥주}: Confidence = 60% (기저귀 산 사람 중 60%가 맥주도 삼)
{맥주} → {기저귀}: Confidence = 20% (맥주 산 사람 중 20%만 기저귀 삼)

→ 두 규칙은 전혀 다른 의미. 방향에 따라 마케팅 전략이 달라진다.
전자: 기저귀 코너 옆에 맥주 배치 / 후자: 맥주 코너 옆에 기저귀 배치

상관관계 ≠ 인과관계

⚠️ 연관규칙은 인과관계가 아니다
"{맥주} → {기저귀}"는 "맥주를 사면 기저귀도 산다"는 연관성이지,
"맥주가 기저귀를 구매하게 만든다"는 인과관계가 아니다.
이 패턴은 "아빠가 주말에 기저귀 심부름을 하면서 맥주도 산다"는 행동 패턴일 뿐이다.
→ 연관규칙은 탐색·가설 도출 도구. 인과성을 확인하려면 추가 분석 필요.

흔한 함정 — 높은 신뢰도가 항상 좋은 것이 아니다

📌 향상도 없이 신뢰도만 보면 오류
가정: 전체 거래의 90%에서 쌀이 팔린다.

{라면} → {쌀}: Confidence = 85% (높아 보임)
하지만 쌀의 기본 구매율: 90%
Lift = 85% / 90% = 0.94 < 1

→ 라면을 사면 오히려 쌀을 덜 산다! 신뢰도만 봤다면 잘못된 결론.

 

8. 연관규칙 분석 전체 흐름

 

📌 핵심 정리

  • 연관규칙: A → B 형태. 거래 데이터에서 함께 자주 등장하는 항목 간 관계 발견
  • 지지도: P(A∩B). 전체 거래 중 A와 B가 함께 등장하는 비율. 규칙의 중요성
  • 신뢰도: P(B|A). A 구매 시 B도 구매할 조건부 확률. 규칙의 정확도
  • 향상도: P(B|A)/P(B). 독립 대비 실제 연관 강도. 1보다 커야 유의미한 규칙
  • 향상도 = 1: 독립 / >1: 양의 연관 / <1: 음의 연관
  • 빈발 항목집합: min_support 이상인 항목 조합. 연관규칙 생성의 기반
  • 단조성(Apriori 원리): 비빈발 집합의 상위집합도 비빈발 → 가지치기로 탐색 공간 축소
  • Apriori: k번 스캔, 후보 집합 생성. 단순하지만 대용량에 느림
  • FP-Growth: 2번 스캔, FP-Tree로 압축. 빠르고 효율적. 대규모에 적합
  • 신뢰도 높아도 향상도 <1이면 무의미: 항상 향상도를 함께 확인
  • 방향성: A→B ≠ B→A. 신뢰도·향상도가 달라진다
  • 연관 ≠ 인과: 규칙은 가설 도출 도구. 인과성은 별도 분석 필요
728x90
반응형