세분화 분석 — PlayArea × Children 사례 깊이 (Buisson Ch.11.1)

Segmentation 의 비즈니스 의미, Uplift 분석, 매장 우선순위 결정

Buisson (2021) Ch.11 의 segmentation 절을 자세히 정리한다. PlayArea × Children C-Mart 사례의 단계별 분석, 회귀의 interaction term 해석, Uplift 분석으로의 적용, 매장 우선순위 결정, Marketing 의 personalization 응용을 단계별로 시연한다.

Experimentation
Causal Inference
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Segmentation

Personal characteristic 이 비즈니스 행동의 효과를 moderate 하는 case (Buisson, 2021, Ch.11).

수식:

\[ Y = \beta_0 + \beta_X \cdot X + \beta_M \cdot M + \beta_i \cdot (X \cdot M) \]

여기서:

  • \(X\) = 비즈니스 행동 (PlayArea, Email 등)
  • \(M\) = personal characteristic (Children, Age 등)

해석: \(M\) 의 segment 별 \(X\) 의 효과 다름.

비즈니스 활용:

  • Targeting: 효과 큰 segment 우선
  • Personalization: segment 별 다른 전략
  • Resource allocation: ROI 최대 segment 에 투자
직관 — Segmentation 이 비즈니스 의사결정의 핵심

분석가의 자연스러운 질문: “평균 효과만 알면 충분한가?”

평균 효과만 보면:

  • “PlayArea 의 평균 효과: +10 분”
  • 모든 매장에 설치 vs 일부만? — 결정 어려움

Segmentation 후:

  • “자녀 동반 customer 매장: PlayArea +25 분”
  • “자녀 없는 매장: PlayArea +4 분”
  • 자녀 동반 비율 높은 매장 우선

→ Segmentation 이 의사결정의 정밀도. 평균 효과의 6 배 정확.

2 C-Mart 사례 — 단계별 분석

2.1 비즈니스 문제

결정

C-Mart 가 매장 200 개 운영. PlayArea 설치 비용 = $50K/매장.

질문:

  • 어느 매장에 설치?
  • 모든 매장? — $10M 비용 (200 × $50K)
  • 자녀 비율 높은 매장만? — 비용 절약 + ROI 최대

기존 데이터:

  • 매장별 자녀 동반 customer 비율 (10% ~ 60%)
  • 평균 visit duration
  • 매장별 매출

분석가의 도전:

  • PlayArea 의 효과가 자녀 동반 customer 에게 큼?
  • 효과 크기는?
  • 매출 영향은?

2.2 단계 1: Historical Data 분석

자녀 동반 vs visit duration

PlayArea 가 일부 매장에 이미 설치 (50 매장). 매장별 평균 분석:

매장 그룹            자녀 동반 (%)   PA 설치   평균 duration
A: 자녀 적음 (10%)   10%            No        20 분
B: 자녀 적음 (10%)   10%            Yes       24 분
C: 자녀 많음 (50%)   50%            No        30 분
D: 자녀 많음 (50%)   50%            Yes       45 분

해석:

  • A vs B (자녀 적음): PlayArea +4 분 효과
  • C vs D (자녀 많음): PlayArea +15 분 효과
  • → PlayArea 의 효과가 자녀 비율에 따라 다름 (segmentation 신호).
직관 — 회귀로 정량화

위 분석을 회귀로:

import statsmodels.formula.api as smf

# Customer-level 데이터 (visit 별)
df["visit_duration"] = ...
df["play_area"] = ...
df["children"] = ...

m = smf.ols("visit_duration ~ play_area * children", data=df).fit()
print(m.summary())

출력:

                       Estimate
(Intercept)            20.0
play_area1              4.0
children1              10.0
play_area1:children1   21.0

해석:

  • PlayArea 효과 (자녀 없음): +4 분
  • Children 효과 (PlayArea 없음): +10 분
  • Interaction: +21 분 (자녀 있을 때 PA 효과의 추가 boost)

자녀 있는 customer 의 PA 효과: 4 + 21 = 25 분.

2.3 단계 2: 매장 우선순위 결정

ROI 계산

각 매장의 PA 설치 ROI:

\[ \text{ROI} = \frac{\text{매출 증가/년}}{\text{설치 비용}} \]

매출 증가 추정:

  • Visit duration ↑ → 추가 구매
  • 평균 customer 의 분당 구매 = $0.50 (가정)
  • 자녀 동반 customer: PA = +25 분 × $0.50 = +$12.5/visit
  • 자녀 없는 customer: PA = +4 분 × $0.50 = +$2/visit

매장별 매출 증가:

  • 자녀 비율 50%, 1000 visits/일:
    • 500 자녀 동반 × $12.5 + 500 자녀 없음 × $2
    • = $6,250 + $1,000 = $7,250/일
    • = $2,646,250/년
  • 자녀 비율 10%, 1000 visits/일:
    • 100 × $12.5 + 900 × $2
    • = $1,250 + $1,800 = $3,050/일
    • = $1,113,250/년

→ 자녀 비율 50% 매장의 ROI 가 자녀 비율 10% 매장의 2.4 배.

직관 — 의사결정의 구체화

PlayArea 비용 $50K/매장 회수 기간:

  • 자녀 비율 50% 매장: $50K / $2.6M = 0.02 년 (1 주!)
  • 자녀 비율 10% 매장: $50K / $1.1M = 0.045 년 (16 일)

둘 다 빠른 ROI. 그러나 자녀 비율 높은 매장이 우선.

비즈니스 결정:

  • 1 단계: 자녀 비율 50%+ 매장 (50 개) 에 PA 우선 설치
  • 2 단계: 결과 점검 후 자녀 비율 30~50% 매장
  • 3 단계: 비용 효과 점검 후 나머지

→ 단순 평균 효과로는 못 만드는 정밀한 plan.

2.4 단계 3: Subgroup 별 효과의 robustness 점검

Subgroup 분석의 함정

Subgroup 분석의 흔한 위험:

  • Multiple testing
  • Small subgroup → noise 큼
  • Effect size 가 통계적 유의 안 함

분석가의 점검:

# 자녀 동반 + PlayArea subgroup
sub = df[(df["children"] == 1) & (df["play_area"] == 1)]
print(f"N = {len(sub)}")
print(f"Mean duration = {sub['visit_duration'].mean():.2f}")
print(f"95% CI: {sub['visit_duration'].quantile([0.025, 0.975]).values}")

만약 N = 20 (매우 작음):

  • Estimate 가 noise 일 수 있음
  • 다른 subgroup 의 결과로 검증
  • Bootstrap CI 사용
직관 — Bootstrap 의 가치

Subgroup 의 정확한 CI:

import numpy as np

def subgroup_bootstrap(df, condition, outcome="visit_duration", B=1000):
    """Subgroup 의 평균 효과 CI."""
    sub = df[condition].copy()
    means = []
    for _ in range(B):
        sample = sub.sample(len(sub), replace=True)
        means.append(sample[outcome].mean())
    return np.percentile(means, [2.5, 97.5])


ci = subgroup_bootstrap(df, (df["children"] == 1) & (df["play_area"] == 1))
print(f"95% CI: {ci}")

CI 가 좁으면 → 추정 정확. CI 가 넓으면 → 더 많은 데이터 필요 (subgroup 의 작은 N 시그널).

3 Marketing Uplift 분석

3.1 정의

Uplift = Treatment Effect Heterogeneity

마케팅의 핵심 질문: “어떤 customer 에게 캠페인 보낼까?”

기존 접근 (response modeling):

  • “Email 받으면 구매할 가능성 높은 customer” 식별
  • 그 customer 에게 보냄

함정: 가능성 높은 customer 가 사실 email 없어도 구매할 수도.

Uplift 접근:

  • “Email 의 효과가 큰 customer” 식별
  • 그 customer 에게 보냄

수학적으로:

  • Response modeling: \(E[Y | X = 1, M_i]\) 가 큰 segment
  • Uplift modeling: \(E[Y | X = 1, M_i] - E[Y | X = 0, M_i]\) 가 큰 segment

→ Uplift 가 진짜 marketing ROI.

Buisson 의 사례 (재방문)
Group 1 (younger, < 30):
   No email: 20% 구매
   With email: 40% 구매
   Uplift: 20%p

Group 2 (older, > 60):
   No email: 80% 구매
   With email: 90% 구매
   Uplift: 10%p

Response modeling: Group 2 우선 (90% 구매). Uplift modeling: Group 1 우선 (Uplift 20%p > 10%p).

비용 분석:

  • Email 비용: $0.10/customer
  • Group 2 (10K customer): $1K 비용 → 1K 추가 구매 (uplift 10%) → ROI 1
  • Group 1 (10K customer): $1K 비용 → 2K 추가 구매 (uplift 20%) → ROI 2

→ Group 1 이 ROI 2 배.

3.2 4 Quadrant 분류

직관 — Customer 의 4 종류

Treatment effect 와 baseline propensity 별:

Baseline ↓ + Effect Group 마케팅 결정
높음 + 큼 Persuadables 우선 target (uplift 큼)
높음 + 작음 Sure Things 안 보내도 구매 (낭비)
낮음 + 큼 Persuadables (보너스) Target
낮음 + 작음 Lost Causes 안 보내도 구매 안 함

Persuadables = uplift modeling 의 핵심 segment.

전통 response modeling 이 “Sure Things” 에 낭비 (이미 구매할 사람에게 보냄).

→ Uplift 가 정밀 targeting 의 도구.

3.3 R / Python 회귀

Treatment × Covariate
import statsmodels.formula.api as smf

# Treatment + multiple covariates with interactions
m = smf.ols(
    "purchase ~ treatment + age + treatment:age + gender + treatment:gender",
    data=df,
).fit()
print(m.summary())

출력:

                        Estimate
treatment                0.10
treatment:age           -0.005
treatment:gender        +0.05

해석:

  • 평균 treatment 효과: +0.10 (10%p 구매 ↑)
  • Age 1 살 ↑ 시 효과 -0.5%p (younger 가 효과 큼)
  • Gender 남자: 효과 +5%p 더 큼

Predicted uplift for individual:

\[ \text{Uplift}(i) = 0.10 - 0.005 \cdot \text{age}_i + 0.05 \cdot \text{gender}_i \]

직관 — 개별 Uplift 의 활용

각 customer 의 estimated uplift 계산 후:

  • Top 10% uplift → email 발송
  • 나머지 → 보내지 않음

비교:

  • Random targeting (모든 사용자): ROI = 1
  • Response targeting (high baseline): ROI = 1.5
  • Uplift targeting (top 10% uplift): ROI = 3

→ Uplift 가 가장 효율적. Buisson 의 핵심 메시지.

4 Personalization 의 본질

4.1 “All-Effective” 가 아닌 차별

직관 — Personalization 의 정의

흔한 오해: “Personalization = 좋은 message 를 모두에게.”

정확: Personalization = “다른 segment 에 다른 message”.

Mass marketing: 모두에게 message A (평균 효과 +5%p)
Personalization:
   Segment 1: message A (+10%p uplift)
   Segment 2: message B (+8%p uplift)
   Segment 3: no message (uplift 0 또는 negative)

핵심:

  • 한 message 가 모든 segment 에 좋으면 = personalization 이 아님
  • Segment 별 best message 가 다름 = personalization

Buisson 의 강조:

“Personalization 의 본질은 increasing effectiveness on certain subgroups while decreasing on others.”

4.2 위험 — Negative Uplift

부정적 Uplift 의 위험

일부 segment 에서 treatment 가 부정적 효과:

Segment 1: No email 30% 구매 → With email 35% 구매 (+5%p)
Segment 3: No email 40% 구매 → With email 25% 구매 (-15%p)

이유:

  • Email 이 annoying → 구매 거부
  • Brand 인지도 손상
  • Spam 인식

→ Segment 3 에 보내면 negative ROI.

Mass marketing 의 함정:

  • Segment 3 의 negative effect 가 segment 1 의 positive effect 와 cancel
  • 평균 효과 0
  • “Email 무용” 결론 → 잘못

분석가의 발견:

  • Segmentation 으로 두 그룹 구분
  • Segment 1 에만 보냄 → ROI ↑

→ Personalization 이 mass marketing 보다 효과적.

5 다른 비즈니스 사례

5.1 Pricing Personalization

가격 민감도 segmentation

이커머스의 동적 가격:

Segment            Price 인하 (-10%)   효과 (Uplift)
Price-sensitive    -10%                +30% 구매
Brand-loyal        -10%                +5% 구매
Indifferent        -10%                +15% 구매

Price-sensitive segment 에 큰 uplift → 그 segment 에 promo 우선.

Brand-loyal segment 에 promo = revenue 손실 (이미 구매할 사람에게 가격 인하).

→ Pricing 의 uplift modeling.

5.2 Healthcare Targeting

약물 효과 segmentation

임상 시험:

  • 평균 효과: 약 X 가 증상 -20%
  • Subgroup 분석:
    • 65 세 이상: -30%
    • 65 세 미만: -10%

처방 결정:

  • 모든 환자에게 약 X? — 평균 효과 -20% 라 OK 같아 보임
  • 65+ 만 처방? — 그 group 에 효과 큼, side effect risk 같음 → 더 정확한 의사결정

→ Personalized medicine 의 통계적 기반.

6 Subgroup Analysis 의 함정

False Discovery 의 위험

Subgroup 검색의 함정:

  • 100 가지 segmentation 시도 (age, gender, region, …)
  • 각 p < 0.05 로 검정
  • 평균적으로 5 개 false positive

이게 “30 세 남자 + Kansas + 화요일 응답자” 의 거짓 발견.

대처:

  1. Pre-registered subgroups: 실험 시작 전 segmentation 등록
  2. Bonferroni 보정: \(\alpha / N_{\text{tests}}\)
  3. Bootstrap CI: subgroup 의 robust 검증
  4. 외부 데이터 검증: 다른 dataset 에서 replicate
직관 — 분석가의 default

Segmentation 의 분석 default:

  1. 사전 가설: 도메인 직관으로 1~3 개 moderator 선택
  2. Pre-register: 실험 시작 전 가설 등록
  3. 회귀 + interaction term: 표준 분석
  4. Bootstrap CI: robust 검증
  5. Effect size 점검: 비즈니스 의미 있는가
  6. 외부 검증: 다른 데이터에서 동일 패턴?

이 절차가 false discovery 위험 줄임.

→ Discovery 가 아닌 confirmation 이 분석가의 default.

7 코드 예시 — 종합 Segmentation

7.1 시뮬레이션

import numpy as np
import pandas as pd
import statsmodels.formula.api as smf

np.random.seed(42)
n = 5000

df = pd.DataFrame({
    "play_area": np.random.binomial(1, 0.5, n),
    "children": np.random.binomial(1, 0.3, n),
    "store_id": np.random.choice(range(50), n),
})

# True coefficients (모형)
beta_0 = 20
beta_p = 4
beta_c = 10
beta_i = 21

df["duration"] = (
    beta_0
    + beta_p * df["play_area"]
    + beta_c * df["children"]
    + beta_i * df["play_area"] * df["children"]
    + np.random.normal(0, 5, n)
)

# Moderation 회귀
m = smf.ols("duration ~ play_area * children", data=df).fit()
print("=== Moderation Regression ===")
print(m.summary().tables[1])
직관 — 회귀 결과의 검증

추정값이 진짜 coefficients 가까이:

  • \(\hat{\beta}_p \approx 4\)
  • \(\hat{\beta}_c \approx 10\)
  • \(\hat{\beta}_i \approx 21\)

→ 시뮬레이션 검증.

7.2 매장별 Predicted Uplift

def predict_uplift(df, model, treatment_var, target_var):
    """각 행의 treatment uplift 추정."""
    df_with = df.copy()
    df_with[treatment_var] = 1
    df_without = df.copy()
    df_without[treatment_var] = 0

    pred_with = model.predict(df_with)
    pred_without = model.predict(df_without)

    return pred_with - pred_without


# 매장별 평균 uplift
df["uplift"] = predict_uplift(df, m, "play_area", "duration")
store_uplift = df.groupby("store_id")["uplift"].mean().sort_values(ascending=False)
print("\n=== Top 10 매장 ===")
print(store_uplift.head(10))
print("\n=== Bottom 10 매장 ===")
print(store_uplift.tail(10))
직관 — 매장 우선순위 sort

store_uplift.sort_values(ascending=False) 가 우선순위:

  • Top 매장: PlayArea 효과 큼 (자녀 비율 높음)
  • Bottom 매장: PlayArea 효과 작음

비즈니스 결정:

  • Budget = $1M (20 매장 설치 가능)
  • Top 20 매장 선택
  • ROI 최대

→ 회귀의 segmentation 이 직접 의사결정 도구.

7.3 ROI 계산 자동화

def calculate_roi(df, store_uplift, install_cost=50000, value_per_minute=0.50,
                    days_per_year=365, daily_visits=1000):
    """매장별 ROI 계산."""
    annual_value = store_uplift * value_per_minute * daily_visits * days_per_year
    roi = annual_value / install_cost
    payback_days = install_cost / (store_uplift * value_per_minute * daily_visits)
    return pd.DataFrame({
        "uplift": store_uplift,
        "annual_value": annual_value,
        "roi": roi,
        "payback_days": payback_days,
    }).sort_values("roi", ascending=False)


roi_df = calculate_roi(df, store_uplift)
print("\n=== Top 10 ROI ===")
print(roi_df.head(10))
직관 — 비즈니스 보고

이 함수의 출력이 비즈니스 파트너에게:

  • 매장별 expected uplift (분 단위)
  • Annual value 추정 ($)
  • ROI 비율
  • Payback 기간 (일)

분석가의 권장:

  • ROI > 5 인 매장 우선 설치
  • Payback < 30 일이면 빠른 회수

→ Segmentation 의 직접 응용. 의사결정 가이드.

8 종합 — Segmentation 의사결정

분석가의 default
1. 사전 가설 (도메인 직관)
   - 어떤 personal characteristic 이 moderator 일까
   - 1~3 개 후보 명시

2. 회귀 분석
   - X * M interaction term
   - Main effect 모두 포함
   - Bootstrap CI

3. 추정값의 비즈니스 해석
   - Effect size 의 dollar/visit 변환
   - 통계적 유의 + 실용적 유의

4. Subgroup별 ROI
   - Predicted uplift × visits × value
   - Cost 와 비교

5. Action plan
   - Top segment 우선 적용
   - Bottom segment 무관 또는 다른 전략
   - 결과 monitoring + 피드백

이 워크플로가 segmentation 의 표준.

9 관련 주제

9.1 Ch.11 의 형제 글

9.2 이전 챕터

9.3 후속 챕터

9.4 카테고리 진입점

Subscribe

Enjoy this blog? Get notified of new posts by email: