ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4. 데이터 분석가 프로젝트 5주차 수행일지
    마케터 관점의 데이터분석/데이터분석 프로젝트 2025. 9. 12. 11:00

    4주차에는 광고 예산과 인력이 무한하지 않다는 점을 고려하여,
    우선 가장 효율이 높은 고객 세그먼트를 선별해야 한다고 판단했다.
     
    이에 따라 5주차에는 데이터를 기반으로 분석을 진행해,
    어떤 그룹을 우선 공략했을 때 ROI가 가장 높을지를 도출했다.


    [멀티캠퍼스 KDT 데이터 분석가 최종 프로젝트 5주차 수행일지]

    1. 데이터 준비

    import pandas as pd
    df = pd.read_csv("tourist_data.csv")
    df.head()

    데이터 출처: 외래관광객 조사 2분기 잠정치
    주요 변수: 점유율, 성장률, 만족도, 방문객 규모
     

    2. ROI 점수 산출

    from sklearn.preprocessing import MinMaxScaler
    
    scaler = MinMaxScaler()
    df[['점유율_n','성장률_n','만족도_n','방문객규모_n']] = scaler.fit_transform(
        df[['점유율','성장률','만족도','방문객규모']]
    )
    
    df['ROI_score'] = df[['점유율_n','성장률_n','만족도_n','방문객규모_n']].mean(axis=1)
    df[['세그먼트','ROI_score']].sort_values(by='ROI_score', ascending=False).head()

    네 가지 지표를 정규화 후 평균하여 ROI Score로 정의
    결과: 여성 청년층(친구·커플), 여성 30~40대, 가족 동반이 Top3
     

    3. 클러스터링(KMeans)

    from sklearn.cluster import KMeans
    X = df[['점유율_n','성장률_n','만족도_n','방문객규모_n']]
    km = KMeans(n_clusters=2, random_state=42)
    df['cluster'] = km.fit_predict(X)
    df.groupby('cluster').mean()

    데이터 기반으로 행동 그룹을 도출 (Cluster 0: 가족 중심, Cluster 1: 여성 중심)
     

    4. 시각화

    import matplotlib.pyplot as plt
    
    plt.scatter(df['성장률'], df['만족도'], 
                s=df['방문객규모']/50, 
                c=df['ROI_score'], cmap='coolwarm', alpha=0.7)
    plt.xlabel("성장률")
    plt.ylabel("만족도")
    plt.title("세그먼트별 성장률 vs 만족도 (버블=규모, 색=ROI)")
    plt.colorbar(label="ROI Score")
    plt.show()

    버블차트: 성장률 vs 만족도, 버블 크기=방문객 규모, 색=ROI Score
     

    Top ROI 세그먼트 (버블 크고, 색 진하게 나온 그룹)

    여성 청년층 (친구·커플 여행)
    성장률↑, 만족도↑, 방문객 규모↑ → ROI Score 가장 높음
    여성 30~40대 (자녀 동반 가능)
    체류기간·지출 여력 높음, 성장률도 안정적 → ROI 상위권
    가족 동반 (청소년 포함)
    방문객 규모 크고 만족도도 준수 → ROI 점수 상위

    ROI 중간 세그먼트

    일부 여성 기타 그룹: 규모는 있지만 성장률/만족도가 중간 수준
    여성 청년(커플 외 단체): 반응은 있으나 ROI Score은 상위권 대비 다소 낮음

    ROI 낮은 세그먼트

    액티브 시니어 남성: 방문객 규모가 작아 ROI Score 낮음
    기타 소수 그룹: 성장률·만족도 모두 낮아 우선순위에서 제외
     

    5. 마케팅 인사이트 도출

    여성 청년층(친구·커플) → SNS·인플루언서 / K-뷰티·패션 연계
    여성 30~40대 (자녀 동반 가능) → 쇼핑·패밀리 패키지 상품
    가족 동반 청소년 포함 → 체험형 패밀리 콘텐츠 / 여행 패키지
    남성(액티브 시니어) → 레저·스포츠·역사 체험 패키지
     

    6. A/B 테스트 설계 & 시뮬레이션

    1. 가설 설정

    대상: 여성 청년층(친구·커플)
    A안: 기존 메시지/광고
    B안: 인플루언서·SNS 강조 메시지
    목표: 전환율 +10% 이상 개선, p<0.05 유의
     

    2. 표본 수 계산 (시뮬레이션)

    from statsmodels.stats.power import NormalIndPower
    from statsmodels.stats.api import proportion_effectsize
    
    p1 = 0.020   # 현재 전환율 (2%)
    mde = 0.10   # +10% 개선 목표
    p2 = p1 * (1 + mde)
    
    es = proportion_effectsize(p1, p2)
    n = NormalIndPower().solve_power(effect_size=es, alpha=0.05, power=0.8)
    print("그룹당 최소 노출수:", int(n))

    → 결과: 그룹당 최소 노출수 80637 (시뮬레이션 기준)
     

    3. 가상 데이터로 검정 (시뮬레이션)

    from statsmodels.stats.proportion import proportions_ztest
    
    conv_A, imp_A = 950, 50000   # A안 전환수/노출수
    conv_B, imp_B = 1100, 50000  # B안 전환수/노출수
    
    z, p = proportions_ztest([conv_A, conv_B], [imp_A, imp_B])
    cr_A, cr_B = conv_A/imp_A, conv_B/imp_B
    lift = (cr_B-cr_A)/cr_A
    
    print(f"CR_A={cr_A:.2%}, CR_B={cr_B:.2%}, Lift={lift:.1%}, p={p:.4f}")

    결과 (시뮬레이션): CR_A=1.9%, CR_B=2.2%, Lift=+15%, p<0.05
    → 메시지 B가 더 효과적일 가능성을 확인

    6주차 계획

    5주차에서 우선 공략할 핵심 그룹을 도출했으므로,
    6주차에는 이를 기반으로 실제 캠페인 상황을 가정한
    A/B 테스트 시뮬레이션을 진행하여,
    실행 가능성과 기대 효과를 검증할 예정이다.
     

    주요 계획

    • 가상 캠페인 로그 생성: 세그먼트별(A/B) 노출·전환·비용·매출 데이터 준비
    • 통계 검정: 전환율 차이에 대한 z-test, Lift%, p-value 산출
    • 효율 분석: CAC/ROAS 계산으로 비용 대비 효과 평가
    • 의사결정 규칙 적용: p<0.05 & Lift≥+10% 충족 시 채택, 그렇지 않으면 재실험/메시지 조정

    추가 시뮬레이션


    SEO & 검색광고 시뮬레이션 (고려)
    SEM (검색광고)

    입력: 키워드, 월간검색량, CPC, 경쟁도
    산출: 예상 노출수, 클릭수, 전환수, 비용 (예산 한도 내)
    활용: 예산 대비 효율 키워드 선별

    SEO (검색최적화)

    입력: 키워드 난이도(kd), 페이지 점수(콘텐츠/백링크/기술)
    산출: 기대순위(rank_exp), Top10/Top3 진입 확률, 예상 클릭수/전환수
    활용: 중장기적으로 SEO 투자 가치 있는 키워드 식별

Designed by Tistory.