UCI Wholesale 고객 데이터로 보는 고객 세분화 & 채널 예측 대시보드 (K-means, PCA, TabPy, AWS EC2 서버 연동)
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. 서버 연동
7. 결론 및 비지니스 제언
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 분석이 필요한가?
단순히 "이 변수가 중요하다"는 정보만으로는 부족합니다. SHAP이 필요한 진짜 이유는 '설명 가능한 AI(XAI)'를 구현하기 위해서입니다.
- 기존 방식 (Feature Importance): "우리 모델은 전반적으로 세제 구매량을 중요하게 봐요"라고 말하는 전체적(Global) 경향성만 보여줍니다.
- SHAP 방식 (SHAP Value): "이 고객은 세제는 많이 샀지만, 냉동식품 구매량이 워낙 압도적이라 최종적으로 Horeca로 분류되었습니다"라고 말하는 개별적(Local) 근거를 제시합니다.
- 비즈니스 가치: 블랙박스였던 AI의 판단에 '근거'를 부여함으로써, 마케팅 팀이 "왜 이 고객에게 이 쿠폰을 줘야 하는가?"라는 질문에 당당히 답할 수 있게 합니다.
② SHAP Summary Plot 읽는 법: 데이터의 '힘'과 '방향' 읽기
SHAP 차트는 단순한 그래프가 아니라, 수천 가구의 구매 패턴이 부딪히며 만들어낸 '영향력의 지도'입니다.
- 가로축 (SHAP Value): 영향력의 방향과 크기
- 0을 기준으로 **오른쪽(+)**에 점이 찍히면 소매점(Retail)일 확률을 높이는 힘, **왼쪽(-)**에 찍히면 호텔/레스토랑/카페(Horeca)일 확률을 높이는 힘으로 작용합니다.
- 중앙에서 멀리 떨어질수록 모델의 판단을 뒤흔드는 **'강력한 증거'**가 됩니다.
- 점의 색상 (Feature Value): 실제 데이터의 수치
- 빨간색 (High): 해당 품목의 구매액이 높음을 의미합니다.
- 파란색 (Low): 해당 품목의 구매액이 낮음을 의미합니다.
- 점의 밀도 (분포): 데이터의 집중도
- 점이 수직으로 두껍게 쌓여 있다면, 해당 지점에 비슷한 특성을 가진 고객들이 많이 몰려 있다는 뜻입니다.
[1] 로지스틱 회귀(Logistic Regression) 의 SHAP 분석 결과
① 모델의 핵심 메커니즘: "연속적인 확률 변화의 반영"
랜덤포레스트가 특정 선을 넘었는지 'O/X'로 단정 짓는다면, 로지스틱 회귀는 입력값의 변화에 따라 "리테일일 확률"을 0%에서 100%까지 부드럽게 연결하여 계산합니다. 이는 마치 물감에 물을 타듯, 구매액이 늘어날수록 확신의 농도를 서서히 높여가는 방식입니다. SHAP 차트에서 점들이 끊기지 않고 넓게 퍼진 '안개형 그라데이션' 패턴이 나타나는 이유는, 입력값의 작은 변화조차 놓치지 않고 확률에 섬세하게 반영하기 때문입니다.
② SHAP 분석을 통해 입증된 로지스틱 회귀의 차별적 성능
- 부드러운 그라데이션 패턴 (Continuous Gradient):
- 점들이 뭉치지 않고 가로로 길게 늘어선 형태는 모델이 데이터를 매우 입체적이고 연속적으로 관찰하고 있음을 보여줍니다. 특정 수치에서 판단이 급격하게 변하는 것이 아니라, 구매 금액이 쌓이는 만큼 비례해서 확신도를 조정하는 로지스틱만의 정직한 판단 로직이 드러납니다.
- 변수 간의 조화로운 기여 (Balanced Weighting):
- 특정 변수가 독주하기보다 여러 변수가 계층적으로 확률을 쌓아 올립니다. SHAP 차트 상단부터 하단까지 색상의 변화가 일정하게 나타나는 것은, 각 품목의 구매 데이터가 서로의 확신을 탄탄하게 뒷받침하며 최종 확률을 완성해 나가는 구조임을 증명합니다.
[호텔/레스토랑/카페] [소매 (리테일)]

| 구분 | 주요 현상 | 모델 특성 반영 | 비즈니스 해석 |
| 판단 방식 | 그라데이션형 안개 현상 | 입력값에 비례해 확률이 변하는 선형 결합 구조이기 때문 | 구매액 변화에 따라 채널 확률이 섬세하고 부드럽게 움직임 |
| 세제·종이류 | 파랑→빨강으로 가장 넓게 확산 |
구매량이 늘어날수록 비례해서 확신을 가짐 |
소매점(Retail) 여부를 가르는 가장 정직한 나침반 |
| 식료품 | 세제류와 유사한 넓은 그라데이션 |
세제와 함께 움직이며 확률을 탄탄하게 받쳐줌 |
리테일 채널임을 확신하게 만드는 강력한 보조 엔진 |
| 유제품 | 중앙 근처에서 촘촘하게 색이 섞임 |
크게 휘두르지 않고 미세하게 확률을 조정함 |
판단을 급하게 바꾸지 않는 신중한 보조 지표 |
| 냉동식품 | 역방향 그라데이션 (빨강이 왼쪽) |
이 품목이 많아질수록 리테일과는 거리가 멀어짐 |
식재료 비중이 높은 호레카(Horeca)만의 시그니처 |
| 기타 지역 / Oporto 지역 |
색은 나뉘나 좌우 폭이 매우 좁음 |
참고는 하되 대세를 바꿀 힘은 주지 않음 |
"어디 사느냐"보다 "무엇을 사느냐"가 핵심임을 방증 |
| 즉석·가공식품 | 중앙에서 미세한 색상의 파동 보임 |
아주 미묘한 차이가 있을 때만 확률 끝자리를 만짐 |
단독 영향력은 작으나 패턴의 디테일을 완성함 |
| 신선식품 | 점들이 완전히 수직으로 고착됨 |
이 데이터는 채널 구분엔 아무런 도움이 안 된다고 무시함 |
모든 업종의 필수품이라 변별력이 없는 공통 품목 |
③ 비즈니스 전략 가이드: "정교한 확률 기반 타겟팅과 시뮬레이션"
- 세밀한 등급별 마케팅 설계 (Probability Scoring):
- 단순히 '리테일이다/아니다'를 넘어, "이 고객은 85% 확률로 리테일이다"라는 식의 정밀한 확률 스코어링이 가능합니다. 따라서 확률 구간별로 혜택을 다르게 제공하는 등급제 프로모션을 설계하거나, 고객의 잠재력을 수치화하여 관리할 때 가장 효과적입니다.
- 정직한 변화 추적 및 예측 안정성:
- 입력값이 조금 변하면 결과도 그만큼만 변하는 예측의 **예측 가능성(Predictability)**이 뛰어납니다. 대시보드 시뮬레이션 시 사용자가 수치를 조절함에 따라 확률 게이지가 부드럽게 움직이므로, 현업 담당자가 데이터 변화에 따른 결과의 추이를 가장 직관적으로 납득할 수 있는 환경을 제공합니다.
[2] XGBoost 의 SHAP 분석 결과
① 모델의 핵심 메커니즘: "오차 보정을 통한 단계적 정밀화"
로지스틱 회귀가 부드러운 안개처럼 확률을 뿌리고 랜덤포레스트가 한꺼번에 투표를 한다면, XGBoost는 앞선 나무의 실수(오차)를 다음 나무가 계속해서 보완하며 정답을 찾아가는 정교한 방식을 취합니다. 이는 마치 사격 선수가 영점을 조절하며 과녁 중앙을 향해 점진적으로 다가가는 과정과 같습니다. SHAP 차트에서 특정 구간이 텅 비어 있는 현상은, 모델이 확실하지 않은 정보에는 침묵하고 명확한 단서가 잡힐 때만 날카롭게 반응하기 때문입니다.
② SHAP 분석을 통해 입증된 XGBoost의 차별적 성능
- 중앙이 비어 있는 양극화 현상 (Polarization Pattern):
- 세제·종이류나 식료품 변수에서 점들이 중앙(0)을 비워두고 좌우로 완전히 갈라진 형태를 보입니다. 이는 모델이 "애매한 판단"을 지양하고, 확실한 임계값을 넘는 순간 채널 정체성을 스위치를 켜듯 단호하게 가려내고 있음을 의미합니다.
- 핵심 변수에 대한 선택과 집중 (Feature Focus):
- 모든 변수에 골고루 반응하기보다, 채널을 결정짓는 결정적인 변수(세제류 등)에 모든 화력을 집중합니다. 이는 비주류 데이터의 소음(Noise)에 휘둘리지 않고, 가장 변별력이 높은 데이터만 골라내어 예측의 선명도를 극대화하는 XGBoost만의 효율적인 로직이 반영된 결과입니다.
[호텔/레스토랑/카페] [소매 (리테일)]

| 구분 | 주요 현상 | 모델 특성 반영 | 비즈니스 해석 |
| 판단 방식 | 극단적 양극화 현상 | 확실한 근거가 포착될 때만 날카롭게 반응하는 신중한 판단 기제 | 애매한 중간 지대 없이 채널 정체성을 칼같이 구분해냄 |
| 세제·종이류 | 중앙(0)을 비워두고 좌우로 완전히 갈라짐 |
채널을 가르는 '스위치' 같은 변수로 인식하며 가장 높은 비중 부여 | 이 품목의 구매액이 기준을 넘는 순간 무조건 소매점(Retail)으로 확신 |
| 식료품 | 세제류와 마찬가지로 중앙이 텅 빈 형태 |
세제류의 판단을 보강하는 최종 확인 사격용 변수로 활용 | 세제와 식료품이 동시에 높으면 오탐률 0%에 가까운 신뢰도 확보 |
| 유제품 | 좌우로 넓게 퍼지나 중앙 밀도도 높음 |
세제/식료품이 애매할 때 확률을 미세하게 보정하는 역할 | 리테일 판단의 완성도를 높여주는 정밀한 보조 지표 |
| 신선식품 | 점들이 중앙에 뭉쳐 있으나 좌우 폭은 존재 |
채널 분류의 메인 근거는 아니지만 조합에 따라 가점을 부여 | 다른 모델보다 신선식품의 구매 패턴을 조금 더 예민하게 관찰함 |
| 냉동식품 | 역방향 분포가 뚜렷하며 상단에 위치 |
식자재 중심 고객(Horeca)을 걸러내는 강력한 '마이너스' 필터 |
냉동식품 구매량이 일정 선을 넘으면 즉시 리테일 후보에서 제외 |
| 즉석·가공식품 | 중앙(0) 근처에 점들이 빽빽하게 수직 밀집 |
아주 확실한 데이터가 아니면 판단 근거로 삼지 않는 신중함 | 틈새 구매 패턴이 명확한 고객에게만 제한적으로 영향력 발휘 |
| 지역 변수 (기타/Oporto) | 색상은 갈리나 중앙(0)에 완벽히 고정 |
지역적 요인은 채널 예측에 아무런 도움이 안 된다고 단정함 | 고객의 지역적 위치 보다는 '구매 품목'에 집중 |
③ 비즈니스 전략 가이드: "고정밀 타겟팅과 오탐 리스크 관리"
- 오탐률을 최소화한 정밀 타겟팅 (Precision 중심):
- "확실하지 않으면 리테일이라고 부르지 않겠다"는 매우 신중한 태도를 보입니다. 따라서 틀린 예측으로 인한 비용 낭비를 줄여야 하거나, 가장 확실한 소매점 고객만을 골라내어 고효율 마케팅을 집행해야 하는 상황에 가장 최적화된 모델입니다.
- 강력한 '거름망' 역할 수행:
- 냉동식품의 역방향 분포에서 보듯, 소매점이 아닐 가능성이 높은 신호를 즉각적으로 포착해냅니다. 이는 대시보드 시뮬레이션 시 부적합한 타겟을 빠르게 걸러내 주는 강력한 필터링 엔진으로서 현업 담당자에게 매우 높은 신뢰감을 줍니다.
[3] 랜덤포레스트(Random Forest) 의 SHAP 분석 결과
① 모델의 핵심 메커니즘: "다수결 기반의 합리적 판단"
로지스틱 회귀가 확률을 부드럽게 조정한다면, 랜덤포레스트는 수백 개의 의사결정 나무가 각자의 기준대로 투표하여 '집단적 합의'를 통해 결론을 내립니다. 이는 여러 사람의 의견을 모아 최선의 답을 찾는 '집단지성' 원리와 같습니다. SHAP 차트에서 데이터가 선형으로 늘어지지 않고 특정 지점에 뭉쳐 있는 것은, 모델이 "특정 임계값을 넘었는가?"라는 질문에 다수가 동의하며 채널의 정체성을 명확히 구분 짓고 있다는 증거입니다.
② SHAP 분석을 통해 입증된 랜덤포레스트의 차별적 성능
- 데이터의 군집화 현상 (Clustering Pattern):
- 점들이 특정 지점에 포도송이처럼 뭉쳐 있는 패턴은 개별 나무들이 공통된 판단 기준에 도달했음을 의미합니다. 이는 모델이 데이터를 단순히 수치로만 파악하는 것이 아니라, 유사한 특성을 가진 고객들을 하나의 그룹으로 묶어 안정적으로 분류하고 있음을 보여줍니다.
- 변동성에 강한 예측 일관성 (Robustness):
- 특정 변수 하나에 결과가 휘둘리지 않고 여러 변수의 조합을 고르게 고려합니다. 이는 수백 개의 나무가 서로의 오류를 상쇄함으로써, 일부 데이터에 비정상적인 수치가 섞여 있더라도 전체적인 예측의 중심을 잃지 않는 랜덤포레스트만의 강점이 반영된 결과입니다.
[호텔/레스토랑/카페] [소매 (리테일)]

| 구분 | 주요 현상 | 모델 특성 해석 | 비즈니스 해석 |
| 판단 방식 | 포도송이형 뭉침 현상 | 수많은 나무가 특정 조건(임계값)에서 다수결 투표를 하기 때문 |
특정 구매 구간에서 채널 정체성이 매우 뚜렷하게 나타남 |
| 세제·종이류 | 파란 점이 왼쪽(-)에 매우 두껍게 밀집 |
"안 사면 Horeca"라는 강력한 규칙이 다수의 나무에 공통 적용됨 |
생활용품 미구매는 Horeca 채널을 가르는 가장 확실한 증거 |
| 식료품 | 파란 점은 왼쪽, 빨간 점은 오른쪽으로 완벽히 분리 | 의사결정 나무들이 '임계값'을 기준으로 소매점 여부를 가장 먼저 가려냄 | 세제와 더불어 소매점(Retail)을 판별하는 가장 강력한 듀얼 엔진 |
| 유제품 | 점들이 중앙에서 오른쪽 으로 촘촘하게 연결 |
다양한 나무들이 유제품 수치에 따라 세밀하게 확률을 조정함 |
소매점(Retail) 판단을 위한 안정적인 보조 지표로 활용됨 |
| 냉동식품 | 빨간 점이 왼쪽(-) 영역에 소폭 분포 | 일부 나무들이 냉동식품 대량 구매를 호레카의 신호로 포착함 |
식재료 비중이 높은 고객군을 분류하는 섬세한 판단 로직 반영 |
| 즉석· 가공식품 |
중앙(0) 근처에 점들이 수직으로 겹쳐서 뭉침 | 영향력은 작지만, 특정 수치를 넘을 때만 미세하게 점수를 조정함 |
단독 판단보다는 다른 품목과 조합될 때 보조적인 판단 근거로 활용 |
| 신선식품 | 중앙(0) 근처에 점들이 수직으로 겹쳐서 뭉침 | 영향력은 작지만, 특정 수치를 넘을 때만 미세하게 점수를 조정함 |
단독 판단보다는 다른 품목과 조합될 때 보조적인 판단 근거로 활용 |
| 지역 변수 (기타/Oporto) |
점들이 좌우로 퍼지지 않고 중앙에 고정되어 있으며 이진 변수 |
지역적 특성이 구매 품목 패턴보다 분류 기여도가 현저히 낮음 |
색깔은 명확하게 나뉘어 있지만 그 영향력이 너무 작아서 "확실하지만 힘이 없는 신호" |
③ 비즈니스 전략 가이드: "일관된 고객 분류와 리스크 관리"
- 확고한 고객 정체성 확립 (Consistency):
- "이 고객은 확실히 리테일 그룹의 패턴을 따르고 있다"는 식의 명확한 그룹핑이 가능합니다. 따라서 고객을 특정 채널로 정의하고 장기적인 관리 및 타겟팅 전략을 수립해야 하는 안정 중심의 비즈니스 의사결정에 가장 적합한 모델입니다.
- 신뢰도 높은 기준점 제시:
- 유통 데이터 특유의 불규칙한 구매 변동에도 예측값이 크게 요동치지 않습니다. 이는 대시보드 시뮬레이션 시 극단적인 수치가 입력되어도 모델이 판단의 중심을 유지해주므로, 현업 담당자에게 흔들리지 않는 신뢰도 높은 판단 기준을 제공합니다.
[4] SGD 분류기(SGDClassifier) 의 SHAP 분석 결과
① 모델의 핵심 메커니즘: "데이터 반응성의 극대화"
로지스틱 회귀가 확률을 서서히 조정하고 랜덤포레스트가 집단 투표를 통해 결론을 내린다면, SGD는 데이터의 아주 작은 차이도 날카롭게 포착해 이를 강력한 예측 신호로 전환합니다. 이는 모델이 학습 과정에서 정답을 찾기 위해 가중치를 매우 기민하게 업데이트하는 '경사 하강법'의 특성이 반영된 결과로, 다른 모델보다 데이터 변화에 훨씬 민감하게 반응합니다.
② SHAP 분석을 통해 입증된 SGD의 차별적 성능
- 압도적인 영향력 스케일 (Scale of Impact):
- SHAP 차트의 x축 범위를 보면 다른 모델(±3~5)보다 훨씬 넓은 ±20 내외의 분포를 보입니다. 이는 모델이 특정 조건을 만족하는 데이터를 발견했을 때, 주저하지 않고 해당 채널로 결론을 강하게 밀어붙이는 과감한 판별력을 가졌음을 의미합니다.
- 소외된 변수의 적극적 활용 (Feature Sensitivity):
- 다른 모델에서는 영향력이 낮았던 '신선식품'이나 '즉석·가공식품'이 SGD에서는 주요 기여 변수로 등장합니다. 이는 SGD가 단순한 구매 총액뿐만 아니라, 데이터 속에 숨겨진 미세한 상관관계까지 놓치지 않고 학습에 반영하고 있음을 증명합니다.
[호텔/레스토랑/카페] [소매 (리테일)]

| 구분 | 주요 현상 | 모델 특성 반영 | 비즈니스 해석 |
| 판단 방식 | 광범위한 확산 현상 | 가중치를 매우 크게 학습하여 작은 차이도 민감하게 증폭시키기 때문 |
아주 미세한 구매 변화도 놓치지 않고 공격적으로 타겟을 탐색함 |
| 세제·종이류 | SHAP 수치가 ±20까지 넓게 뻗음 |
확실한 변수에 압도적인 가중치(7.50)를 부여해 판단의 기점으로 삼음 | 소매점(Retail)을 발굴하는 데 있어 가장 강력한 확성기 역할 |
| 식료품 | 중앙에 밀집해 있으나 색 분리가 선명 |
세제류 다음으로 중요한 신호로 인식하며 빠르게 가중치를 부여함 | 채널의 정체성을 확정 짓는 핵심적인 보조 지표 |
| 신선식품 | 다른 모델보다 상위권에 위치하며 확산됨 | 미세한 데이터 노이즈도 판단 근거로 적극 활용하려는 성향 |
신선식품 구매가 적은 고객군을 매우 예민하게 걸러냄 |
| 유제품 | 중앙 부근에서 색상 그라데이션 뚜렷함 |
유제품 구매액 변화에 따라 기민하게 확률을 조정함 |
채널 예측의 정밀도를 높여주는 섬세한 안테나 역할 |
| 냉동식품 | 역방향 (빨간 점이 왼쪽) 흐름 뚜렷함 |
냉동식품 비중이 높을 때 Horeca로 강하게 밀어붙임 |
식자재 중심 고객을 선별하는 강력하고 날카로운 필터 |
| 즉석·가공식품 | 점들이 좌우로 고르게 퍼져 있음 |
작은 구매 비중도 판단 근거에 적극 포함시키는 모델 성향 |
패턴의 디테일을 끝까지 추적하여 분류 성능을 보강함 |
| 지역 변수 (Oporto/기타) |
색상이 나뉘나 영향력은 매우 미미 | 지리적 요인보다 구매 행동에만 집중하도록 학습됨 |
위치 정보에 휘둘리지 않는 객관적인 판단 유지 |
③ 비즈니스 전략 가이드: "적극적 타겟 탐색과 민감도 분석"
- 잠재 고객 확보의 극대화 (Recall 중심):
- "소매점(Retail)의 특성이 조금이라도 보인다면 놓치지 않겠다"는 적극적인 필터링 전략을 취합니다. 따라서 마케팅 초기 단계에서 잠재 고객군을 최대한 넓게 확보해야 하는 재현율(Recall) 중심 전략에 가장 적합한 모델입니다.
- 역동적인 시뮬레이션 환경 제공:
- 높은 수치 반응성 덕분에 대시보드에서 값을 조금만 바꿔도 예측 결과가 드라마틱하게 변합니다. 이는 현업 담당자가 어떤 품목이 결과에 가장 민감하게 작용하는지 테스트(Sensitivity Analysis) 하기에 최적의 환경을 제공합니다.
4. TabPy 연동
모델 분석이 끝났다면, 이제 이 모델들을 태블로라는 '몸체'에 이식할 시간입니다. 이 과정은 크게 **모델을 서빙할 준비(Python)**와 **
필요할 때 모델을 호출(Tableau)**하는 두 단계로 나뉩니다.
4-1. TabPy란? (Tableau Python Server)
TabPy는 태블로가 외부 파이썬(Python) 코드를 호출하여, 머신러닝 예측 결과를 실시간으로 차트에 반영할 수 있게 해주는 엔진입니다.
4-2. 동작 원리: 분석의 선순환 구조
- 서버 실행: 파이썬 환경에서 TabPy 서버를 가동합니다.
- 모델 배포: 학습된 머신러닝 모델(pkl)과 전처리 스케일러를 로딩한 후, 예측 함수를 작성하여 TabPy에 배포(deploy)합니다.
- 태블로 호출: 태블로의 계산 필드에서 SCRIPT_* 함수를 통해 배포된 파이썬 함수에 데이터를 전달합니다.
- 실시간 응답: 사용자가 대시보드에서 매개변수를 조정하면, 서버가 즉시 결과를 반환하여 화면을 갱신합니다.
4-3. 필수 환경 설정 (Setup Guide)
성공적인 연동을 위해 다음의 인프라 설정을 완료했습니다.
- 환경 구축: pip install tabpy 후 서버 실행.
- 서비스 연결: 태블로의 [외부 서비스 연결 관리]에서 TabPy 서버 주소(localhost)와 포트(9004)를 등록. (기본 로컬 환경)
- 모델 관리: 학습 시 사용한 StandardScaler 및 머신러닝 모델 4종을 TabPy 실행 경로에 배치하여 데이터 정합성 유지

.
4-4. 구현 코드 예시
① Python 측: 모델 배포 및 함수 정의
파이썬에서는 태블로로부터 전달받은 8개의 데이터(품목 구매액, 지역, 모델 선택 등)를 가공하여 결과값을 돌려주는 함수를 정의합니다. 이때 핵심은 데이터의 형태를 모델이 학습했던 상태(로그 변환 + 스케일링)로 복원하는 것입니다
# 파이썬 모델 로딩 및 함수 배포 예시
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 스크립트 활용
태블로의 계산 필드에서는 SCRIPT_REAL 함수를 사용하여 파이썬에 명령을 내립니다. 여기서 각 _arg는 태블로 화면에 있는 합계(SUM) 값이나 사용자가 조절하는 매개변수와 일대일로 대응됩니다.
// [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]
)
구현 시 주의할 점
- 데이터 타입의 일치: 태블로에서 넘겨주는 값은 기본적으로 리스트(List) 형태입니다. 파이썬 함수 내부에서 model_choice[0]처럼 인덱싱을 해주는 이유는 태블로가 넘겨준 리스트에서 실제 값 하나를 꺼내기 위함입니다.
- 집계 데이터 전달: 태블로는 행 단위가 아닌 집계(SUM, AVG 등) 데이터를 파이썬으로 보냅니다. 따라서 계산 필드 작성 시 반드시 SUM()이나 ATTR() 같은 집계 함수를 사용해야 오류가 나지 않습니다.
- 성능 최적화: tabpy.query는 실시간으로 통신하므로, 너무 많은 행을 한꺼번에 계산하기보다는 대시보드에서 '현재 보고 있는 시나리오' 하나에 집중하여 결과를 뿌려줄 때 가장 속도가 빠릅니다.
4-5. TabPy 연동의 장점
(1) 실시간 예측 및 시뮬레이션
과거 데이터의 사후 분석에 그치지 않고, 대시보드 상에서 신규 고객의 구매 데이터를 입력하거나 필터를 조정하는 즉시 "이 고객은 85%의 확률로 Retail 고객입니다"라는 예측 결과를 받아볼 수 있습니다.
(2) 모델 간 비교 분석 (Model Comparison)
Select ML Model 매개변수를 통해 사용자가 직접 로지스틱 회귀, XGBoost, 랜덤 포레스트를 갈아 끼우며 예측 결과가 어떻게 달라지는지, 어떤 모델이 현재 상황에 더 적합한지 판단할 수 있습니다.
5. 태블로 대시보드 구현

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

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

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

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


- 대시보드에서 언급된 모델, 지표 등에 대한 부연 설명을 추가하였습니다
6. AWS EC2를 활용한 '상시 가동' 분석 인프라 구축
① 문제 상황: "로컬 환경의 한계, 나만 볼 수 있는 대시보드"
처음 구축한 TabPy 환경은 제 로컬 컴퓨터에서만 작동했습니다.
제가 컴퓨터를 끄거나 자리를 비우면, 다른 사용자들은 대시보드의 핵심 기능인 '실시간 예측'을 사용할 수 없는 반쪽짜리 대시보드였습니다.
② 한계: "무료 버전의 제약과 서버의 부재"
- 태블로 퍼블릭의 제약: 무료 공유 플랫폼인 태블로 퍼블릭은 보안 및 서버 구조상의 이유로 TabPy가 포함된 워크북의 업로드를 지원하지 않습니다.
- 접근성의 벽: 고가의 태블로 서버나 온라인 구독 없이는 외부 사용자를 내 로컬 TabPy에 접속하게 만드는 것이 기술적으로 매우 까다롭고 보안상 위험했습니다.
③ 해결 과정: "클라우드 서버(AWS EC2)로 옮긴 분석 엔진"
이러한 물리적 한계를 극복하기 위해,
내 컴퓨터 대신 24시간 깨어 있는 클라우드 서버를 구축하여 '예측 엔진'을 외부로 독립시키기로 했습니다.
1) AWS EC2란? (나만의 클라우드 컴퓨터)
EC2(Elastic Compute Cloud)는 아마존의 데이터 센터에 있는 가상 컴퓨터를 빌려 쓰는 서비스입니다.
내 노트북을 꺼도 이 서버는 계속 작동하므로, 전 세계 어디서든 대시보드가 내린 명령을 처리할 수 있습니다.
2) 서버 환경 및 인스턴스 설정
- 운영체제 (Ubuntu): 개발 편의성이 높은 리눅스 기반의 Ubuntu 환경을 선택했습니다.
- 인스턴스 유형 (t2.xlarge): 4개 머신러닝 모델의 복잡한 연산과 실시간 요청을 지연 없이 처리하기 위해 넉넉한 CPU와 메모리 사양을 갖춘 t2.xlarge를 할당했습니다.


3) 보안 그룹 설정 (9004 포트 개방) 클라우드 서버는 기본적으로 모든 외부 접속을 차단합니다. 태블로가 서버에 접속해 데이터를 주고받을 수 있도록 '인바운드 규칙'을 설정했습니다.
- TabPy 전용 포트: 통신 통로인 9004번 포트를 개방하여 외부의 태블로 클라이언트가 서버 내부의 파이썬 엔진에 접근할 수 있게 했습니다.
- SSH 포트: 서버 관리를 위한 22번 포트를 열어 내 컴퓨터에서 원격 제어가 가능하게 세팅했습니다.

4) 서버 내부 환경 구축 (가상 환경 및 라이브러리)
서버 내부에서도 로컬과 동일한 분석 환경을 재현하기 위해 다음 과정을 거쳤습니다.
- 가상 환경(venv) 구축: 서버 시스템 환경과 분리된 독립적인 파이썬 방을 만들어 라이브러리 간 충돌을 방지했습니다.
- 필수 패키지 설치: TabPy, Scikit-learn, Pandas 등 분석에 필요한 모든 라이브러리를 다시 설치하고, 학습 시 사용했던 전처리 스케일러를 복원했습니다.

5) nohup으로 영속성 부여 (무중단 운영) 일반적으로 서버 접속 창(터미널)을 닫으면 실행 중인 프로그램도 종료됩니다.
하지만 nohup 명령어를 사용하면 터미널을 종료해도 프로그램이 백그라운드에서 계속 실행됩니다.
- 명령어: nohup tabpy &
- 효과: 관리자가 접속해 있지 않아도 서버는 24시간 내내 태블로의 예측 요청을 기다리는 상태가 됩니다.
yes | nohup tabpy --config=tabpy.conf > tabpy_background.log 2>&1 &

④ 결과 및 운영 전략: "비용과 효율의 균형"
이제 제 노트북이 꺼져 있어도,
누구나 제 태블로 파일(twb)을 열기만 하면 AWS 서버와 통신하며 실시간 AI 예측 결과를 확인할 수 있게 되었습니다.
다만, t2.xlarge와 같은 고성능 서버는 운영 비용이 발생하므로, 현재는 '온디맨드(On-demand)' 방식을 취하고 있습니다.
즉, 실제 시연이나 협업이 필요한 시점에만 서버를 활성화하여 불필요한 리소스 낭비를 막는 전략적 운영을 실천하고 있습니다.
7. 결과 해석 및 비지니스 제언
분석 결과물은 다음과 같은 비즈니스 전략으로 연결될 수 있습니다.
- 맞춤형 프로모션: 가공식품 비중이 높은 '## 고객군에게는 세제 및 종이류 묶음 할인 이벤트를 제안합니다.
- 타겟 마케팅: 채널 예측 모델을 통해 유입된 신규 고객의 성향을 미리 파악하여, Horeca 전용 신선식품 카탈로그를 발송하는 등 효율적인 마케팅 비용 집행이 가능합니다.
- 데이터 기반 의사결정: 직관이 아닌 SHAP 지표와 실제 수치에 기반하여 어떤 품목이 채널 성격에 영향을 주는지 설명함으로써 조직 내 의사결정의 신뢰도를 높였습니다.