이중차분법 - 마케팅 효과 추정 통계 기법

김지수·2025년 7월 25일
post-thumbnail

이중차분법

광고 캠페인, 가격 인하, 리브랜딩 등 특정 마케팅 개입이 실제로 매출이나 고객 행동에 어떤 영향을 미쳤는지 평가할 때 유용한 분석 기법

마케팅에서 이중차분법이 필요한 이유

  • 단순히 캠페인 전후의 매출 변화만 보면, 시장 트렌드나 계절 요인 등의 외부 요인까지 포함되어 있음.
  • 이중차분법은 '통제집단'을 기준선으로 삼아, 외부요인을 제거하고 순수한 마케팅 효과만 추정할 수 있도록 도와줌.

지역별 광고 캠페인 효과 분석

✅상황: 한 식음료 브랜드가 서울에서만 TV 광고 캠페인을 시작함. 캠페인을 하지 않은 부산과 캠페인을 한 서울의 광고 전후 매출 데이터를 비교해 광고 효과를 추정해보고 싶음.

✅분석과정
1. 처리집단의 변화: 서울은 광고 후 +500만원 증가
2. 통제집단의 변화: 부산도 +200만원 증가 (광고를 하지 않았는데도)
3. 이중차분법 추정치: (1500-1000) - (1100-900) = 500-200 = +300만원
-> 순수하게 광고 캠페인으로 생긴 매출 증가는 300만원으로 추정
통제집단이 있으면, 마케팅 효과를 더 과학적으로 분석 가능

통제집단 선정 기준

  • 통제집단은 가급적 유사한 특정을 가진 집단이어야 함
  • 캠페인 전 트렌드가 유사해야 이중차분법이 유효함
  • 데이터를 시각화해서 먼저 평행 추세 여부를 확인하는 것이 좋음

예시 코드

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 3개월간 수집한 매출 데이터
np.random.seed(42)
campaign_before = np.random.normal(100, 8, 20)  # 서울 캠페인 전
campaign_after = np.random.normal(115, 8, 20)   # 서울 캠페인 후
control_before = np.random.normal(95, 8, 20)    # 부산 캠페인 전
control_after = np.random.normal(100, 8, 20)    # 부산 캠페인 후

data = pd.DataFrame({
	'region':['Seoul']*40 + ['Busan']*40,
    'time': ['before']*20 + ['after']*20 + ['before']*20 + ['after']*20,
    'sales': np.concatenate([campaign_before, campaign_after, control_before, control_after])
})

# 시각화 그래프
avg_data = data.groupby(['region', 'time'])['sales].mean().reset_index()

plt.figure(figsize=(10, 6))
sns.lineplot(data=avg_data, x='time', y='sales', hue='region', marker='o', linewidth=3, markersize=10)
plt.title('에코프레시 캠페인 전후 매출 변화')
plt.xlabel('시점')
plt.ylabel('매출 (만원)')
plt.legend(title='지역')
plt.show()

평행 추세 가정이 시각적으로는 대체로 만족되는 것으로 보임

# CEO 앞에서 실시간 계산
means = data.groupby(['region', 'time'])['sales'].mean()
print("그룹별 평균 매출:")
print(means)

# DID 계산 - 핵심 순간
campaign_before = means['Seoul', 'before']
campaign_after = means['Seoul', 'after']
control_before = means['Busan', 'before']
control_after = means['Busan', 'after']

diff_campaign = campaign_after - campaign_before
diff_control = control_after - control_before
did_effect = diff_campaign - diff_control

print(f"\n서울 지역 변화: {diff_campaign:.2f}만원")
print(f"부산 지역 변화: {diff_control:.2f}만원")
print(f"DID 효과: {did_effect:.2f}만원")

  • 서울 지역 변화량: 112.87−98.63=14.24만원
  • 부산 지역 변화량: 99.75−94.79=4.96만원
  • 이중차분 효과: (서울 변화)−(부산 변화)=14.24−4.96=9.28만원
    -> 광고 캠페인 또는 마케팅 개입의 순수한 효과로 해석되는 부분이 9.28만원

즉, 외부 요인(계절, 전반적 시장 성장 등)을 통제한 순수한 마케팅 효과는 약 9.28만 원이라고 판단

profile
오늘 배운 것을 기록하며, 나만의 지식으로 만들어가는 성장 일지 💪🍀

0개의 댓글