huny.log

기술 포스트 · 통계·ML

Prophet과 CausalImpact — 시계열 예측과 캠페인 인과 효과

Prophet은 시즌·트렌드를 자동 분리해 예측을 단순화하고, CausalImpact는 그 예측을 baseline으로 캠페인 효과를 추정합니다. 마케팅 자리의 두 도구 결합 사용 패턴.

캠페인 시작 후 매출이 +20% 올랐다면 그게 캠페인 효과인지 시즌·트렌드 효과인지 구분이 어렵습니다. CausalImpact는 캠페인이 없었을 때의 매출 예측(counterfactual)을 baseline으로 잡고, 실제 매출과의 차이를 캠페인 효과로 추정합니다. baseline 예측에 Prophet 같은 state-space 모델이 자주 들어갑니다. 두 도구의 결합이 마케팅 인과 분석의 표준 패턴 중 하나입니다.

마케터가 이 글을 읽어야 하는 이유: 분기 캠페인의 효과를 보고할 때 “전년 동기 대비 +20%“는 시즌·트렌드 효과가 섞여 있어 정직하지 않습니다. CausalImpact가 시즌·트렌드를 분리한 baseline을 만들어주면, 캠페인의 진짜 효과를 회의에서 데이터로 답할 수 있습니다.

Prophet baseline 예측선 위에 캠페인 시작 시점부터 실제값이 갈라지는 그래프
baseline = 캠페인이 없었을 때의 예측. 실제와의 차이가 캠페인 효과의 정직한 추정.

1. Prophet의 한 줄 직관

Facebook이 만든 시계열 예측 라이브러리. 매끄러운 트렌드 + 주기적 시즌 + 휴일 효과로 시계열을 분해.

  • : 트렌드 (선형 또는 logistic)
  • : 시즌 (주기적 푸리에 항)
  • : 휴일 효과
  • : 잔차 노이즈

자동으로 트렌드·시즌·휴일을 분리해 예측. 마케팅 시계열(매출·전환·CTR) 자리에 자연스럽게 적용.

2. CausalImpact의 한 줄 직관

Google이 만든 인과 분석 라이브러리. Bayesian state-space 모델로 처리 전 데이터를 학습한 뒤 처리 후 시점의 baseline을 예측. 실제값과 baseline의 차이가 인과 효과.

처리 후 시점의 “캠페인이 없었다면 어땠을까”를 데이터로 추정.

단계작업
1. 학습처리 전 데이터로 baseline 모델 학습
2. 예측처리 후 baseline 예측 (counterfactual)
3. 차이실제값 - baseline = 인과 효과
4. 신뢰구간Bayesian posterior에서 직접

처리 전 충분한 데이터(보통 6주+)가 있으면 정직한 baseline 가능.

3. 두 도구의 결합 — Prophet → CausalImpact 백엔드

CausalImpact의 기본 baseline 모델은 BSTS(Bayesian Structural Time Series). Prophet으로 baseline 예측한 뒤 CausalImpact 식으로 처리 효과 추정하는 패턴이 유연.

처리 전 시계열
Prophet (트렌드 + 시즌 분리)
처리 후 baseline 예측 (Prophet의 yhat)
실제 처리 후 - baseline = 캠페인 효과
Bootstrap 95% CI

Prophet의 강점(트렌드·시즌 자동 분리) + CausalImpact의 강점(인과 효과 추정 + 신뢰구간)을 결합.

4. 마케팅 자리의 적용

4-1. 분기 캠페인 효과

분기 시작에 큰 캠페인 시작. 그 시점 이후 매출의 캠페인 기여를 baseline 차이로 추정.

4-2. 신규 광고 채널 도입

새 채널 광고 시작한 시점부터의 매출 lift 추정. 채널 도입이 무작위 배정이 아니라 RDD·DiD 적용 어려움. CausalImpact가 표준.

4-3. 가격 변경의 영향

상품 가격 인상·할인 시작 후 판매량 변화. 자연 실험으로 효과 추정.

4-4. 이벤트·시즌 이상치 탐지

블랙프라이데이 같은 이벤트의 매출 lift를 baseline 대비로 측정.

자리처리 시점baseline 데이터
분기 캠페인캠페인 시작일처리 전 8-12주
신규 채널채널 도입일처리 전 6주+
가격 변경변경일처리 전 8주+
이벤트 lift이벤트일작년 동기간

5. 코드 한 묶음 — Prophet + CausalImpact

이게 글에 박는 유일한 코드입니다.

import pandas as pd
from prophet import Prophet
# df: ds(date), y(매출), 처리 시작일 = 2026-04-01
PRE_END = "2026-03-31"
POST_START = "2026-04-01"
# 1. 처리 전 데이터로 Prophet 학습
df_pre = df[df["ds"] <= PRE_END]
m = Prophet(yearly_seasonality=True, weekly_seasonality=True)
m.fit(df_pre)
# 2. 처리 후 baseline 예측 (counterfactual)
future = df[["ds"]] # 전체 기간
forecast = m.predict(future)
# 3. 인과 효과 = 실제 - baseline (처리 후만)
df_post = df[df["ds"] >= POST_START].merge(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]], on="ds")
df_post["effect"] = df_post["y"] - df_post["yhat"]
cumulative_effect = df_post["effect"].sum()
print(f"누적 캠페인 효과: {cumulative_effect:,.0f}원")
# 4. Bootstrap 95% CI (간이)
n_boot = 1000
boot_estimates = []
for _ in range(n_boot):
df_pre_b = df_pre.sample(frac=1, replace=True)
m_b = Prophet(yearly_seasonality=True, weekly_seasonality=True)
m_b.fit(df_pre_b)
fc_b = m_b.predict(df_post[["ds"]])
eff = (df_post["y"].values - fc_b["yhat"].values).sum()
boot_estimates.append(eff)
import numpy as np
ci_lo, ci_hi = np.percentile(boot_estimates, [2.5, 97.5])
print(f"95% CI: ({ci_lo:,.0f}, {ci_hi:,.0f})원")

처리 후 매출 - Prophet baseline = 캠페인 효과. Bootstrap으로 신뢰구간. R CausalImpact 패키지를 직접 써도 비슷한 결과.

6. CausalImpact 단독 사용

CausalImpact 자체에 BSTS baseline이 들어있어 단독 사용도 흔함.

# Python causalimpact (TFP 기반)
from causalimpact import CausalImpact
ci = CausalImpact(
data=df.set_index("ds")["y"],
pre_period=["2026-01-01", "2026-03-31"],
post_period=["2026-04-01", "2026-04-30"],
)
print(ci.summary())
ci.plot()

처리 전·후 기간만 지정하면 baseline 학습·예측·효과 추정·신뢰구간이 한 번에. 운영 효율 좋음.

7. 핵심 가정과 한계

7-1. baseline 모델의 정확성

baseline이 틀리면 인과 효과 추정도 무너짐. 처리 전 데이터에서 모델 검증(holdout MAPE) 필수. MAPE 5% 이하면 baseline 신뢰 가능.

7-2. 처리 시점의 다른 변화

캠페인 시작과 동시에 시즌·경쟁사 행동이 바뀌면 효과가 섞임. 외생 변수를 모델에 명시적 포함.

7-3. 외부 요인의 통제

control 시계열을 함께 사용하면 정밀도 향상. 예: 같은 카테고리의 비교 매장 데이터.

# Prophet에 외생 변수 추가
m = Prophet()
m.add_regressor("competitor_promo") # 경쟁사 프로모션 인디케이터
m.add_regressor("season_index") # 시즌 강도
m.fit(df_pre)

8. 분기 보고에 박을 표 양식

항목
처리 시작2026-04-01
처리 후 30일 실제 매출1.85억
Baseline 예측 매출1.50억
캠페인 효과 (절대)+0.35억
캠페인 효과 (상대)+23%
95% CI(+18%, +28%)
Baseline MAPE (사전 검증)4.2%

이 한 표가 회의에서 “캠페인 효과 +0.35억 (95% CI 18-28%)“을 정직하게 보고하는 표준 양식.

9. 마치며 — 시계열 인과 분석의 표준 도구

Prophet과 CausalImpact는 시계열 인과 분석의 가장 단순하고 강력한 결합입니다. 처리 전 데이터로 baseline을 학습해 처리 후 counterfactual 예측, 실제와의 차이가 인과 효과. 단순한 흐름이지만 baseline 모델의 정확성·외생 변수 통제·처리 시점의 다른 변화 같은 가정을 매번 점검해야 결과의 정직성이 유지됩니다.

다음 분기에 한 번만 시도해 볼 만한 것은 가장 큰 캠페인 한 자리에 Prophet·CausalImpact를 적용해 baseline 대비 효과를 추정하는 흐름입니다. “전년 동기 대비”가 아니라 “baseline 예측 대비”가 보고에 들어가면 의사결정 신뢰도가 한 단계 올라갑니다.

다음에 읽을 글

참고

통계·ML 카테고리의 다른 글

전체 보기 →