0. 분석의 시작점
"데이터로 읽는 유통의 미래: 직관을 넘어 예측의 시대로"
McKinsey & Company는 데이터 기반 의사결정을 내리는 기업이
그렇지 않은 기업보다 고객 유치 확률은 23배, 수익성은 19배 더 높다고 강조한 바 있습니다.
Bain & Company의 2025 소비자 제품 보고서에 따르면,
글로벌 소비재(CPG) 판매 성장률은 2022년 9.8%에서 2024년 7.5%로 둔화되었는데요,
어려운 시장 속에서도 글로벌 유통 공룡들은 이미 기존의 데이터를 활용하여 고객의 미래 행동을 예측하며 비지니스를 성장시키고 있습니다.
- Sysco(시스코): 북미 최대 식자재 유통 기업 시스코는 AI와 디지털 영업 도구를 활용해 고객의 과거 구매 패턴을 분석, '구매 시점이 도래한 품목'을 선제적으로 제안하며 외식 수요 감소 위기 돌파
- Amazon(아마존): 고객이 주문하기도 전에 물품을 인근 물류센터로 이동시키는 '예측 배송(Anticipatory Shipping)' 시스템을 통해 물류 패러다임 전환
이러한 사례들은 데이터를 통한 정밀한 고객 이해와 운영 효율화의 중요성이 커지고 있음을 시사합니다.
본 프로젝트는 UCI Wholesale Customer 데이터셋을 기반으로 고객의 페르소나를 정의하고,
신규 고객들에 대한 전략 수립을 대시보드화로 가시화하여 이해하기 위해 기획되었습니다.
데이터 전처리부터 머신러닝 모델 학습 및 채택 판단 근거, 그리고 태블로를 통한 시각화 과정을 공유합니다.
[목차]
1. 프로젝트 개요
2. 데이터 탐색 및 전처리
3. 머신러닝 기반 분석 프로세스
① PCA
② K-Means 클러스터링 (고객 페르소나 도출)
③ 머신러닝 분류 모델 선정
④ 모델 성능FEATURE IMPORTANCE , SHAP 분석
4. TabPy 연동
5. 태블로 대시보드 제작
6. 결론 및 비지니스 제언
1. 프로젝트 개요
본 프로젝트의 목적은 UCI Wholesale Customer 데이터셋을 활용하여 다음 세 가지 질문에 답하는 것입니다.
- 고객 세분화: 고객은 어떤 구매 특성을 가진 그룹으로 나뉘는가? (K-Means)
- 채널 예측: 신규 고객의 구매 패턴만으로 이들이 '호텔/레스토랑/카페 유형(Horeca)'인지 '소매 유형(Retail)'인지 판별할 수 있는가?
- 비즈니스 구현: 현업 담당자가 실시간으로 예측치를 확인할 수 있는 환경을 어떻게 구축할 것인가? (TabPy & Tableau)
(출처: https://www.kaggle.com/datasets/binovi/wholesale-customers-data-set)
2. 데이터 탐색 및 전처리
데이터는 총 440개의 행과 8개의 변수(품목별 연간 구매액, 지역, 채널)로 구성되어 있습니다.
| 컬럼명 | 의미 | 설명 |
| Channel | 유통 채널 | 고객의 거래 채널. Horeca(호텔·레스토랑·카페) 또는 Retail(소매점) 구분에 사용됨 |
| Region | 지역 | 고객이 속한 지리적 지역 구분 변수. 특정 국가 내의 권역 정보 |
| Fresh | 신선식품 구매액 | 육류, 채소, 과일 등 신선식품 카테고리에 대한 연간 구매 금액 |
| Milk | 유제품 구매액 | 우유, 치즈, 요거트 등 유제품 카테고리에 대한 연간 구매 금액 |
| Grocery | 식료품 구매액 | 가공식품, 일반 식료품 등 장기 보관 식품 카테고리 구매 금액 |
| Frozen | 냉동식품 구매액 | 냉동 육류, 냉동 가공식품 등 냉동식품 카테고리 구매 금액 |
| Detergents_Paper | 세제·종이류 구매액 | 세제, 화장지, 키친타월 등 생활 소모품 구매 금액 |
| Delicassen | 즉석·가공식품 구매액 | 즉석식품, 델리 식품, 가공 반찬류 등의 구매 금액 |
2. 데이터 탐색 및 전처리 | 기초 통계량
- [요약] 품목별 구매액의 편차가 매우 크고 우측으로 꼬리가 긴 분포(Skewed)를 확인했습니다.
2-1 describe 함수를 통한 기초 통계량 확인

- 결측치 부재: 440개의 샘플 모두 결측치 없이 정제되어 있어 데이터 신뢰도가 높음을 확인했습니다.
- 분산의 비대칭성: 모든 품목에서 평균(Mean)이 중앙값(Median)보다 높게 나타났으며, 특히 Max 값이 평균 대비 수십 배에 달하는 등 소수 우량 고객에 의한 매출 쏠림 현상을 포착했습니다.
2-2 seaborn 패키지 기반 시각화 | 히스토그램 / 박스 플럿


- Hisplot 및 Boxplot 을 통해 모든 변수에서 우측의 긴 꼬리 (이상치)의 존재를 확인했습니다
2-3 z-score 기반 이상치와 왜도 점검

- Z-score(표준점수)는 해당 값이 평균에서 표준편차 몇 배만큼 떨어져 있는지를 나타내는 수치이며,
|z| > 3을 이상치 기준으로 사용했습니다 - 이상치(Outliers) 판별: |z| > 3 기준을 적용했을 때 모든 품목에서 극단치가 존재함을 확인했습니다. 이를 방치할 경우 머신러닝 모델이 일반 고객이 아닌 특이 케이스(VVIP 등)에만 과적합(Overfitting)될 위험이 있습니다.
- 왜도 개선 확인: 원본 데이터의 높은 왜도를 확인한 후, 로그 변환 권장 지수(log_recommended)가 모든 품목에서 True임을 도출했습니다.
2. 데이터 탐색 및 전처리 | 전처리
- [요약] 머신러닝 모델의 왜곡을 방지하기 위해 Log Transformation을 수행하고, 변수 간 단위 차이를 맞추기 위해 StandardScaler를 적용했습니다.
2-4 seaborn 패키지 기반 시각화 | 히스토그램 / 박스 플럿

- Action: 억 단위와 백만 단위 구매액 사이의 거대한 간극을 로그 스케일로 압축했습니다.
- Value: 우측으로 길게 늘어진 꼬리 분포를 정규분포 형태로 변환함으로써, 모델이 모든 구매 구간의 패턴을 고르게 학습할 수 있는 환경을 조성했습니다.
2-5 StandardScaler 적용

- Action: 서로 다른 품목별 구매 단위(Unit)를 평균 0, 표준편차 1의 표준 정규분포로 스케일링했습니다.
- Selection Reason (왜 StandardScaler인가?): 본 프로젝트의 핵심인 K-Means(거리 기반)와 PCA(분산 기반) 알고리즘은 변수의 절대 수치에 민감합니다.
- 금액대가 큰 '신선식품(Fresh)'에만 모델이 좌우되지 않도록, 'Detergents_Paper'처럼 금액은 적지만 채널 구분력이 높은 변수의 영향력을 동일한 가중치로 반영하기 위해 선택했습니다.
2. 데이터 탐색 및 전처리 | 상관분석
2-6 스피어만 상관관계
- [요약] 각 변수들간의 관련성을 파악
- 본격적인 모델링에 앞서 각 품목 간의 관련성을 파악하기 위해 상관분석을 실시했습니다. 이는 변수들이 서로 얼마나 정보를 공유하고 있는지 확인하여, 이후 PCA(주성분 분석)를 통한 데이터 압축의 타당성을 검토하기 위함입니다.

① 분석 기법의 선택: 왜 Spearman인가?
일반적으로 사용하는 피어슨(Pearson) 상관계수 대신 스피어만(Spearman) 순위 상관계수를 채택했습니다.
- 이유 1 (이상치 대응): 앞선 EDA에서 확인했듯 본 데이터는 이상치가 많아, 수치 자체에 민감한 피어슨 계수보다 순위를 기반으로 하는 스피어만이 더 안정적인 결과를 제공합니다.
- 이유 2 (비선형성): 품목 간의 관계가 반드시 선형적이지 않더라도, 구매액의 증가 추세(단조성)를 정확히 포착할 수 있습니다.
- 신뢰성 확보: 모든 상관계수에 대해 p-value 검정을 실시하여, 도출된 관계가 통계적으로 유의미함을 확인했습니다.
② 핵심 발견: Milk-Grocery-Detergents_Paper의 강력한 연결고리
분석 결과, 특정 품목군 사이에서 매우 밀접한 상관관계가 관찰되었습니다.
| 변수 쌍 | 상관계수(Spearman) | 관계 강도 |
| Grocery ↔ Detergents_Paper | 0.801 | 매우 강함 |
| Milk ↔ Grocery | 0.773 | 매우 강함 |
| Milk ↔ Detergents_Paper | 0.680 | 강함 |
③ PCA 전 사전 확인의 필요성 (Bridge to PCA)
이 상관분석 결과는 다음 단계인 PCA의 결정적 근거가 됩니다.
- 정보의 중복 확인: 세 변수(Milk, Grocery, Detergents_Paper)가 강하게 묶여 있다는 것은, 이들을 각각 개별 변수로 다루기보다 가공 및 소모품 구매 성향'이라는 하나의 핵심 축으로 통합했을 때 데이터의 특징을 더 잘 설명할 수 있음을 시사합니다.
- 차원 축소의 정당성: 변수들이 서로 따로 놀지 않고 뭉쳐 있으므로, 정보를 적게 잃으면서도 적은 수의 주성분으로 압축할 수 있다"는 확신을 가지고 PCA 단계로 진입할 수 있었습니다.
(참고) 상관관계의 신뢰성 검정 (P-value Verification)
도출된 상관관계가 통계적으로 유의미한지 확인하기 위해 유의수준(α) 0.05를 기준으로 스피어만 순위 상관분석 기반의 가설 검정을 수행했습니다.
- 귀무가설(H0): 두 변수 간에는 상관관계가 없다. (상관계수 = 0)
- 대립가설(H1): 두 변수 간에는 유의미한 상관관계가 존재한다.
분석 결과: 대부분 품목 유의미한 상관관계 확인
작성한 파이썬 코드를 통해 모든 변수 쌍의 p-value를 계산한 결과,
상관계수가 높게 나타난 주요 변수 쌍들의 p-value가 모두 0.05보다 훨씬 작게 나타났습니다.

3. 머신러닝 프로세스
① PCA 주성분 분석 | 고차원 데이터를 관통하는 핵심 축 도출
1. PCA 개요: 6개의 복잡함을 3개의 핵심으로
- 정의: 여러 변수(품목) 간의 상관관계를 이용해 정보 손실을 최소화하며 데이터를 대표하는 새로운 축(PC)을 생성하는 기법입니다.
- 분석 결과: 상위 3개의 주성분만으로 전체 변동의 약 81.9%를 설명 가능함을 확인했습니다.
- PC1 (44.1%): 전체 데이터의 절반 가까운 흐름을 결정하는 가장 강력한 축
- PC2 (27.2%): 두 번째로 중요한 구매 패턴 형성
- PC3 (10.7%): 특정 품목(델리 등)의 미세한 차이 설명

2. 로딩값(Loading) 분석: 주성분에 비즈니스 언어 입히기
로딩값은 각 품목이 주성분을 형성하는 데 기여한 '성적표'입니다.
로딩값의 절댓값이 클수록 그 주성분의 성격을 많이 좌우하는 품목입니다.
- PC1: Milk, Grocery, Detergents_Paper의 기여도가 압도적입니다. 가공식품과 생활용품 중심의 대량 구매 성향을 나타냅니다.
- PC2 : Fresh, Frozen 품목의 기여도가 높습니다. 신선 식품과 냉동 식자재 중심의 식당/호텔 구매 성향을 나타냅니다.
- PC3 : Delicassen 비중이 두드러지며, 고급 가공식품이나 특수 품목에 대한 선호도를 설명합니다.

3. 분석의 목적: Biplot 시각화를 통한 PCA 분석
- 차원 축소: 사람이 인지할 수 없는 6차원의 구매 데이터를 2차원 평면(PC1, PC2)으로 투영하여 시각적 분석 환경을 구축했습니다. (Biplot)
Biplot은 고객(점)과 품목(화살표)을 한 좌표계에 그려 채널의 특성을 시각적으로 증명합니다.
- 화살표 방향: 고객 점이 특정 품목 화살표 방향에 모여 있다면, 해당 품목의 구매 비중이 높은 그룹입니다.
- 화살표 각도: 화살표 사이의 각도가 좁을수록 두 품목은 함께 구매되는 경향이 강합니다. (예: Grocery-Detergents_Paper의 좁은 각도 = 높은 동시 구매율)

② K-Means 클러스터링 | 5가지 고객 페르소나
1. K-Means 알고리즘: 행동 데이터 기반의 고객 그룹화
- K-Means 알고리즘이란? 구매 패턴이 유사한 고객들을 하나의 그룹으로 묶어주는 대표적인 비지도 학습 알고리즘입니다.
- 역할: 각 고객을 PCA 좌표계(PC1, PC2) 상의 점으로 표현하고, 그룹 내 응집도는 극대화하고 그룹 간 이질성은 확보하는 최적의 군집을 찾아냅니다.
- 본 프로젝트의 활용: 440명의 고객을 단순한 '숫자'가 아닌, 5개의 전략적 세그먼트로 나누어 차별화된 마케팅 전략을 수립하는 데 활용했습니다.
2. 최적 군집 수(K) 결정: 과학적 근거 기반의 의사결정
임의적인 판단이 아닌 통계적 지표를 결합하여 K=5를 도출했습니다.
- 엘보우 방법 (Elbow Method): 군집 내 제곱거합(WCSS)의 감소 폭이 급격히 줄어드는 지점을 확인했습니다. K=5 이후 완만해지는 '팔꿈치' 지점을 포착하여 효율적인 군집 수를 결정했습니다.
- 실루엣 스코어 (Silhouette Score): 각 데이터가 자신이 속한 군집과 얼마나 잘 어울리는지 나타내는 지표입니다. K=5에서 약 0.2689를 기록, 현실 세계의 복잡한 유통 데이터에서 유의미한 분리도가 확보되었음을 검증했습니다.



3. 군집 결과 시각화


| 페르소나 | 고객 비중 |
매출 비중 |
평균 구매액 | 핵심 패턴 (평균 대비) | 주요 전략 |
| ① 대형 리테일·편의점형 | 24.5% | 40.3% (최고) | 54,557 MU | 전 품목 평균 대비 2배 이상 구매 |
전담 매니저배치, 대량 구매 전용 단가 정책 |
| ② 신선·냉동 중심형 | 28.2% (최다) | 29.2% | 34,441 MU | 신선식품(1.6배), 냉동식품(1.9배) 식자재 특화 | 콜드체인 물류 강조, 정기 식자재 구독 모델 및 시즌 패키지 제안 |
| ③ 식료품·세제 강조형 | 12.0% | 12.5% | 34,367 MU | 가공식품/세제 등 공산품 집중 (평균 2.5배) | 주력 품목 점유율 수성 타겟 할인, 인접 카테고리 교차 판매 |
| ④ 소규모 균형형 | 25.9% | 14.0% | 17,898 MU | 품목 편중 없는 소량 다품목 구매 (안정적 기반) | 미구매 품목 샘플링을 통한 장바구니 확대, 로열티 멤버십 운영 |
| ⑤ 초소규모·냉동 위주형 | 9.3% | 4.1% | 14,506 MU | 냉동 위주 목적성 구매, 기타 품목 저조 |
진입 장벽 완화(최소 주문량 한시적 인하), 웰컴 프로모션 강화 |
- 매출 기여도 기반 집중 관리: 전체 고객의 24.5%에 불과한 '대형 리테일형' 그룹이 전체 매출의 40%를 견인하고 있습니다. 이는 철저한 파레토 법칙(80:20)을 따르고 있으며, 이들에 대한 이탈 방지가 기업 수익성의 핵심임을 시사합니다.
- 성장 동력 발굴: '신선·냉동 중심형'은 고객 수와 매출 비중이 모두 균형 있게 높습니다. 이들의 신선식품 수요를 공산품(세제류 등)으로 전이시킬 수 있다면 추가적인 매출 성장의 기회가 될 것으로 보입니다.
③ 머신러닝 분류 모델 | 고객 채널(Horeca vs Retail) 자동 예측
어떤 채널인지 예측하기 위해 다양한 알고리즘을 비교 평가했습니다.
1. 분석의 목적 : 왜 채널을 예측해야 하는가 ?
- 타겟 마케팅 최적화: 신규 고객의 초기 구매 패턴만 보고도 이들이 호텔/레스토랑/카페 유형 (Horeca)인지 소매 유형 (Retail)인지 즉시 판별하여 맞춤형 카탈로그를 발송할 수 있습니다.
- 영업 리소스 효율화: 영업 사원이 직접 방문하기 전에 채널을 예측함으로써, 우선순위가 높은 잠재 고객에게 인력을 집중 배치할 수 있습니다.
- 데이터 기반의 자동화: 직관에 의존하던 고객 분류를 머신러닝 모델로 자동화하여 의사결정의 속도와 정확도를 동시에 높입니다.
2. 입력 데이터 및 전처리 (Data Pipeline)
분석의 일관성을 위해 앞선 클러스터링과 동일한 전처리 과정을 공유하도록 설계했습니다.
- 타겟 변수(y): Channel (0: Horeca / 1: Retail)
- 입력 변수(X): 6개 품목의 구매액 + 지역(Region) 정보
- 주요 전처리:
- Log Transformation: 구매액의 거대한 편차를 줄여 모델이 패턴을 고르게 학습하도록 유도
- Standard Scaling: 모든 품목의 단위를 통일하여 '공정한 영향력' 부여
- One-Hot Encoding: '지역'과 같은 범주형 데이터를 컴퓨터가 인식할 수 있는 숫자 형태로 변환
3. 모델 라인업 및 성능 검증
데이터의 패턴을 가장 잘 찾아낼 모델을 찾기 위해 선형 모델부터 앙상블 기법까지 총 7가지의 알고리즘을 후보로 올렸습니다. 성능 평가는 임계값에 상관없이 모델의 분류 능력을 종합적으로 보여주는 AUC(ROC-AUC) 지표를 기준으로 하였습니다.
| 분류 | 모델명 | Train AUC (학습 데이터 성능) |
CV AUC (검증 데이터 성능) |
Gap(격차) | 결과 |
| 선형 모델 | Logistic Regression | 0.942 | 0.916 | 0.026 | 채택 |
| SGD Classifier | 0.940 | 0.908 | 0.032 | 채택 | |
| 앙상블 | Random Forest | 1.000 | 0.919 | 0.081 | 채택 |
| XGBoost | 0.999 | 0.905 | 0.094 | 채택 | |
| CatBoost | 0.998 | 0.892 | 0.106 | 제외 (낮은 효율) |
|
| Gradient Boosting | 1.000 | 0.881 | 0.119 | 제외 (과적합 경향) | |
| 의사결정나무 | Decision Tree | 1.000 | 0.741 | 0.259 | 제외 (과적합 경향) |
3-2. 전략적 선별 기준: 왜 4개 모델만 채택했는가?
단순히 점수가 높은 모델이 아니라, '현업에서 배신하지 않을 안정성'을 기준으로 최종 4개 모델 (Logistic, SGD, RF, XGB)을 선발했습니다.
① 과적합(Overfitting) 모델의 과감한 배제
Decision Tree와 Gradient Boosting은 Train AUC가 1.0(만점)에 가깝지만, 검증 점수(CV)와의 격차가 매우 큽니다.
이는 모델이 구매 패턴의 원리를 학습한 것이 아니라, 훈련 데이터 자체를 통째로 암기해버렸음을 의미합니다.
② 일반화(Generalization) 성능 최우선
최종 채택된 Logistic Regression과 SGD는 Train과 CV의 격차가 약 0.03 내외로 매우 작습니다.
이는 어떤 환경에서도 일관된 성능을 낼 수 있음을 암시합니다.
[채택된 4개 모델 성능 비교 | 핵심 성능 지표 이해하기]
성능 지표 용어를 비즈니스 언어로 풀이하면 다음과 같습니다.
- 정확도(Accuracy): "얼마나 많이 맞혔는가?" (전체적인 예측 성공률)
- 정밀도(Precision): "모델이 Retail이라고 한 고객 중, 진짜 Retail은 몇 명인가?" (오발송 방지)
- 재현율(Recall): "실제 Retail 고객들을 하나도 놓치지 않고 다 찾아냈는가?" (기회 손실 방지)
- AUC (ROC-AUC): "모델이 채널을 구분해내는 순수한 실력은 어느 정도인가?" (1에 가까울수록 좋은 모델)
| 모델 | 정확도 (Accuracy) |
정밀도 (Precision) |
재현율 (Recall) |
AUC | 특징 및 활용 예시 |
| Logistic Regression | 0.90 | 0.90 | 0.77 | 0.95 | [균형형] 설명력이 가장 좋고 성능이 안정적임 |
| XGBoost | 0.89 | 0.93 | 0.71 | 0.93 | [신중형] Retail 오탐을 최소화해야 할 때 유리 |
| Random Forest | 0.90 | 0.90 | 0.77 | 0.94 | [안정형] 비선형 패턴까지 골고루 잘 잡아냄 |
| SGDClassifier | 0.91 | 0.86 | 0.86 | 0.93 | [적극형] 잠재 고객을 놓치지 않고 다 찾아낼 때 유리 |
④ Feature Importance & SHAP 분석 | 모델의 '판단 근거' 파헤치기
1. AI의 블랙박스를 여는 두 가지 지표
단순히 예측 점수가 높은 모델을 넘어, '왜(Why)' 그런 결과가 나왔는지 설명하기 위해 두 가지 지표를 활용했습니다.
- Feature Importance (특성 중요도): "전체적으로 어떤 변수가 가장 강력한 영향력을 가졌는가?"를 정량화합니다. (비즈니스 전략 수립 시 우선순위 결정에 유리)
- SHAP Value : "특정 고객의 예측에서 각 변수가 확률을 얼마나 올리고 내렸는가?"를 계산합니다. (개별 고객 맞춤형 마케팅 및 결과 설명에 유리)
2. Feature Importance | 채널 분류 핵심 변수는 "Detergents_Paper ( 세제·종이류 )"
최종 4개 모델을 분석한 결과, 공통적으로 세제·종이류(Detergents_Paper)가 채널(Retail vs Horeca)을 구분하는 압도적인 결정 병기임을 확인했습니다.
- 현상: 모든 알고리즘에서 log_Detergents_Paper의 가중치가 1순위로 나타남.
- 비즈니스적 의미: 도매 시장에서 유제품이나 식료품은 식당과 마트 모두 대량 구매할 수 있지만, 가정용 소모품인 세제와 종이류는 재판매를 목적으로 하는 소매점(Retail)에서 훨씬 압도적인 비중으로 구매한다는 사실이 데이터로 입증되었습니다.
| 모델 | 1순위 변수 (가중치) |
2순위 변수 (가중치) |
3순위 변수 (가중치) |
데이터 해석 |
| Logistic Regression | 세제·종이류 (1.39) | 식료품 (0.88) | 유제품 (0.58) | [균형형 ] 가중치가 계층적으로 고르게 분포함. 가장 표준적인 판단을 내림. |
| XGBoost | 세제·종이류 (0.64) | 유제품 (0.09) | 식료품 (0.07) | [신중형 ] 세제(0.64) 가중치가 2위(0.09)보다 7배 이상 압도적임. 확실한 신호(세제류 대량구매)가 포착될 때만 날카롭게 반응함. |
| Random Forest | 세제·종이류 (0.37) | 식료품 (0.30) | 유제품 (0.14) | [안정형] 세제(0.37)와 식료품(0.30)의 중요도 격차가 가장 작음. 특정 품목 하나에 휘둘리지 않고 복합적인 패턴을 고려함. |
| SGDClassifier | 세제·종이류 (7.50) | 식료품 (2.54) | 신선식품 (2.04) | [적극형] 세제(7.50) 가중치가 매우 높고 모든 변수의 절댓값이 큼. 작은 구매 변화도 크게 확대 해석하여 타겟을 넓게 포착함. |
3. SHAP Value
① 왜 SHAP 분석이 필요한가?
Feature Importance는 모델 전체의 경향성만 보여줄 뿐, "특정 고객이 왜 Retail로 분류되었는가?"에 대한 개별적인 답을 주지 못합니다. SHAP Value는 각 변수가 결과값에 기여한 '정확한 양'을 계산하여, AI의 블랙박스를 사람이 이해할 수 있는 언어로 번역해 줍니다.
② SHAP Summary Plot 읽는 법 (색상과 위치의 의미)
SHAP 차트에는 데이터의 분포와 영향력이 동시에 표현됩니다.

- 점의 색상 (Feature Value): 변수값의 크기를 나타냅니다.
- 빨간색: 해당 품목의 구매액이 높음
- 파란색: 해당 품목의 구매액이 낮음
- 점의 위치 (SHAP Value, x축): 예측 결과에 미친 영향의 방향입니다.
- 오른쪽 (+): Retail(소매) 채널로 예측할 확률을 높임
- 왼쪽 (-): Horeca(호텔·식당·카페) 채널로 예측할 확률을 높임
③ 심층 해석: Logistic Regression (종합 균형형)
메인 모델인 로지스틱 회귀의 SHAP 결과를 수치 기반으로 분석해 보겠습니다.

- ① 소매 유형 (Retail)의 결정적 신호: 세제·종이류, 식료품, 유제품
- 해석: 빨간 점(높은 구매액)**이 오른쪽(+)에, **파란 점(낮은 구매액)**이 왼쪽(-)에 위치합니다.
- 의미: 이 품목들을 많이 살수록 모델은 고민 없이 **소매점(Retail)**으로 분류합니다. 특히 '세제·종이류'는 점들의 확산 범위가 가장 넓어 채널을 가르는 가장 강력한 엔진임을 보여줍니다.
- 이 세 품목은 데이터의 분포가 매우 일관적입니다.
4. TabPy 연동
4-1. TabPy란? (Tableau Python Server)
TabPy는 태블로가 외부 파이썬(Python) 코드를 호출하여, 머신러닝 예측 결과를 실시간으로 차트에 반영할 수 있게 해주는 엔진입니다.
4-2. 동작 원리: 분석의 선순환 구조
- 서버 실행: 파이썬 환경에서 TabPy 서버를 가동합니다. (localhost:9004)
- 모델 배포: 학습된 머신러닝 모델(pkl)과 전처리 스케일러를 로딩한 후, 예측 함수를 작성하여 TabPy에 배포(deploy)합니다.
- 태블로 호출: 태블로의 계산 필드에서 SCRIPT_* 함수를 통해 배포된 파이썬 함수에 데이터를 전달합니다.
- 실시간 응답: 사용자가 대시보드에서 매개변수를 조정하면, 서버가 즉시 결과를 반환하여 화면을 갱신합니다.
4-3. 필수 환경 설정 (Setup Guide)
성공적인 연동을 위해 다음의 인프라 설정을 완료했습니다.
- 환경 구축: pip install tabpy 후 서버 실행.
- 서비스 연결: 태블로의 [외부 서비스 연결 관리]에서 TabPy 서버 주소(localhost)와 포트(9004)를 등록.
- 모델 관리: 학습 시 사용한 StandardScaler 및 머신러닝 모델 4종을 TabPy 실행 경로에 배치하여 데이터 정합성 유지

.
4-4. 구현 코드 예시
① Python 측: 모델 배포 및 함수 정의
파이썬에서는 데이터를 받아 전처리 후 예측 확률을 반환하는 함수를 정의합니다.
# 파이썬 모델 로딩 및 함수 배포 예시
def get_channel_proba(fresh, milk, grocery, frozen, detergents, delicassen, region, model_name):
X_raw = np.column_stack([fresh, milk, grocery, frozen, detergents, delicassen])
X_scaled = scaler.transform(np.log1p(X_raw)) # 로그변환 + 스케일링
# 모델명 매개변수에 따라 다른 모델 호출
clf = MODELS.get(model_name[0], clf_logistic)
proba = clf.predict_proba(X_final)[:, 1] # Retail(1)일 확률 반환
return proba.tolist()
client.deploy('get_channel_proba', get_channel_proba, 'Retail 채널 확률 반환', override=True)
② Tableau 측: SCRIPT 스크립트 활용
태블로 계산 필드에서는 파이썬 함수를 다음과 같이 호출하여 화면에 뿌려줍니다.
// [Channel_Proba_Retail] 계산 필드 예시
SCRIPT_REAL(
"return tabpy.query('get_channel_proba', _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8)['response']",
SUM([Fresh]), SUM([Milk]), SUM([Grocery]), SUM([Frozen]),
SUM([Detergents_Paper]), SUM([Delicassen]), INT([Region]), [Select ML Model]
)
4-5. TabPy 연동의 장점
(1) 실시간 예측 및 시뮬레이션
과거 데이터의 사후 분석에 그치지 않고, 대시보드 상에서 신규 고객의 구매 데이터를 입력하거나 필터를 조정하는 즉시 "이 고객은 85%의 확률로 Retail 고객입니다"라는 예측 결과를 받아볼 수 있습니다.
(2) 모델 간 비교 분석 (Model Comparison)
Select ML Model 매개변수를 통해 사용자가 직접 로지스틱 회귀, XGBoost, 랜덤 포레스트를 갈아 끼우며 예측 결과가 어떻게 달라지는지, 어떤 모델이 현재 상황에 더 적합한지 판단할 수 있습니다.
5. 태블로 대시보드 구현

- 채널. 지역 항목을 클릭하면 우측 박스 플럿에도 필터가 적용됩니다

- K-means 클러스터링을 통해 분류된 5개의 군집의 페르소나 특징을 확인할 수 있습니다

- 좌측 그래프의 붉은 점은 상단 매개변수 슬라이드를 통해 설정된 데이터를 가진 가상의 고객의 포지셔닝을 나타냅니다.
- 또한 설정된 변수들을 기반으로 학습된 ML 모델이 Retail / Hereca Channel 중 예측합니다

- 상단 시뮬레이션 메뉴에서 선택된 ML 모델의 성능 지표를 확인할 수 있습니다.


- 대시보드에서 언급된 모델, 지표 등에 대한 부연 설명을 추가하였습니다
6. 결과 해석 및 비지니스 제언
분석 결과물은 다음과 같은 비즈니스 전략으로 연결될 수 있습니다.
- 맞춤형 프로모션: 가공식품 비중이 높은 '## 고객군에게는 세제 및 종이류 묶음 할인 이벤트를 제안합니다.
- 타겟 마케팅: 채널 예측 모델을 통해 유입된 신규 고객의 성향을 미리 파악하여, Horeca 전용 신선식품 카탈로그를 발송하는 등 효율적인 마케팅 비용 집행이 가능합니다.
- 데이터 기반 의사결정: 직관이 아닌 SHAP 지표와 실제 수치에 기반하여 어떤 품목이 채널 성격에 영향을 주는지 설명함으로써 조직 내 의사결정의 신뢰도를 높였습니다.
'빅데이터 국비 교육' 카테고리의 다른 글
| [아이티윌 빅데이터 52기] Data Analysis Basic | Lab 01 | NumPy Library (0) | 2025.11.10 |
|---|---|
| [아이티윌 빅데이터 52기] LAB 13 | 웹 페이지 데이터 수집하기 (0) | 2025.11.07 |
| [아이티윌 빅데이터 52기] LAB 13 | 웹 페이지 데이터 수집하기 (연구과제) (0) | 2025.11.07 |
| [아이티윌 빅데이터 52기] LAB 13 | 파이썬 파이널 과제 | OpenAPI 연동 실습 (개인 작성 버전) (0) | 2025.11.07 |
| [아이티윌 빅데이터 52기] LAB 13 | 파이썬 파이널 과제 | OpenAPI 연동 실습 (선생님 버전) (0) | 2025.11.07 |