ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. A/B 테스트부터 뉴스레터까지, 마케터의 파이썬 활용법
    마케터 관점의 데이터분석/마케터의 파이썬 활용법 2025. 6. 18. 17:29

    01. 광고 캠페인을 함수로 활용

    메시지 자동화 : 고객 세그먼트 별 문구 생성
    리포트 자동화 : 구매 지표 계산
    퍼너별 콘텐츠 템플릿화
    기획 → 반복 → 자동화

     

     

    고객 세그먼트 분류에 따라 다른 카피를 작성하고

    날짜별로 캠페인 변경과 매주 리포트를 만들 때 마다 엑셀 복붙 작업에...

     

    마케팅 종사자들은 알 것이다.

     

    마케터의 일은 반복 작업이 많다는것...

     

    • 매달 보내는 뉴스레터
    • 유입 채널별 웰컴 메시지
    • 장바구니 방치 고객 알람 
    • 결제 완료 후 NPS 요청까지

    여기에 있는 모든 마케팅 메시지들을 파이썬 함수(function)로 활용해

    마케터들의 반복 업무를 줄일 수 있다.


    함수란 무엇인가?

    함수를 작업 템플릿라고 생각하는 게 더 편하다.

    입력값을 받아 일정한 로직을 처리한 뒤, 결과를 반환하는 작업단위이다.

    반복되는 마케팅 메시지, 개인화 로직을 함수로 묶어보자.

     

    함수 기본  구조

    def 함수이름(매개변수):
    	실행할 코드
       	 return 결과값
    • def : define, 함수 정의 시작
    • 매개변수 : 함수에 전달할 값들
    • return : 결과값을 되돌려주는 키워드
    def welcome_message(name):
    	return f"{name}님, 가입을 환영합니다!"

     

    마케팅 퍼널에서 첫 단계 인사는 이런 간단한 로직으로 만들 수 있다.

    이걸 수십 수백명에게 적용하기 위해서 함수로 묶을 수 있다.

     

     


    리마케팅 메시지 함수화 하기

    def retargeting_messase(name,benefit):
    	return f"{name}님, 아직 구매하지 않으셨군요! 지금 구매 시 {benefit}"

    활용 예시:

    print(retargting_massage("예지","무료배송"))
    >> 예지님, 아직 구매하지 않으셨군요! 지금 구매 시 무료배송 혜택을 드려요.

     

    함수의 강점은 재사용성이다.

    매개변수(parameter)는 메시지를 커스터마이징할 수 있게 해준다.

     

    def send_coupon(name, coupon_code):
    	return f"{name}님, 쿠폰 {coupon_code}를 사용하세요!"

    A/B 테스트

    def cta_text(version):
    	if version == "A":
        		return "지금 할인 받기"
    	else:
        		return "혜택 확인하러 가기"

    반복 실행해보기

    def free_shipping(name):
    	return f"{name}님, 무료배송 쿠폰을 드립니다."
        
    for user in ["민지","수빈","지후"]:
    	print(free_shipping(user))
    customers = [
        {"name": "흰둥이", "grade": "VVIP"},
        {"name": "철수", "grade": "VIP"},
        {"name": "짱아", "grade": "신규"}
    ]
    
    def make_message(name, grade):
        if grade == "VVIP":
            return f"{name} 고객님, 프리미엄 혜택을 확인하세요!"
        elif grade == "VIP":
            return f"{name} 고객님, VIP 전용 혜택이 도착했습니다."
        else:
            return f"{name} 고객님, 신규 고객 할인 쿠폰이 발급되었습니다."
    
    for customer in customers:
        print(make_message(customer["name"], customer["grade"]))

    마케팅 리포트용 구매지수 계산해 보기

    def score_customer(purchase_count, days_sinse_last):
    	score = (purchaes_count * 10) - (days_since_last * 0.5)
        return score
        
    print(score_customer(5,10)) # 누적 구매 5회, 최근 10일 전 마지막 구매
    >> 45.0

    마케팅에서 자주 쓰는 함수 패턴

    함수 구조 사용 맥락
    def cta(name): CTA 문구 맞춤형 설계
    def message(name, product): 상품 추천 메시지
    def ab_test(ver): A/B 테스트 메시지 출력
    def funnel_text(stage): 퍼널 단계별 카피 분기
    def template(**kwargs): 여러 변수 기반 메시지 조합

    마케터의 함수

    개념 의미 적용
    def 함수 선언 메시지 구조 정의
    return 실행결과 반환 카피/콘텐츠 출력
    매개변수 입력값 고객이름, 등급, 혜택, 구매 수 등
    인수 전달값 각 고객 데이터
    반복문 + 함수 자동화 구조 다수 고객 메시지 발송

    참고:

    • 함수 이름은 의도가 드러나게 하기 : send_welcome(), generate_discount_message()...
    • 매개변수는 구조 기준으로 : 고객 이름, 채널, 등급, 구매이력 등...
    • return은 메시지 최종 결과/실행
    • 하나의 함수 = 하나의 캠페인/목적

    02. 반복문으로 일괄 콘텐츠 발송 실행해 보자

    지금까지 리스트로 고객을 분류하고

    딕셔너리로 속성을 읽고

    조건문으로 타겟을 나누고

    함수로 메시지를 템플릿화했다.

     

    하지만 마케터의 현실은 한 명의 고객에게 아니라 1,000명에게 메시지를 보내야 한다.

    이제 반복문으로 이 모든걸 연결해서 자동화 할 수 있다.

     

    • VIP 고객 200명에게 감사 메시지 발송
    • 이탈 유저 500명에게 재참여 쿠폰 발송
    • 신규 가입자에게 7일간 자동화된 온보딩 메일 시리즈 제공

    이런 반복적인 메시지를 수백명에게 보낼 때 파이썬 반복문으로 활용 가능하다.


    for문으로 다수의 고객에게 메시지 보내기

    users = ["하늘","바다","초원","구름"]
    
    for name in users:
        print(f"{name}님, 6월 혜택이 도착했습니다.")

     

    이름만 바꾸고 메시지는 같을 때 for문으로 사용하면 된다.

    반복문 + 조건문 + 함수

    def send_message(name, tier):
        if tier == "vip":
            return f"{name}님, VIP 전용 쿠폰을 확인하세요!"
        elif tier == "gold":
            return f"{name}님, 프리미엄 멤버십 혜택이 도착했어요!"
        else:
            return f"{name}님, 신규 고객 할인 놓치지 마세요!"
    
    customers = [
        {"name": "짱아", "tier": "vip"},
        {"name": "철수", "tier": "gold"},
        {"name": "유리", "tier": "basic"}
    ]
    
    for customer in customers:
        msg = send_message(customer["name"], customer["tier"])
        print(msg)

    UTM 링크 자동 생성

    campaigns = ["summer_sale", "fall_launch", "winter_clearan"]
    
    for campaign in campaigns:
        	url = f"https://brand.com/?utm_source=newsletter&utm_campaign={campaign}"
    print(url)

    예시 결과

    https://brand.com/?utm_source=newsletter&utm_campaign=summer_sale
    https://brand.com/?utm_source=newsletter&utm_campaign=fall_launch
    https://brand.com/?utm_source=newsletter&utm_campaign=winter_clearance

    구매 횟수에 따른 등급 분류

    users = [
        {"name": "짱아", "purchase": 1},
        {"name": "유리", "purchase": 5},
        {"name": "맹구", "purchase": 10}
    ]
    
    for user in users:
        name = user["name"]
        count = user["purchase"]
    
        if count >= 10:
            grade = "VVIP"
        elif count >= 5:
            grade = "VIP"
        else:
            grade = "일반"
    
        print(f"{name} 고객님은 {grade} 등급입니다.")

     


    while문 알아보기

    특정 조건이 True일 때 계속 반복하는 구조
    → 일반적인 마케팅 작업에서는 for가 더 자주 쓸 것 같지만
    반복 횟수를 정하지 않고 조건 기반 루프를 만들고 싶을 때 쓸 수 있다.
    n = 0
    while n < 3:
        print("혜택 알림 발송") # CTA 클릭 유도 메시지 발송
        n += 1

     

    고객 N명에게 순차적으로 발송하며 특정 조건에서 멈추 보자

    customers = ["한우", "삼겹살", "항정살", "연어"]
    i = 0
    
    while i < len(customers):
        print(f"{customers[i]}님, 6월 소식 전해드립니다.")
        i += 1

    break & continue

     

    • break: 조건을 만족하면 반복을 종료
    • continue: 특정 조건은 건너뛰고 다음으로 넘어감
    users = [
        {"name": "볶음밥", "responded": False},
        {"name": "우육면", "responded": True},
        {"name": "닭강정", "responded": False}
    ]
    
    for user in users:
        if user["responded"]:
            continue
        print(f"{user['name']}님, 할인 기간이 얼마 안 남았습니다! 놓치지 마세요!")

     


    A/B 테스트 시나리오 분배

    1. 짝, 홀수 인덱스 분배

    users = ["고양이", "강아지", "병아리"]
    versions = ["A", "B"]
    
    for i in range(len(users)):
        version = versions[i % 2]
        print(f"{users[i]}님, {version} 버전 메시지 발송")

    균등하게 샘플 빠르게 나누고 싶을 때

     

    2. 랜덤 분배

    import random
    
    users = ["감자", "고구마", "옥수수", "콩나물", "미나리"]
    versions = ["A", "B"]
    
    for user in users:
        version = random.choice(versions)
        print(f"{user}님, {version} 버전 메시지 발송")

    실험군 무작위 추출할 때, 정확안 샘플링이 어려울 경우.

    3. 성별, 채널 등 속성 따라 분배

    users = [
        {"name": "감자", "channel": "email"},
        {"name": "옥수수", "channel": "kakao"},
        {"name": "고구마", "channel": "email"},
    ]
    
    for user in users:
        if user["channel"] == "email":
            version = "A"
        else:
            version = "B"
        print(f"{user['name']}님, {version} 버전 메시지 발송")

    퍼포먼스 할 때 가장 많이 활용.

    4. 고정 실험군 테스트

    import random
    
    users = ["삼겹살", "한우", "우삼겹", "항정살", "목살"]
    test_group = ["감자", "고구마", "삼겹살"]
    
    for user in users:
        if user in test_group:
            version = random.choice(["A", "B"])
            print(f"{user}님, {version} 버전 메시지 발송")
        else:
            version = "C"
            print(f"{user}님, {version} 버전 메시지 발송")

    반복문 요약:

    문법 설명 마케팅 적용
    for 리스트 순회 다수 고객 대상 콘텐츠 발송
    while 조건 반복 퍼널 이탈 고객 조건 체크
    break 반복 종료 조건 도달 시 발송 중지
    continue 조건 건너뛰기 응답자 제외 등 예외 처리
    range() 숫자 기반 반복 N일 캠페인, 반복 테스트

    03. 문자열로 카피라이팅 자동화해보기

    • CTA 문구 생성
    • 퍼너별 카피 분기
    • 메시지 A/B테스트

    캠페인 타이틀, CTA 문구, SNS 텍스트, 메일 본문작성, 상품명, 쿠폰 메시지 등

    어떤 고객에게, 어떤 메시지를, 어떻게 보낼 것인가? 

    마케터들은 계속 고민하고 하루 종일 텍스트를 다룬다.

     

    파이썬에서는 '문자열(string)' 이라는 자료형으로 표현 할 수 있다.

    문자열이란? 

    큰 따움표 ("") 또는 작은 따움표 ('') 안에 있는 텍스트이다.

    title = "2025 썸머 시즌오프 세일"
    cta = "지금 구매하고 20% 할인 받기"

     

    CTA 문구 생성

    def generate_cta(discount, urgency):
    	return f"지금{discount}% 할인받기! {urgency}까지 한정!"
    print(generate_cta(15,"오늘밤"))

     

    문자열 조합으로 카피 A/B 테스트해 보기

    a_version = "혜택 받고"
    b_version = "지금 신청하기"
    
    common_tail = "무료배송 받으세요!"
    
    print(a_version + " " + common_tail)
    print(b_version + " " + common_tail)

    문자열 메서드

    메서드 의미 예시
    .upper() 대문자화 "welcome".upper() → "WELCOME"
    .lower() 소문자화 "FREE".lower() → "free"
    .replace() 텍스트 일부 바꾸기 "무료배송".replace("무료","특별")
    → "특별배송"
    .strip() 앞뒤 공백 제거 " CTA 문구 ".strip() → "CTA 문구"
    .spilt() 기준나누기  

    퍼너별 텍스트 생성

    def funnel_message(stage):
        if stage == "awareness":
            return "지금 브랜드를 처음 만났다면, 이 콘텐츠부터 시작해보세요!"
        elif stage == "interest":
            return "관심 있으신가요? 장바구니에 담긴 제품에 혜택이 있어요."
        elif stage == "conversion":
            return "결제 단계입니다. 지금 구매하면 사은품을 드려요!"
    print(funnel_message("interest"))

    문자열 연결

    prefix = "https://brand.com/promo/"
    campaign = "summer_sale"
    link = prefix + campaign
    print(link)

    문자열 길이, 포함 여부, 나누기

    text = "지금 구매하면 무료배송 + 10% 쿠폰"
    print(len(text))
    print("무료배송" in text)
    print(text.split("+"))

    텍스트 정리할 때

    email = "USER@Example.COM"
    cleaned = email.strip().lower()
    print(cleaned)

     

Designed by Tistory.