ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3. 전환 조건부터 퍼널 분석까지, 마케터의 파이썬 공부
    마케터 관점의 데이터분석/마케터의 파이썬 활용법 2025. 6. 23. 21:07

    0.1 클래스에 대해 알아보자

    마케터들은 매달 리마케팅 시나리오를 짜고

    웰컴 메시지를 반복적으로 만들고

    캠페인 대상 리셋을 계속 해야한다.

     

    마케팅의 영역은 광범위 하지만

    기본적 큰 틀로 보면 마케팅은 고객 정보를 받아서 카피를 작성하고

    콘텐츠를 보내는 로직으로 흘러가고 있다.

     

    그게 이번 달이든, 다음 달이든,

    혹은 브랜드가 바뀌어도 로직은 그대로인 경우가 많다.

     

    하지만 파이썬의 클래스(class)로 매번 새로 작성하지 않고,

    자동화 로직 하나로 재활용할 수 있다고 한다.


    클래스란?

    클래스는 Object를 만들기 위한 설계도로 비유할 수 있다.

    같은 구조를 반복해서 만들고 싶을 때 사용할 수 있고

    내부에 변수나 함수를 포함 할 수 있다.

     

    마케터들에게는 컴페인 템플릿, 혜택 생성, 세그먼트 로직 등

    반복되는 작업에 활용할 수 있다.

    기본구조

    class 클래스이름:
        def __init__(self, 매개변수):
            self.속성 = 매개변수
        
        def 메서드(self):
            실행코드

     

    전에 함수(function)를 알아봤었는데

    전공자가 아닌 경우 언뜻 보면 함수와 클래스는

    비슷하게 생각할 수 있지만 엄연히 다르다.

     

    클래스는 초기 설계는 복잡하기만 한 번 구조를 짜놓으면

    다양한 브랜드와 세그먼트에 그대로 적용할 수 있고

    브랜드를 바꾸기만 하면 된다.

     

    반면에 함수는 브랜드, 시나리오나 컨텍스트가 바뀌면 다시 만들어야한다.

     

    예시:

    클래스로 하는 경우

    class WelcomeCampaign:
        def __init__(self, brand, segment):
            self.brand = brand
            self.segment = segment
    
        def send_message(self, name):
            if self.segment == "premium":
                return f"{name}님, {self.brand} 프리미엄 가입을 축하드립니다!"
            else:
                return f"{name}님, {self.brand}에 오신 걸 환영합니다!"

     

    함수로 하는 경우

    def send_welcome_message(name):
        return f"{name}님, 가입을 환영합니다!"

     

    마케팅 캠페인 클래스화 

    class Campaign:
        def __init__(self, name, discount):
            self.name = name
            self.discount = discount
    
        def make_utm(self):
            return f"https://brand.com/?utm_source=newsletter&utm_campaign={self.name}"
    
        def make_message(self, customer_name):
            return f"{customer_name} 고객님, 이번 {self.name} 캠페인에서 {self.discount}% 할인 혜택을 받아보세요!"
    summer = Campaign("summer_sale", 20)
    print(summer.make_utm())
    print(summer.make_massage("왕감자"))

    리마케팅 캠페인 클래스로 해보기

    class RetargetingCampaign:
        def __init__(self, name, has_cart, is_vip):
            self.name = name
            self.has_cart = has_cart
            self.is_vip = is_vip
    
        def message(self):
            if self.is_vip and self.has_cart:
                return f"{self.name}님, 장바구니 혜택이 곧 종료됩니다! VIP 전용 쿠폰을 확인하세요."
            elif self.has_cart:
                return f"{self.name}님, 장바구니에 담긴 상품이 곧 품절됩니다!"
            else:
                return f"{self.name}님, 새로운 프로모션이 준비됐어요!"
    user1 = RetargetingCampaign("닭강정", True, True)
    print(user1.message())

     

    클래스를 통해서 마케팅 캠페인 메시지 전체 프로세스를 하나의 엔진으로 묶어 둘 수 있다.

     

    마케팅에 이렇게 연결해 보자

    반복되는 캠페인 → 캠페인 클래스 (Campaign, MessageGenerator)
    고객마다 다른 메시지 생성 → 고객 클래스 (Customer, Segment)
    브랜드별 혜택 조합 → 혜택 클래스 (RuleEngine, BenefitTemplate)
    리포트 구성 → 리포트 클래스 (Report, Metrics)

     

    개념 의미 마케팅 응용
    class 객체 설계 틀 캠페인 프로세스 구조화
    __init__ 초기 상태 설정 고객 속성/데이터 입력
    self 내부 데이터 지칭 상태 유지
    메서드 동작 정의 메시지 생성, 상태 업데이트 등
    인스턴스 객체 생성 유저별 캠페인 실행 단위

    02. 집합(set)를 통해 고객 필터링 해보자

    이벤트 참여자 중 기존 고객은 제외하고,

    첫 구매자는 따로 타겟팅하거나,

    1 + 1 쿠폰을 두 번 이상 쓴 고객은 제외하기.

     

    또는 장바구니에 담았지만 구매하지 않은 고객,

    이메일을 열었지만 클릭하지 않은 유저,

    광고를 클릭한 사람중 리타겟팅 캠페인까지 반응한 유저 등.

     

    마케터들은 캠페인 전후 이러한 데이터들을 자주 보게 된다. 

     

    이런 필터링 로직은 파이썬 집합(set)으로

    엑셀수식 보다 훨씬 간단하고 빠르게 구현할 수 있다.


    집합(set)이란? 

    중복없는 데이터 모음(중복 자동제거?)

    교집합/차집합/합집합 연산이 가능

     

    purchase_users = {"당근", "감자", "옥수수"}
    cart_users = {"옥수수", "고구마", "당근"}

     

    장바구니 담았지만 구매 안 한 유저 찾기 (차집합)

    cart_users = {"당근", "감자", "고구마"}
    purchase_users = {"당근", "고구마"}
    
    abandon_users = cart_users - purchase_users
    print(abandon_users)

    >>차집합 (A - B): 이탈 분석, 리타겟팅 대상자 추출

     

    클릭과 전환 모두 한 유저만 추출 (교칩합)

    click_users = {"당근", "콩", "라면"}
    conversion_users = {"라면", "콩"}
    
    engaged_users = click_users & conversion_users
    print(engaged_users)

    >>교집합 (A & B):  퍼널 단계별 전활률 분석, 충성 고객 추출

    전체 참여자 집합 구하기

    event_1 = {"당근", "콩"}
    event_2 = {"고구마", "당근"}
    
    total_participants = event_1 | event_2
    print(total_participants)

    >>합집합 (A | B): 전체유저군 파악


    자주 쓰는 set 연산

    연산 의미  적용예시
    set() 중복 제거 리스트 유저명 리스트 정리
    A - B 차집합 이탈 유저 추출
    A & B 교집합 전환자 필터링
    A | B 합집합 고객 리스트 통합
    .issubset() 포함 관계 판단 상위 세그먼트 포함 여부 확인
    a ^ b 대칭 차집합 (합집합-차집합) A 또는 B만 포함, 둘 다는 제외

     

    작업 set으로 구현 가능?

    쿠폰 사용자 중 신규고객만 차집합
    VIP 중 이벤트 응답자 교집합
    캠페인별 고객 리스트 통합 합집합
    이탈자 리스트와 기존 DB 비교  차집합 or 대칭 차집합

    03. Boolean에 대해 알아보자

    마케터가 자주 접하게 되는 질문들...

     

    구매를 했는가? (True / False)
    VIP인가 & 장바구니에 담았는가? (True and True)
    앱 설치를 했거나 이메일 구독을 했는가? (True or True)
    광고를 클릭했지만 전환은 안 됐는가? (True and not True)

     

    마케터는 항상 고객의 행동을 조건화하고, 조건을 기준으로 분기한다.

    Boolean에 대해 이해하면 이런 조건들을 설계하고 해결할 수 있다. 


    Boolean이란?

    • True 또는 False의 두 가지 값만 존재하는 자료형
    • 조건문, 필터링, 타겟 분류 가능
    • 숫자처럼 사용될 때는 True=1, False=0

    전환 퍼널 조건 분기

    user = {
        "clicked": True,
        "purchased": False
    }
    
    if user["clicked"] and not user["purchased"]:
        print("클릭 유저 재전환 유도 캠페인 대상")

     

    VIP + 장바구니 보유 유저만 캠페인 대상

    user = {
        "tier": "vip",
        "has_cart": True
    }
    
    if user["tier"] == "vip" and user["has_cart"]:
        print("VIP 장바구니 알림 발송")

    앱 유입 or 이메일 유입 유저 필터링

    user = {
        "channel": "app"
    }
    
    if user["channel"] == "app" or user["channel"] == "email":
        print("디지털 채널 타겟 대상")

    가입은 했지만 14일 이내 미구매자

    user = {
        "signed_up": True,
        "purchased": False,
        "days_since_signup": 10
    }
    
    if user["signed_up"] and not user["purchased"] and user["days_since_signup"] < 14:
        print("웰컴 쿠폰 리마인드 발송 대상자")

     

    마케팅 조건 Boolean 예시

    구매 횟수 ≥ 3 purchase_count >= 3
    VIP 등급 + 30일 이내 구매 grade == "VIP" and days < 30
    전환이 없거나 반응 없음 not converted
    조건 A 또는 B 만족 A or B

     


    04. lambda에 대해 알아보자

    lambda 함수란?

    • 익명 함수
    • 한 줄로 표현되는 함수
    • 주로 map, filter, sorted 등과 함께 사용
    # 기본형
    lambda 매개변수: 반환값
    
    #예
    square = lambda x: x * x
    print(square(3))  # 9

     

    구매금액을 등급으로 나누기 (map + lambda)

    amounts = [50000, 150000, 300000]
    
    # 조건: 20만원 이상 = VVIP, 10만 이상 = VIP, 그 외 = 일반
    grades = list(map(
        lambda x: "VVIP" if x >= 200000 
        else "VIP" if x >= 100000 
        else "일반",
        amounts
    ))
    
    print(grades)

    유저 등급별 추천 문구 자동 생성

    tiers = ["basic", "gold", "vip"]
    
    messages = list(map(lambda t: f"{t.upper()} 등급 전용 혜택이 준비됐어요!", tiers))
    print(messages)

    특정 조건만 추출 (filter + lambda)

    amounts = [50000, 150000, 300000]
    
    # 10만 이상 고객만 필터링
    high_value = list(filter(lambda x: x >= 100000, amounts))
    print(high_value)

    전환한 유저만 추출하기 (filter)

    users = [
        {"name": "지민", "converted": True},
        {"name": "하람", "converted": False},
        {"name": "수아", "converted": True}
    ]
    
    converted_users = list(filter(lambda u: u["converted"], users))
    print(converted_users)

    유저 행동에 따라 전환 상태 태깅

    clicks = [3, 0, 5, 1]
    
    labels = list(map(lambda c: "전환유력" if c >= 3 else "관심낮음", clicks))
    print(labels)

    캠페인 대상 유저 중 VIP만 태깅 후 리스트업

    users = [
        {"name": "지민", "tier": "gold"},
        {"name": "태양", "tier": "vip"},
        {"name": "윤호", "tier": "basic"},
        {"name": "예린", "tier": "vip"}
    ]
    
    vip_users = list(filter(lambda u: u["tier"] == "vip", users))
    names = list(map(lambda u: u["name"], vip_users))
    
    print(names)

    마케터를 위한 lambda/map/filter

    lambda x: ... 짧은 익명 함수 조건/형식 기반 요약
    map(lambda x: ..., iterable) 전체 요소에 함수 적용 CTA 문구, 혜택 텍스트 자동화
    filter(lambda x: 조건, iterable) 조건에 맞는 값만 추출 유저 세그먼트 필터링
    list(...) 결과 묶기 보고서용 리스트 출력

     


    그동안 코딩에 대해 몰랐지만

    멀티캠퍼스에서 매일 8시간씩

    수업을 들으면서 점점 알아가고 있다.

     

    내 자신이 뇌에게

    지식을 주입하고 있긴 하지만...🥲

     

    매일 이렇게 마케팅 실무에 적용할 수 있는

    파이썬을 알아가는 것도 재미 있고

     

    좀 더 효율적으로 업무에 적용을 하고 싶은 생각에

    매일 코딩 하는 습관을 들이고 있다.

     

    아직 코린이이지만...

    꾸준히 하다보면 늘겠지 라는 생각...^^

     

    다음 편에는

    마케팅 리서치에 도움되는 웹크롤링을 올릴 예정이다.

    아직도 할 게 산더미 이지만😅

    계속 가보자고오

     

     

Designed by Tistory.