이번 문서의 목표: 거래 데이터에서 지지도·신뢰도·향상도를 실제 숫자로 계산해 규칙의 의미를 해석하고, Apriori와 FP-Growth의 차이, 연관 규칙이 활용되는 상황과 시험 출제 포인트를 설명할 수 있다.
연관 규칙이란 무엇인가
왜 필요한가
“기저귀를 산 고객이 맥주도 함께 산다”처럼, 대형마트의 거래 기록을 분석하다 보면 겉보기엔 관련 없어 보이는 상품들이 자주 함께 팔리는 패턴이 발견되곤 한다. 이런 패턴을 사람이 하나하나 눈으로 찾는 것은 상품 종류가 몇 개만 넘어가도 사실상 불가능하다. 연관 규칙(association rule)은 대량의 거래 데이터에서 “무엇을 사면 무엇을 함께 사는 경향이 있는가”라는 규칙을 자동으로 찾아내는 비지도학습 기법이다.
쉽게 말하면: 연관 규칙은 “A를 산 사람이 B도 같이 사더라”는 패턴을 거래 데이터에서 자동으로 찾아내는 기법이다.
정의: 항목집합과 규칙
- 항목(item): 거래에 포함될 수 있는 개별 상품이나 요소(예: 빵, 우유, 기저귀).
- 항목집합(itemset): 하나 이상의 항목을 묶은 집합(예: 빵과 기저귀를 묶은 {빵, 기저귀}).
- 거래(transaction): 한 번의 구매에서 실제로 담긴 항목집합(예: 영수증 하나).
- 연관 규칙: “항목집합 X를 사면 항목집합 Y도 함께 산다”는 형태의 문장으로, 로 표기한다. 를 규칙의 선행부(antecedent), 를 후행부(consequent)라 부른다.
규칙의 강도를 재는 세 가지 지표
왜 필요한가
거래 데이터에서 가능한 항목집합의 조합은 상품 종류가 늘어날수록 기하급수적으로 많아진다. 이 수많은 조합 중 “정말 의미 있는 규칙”만 골라내려면, 그 규칙이 얼마나 자주 나타나는지, 얼마나 믿을 만한지, 우연이 아닌지를 숫자로 판단할 기준이 필요하다. 그래서 연관 규칙은 지지도·신뢰도·향상도 세 지표를 함께 본다.
쉽게 말하면: 지지도는 “이 조합이 전체에서 얼마나 자주 나오는가”, 신뢰도는 “A를 산 사람 중 몇 퍼센트가 B도 샀는가”, 향상도는 “A와 B가 우연히 같이 팔린 것보다 실제로 얼마나 더 자주 같이 팔렸는가”를 나타낸다.
계산용 거래 데이터
다음과 같이 5건의 거래가 있다고 하자.
| 거래 번호 | 구매 항목 |
|---|---|
| T1 | 빵, 우유 |
| T2 | 빵, 기저귀, 맥주, 달걀 |
| T3 | 우유, 기저귀, 맥주, 콜라 |
| T4 | 빵, 우유, 기저귀, 맥주 |
| T5 | 빵, 우유, 기저귀, 콜라 |
정의: 지지도
지지도(support)는 전체 거래 중 특정 항목집합이 포함된 거래의 비율이다.
- : 지지도를 구하려는 항목집합
- 지지도는 그 항목집합이 얼마나 “흔한” 조합인지를 나타내며, 지지도가 너무 낮은 조합은 우연히 한두 번 같이 팔린 것일 수 있어 최소 지지도(minimum support) 기준 이하는 분석에서 제외한다.
빵과 기저귀를 함께 산 거래는 T2, T4, T5로 3건이다.
빵만 포함된 거래는 T1, T2, T4, T5로 4건이다.
기저귀만 포함된 거래는 T2, T3, T4, T5로 4건이다.
정의: 신뢰도
신뢰도(confidence)는 선행부 를 포함한 거래 중에서, 후행부 까지 함께 포함한 거래의 비율이다. 즉 “X를 산 사람 중 몇 퍼센트가 Y도 샀는가”를 나타낸다.
- : 와 를 모두 포함하는 항목집합(합집합)
- 신뢰도는 조건부확률 (X가 일어났을 때 Y가 일어날 확률)와 같은 개념이다.
빵 -> 기저귀 규칙의 신뢰도를 구해 보자.
빵을 산 4건의 거래 중 3건에서 기저귀도 함께 샀으므로, 신뢰도 0.75(75퍼센트)는 이 계산과 정확히 일치한다.
정의: 향상도
신뢰도만으로는 함정이 있다. 만약 기저귀 자체가 원래 매우 인기 있는 상품이라 아무 조합과 묶어도 신뢰도가 높게 나온다면, 그 규칙이 “빵과 기저귀 사이의 진짜 관계” 때문인지 “기저귀가 원래 잘 팔려서”인지 구분할 수 없다. 이를 보정하기 위한 지표가 향상도(lift)다.
- 향상도가 1보다 크면: 와 가 서로 양(positive)의 관계, 즉 를 살 때 를 살 가능성이 우연(독립일 때의 기대치)보다 더 높아진다.
- 향상도가 정확히 1이면: 와 는 서로 아무 관계가 없다(통계적으로 독립).
- 향상도가 1보다 작으면: 와 가 서로 음(negative)의 관계, 즉 를 살 때 오히려 를 살 가능성이 우연보다 더 낮아진다.
빵 -> 기저귀 규칙의 향상도를 계산해 보자.
결과 해석: 신뢰도가 높아도 향상도가 낮을 수 있다
빵 -> 기저귀 규칙은 신뢰도가 0.75로 꽤 높아 보이지만, 향상도는 0.9375로 1보다 작다. 이는 기저귀 자체의 지지도(0.8, 전체 거래의 80퍼센트에 등장)가 워낙 높아서, 빵을 사든 안 사든 원래 기저귀를 살 확률 자체가 높았기 때문이다. 즉 빵을 사는 것이 기저귀 구매 확률을 오히려 살짝 낮추는 방향(1보다 작으므로)이라, “빵과 기저귀는 함께 사는 경향이 있는 상품”이라고 결론 내리면 안 되는 사례다.
이번에는 맥주 -> 기저귀 규칙을 계산해 비교해 보자. 맥주를 포함한 거래는 T2, T3, T4로 3건이므로 이다. 맥주와 기저귀를 함께 포함한 거래도 T2, T3, T4로 3건이다.
맥주 -> 기저귀 규칙은 신뢰도가 1.0(맥주를 산 사람은 100퍼센트 기저귀도 샀다)이고, 향상도도 1.25로 1보다 크다. 이 규칙은 빵 -> 기저귀와 달리 “맥주와 기저귀가 실제로 함께 팔리는 경향이 우연보다 강하다”고 해석할 수 있는, 진짜 의미 있는 연관 규칙의 예다. 이것이 마케팅 사례로 자주 인용되는 “맥주와 기저귀” 이야기의 핵심 논리다.
자주 틀리는 점
“신뢰도가 높으면 무조건 의미 있는 규칙이다”는 틀린 생각이다. 신뢰도는 후행부 자체의 인기(지지도)를 반영하지 못하므로, 반드시 향상도까지 함께 확인해서 우연(독립일 때의 기댓값)보다 실제로 더 강한 연관이 있는지 검토해야 한다. 또한 향상도가 1보다 작다고 해서 그 규칙이 “틀렸다”는 뜻이 아니라, “두 항목이 서로 대체재 관계에 가깝다” 같은 다른 의미로 해석될 수 있다는 점도 함께 알아 둬야 한다.
Apriori와 FP-Growth: 항목집합을 찾는 방법
왜 필요한가
항목 종류가 개면 만들 수 있는 항목집합의 개수는 개(공집합 제외)로, 이 조금만 커져도 모든 조합의 지지도를 일일이 계산하는 것은 계산량이 폭발적으로 늘어나 현실적이지 않다. 그래서 불필요한 조합을 미리 걸러내는 효율적인 탐색 방법이 필요하며, 대표적인 것이 Apriori와 FP-Growth다.
쉽게 말하면: Apriori는 “부분집합이 흔하지 않으면 그걸 포함한 큰 집합도 흔할 수 없다”는 규칙으로 후보를 미리 쳐내고, FP-Growth는 거래 데이터를 압축한 나무 구조를 만들어 후보 생성 자체를 건너뛴다.
정의: Apriori의 핵심 원리
Apriori 원리(Apriori property)는 “어떤 항목집합이 빈발(자주 등장)하려면, 그 항목집합의 모든 부분집합도 반드시 빈발해야 한다”는 성질이다. 이를 뒤집어 말하면, 어떤 항목집합이 최소 지지도를 넘지 못해 빈발하지 않다면, 그 항목집합을 포함하는 더 큰 항목집합도 절대 빈발할 수 없다. Apriori 알고리즘은 이 성질을 이용해, 크기 1인 항목집합부터 시작해 빈발하지 않는 조합을 가지치기(pruning)하며 단계적으로 크기를 늘려간다.
정의: FP-Growth의 접근
FP-Growth(Frequent Pattern Growth)는 Apriori처럼 후보 항목집합을 일일이 만들어 지지도를 재계산하는 대신, 전체 거래 데이터를 FP-트리(Frequent Pattern Tree, 등장 빈도가 높은 항목을 위쪽에 배치해 압축한 나무 구조)로 한 번만 변환한 뒤, 이 압축된 나무를 훑어 빈발 항목집합을 찾는다. 후보를 반복적으로 생성하고 원본 데이터를 여러 번 스캔해야 하는 Apriori보다, 거래 건수와 항목 종류가 많을 때 일반적으로 더 효율적이다.
두 알고리즘 비교
| 구분 | Apriori | FP-Growth |
|---|---|---|
| 기본 아이디어 | 부분집합이 빈발해야 전체도 빈발할 수 있다는 원리로 후보를 가지치기 | 거래 데이터를 압축한 트리 구조로 변환해 후보 생성을 생략 |
| 데이터 스캔 횟수 | 항목집합 크기를 늘릴 때마다 원본 데이터를 반복해서 스캔 | 트리를 만들 때 원본 데이터를 스캔한 이후로는 트리만 탐색 |
| 후보 생성 | 명시적으로 후보 항목집합을 생성한 뒤 지지도 계산 | 후보를 직접 생성하지 않고 트리 구조로 빈발 패턴을 도출 |
| 적합한 상황 | 항목 종류가 적거나 개념을 이해하기 쉬운 예제 | 거래 건수·항목 종류가 많은 대규모 데이터 |
자주 틀리는 점
Apriori 원리는 “부분집합이 흔하면 전체도 흔하다”가 아니라, 그 역방향인 부정 명제로 활용된다는 점에 유의해야 한다. 즉 “부분집합이 흔하지 않으면(빈발하지 않으면) 그 부분집합을 포함하는 더 큰 집합도 흔할 수 없다”는 논리로 후보를 걸러내는 것이지, “부분집합이 흔하다고 해서 그것을 포함한 더 큰 집합도 반드시 흔하다”는 뜻은 아니다.
연관 규칙의 활용과 한계
활용 사례
- 장바구니 분석(market basket analysis): 마트·이커머스에서 함께 구매되는 상품을 찾아 매대 배치나 묶음 할인에 활용한다.
- 추천 시스템: “이 상품을 담은 고객이 함께 담은 상품” 형태의 추천에 연관 규칙의 아이디어가 쓰인다.
- 웹 로그·클릭 분석: 사용자가 어떤 페이지를 본 뒤 어떤 페이지로 이동하는지 패턴을 찾는 데도 같은 논리를 적용할 수 있다.
한계와 자주 틀리는 점
연관 규칙에서 찾아낸 “함께 팔린다”는 패턴은 상관관계(correlation)이지 인과관계(causation, 원인과 결과 관계)가 아니다. 맥주와 기저귀가 함께 잘 팔린다는 규칙이 나왔다고 해서 “맥주를 사면 기저귀를 사게 만드는 원인이 된다”고 해석하면 안 되며, 단지 두 상품을 사는 고객층이나 상황이 겹친다는 관찰에 불과하다. 또한 최소 지지도·최소 신뢰도 기준을 너무 낮게 잡으면 우연히 몇 번 같이 팔린 조합까지 규칙으로 쏟아져 나와 실제로 쓸모없는 규칙이 지나치게 많아질 수 있다는 점도 실무에서 자주 지적되는 함정이다.
핵심 정리
- 연관 규칙 는 지지도(전체에서 얼마나 흔한가), 신뢰도(X를 살 때 Y까지 살 조건부확률), 향상도(우연보다 얼마나 더 강한 관계인가)로 강도를 판단한다.
- 신뢰도가 높아도 후행부 자체의 지지도가 높으면 향상도가 1보다 작을 수 있으므로, 신뢰도만 보지 말고 반드시 향상도까지 함께 확인해야 한다.
- Apriori는 “부분집합이 빈발하지 않으면 전체도 빈발할 수 없다”는 원리로 후보를 가지치기하며, FP-Growth는 FP-트리로 데이터를 압축해 후보 생성을 생략한다.
- 연관 규칙이 찾아낸 패턴은 상관관계일 뿐 인과관계를 의미하지 않는다.