기본 콘텐츠로 건너뛰기

Apriori 알고리즘 (장바구니 분석)

장바구니에 담긴 손님의 마음을 읽는 방법, Apriori 알고리즘

마트 진열대를 걷다 보면 맥주 옆에 기저귀가, 빵 옆에 잼이 놓여 있는 걸 본 적 있으신가요? 우연이 아닙니다. 수많은 거래 데이터를 들여다보면 "이 상품을 산 사람은 저 상품도 같이 산다"는 패턴이 뚜렷하게 드러나거든요. 이런 패턴을 숫자로 잡아내는 대표적인 방법이 바로 Apriori 알고리즘입니다.

데이터 분석을 막 시작한 분이라면 "연관 규칙", "지지도", "신뢰도" 같은 용어를 듣는 순간 머리가 복잡해질 수 있습니다. 하지만 걱정하지 않으셔도 됩니다. 이 글에서는 수식보다 직관을, 이론보다 예시를 앞세워서 Apriori 알고리즘의 핵심을 차근차근 풀어보겠습니다.

왜 거래 데이터를 분석해야 할까

편의점이든 온라인 쇼핑몰이든, 매일 쌓이는 영수증 데이터에는 손님들의 구매 습관이 숨어 있습니다. 어떤 상품을 함께 사는지 알면 진열 위치를 바꾸거나, 묶음 상품을 기획하거나, 추천 상품을 보여줄 때 훨씬 똑똑한 결정을 내릴 수 있습니다.

문제는 상품 종류가 수백, 수천 개로 늘어나면 가능한 조합의 수가 폭발적으로 많아진다는 점입니다. 사람이 일일이 들여다볼 수 없는 규모죠. 이때 필요한 것이 바로 장바구니 분석(Market Basket Analysis)이고, 그 출발점에 Apriori 알고리즘이 있습니다.

Apriori 알고리즘을 이루는 세 가지 척도

Apriori 알고리즘은 두 상품(또는 그 이상) 사이의 관계를 세 가지 지표로 측정합니다. 계산 순서도 정해져 있는데, 지지도 → 신뢰도 → 향상도 순으로 단계를 밟아 나갑니다. 하나씩 풀어보겠습니다.

1. 지지도(Support) — 얼마나 자주 같이 팔렸나

지지도는 전체 거래 중에서 두 아이템이 동시에 포함된 거래가 차지하는 비율입니다.

지지도 = (A와 B를 모두 포함한 거래 수) ÷ (전체 거래 수)

지지도가 높을수록 두 상품이 같이 등장하는 경우가 많다는 뜻입니다. 다만 지지도만 보면 함정이 있습니다. 라면처럼 워낙 잘 팔리는 상품은 어떤 상품과 묶어도 지지도가 높게 나올 수 있거든요. 그래서 다음 지표가 필요합니다.

2. 신뢰도(Confidence) — A를 사면 B도 살 확률

신뢰도는 한 아이템을 산 사람이 다른 아이템도 같이 살 확률을 나타냅니다.

신뢰도(A→B) = (A와 B를 모두 포함한 거래 수) ÷ (A를 포함한 거래 수)

여기서 중요한 점은 방향성입니다. "A를 사면 B도 산다"는 신뢰도와 "B를 사면 A도 산다"는 신뢰도는 분모가 다르기 때문에 값이 서로 다를 수 있습니다. A가 워낙 인기 상품이라 분모가 크면, A→B의 신뢰도는 낮게 나올 수 있는 것이죠.

3. 향상도(Lift) — 이 관계가 우연이 아닐 확률

신뢰도까지 보면 충분할 것 같지만, 한 가지가 빠져 있습니다. B라는 상품이 원래 워낙 잘 팔리는 상품이라면, A를 사든 안 사든 B를 살 확률 자체가 높을 수 있습니다. 그렇다면 A와 B 사이에 진짜 연관이 있는 걸까요, 아니면 그냥 B가 인기 상품이라서 그런 걸까요? 이 질문에 답해주는 지표가 향상도입니다.

향상도(A→B) = 신뢰도(A→B) ÷ (B만 포함한 거래 수 ÷ 전체 거래 수)

쉽게 말하면, "A를 산 사람이 B를 살 확률"을 "그냥 아무나 B를 살 확률"로 나눈 값입니다. 이 비교를 통해 두 상품의 관계가 우연인지 아닌지를 판단할 수 있습니다.

  • 향상도 > 1 : 양의 상관관계. A를 사면 B를 살 가능성이 평소보다 높아집니다.
  • 향상도 = 1 : 두 아이템은 서로 독립적입니다. A를 사든 안 사든 B를 살 확률은 그대로입니다.
  • 향상도 < 1 : 음의 상관관계. A를 사면 오히려 B를 살 가능성이 줄어듭니다.

결국 지지도와 신뢰도로 "함께 팔리는 패턴"을 찾고, 향상도로 "이게 진짜 의미 있는 관계인지"를 확인하는 흐름입니다.

숫자로 직접 계산해보기

이해를 돕기 위해 간단한 예제를 들어보겠습니다. 어느 편의점에서 하루 동안 발생한 거래가 100건이라고 가정해봅니다.

  • 전체 거래: 100건
  • 빵을 포함한 거래: 40건
  • 잼을 포함한 거래: 25건
  • 빵과 잼을 모두 포함한 거래: 15건

지지도 계산은 이렇게 됩니다.

지지도(빵, 잼) = 15 ÷ 100 = 0.15 (15%)

전체 거래 중 15%에서 빵과 잼이 함께 팔렸다는 의미입니다.

신뢰도는 방향에 따라 두 가지로 계산됩니다.

신뢰도(빵→잼) = 15 ÷ 40 = 0.375 (37.5%)
신뢰도(잼→빵) = 15 ÷ 25 = 0.6 (60%)

빵을 산 사람 중 37.5%가 잼도 샀고, 반대로 잼을 산 사람 중에서는 60%가 빵도 샀다는 뜻입니다. 같은 두 상품이라도 어느 쪽을 기준으로 보느냐에 따라 수치가 달라지는 걸 확인할 수 있습니다.

향상도를 계산하려면 잼만 봤을 때의 비율이 먼저 필요합니다.

잼 구매 비율 = 25 ÷ 100 = 0.25
향상도(빵→잼) = 0.375 ÷ 0.25 = 1.5

향상도가 1.5로 1보다 크기 때문에, 빵과 잼은 단순한 우연이 아니라 실제로 함께 구매되는 경향이 있는 양의 상관관계임을 알 수 있습니다.

계산 결과를 어떻게 해석할까

위 예제에서 빵과 잼의 향상도는 1.5였습니다. 이 숫자가 의미하는 바를 풀어보면, 잼을 살 확률이 평소보다 1.5배 높아진다는 뜻입니다. 빵을 산 사람에게 잼을 추천하거나, 두 상품을 가까운 진열대에 배치하는 전략이 데이터로 뒷받침되는 셉니다.

반대로 어떤 두 상품의 향상도가 1에 가깝거나 그 이하로 나온다면, 굳이 같이 진열하거나 묶음 상품으로 만들 이유가 약하다고 판단할 수 있습니다. 우연히 같은 날 팔렸을 뿐, 실제 구매 행동에 별다른 연결고리가 없다는 신호니까요.

다만 지지도가 지나치게 낮은 조합은 향상도가 높게 나와도 신뢰하기 어렵습니다. 예를 들어 100건 중 단 2건에서만 같이 팔린 상품이라면, 우연히 그런 결과가 나왔을 가능성도 무시할 수 없습니다. 그래서 실무에서는 최소 지지도 기준(예: 1% 이상)을 먼저 정해두고, 그 기준을 넘는 조합들만 신뢰도와 향상도로 추가 검증하는 방식을 사용합니다.

실전에서 활용할 때 알아두면 좋은 팁

실제 데이터에 Apriori 알고리즘을 적용할 때 참고할 만한 점들을 정리해봤습니다.

  • 최소 지지도와 최소 신뢰도를 먼저 설정하세요. 모든 조합을 다 살펴보면 계산량이 기하급수적으로 늘어납니다. 의미 있는 조합만 걸러내는 기준선을 먼저 정하는 것이 효율적입니다.
  • 향상도가 1을 살짝 넘는 정도라면 추가 검증이 필요합니다. 거래량이 충분히 많은 데이터에서 나온 결과인지 확인해보는 과정이 중요합니다.
  • 계절성이나 이벤트 효과를 고려하세요. 특정 시즌(예: 명절)에만 나타나는 일시적인 연관관계일 수도 있으므로, 기간을 나눠서 분석해보는 것도 좋은 방법입니다.
  • 세 개 이상의 아이템 조합도 분석 가능합니다. 빵과 잼뿐 아니라 "빵, 잼, 버터"처럼 세 가지 이상의 조합으로 확장할 수 있으며, Apriori는 이런 다중 아이템셋 분석의 기초가 됩니다.
  • 파이썬으로 손쉽게 구현할 수 있습니다. mlxtend 라이브러리의 apriori, association_rules 함수를 활용하면 직접 수식을 짜지 않고도 지지도, 신뢰도, 향상도를 한 번에 계산할 수 있습니다.

자주 묻는 질문 (FAQ)

Q1. 지지도, 신뢰도, 향상도 중 가장 중요한 지표는 무엇인가요?
하나만 보고 판단하기보다는 세 지표를 함께 보는 것이 중요합니다. 지지도로 충분한 거래량이 있는지 먼저 확인하고, 신뢰도로 방향성 있는 구매 패턴을 살핀 뒤, 향상도로 그 관계가 우연이 아닌지 최종 확인하는 흐름이 일반적입니다.

Q2. 향상도가 1보다 작으면 그 조합은 아무 의미가 없는 건가요?
꼭 그렇지는 않습니다. 향상도가 1보다 작다는 것은 두 상품이 서로 대체재 관계일 가능성을 시사하기도 합니다. 예를 들어 콜라와 사이다처럼 한쪽을 사면 다른 쪽을 덜 사는 경우, 음의 상관관계가 나타날 수 있습니다.

Q3. Apriori 알고리즘은 어떤 분야에서 주로 쓰이나요?
가장 잘 알려진 활용처는 소매업의 장바구니 분석이지만, 그 외에도 온라인 쇼핑몰의 상품 추천, 웹사이트 페이지 간 이동 패턴 분석, 의료 데이터에서 증상-질병 간 연관성 분석 등 다양한 분야에서 활용되고 있습니다.

Q4. 데이터가 적어도 Apriori 알고리즘을 적용할 수 있나요?
적용 자체는 가능하지만, 거래 건수가 너무 적으면 지지도와 향상도 값이 우연에 의해 크게 흔들릴 수 있습니다. 신뢰할 만한 결과를 얻으려면 어느 정도 규모 있는 거래 데이터가 확보된 상태에서 분석하는 것을 권장합니다.


참고문헌

이 글은 일반적으로 알려진 Apriori 알고리즘과 장바구니 분석(Market Basket Analysis)의 개념을 바탕으로 작성되었으며, 특정 외부 자료를 직접 인용하지 않았습니다. 추가로 학습하고자 하시는 분은 mlxtend 공식 문서(association_rules, apriori 모듈)를 참고하시면 도움이 됩니다.

댓글

이 블로그의 인기 게시물

PyMOL 명령어 정리: 논문·발표용 이미지 스크립트까지 한 번에

PyMOL 명령어 정리: 논문·발표용 이미지 스크립트까지 한 번에 지난 PyMOL 설치·마우스 조작 글에 대한 반응이 예상보다 컸습니다. 설치는 끝냈고 화면도 어느 정도 돌려봤는데, 그다음이 막막하다는 분들이 많았습니다. 커맨드 라인에 뭘 쳐야 할지 몰라 결국 캡처 화면만 들고 보고서를 쓰거나, 어디서 복사해온 스크립트를 그대로 붙여 넣었다가 에러 메시지만 보고 포기하는 경우입니다. 이번 글은 그 다음 단계, 즉 실제로 자주 쓰는 명령어와 논문·발표용 이미지를 뽑아내는 스크립트를 정리합니다. 다만 인터넷에 떠도는 PyMOL 스크립트 중에는 예전 버전 문법이거나, 애초에 존재하지 않는 세팅 이름이 섞여 있는 경우가 적지 않습니다. 그래서 이 글에 실린 모든 명령어는 PyMOL 공식 문서와 PyMOL Wiki를 기준으로 하나씩 확인한 뒤 실었습니다. 확인 과정에서 실제로 동작하지 않는 표현 3곳을 발견해 수정했고, 어떤 부분이 왜 틀렸는지는 별도로 짚어두었습니다. 1. 화면 제어 및 구조 불러오기 커맨드 라인은 화면 하단에 있습니다. 아래 명령어들은 세션을 시작할 때 거의 매번 쓰게 되는 기본기입니다. PDB 구조 불러오기 : fetch 1tup — 인터넷에서 해당 PDB ID의 구조를 바로 내려받아 표시합니다. 배경색 변경 : bg_color white — 논문·발표 자료는 흰 배경이 기본입니다. 화면 정렬/초기화 : orient — 구조 전체가 화면에 꽉 차도록 각도와 확대 비율을 자동으로 맞춥니다. zoom 은 현재 각도를 유지한 채 확대 비율만 조정한다는 점에서 차이가 있습니다. 특정 부위로 확대 : zoom resi 150 — 150번 잔기를 중심으로 확대합니다. 도킹 부위나 특정 변이 위치를 자세히 볼 때 유용합니다. 2. 표시 방식과 컬러링 리본형(2차 구조 강조) : show cartoon 막대형(원자·결합 강조) : show sticks 공간 채움형 : show spheres 표면형 : show ...

PyMOL 설치 방법부터 마우스 사용법까지 — AI 신약개발 시대 분자 시각화 입문 가이드

"AI가 신약을 설계해준다"는 말은 이제 뉴스 헤드라인이 아니라 실험실의 일상이 되었습니다. 알파폴드 같은 단백질 구조 예측 모델이 구조 데이터를 쏟아내면서, 그 결과물을 사람이 눈으로 확인하고 해석하는 능력은 오히려 더 중요해졌습니다. 그 확인 작업의 표준 도구가 바로 PyMOL입니다. 그런데 막상 PyMOL을 처음 켜본 분들의 반응은 대체로 비슷합니다. 마우스를 드래그했는데 분자가 움직이는 줄 알았더니 사실은 화면(카메라)이 돌아간 것이고, 어떤 때는 또 분자 자체가 진짜로 움직여서 구조가 깨진 것처럼 보이기도 합니다. 단축키를 몰라서 우왕좌왕하다가 그냥 캡처 화면만 들고 보고서를 쓰는 경우도 많습니다. 이 글에서는 컴퓨터 비전공자도 따라 할 수 있도록 PyMOL 설치부터, 가장 많이 헷갈리는 마우스 동작의 원리, 실전 사용법까지 순서대로 정리합니다. PyMOL이 AI 신약개발 시대에 필수가 된 이유 PyMOL은 단백질, 핵산, 저분자 화합물 같은 생체분자의 3차원 구조를 시각화하는 프로그램입니다. 단순히 "예쁜 그림"을 만드는 도구가 아니라, 결합 부위의 형태를 확인하고 화합물이 들어갈 공간을 가늠하고 변이가 일어난 자리를 짚어내는 분석 도구입니다. 요즘 AI 신약개발 파이프라인은 보통 이런 흐름을 따릅니다. AI 모델이 단백질 구조를 예측하거나 결합 후보 화합물을 제안하면, 연구자가 그 결과를 분자 시각화 프로그램으로 열어 타당성을 검토합니다. 예측이 그럴듯해 보이는지, 입체 장애는 없는지, 알려진 결합 부위와 일치하는지를 눈으로 확인하는 단계가 빠지지 않습니다. 그 검증 단계에 PyMOL이 사실상 업계 표준으로 쓰이고 있어서, 생물학이나 제약 전공자라면 코딩 경험이 없어도 PyMOL 사용법 정도는 익혀두는 편이 유리합니다. PyMOL 설치, 두 가지 무료 경로 중 나에게 맞는 것 고르기 PyMOL은 신기하게도 "무료"라는 말이 두 가지 다른 의미로 쓰입니다. 어떤 경로로 받느냐에 따...

CQA(Critical Quality Attribute)란 무엇인가: 바이오의약품 CMC에서 "관리해야 할 것"을 정하는 방식

CQA(Critical Quality Attribute)란 무엇인가: 바이오의약품 CMC에서 "관리해야 할 것"을 정하는 방식 시험 목록을 보다 보면 이런 의문이 듭니다. "이 시험은 왜 하는 거지?" SEC-HPLC로 Aggregation을 보고, CEX로 Charge Variant를 보고, ELISA로 HCP를 보는데, 정작 "왜 이 항목들을 관리해야 하는가"에 대한 답은 문서 어디에도 명확히 적혀 있지 않은 경우가 많습니다. 이 질문에 답하는 개념이 바로 CQA, Critical Quality Attribute입니다. 이전 글 RACI Matrix: 바이오·제약 CMC 조직에서 의사결정이 꼬이는 진짜 원인 에서는 "누가 결정하는가"를 다뤘다면, 이번 글은 그 결정의 대상, 즉 "무엇을 관리해야 하는가"를 다룹니다. CQA는 시험 항목을 나열한 표가 아니라, 제품 품질과 환자 안전을 연결하는 과학적 의사결정 체계입니다. CQA란 무엇인가 ICH Q8(R2)에서는 CQA를 이렇게 정의합니다. "제품이 요구되는 품질, 안전성, 유효성을 확보하기 위해 적절한 한계, 범위 또는 분포 내에서 관리되어야 하는 물리적, 화학적, 생물학적 또는 미생물학적 특성 또는 성질" 풀어 말하면 이렇습니다. CQA = 제품의 품질 특성 중, 변화가 생겼을 때 환자에게 미치는 영향을 고려해 반드시 관리해야 하는 핵심 특성 항체(mAb) 제품을 예로 들면, 하나의 분자 안에도 관리 가능한 특성이 수십 가지 존재합니다. 품질 특성 대표 시험 Primary structure Peptide mapping Aggregation SEC-HPLC Charge variant CEX-HPLC Glycosylation LC-MS Potency Cell-based assay Host Cell Protei...