부트캠프

멋쟁이사자처럼 부트캠프 그로스마케팅 4기 31일차_260422

Yuuma 2026. 4. 22. 16:20
Day 15 | 광고·캠페인 최적화와 머신러닝
Day 15 · Growth Marketing Bootcamp

광고·캠페인 최적화와
머신러닝 첫걸음

데이터로 의사결정하는 그로스 마케터 되기 · 2026.04.22

1. 마케터에게 머신러닝이 필요한 이유

오늘날 마케터가 다루는 데이터는 10년 전과 비교할 수 없을 만큼 늘었습니다. 검색 한 번, 광고 클릭 한 번, 장바구니 담기 한 번… 이 모든 행동이 실시간으로 기록됩니다. 채널도 수십 개로 늘어났고, 보고서도 월 단위가 아닌 분·초 단위 대시보드로 바뀌었습니다.

쇼핑몰 마케터 A씨의 고민
매달 광고비 1,000만 원을 Facebook·Google·Instagram 세 채널에 나눠 씁니다. 어디에 얼마를 써야 할지 매번 "지난달에 잘 됐으니까..." 식으로 결정해왔습니다.

Facebook 클릭이 많아도 구매 전환율이 낮다면? Google은 클릭은 적지만 전환율이 2배라면? 이 사실을 데이터로 보지 않으면 절대 알 수 없습니다.

1-1. 마케터 + 머신러닝 = 그로스 마케터

머신러닝을 배운다는 건 개발자가 되는 게 아닙니다. 데이터로 의사결정하는 능력을 키우는 것입니다. 마케터의 직관 + 데이터 분석 능력 + 머신러닝 모델이 합쳐질 때, 가설을 빠르게 검증하고 최적의 전략을 실행하는 그로스 마케터가 됩니다.

2. 광고·캠페인 최적화란 무엇인가

광고·캠페인 최적화란, 정해진 예산 안에서 원하는 결과(전환·매출·앱 설치 등)를 최대화하거나, 같은 결과를 더 적은 비용으로 달성하는 모든 활동입니다.

최적화 = 목표 달성 ÷ 투입 비용  →  이 값을 최대화하는 것

최적화를 이해하려면 먼저 마케팅 퍼널을 알아야 합니다. 광고를 보고 → 클릭하고 → 구매까지 이어지는 각 단계에서 이탈이 발생하고, 머신러닝은 어디서, 왜 이탈이 발생하는지 패턴을 찾아줍니다.

마케팅 퍼널 인포그래픽

2-1. 데이터 기반 의사결정 사이클

성공적인 그로스 마케터는 아래 4단계 사이클을 빠르게, 반복적으로 돌립니다.

#단계내용
가설 수립"Google이 Instagram보다 전환율이 높을 것이다"
데이터 수집 & 분석채널별 CTR, CVR, CPA 계산
모델링 & 예측회귀분석으로 광고비 → 전환수 예측
실행 & 검증예산 재배분, A/B 테스트 실행 → 다시 ①로

3. 핵심 마케팅 지표 4가지

마케팅 데이터를 다루기 전에 반드시 알아야 할 4가지 지표입니다. 지표 하나만 보지 마세요. CTR이 높아도 CVR이 낮으면 결국 손해입니다. 항상 퍼널 전체를 함께 봐야 합니다.

핵심 마케팅 지표 치트시트
지표공식무엇을 보는가낮으면 의심되는 문제
CTR클릭수 ÷ 노출수 × 100광고 소재 매력도이미지·카피가 타겟과 안 맞음
CVR전환수 ÷ 클릭수 × 100랜딩페이지·상품 설득력가격, UX, 신뢰도 문제
CPA광고비 ÷ 전환수획득 비용 효율타겟팅·채널 선택 문제
ROAS매출 ÷ 광고비 × 100전체 광고 투자 효율상품 마진·전략 문제

4. 머신러닝 × 마케팅

4-1. 머신러닝이란? (마케터 버전)

머신러닝 = 데이터에서 패턴을 찾아 예측하는 기술

복잡한 수식 대신 마케팅 문제로 이해합시다. 크게 세 가지 유형의 문제를 풀 수 있습니다.

유형마케팅에서 묻는 질문예시
예측 (회귀)광고비 X 쓰면 전환이 얼마나 날까?광고비→전환수 예측
분류이 고객이 이탈할 가능성이 높은가?이탈 예측 모델
군집 분석우리 고객을 어떤 그룹으로 나눌 수 있을까?고객 세그먼트

4-2. 머신러닝 분석의 기본 흐름 (7단계)

단계내용
① 문제 정의"어떤 채널이 ROAS가 가장 높을까?"
② 데이터 수집채널, 광고비, 클릭수, 전환수, 매출 수집
③ 데이터 전처리결측값 처리, 이상치 제거, 스케일링
④ 특징 엔지니어링CTR, CVR, CPA, ROAS 등 새 변수 생성
⑤ 모델 학습선형 회귀, K-Means 등 알고리즘 적용
⑥ 모델 평가R², MAE 등으로 성능 확인
⑦ 의사결정 & 실행예산 재배분, 캠페인 전략 수정

5. 실습 전에 꼭 알아야 할 머신러닝 기본 개념

5-1. X와 y : 입력과 정답

머신러닝 코드에서 가장 먼저 등장하는 두 글자가 바로 Xy입니다.

X (독립변수, Feature) = 모델에게 주는 정보 → "이것을 보고"
y (종속변수, Label) = 모델이 맞춰야 할 정답 → "이것을 예측해"
문제X (입력 정보)y (예측 대상)
전환수 예측광고비, CTR전환수
이탈 예측최근 방문일, 구매횟수이탈 여부 (0 또는 1)
매출 예측광고비, 채널, 요일매출 금액

5-2. 학습(fit)과 예측(predict)

머신러닝 모델은 크게 두 단계로 작동합니다.

X y fit predict 개념
model.fit(X, y) & model.predict(X_new)
  • fit() = 공부 단계. 과거 데이터에서 X와 y 사이의 패턴(기울기·절편)을 찾아냄
  • predict() = 시험 단계. 학습이 끝난 모델에 새로운 X를 주면 y를 예측
  • 비유: 학생(모델)이 시험 족보(과거 데이터)를 공부한 뒤, 새 문제를 풀어 답을 내는 것

5-3. sklearn이란?

scikit-learn(줄여서 sklearn)은 파이썬에서 가장 많이 쓰이는 머신러닝 라이브러리입니다. 선형 회귀, 군집 분석, 분류 등 수십 가지 모델이 들어 있어서, 복잡한 수식을 직접 구현하지 않고도 몇 줄 코드로 모델을 만들 수 있습니다.

sklearn_비교.py python
# sklearn 없이 선형 회귀를 구현하려면?
# → 행렬 연산, 편미분, 경사하강법 수십 줄 코드 필요

# sklearn을 쓰면?
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X, y)  # 끝!

5-4. 모델 성능 지표 : R²와 MAE

모델을 만들었으면 "얼마나 잘 예측하는가?"를 숫자로 확인해야 합니다.

R² MAE 해석 가이드
r2_score() & mean_absolute_error()
  • R² (결정계수) = 0~1 사이 값. 1에 가까울수록 좋음. "이 모델이 데이터를 몇 %나 설명하는가"
  • MAE (평균 절대 오차) = 예측값과 실제값의 평균 차이. 낮을수록 예측이 정확함
  • R² = 0.85라면 → "이 모델은 전환수 변동의 85%를 설명한다"
  • MAE = 8.6이라면 → "예측이 실제와 평균 8.6건 차이난다"

6. 실습 — 광고 성과 데이터로 전환수 예측하기

실습은 스토리 순서로 이어집니다. 01 → 02 → 03 → 04 순서대로 실행하세요.

실습 01
🗂️
데이터 준비
광고 데이터 & 지표 계산
실습 02
📊
시각화
패턴을 눈으로 확인
실습 03
🤖
모델 학습
첫 번째 sklearn 모델
실습 04
🔮
미래 예측
머신러닝의 진짜 목적

실습 01 : 데이터 준비 & 마케팅 지표 계산

목표: 30일치 광고 캠페인 데이터를 만들고, CTR·전환수 등 머신러닝 모델에 넣을 지표를 계산합니다.

머신러닝 모델은 숫자 데이터를 먹습니다. 지표 계산은 재료를 손질하는 과정입니다. 실제 업무에서는 GA4나 광고 플랫폼에서 받은 CSV를 pd.read_csv()로 불러옵니다.

실습01_데이터준비.py python
import pandas as pd

# ── 30일치 광고 캠페인 고정 데이터 ─────────────────────────────
data = {
    '날짜': [f'2026-03-{str(i).zfill(2)}' for i in range(1, 31)],
    '광고비': [
        120, 340, 780, 210, 560, 430, 890, 150, 670, 310,
        490, 820, 260, 740, 380, 610, 170, 930, 450, 290,
        710, 530, 860, 190, 640, 370, 950, 240, 580, 420
    ],
    '노출수': [15000, 42000, 91000, 28000, 67000, 53000, 88000, 19000, 74000, 39000,
              58000, 85000, 33000, 79000, 47000, 63000, 22000, 96000, 55000, 36000,
              76000, 61000, 89000, 25000, 71000, 45000, 98000, 31000, 68000, 51000],
    '클릭수': [320, 980, 2850, 590, 1760, 1340, 2100, 410, 1980, 870,
             1450, 2430, 720, 2260, 1120, 1680, 480, 2790, 1390, 800,
             2080, 1570, 2540, 530, 1870, 1060, 2910, 660, 1740, 1230]
}

df = pd.DataFrame(data)

# 이상치 제거: 클릭수가 노출수를 초과하는 행 제거
df = df[df['클릭수'] <= df['노출수']].reset_index(drop=True)

# ── 마케팅 지표 계산 (특징 엔지니어링) ────────────────────────
df['CTR'] = (df['클릭수'] / df['노출수'] * 100).round(2)   # 클릭율 %

# 전환수: 수업 고정 데이터 (실제라면 GA4 등에서 가져옴)
df['전환수'] = [
    41, 42, 74,  5, 51, 40, 80, 14, 63, 29,
    33, 86, 41, 90, 41, 54, 17, 66, 58, 20,
    53, 50, 97, 28, 49, 31, 94, 27, 47, 41
]

print(df[['날짜', '광고비', '노출수', '클릭수', 'CTR', '전환수']].head())
pd.DataFrame() / df[condition] / .round()
  • pd.DataFrame(data) — 딕셔너리를 엑셀 시트 같은 표 형태(DataFrame)로 변환
  • df[df['클릭수'] <= df['노출수']] — 조건을 만족하는 행만 필터링 (이상치 제거)
  • df['CTR'] = (클릭수 / 노출수 * 100).round(2) — 새 열 추가 + 소수점 2자리 반올림. 이게 바로 특징 엔지니어링

실습 02 : 시각화로 패턴 확인하기

목표: 머신러닝 모델을 만들기 전에, 광고비와 전환수 사이에 관계가 있는지 눈으로 먼저 확인합니다.

데이터를 분석할 때는 항상 "관계가 있어 보이는가?"를 먼저 시각화로 확인하는 습관이 중요합니다. 산점도에서 점들이 우상향하면 양의 관계 → 머신러닝이 학습할 패턴이 있다는 신호입니다.

실습02_시각화.py python
import matplotlib.pyplot as plt

fig, axes = plt.subplots(1, 2, figsize=(13, 5))

# ① 광고비 vs 전환수 산점도
axes[0].scatter(df['광고비'], df['전환수'], color='#4f9cf9', alpha=0.7)
axes[0].set_title('광고비 vs 전환수')

# ② CTR vs 전환수 산점도
axes[1].scatter(df['CTR'], df['전환수'], color='#a78bfa', alpha=0.7)
axes[1].set_title('CTR vs 전환수')

plt.tight_layout()
plt.show()

# 상관계수 확인: 수치로도 관계 강도를 확인
corr = df[['광고비', 'CTR', '전환수']].corr()
print(corr['전환수'].drop('전환수').round(3))
plt.scatter() / .corr()
  • scatter(x, y) — 두 변수의 관계를 점으로 그려주는 산점도. 점이 우상향하면 양의 관계
  • .corr() — 상관계수 계산. 1에 가까울수록 강한 양의 관계. 0.5 이상이면 꽤 강한 관계
  • 시각화 → 상관계수 확인의 순서로 진행하면 모델 학습 전 데이터를 충분히 이해할 수 있음

실습 03 : 첫 번째 머신러닝 모델 만들기

목표: sklearn으로 선형 회귀 모델을 학습시키고, 모델이 얼마나 잘 배웠는지 확인합니다.

잠깐 — "그냥 평균 내는 거랑 뭐가 달라요?"

그냥 평균 계산 머신러닝 (선형 회귀)
할 수 있는 것이미 본 데이터의 평균 확인아직 안 써본 광고비도 예측 가능
결과"500만원 구간 평균은 XX건이었다""내일 500만원 쓰면 XX건 예상된다"
변수 여러 개하나씩 따로 봐야 함광고비 + CTR + 요일 동시에 고려
불확실성없음 (그냥 숫자)R², MAE로 예측 신뢰도를 숫자로 표현

핵심 차이 : 과거 요약 vs 미래 예측
실습03_모델학습.py python
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_absolute_error

# STEP 1. 입력(X)과 정답(y) 분리
X = df[['광고비']]   # 이중 대괄호 → 2D (sklearn 요구사항)
y = df['전환수']    # 단일 대괄호 → 1D

# STEP 2. 모델 생성 & 학습
model = LinearRegression()
model.fit(X, y)   # 데이터에서 패턴을 찾는 과정

print(f"기울기(slope):    {model.coef_[0]:.4f}")
print(f"절편(intercept):  {model.intercept_:.2f}")
print(f"→ 공식: 전환수 = {model.coef_[0]:.4f} × 광고비 + {model.intercept_:.2f}")

# STEP 3. 모델 성능 평가
y_pred = model.predict(X)
r2  = r2_score(y, y_pred)
mae = mean_absolute_error(y, y_pred)

print(f"R²  (설명력):  {r2:.3f}")
print(f"MAE (평균오차): {mae:.1f}건")
LinearRegression() / model.coef_ / model.intercept_
  • LinearRegression() — 선형 회귀 모델 객체 생성. 데이터를 직선 하나로 요약하는 가장 기본적인 모델
  • model.coef_ — 기울기 (slope). 광고비 1 증가 시 전환수가 몇 건 늘어나는지. 클수록 광고 효율이 좋은 캠페인
  • model.intercept_ — 절편. 광고비가 0일 때 예상되는 기본 전환 수
  • X에 이중 대괄호 [[]]를 쓰는 이유 — sklearn은 X가 2차원(표) 형태여야 함. 단일 []는 1차원이 되어 오류 발생

실습 04 : 모델로 미래 예측하기 (머신러닝의 진짜 목적!)

목표: 학습된 모델로 "아직 해보지 않은 광고비"의 전환수를 예측합니다.

이게 머신러닝의 핵심입니다. 과거 데이터로 미래를 예측하는 것. "다음 달 광고비를 500만원 쓰면 전환이 몇 건이나 날까?" 이 질문에 답할 수 있게 됩니다.

실습04_미래예측.py python
# STEP 1. 새로운 광고비 시나리오로 예측
시나리오 = pd.DataFrame({'광고비': [200, 350, 500, 700, 900]})
예측결과 = model.predict(시나리오)

for i in range(len(시나리오)):
    print(f"광고비 {시나리오.loc[i,'광고비']}만원 → 예상 전환수: {round(max(0, 예측결과[i]))}건")

# STEP 2. 실제 데이터 + 회귀선 시각화
fig, ax = plt.subplots(figsize=(10, 6))

ax.scatter(df['광고비'], df['전환수'],  color='#4f9cf9', label='실제 데이터')

x_line = pd.DataFrame({'광고비': range(50, 1050, 10)})
ax.plot(x_line, model.predict(x_line), color='#f87171', label='머신러닝 예측선')

ax.scatter(시나리오['광고비'], 예측결과.clip(0),
           color='#34d399', s=150, marker='*', label='새로운 예측')

ax.legend(); plt.show()
model.predict() / ax.plot() / .clip(0)
  • model.predict(시나리오) — 학습된 모델에 새 데이터를 넣어 전환수를 예측. 한 번도 써보지 않은 광고비도 예측 가능
  • ax.plot(x_line, y_line) — 회귀선 그리기. 점들 사이를 지나는 직선이 모델이 찾은 패턴
  • .clip(0) — 예측값이 음수가 나올 경우 0으로 치환. 전환수는 음수가 될 수 없으니 안전장치

+ 도전 : 변수 추가로 R² 개선하기

실습 03에서 X = df[['광고비']] 하나로만 예측했을 때의 R²를 기억하시나요? CTR 변수를 추가하면 성능이 어떻게 달라지는지 직접 확인해봤습니다.

도전_다중회귀.py python
# 변수 2개로 다중 회귀 모델 구성
X2 = df[['광고비', 'CTR']]   # 광고비 + CTR 동시에 고려
y  = df['전환수']

model2 = LinearRegression()
model2.fit(X2, y)

y_pred2 = model2.predict(X2)
r2_2  = r2_score(y, y_pred2)
mae2  = mean_absolute_error(y, y_pred2)

print(f"R²  : {r2_2:.3f}")         # → 0.796
print(f"MAE : {mae2:.1f}건")       # → 8.6건

if r2_2 >= 0.8:
    print("좋은 모델입니다!")
elif r2_2 >= 0.5:
    print("나쁘지 않지만 다른 변수 추가 요망")
else:
    print("설명력 낮음 — 다른 요인 탐색 필요")
실습 결과 — 변수 추가의 효과

광고비 1개만 사용 시: R² ≈ 0.7xx, MAE ≈ ?건
광고비 + CTR 2개 사용 시: R² = 0.796, MAE = 8.6건

→ CTR을 추가하자 설명력이 올랐습니다. 변수를 더 추가할수록 모델이 정밀해지지만, 지금은 선형 회귀의 기본 개념을 익히는 단계입니다. 다음 시간엔 더 정밀한 모델로 나아갑니다.

오늘 배운 것 정리

# 01
마케터 + 머신러닝
감이 아닌 데이터로 의사결정하는 능력
# 02
마케팅 퍼널
노출 → 클릭 → 전환 → 매출의 흐름
# 03
CTR
클릭수 ÷ 노출수 × 100 (광고 소재 효율)
# 04
CVR
전환수 ÷ 클릭수 × 100 (랜딩페이지 효율)
# 05
CPA
광고비 ÷ 전환수 (낮을수록 효율적)
# 06
ROAS
매출 ÷ 광고비 × 100 (투자 대비 매출)
# 07
X 와 y
X = 입력 정보, y = 맞춰야 할 정답
# 08
model.fit()
데이터에서 패턴(기울기·절편)을 학습
# 09
model.predict()
새로운 값에 대한 예측값 계산
# 10
R² (결정계수)
모델 설명력. 1에 가까울수록 좋음

도전 과제

  1. 시나리오의 광고비 숫자를 바꿔서 예측값이 어떻게 달라지는지 확인해보세요.
  2. X = df[['광고비', 'CTR']]로 바꾸면 R²가 올라가나요? (직접 해봤다면 결과를 메모해두세요)
  3. 실습 03의 MAE 값을 다시 읽어보고, "이 오차가 실제 마케팅에서 괜찮은 수준인가?" 생각해보세요.