마케터들이 가장 두려워는 지표가 있습니다. 바로 '이탈률'입니다. 지난달 대비 이탈률이 또 올랐다면, 많은 담당자들은 급하게 이탈 고객 복귀(윈백) 캠페인을 기획하거나 할인 쿠폰을 발송하는 등 ‘발등에 불 떨어진’ 캠페인을 진행하곤 합니다.
하지만 문제는, 이탈률 상승을 확인하는 시점에는 이미 고객들이 떠난 상태라는 점입니다. 사후 분석으로는 무엇이 잘못되었는지 파악할 수 있지만, 이미 이탈한 유저를 되돌리기는 어렵습니다.
실제로 한 글로벌 연구에 따르면, 신규 고객 확보 비용은 기존 고객 유지 비용보다 5~7배 더 많이 소요된다는 연구 결과가 있습니다. 반대로 생각해보면, 고객 이탈을 미리 감지해 고객 유지율을 단 5%만 높여도 25%에서 95%까지 수익을 증가시킬 수 있다는 의미입니다.
그렇다면 고객이 떠나기 전에 이런 신호를 조기에 포착하고, 장기 고객으로 전환시킬 수 있는 방법은 무엇일까요? 이 아티클에서는 이탈 예방을 위해 주목해야 할 지표와 행동 패턴, 그리고 고객 리텐션을 높이는 실무 전략을 알아보겠습니다.
먼저 고객의 이탈을 방지하기 위해서는 이탈의 본질을 제대로 파악하는 것이 중요합니다. 이탈에는 두 가지 일반적인 유형이 있습니다.
결제 오류나 시스템 장애로 인한 비자발적 이탈은 마케터가 통제하기 어렵습니다. 하지만 고객 행동 데이터에서 나타나는 자발적 이탈 신호들의 패턴들(로그인 감소, 사용량 감소, 메시지 참여도 하락 등)은 충분히 사전에 감지할 수 있습니다. 그렇다면 많은 팀들은 왜 여전히, 고객이 보내는 신호를 놓치고 있는것일까요?
바로 '이탈률'이라는 결과에만 집중하기 때문입니다.
대부분의 마케터들은 해당 지표에 대한 뒤늦은 대응으로 이미 떠난 고객에게 이탈 고객 복귀(윈백) 캠페인 예산을 쓰고, 할인 쿠폰을 보내고, 이메일을 발송하는 일만 반복하곤 합니다.
하지만 진짜 중요한 건 고객이 떠나기 전 보이는 행동 변화의 패턴을 먼저 읽는 것입니다. 고객 이탈은 갑작스러운 결정이 아니라 고객이 보내는 여러 신호들을 놓친 결과이기 때문입니다.
'자발적 이탈 신호'든 '비자발적 이탈 신호'든, 이를 방치하면 팀 효율성, 캠페인 성과, 브랜드 건강 모두에 부정적인 영향을 미칠 수 있기 때문에, 데이터에서 '무엇을' 봐야 하는지, '어떻게' 대응해야 하는지만 알면 충분히 막을 수 있습니다. 그렇다면 어떤 지표로 이탈 직전 신호를 포착할 수 있을까요?
글로벌 CRM 솔루션 브레이즈는 모든 이탈 방지 모델에 아래 주요 신호들이 필수적이라고 강조합니다.
이런 신호들을 데이터로 포착하기 위해서는, 명확한 행동 지표 설정이 필요합니다. 구체적으로는 '유지 및 이탈 지표', '참여 및 행동 신호', '경험 및 만족도 측정 항목' 세 가지 영역으로 나눌 수 있습니다.
이런 부정적인 신호들을 지표를 통해 관리하면, 실제 유저 이탈의 문제가 발생했을때 미리 감지하여 대처할 수 있습니다.
문제를 인식했다면 이제 이탈 예정 유저에게 어떤 전략을 펼칠지 고민해야 합니다. 이탈 방지의 핵심은 속도와 정확성입니다. 브레이즈를 사용하면 이탈 신호를 자동으로 감지하고 즉시 대응할 수 있습니다.
브레이즈는 실시간 세분화와 개인화된 고객 여정을 통해 단순한 문제 발견을 넘어 고객 라이프사이클 전반에 걸쳐 연결된 경험을 제공합니다. 실제로 이런 전략이 어떻게 작동하는지, 위 사례를 통해 브레이즈의 핵심 기능들을 바탕으로 구체적인 이탈 방지 방법을 살펴보겠습니다.
브레이즈의 Dynamic Segment 기능을 사용하면 고객 행동에 기반한 그룹을 쉽게 만들 수 있습니다. '제주도 여행 검색 후 3일간 미접속', '장바구니 3회 이상 포기', '푸시 오픈율 30% 이하 하락' 같은 구체적인 위험 신호별로 고객 그룹을 자동 생성할 수 있습니다. 이런 세그먼트는 실시간으로 업데이트되어 위험 고객을 놓치지 않습니다.
Braze Predictive Suite를 통해, 각 고객이 언제쯤 떠날지 미리 예측 가능한 시스템을 구축할 수 있습니다. 고객의 검색 패턴, 접속 간격, 참여도 변화를 종합 분석해 이탈 위험도를 점수로 매깁니다. 예를 들어 7일간 여행 상품을 검색하다가 갑자기 접속이 끊긴 고객에게 높은 이탈 위험 점수를 부여해 우선 대응 대상으로 분류합니다.
Canvas 기능을 통해 마케터가 이메일, 푸시, SMS, 앱 내, 웹 등 다양한 채널에서 메시지를 효과적으로 전달할 수 있습니다. 접속이 끊긴 고객에게 첫 번째는 푸시로 여행 상품을 추천하고, 반응이 없으면 이메일로 할인 쿠폰을 보내고, 그래도 반응이 없으면 SMS로 마지막 어필을 하는 단계적 접촉 시나리오를 브레이즈 Canvas로 자동화할 수 있습니다. 각 단계에서 고객이 반응하면 여정을 종료하도록 설정하면 됩니다.
브레이즈는 Liquid 템플릿, Connected Content, AI 기반 아이템 추천 등 다양한 개인화 도구를 지원합니다. 이런 기능을 통해 브랜드는 각 사용자의 상황, 행동, 선호도에 맞춰 콘텐츠를 맞춤화하여 재참여 및 장기 고객 유지 가능성을 높일 수 있습니다.
예시로, "안녕하세요 고객님" 대신 "지난번 관심 보이신 제주도 여행 패키지에 특가 혜택이 추가되었어요"처럼 실제 검색 이력을 반영한 메시지를 보낼 수 있습니다.
이탈 방지 전략은 고정되어 있지 않기 때문에, 다양한 채널을 통해 어떤 메시지가 더 효과적인지 확인하고 계속 개선해야합니다.
"지금 예약하면 30% 할인" vs "내일까지만 특가" 같은 메시지 톤 차이나, 오전 9시 vs 오후 7시 발송 시간, 할인율 차이를 A/B 테스트로 비교 분석합니다. 마티니에는 이런 최적화를 통해 검색 후 이탈 고객의 재참여와 전환을 이끌어낸 경험이 있습니다.
결국 핵심은 고객의 미세한 행동 변화부터 복합적인 이탈 신호까지 브레이즈 같은 하나의 플랫폼에서 통합 분석하고, 개인별 맞춤 대응 전략을 자동 실행해야한다는 점입니다. 마티니는 국내 브레이즈 공식 파트너사로 이런 예측 모델 구축부터 크로스채널 캠페인 최적화까지 체계적으로 지원하고 있습니다.
고객의 이탈 신호를 놓치지 않으려면 단편적인 대응이 아닌 통합 시스템이 필요합니다. 모든 고객 데이터를 하나로 연결하고, 위험 신호를 실시간으로 감지하며, 적합한 시기에 개입할 수 있는 구조를 만들어야 합니다.
이를 위한 통합 시스템 구축 방법으로는 먼저 고객 데이터의 통합(중앙화)를 추천드립니다. 행동 신호, 참여 내역, 지원 상호작용, 제품 사용 데이터를 통합된 고객 뷰로 연결해야 실시간 대응이 가능합니다. 그다음에는 위험 고객군 파악을 통해 지난 14일간 미참여 유저나 취소 페이지 방문 후 이탈하지 않은 고객 등을 자동으로 분류할 수 있는 시스템이 있어야 합니다.
하지만 가장 중요한 것은, ‘실제로 이탈이 발생하는것을 막기 위한’ 신속한 대응입니다. 로그인 실패나 장바구니 포기 같은 이탈 신호가 나타나는 즉시 자동화된 재참여 여정이 시작되어야 합니다. 또한 목표 달성을 위한 단계별 계획 수립을 통해 온보딩 중단 유저와 기존 고객 이탈에 각각 다른 접근법을 적용해야 합니다.
이런 체계적인 이탈 방지 시스템을 구축하려면, 브레이즈 같은 전문 플랫폼 도입을 권장합니다. 실시간 고객 분석, 여러 채널을 통한 메시지 발송, 이탈 예측 기반 대응을 수작업으로 처리하기엔 한계가 있기 때문입니다. 자동화된 시스템으로 효과적인 고객 유지 전략을 실행할 수 있습니다.
북극성 프레임워크는 단일 지표인 북극성 지표를 기반으로 한 프로덕트 관리 모델로, 고객이 프로덕트에서 얻는 가치를 가장 잘 나타냅니다. 북극성 지표는 좋은 제품 전략 프레임워크지만, 오해하거나 잘못 사용하면 팀의 방향성이 틀어질 수 있습니다. 따라서 지표를 올바르게 설정하는 것이 매우 중요합니다.
모든 프로덕트에는 북극성 지표가 필요합니다. 북극성 지표는 비즈니스에 더 나은 방향성을 제시하고, 명확한 우선순위를 설정하고, 리소스를 절감하는 데 도움이 되기 때문입니다.
이번 아티클에서 북극성 지표란 무엇이며, 좋은 북극성 지표를 설정하기 위해서 어떤 것을 고려해야 하는지 알아보세요.
북극성 지표는 프로덕트의 성패를 측정하는 핵심 척도입니다. 이 지표는 프로덕트 팀이 해결하려는 고객의 문제와 이를 통해 얻고자 하는 수익의 관계를 정의합니다.
특히, 북극성 지표를 통해 다음과 같은 내용을 확인할 수 있습니다.
많은 기업에서 프로덕트 팀의 성공은 비즈니스에 미치는 영향이 아닌, 얼마나 많은 일을 하느냐에 따라 결정됩니다. 하지만 ‘임팩트’ 중심의 문화가 없다면 비즈니스의 방향에 영향을 미치기 어렵습니다. 북극성 지표가 없다면 프로덕트 중심으로 성장하는 기업이 되기 어렵습니다.
북극성 지표는 프로덕트 내 고객 행동에 대한 깊은 이해에서 비롯되어야 합니다. 고객의 ‘아하 모먼트’를 찾는 것도 비슷한 맥락입니다. 고객이 유입 초기 프로덕트에 머무는 순간을 찾았다면, 효과적인 북극성 지표를 찾았다고 할 수 있습니다.
즉, ‘DAU(Daily Active Users)’ 또는 ‘회원가입 수’와 같은 지표는 좋은 북극성 지표가 될 수 없습니다. 일회성으로는 유용할 수 있지만 고객이 프로덕트에 대해 무엇을 중요하게 생각하는지는 알 수 없기 때문입니다. 프로덕트 팀에서 느끼는 고객 가치를 북극성 지표와 연결하지 못한다면, 비즈니스는 잘못된 방향으로 흘러갈 수 있습니다.
북극성 지표를 잘 설정했다면, 그 지표만 보더라도 누구나 프로덕트가 어떤 가치를 추구하는지 쉽게 이해할 수 있어야 합니다. 북극성 지표는 단순한 숫자가 아니라 기업의 전략과 비전을 한눈에 보여주는 역할을 합니다. 조직 내부에서는 팀과 부서가 같은 목표를 바라보도록 돕고, 외부에서는 기업이 궁극적으로 어떤 문제를 해결하고자 하는지를 설명하는 공용 언어가 될 수 있습니다.
예를 들어 여행 플랫폼에서 ‘재방문 고객 비율’을 북극성 지표로 설정했다면, 플랫폼이 일회성 예약을 넘어 장기적으로 고객 경험을 개선하는 전략을 갖고 있다는 점을 확인할 수 있습니다. 이처럼 좋은 북극성 지표는 프로덕트가 만들고 있는 핵심 가치를 드러내야 합니다.
좋은 북극성 지표는 성공의 선행 지표가 됩니다. 월별 매출이나 사용자당 평균 매출(ARPU)과 같은 후행 지표는 프로덕트의 영향력을 설명하는 지표가 되기 어렵습니다. 이 지표는 매출을 예측하기보다는 과거에 무슨 일이 일어났는지를 파악하는 지표입니다.
적합한 북극성 지표를 선택하는 첫 번째 단계는, 비즈니스가 어떤 ‘게임’을 하고 있는지 파악하는 것입니다. 여기서 게임이란 ‘핵심 고객 참여 모델’을 의미합니다. Amplitude(앰플리튜드)에서 프로덕트에 대한 연구와 매달 1조 개 이상의 행동 데이터를 분석한 결과, 핵심 고객 참여 모델은 다음 중 하나로 분류될 수 있습니다.
프로덕트 팀은 위의 3가지 중 하나의 모델을 결정해야 합니다. 이는 프로덕트 전략을 수립하고, 좋은 북극성 지표를 정의하는 첫 번째 단계입니다.
위의 표는 이 위의 3가지 모델 중 하나를 채택한 기업 사례입니다. 다만, 같은 모델을 채택하고 있더라도 기업마다 고유한 프로덕트 전략을 가지고 있기 때문에 북극성 지표는 서로 다를 수 있습니다.
앰플리튜드를 활용하면 북극성 지표를 실시간으로 트래킹할 수 있습니다. 북극성 지표를 활용하면 팀 내에서 보다 가치 있는 커뮤니케이션이 가능합니다. 북극성 지표를 찾고, 구현하기 위해서는 프로덕트 팀이 단순 업무 상태 관리에서 벗어나, 보다 프로덕트에 깊이 몰입하고 아이디어를 공유하는 데 집중할 수 있습니다.
Braze는 고객 경험을 더 풍부하게 만들고, 마케터가 보다 효율적으로 CRM 캠페인을 운영할 수 있도록 꾸준히 프로덕트를 발전시키고 있습니다. 마티니는 브레이즈의 공식 파트너사로서, 지난 한 달 간 브레이즈에서 업데이트 된 기능과, 새롭게 공유된 소식을 가장 빠르게 전달합니다.
앞으로도 마티니 블로그와 링크드인, 인스타그램을 통해 브레이즈 업데이트 소식을 가장 먼저 만나보세요.
현재 얼리액세스 단계인 Canvas Context Step에서의 Date Type 데이터 사용 시, 자동으로 Timezone은 UTC로 적용됩니다.
우리나라는 UTC와 9시간 시차가 발생하여, 저장한 데이터에 따라 날짜가 바뀌어버리는 경우가 발생할 수도 있습니다. 따라서 Liquid를 통해 timezone을 설정하고 사용할 것을 권장합니다.
Timezone 설정 예시
사전 알람 신청한 A이벤트가 {{canvas_entry_properties.${event_start_date} | time_zone: 'Asia/Seoul' | date: "%Y-%m-%d %H:%M"}}에 시작돼요!
시간 계산을 위한 Liquid 예시
{% assign new_start_date{{canvas_entry_properties.${event_start_date} | date:'%s" | minus: 32400 %}
{{context.${example_variable_name}}}
와 같은 형식으로 사전 저장된 Step을 호출할 수 있습니다.
Segment Funnel Statistics를 통해 유저의 Funnel별 전환율을 확인할 수 있게 업데이트 되었습니다.
Segment 생성 또는 Campaign의 Target Audience에서 타겟 설정 시 각 필터를 걸 때마다 전환율을 확인할 수 있습니다.
기존에는 단순 모수만 표기되어 전환율/이탈율 확인에 불편함이 있었는데요, 이번 업데이트로 필터별 전환율/이탈율 확인이 훨씬 수월해졌습니다.
더불어 이번 업데이트로 Segment 기능은 단순 타겟팅을 위한 용도 외에도 Funnel별 전환율을 확인하기 위한 용도로도 사용될 수 있습니다. 특히, 모수가 큰 필터부터 작은 필터까지 순서대로 걸면 Funnel 전환율 확인에 더욱 용이할 것 같습니다.
/campaigns/details
Endpoint는 캠페인의 상세 정보를 불러올 수 있는 API입니다.
이 API를 사용하여 아래 정보들을 불러올 수 있습니다.
이를 통해 현재 운영 중인 캠페인 현황을 확인하거나 히스토리를 파악하기에 용이한데요.
위 이미지와 같이 우리 서비스가 보내고 있는 모든 메시지들을 일괄 관리할 수 있습니다. 여기에 이번 업데이트로 푸시 이미지 정보도 함께 불러올 수 있게 되었습니다.
푸시 이미지는image_url
, large_image_url
object를 통해 불러올 수 있습니다.
Braze 공식 문서에서 BrazeAI를 활용한 Use Case 아티클이 신규 게재되었습니다.
BrazeAI는 AI를 통해 유저 이탈/전환을 예측, 상품 추천, 발송 타이밍 개인화, 실험 변수의 개인화된 적용 등 다양한 기능들을 제공하고 있습니다.
이번에 추가된 Use Case는 아래에서 살펴볼 수 있습니다.
*본 기능은 현재 베타 버전입니다.
MCP(Model Context Protocol)은 AI 에이전트가 다른 플랫폼과 데이터를 연결하기 위한 프로토콜입니다.
이번 업데이트로 Braze에서 MCP 서버를 제공하여, AI로부터 Braze의 데이터를 열람하고, 분석을 요청할 수 있게 되었습니다.
MCP를 통해 Braze와 AI 에이전트를 연결하면, 아래와 같은 분석들이 가능해질 것으로 보입니다.
현대의 소비자들은 관심 분야, 살고있는 지역, 사용하는 언어 등을 기반으로 개인화된 경험을 하는 데 익숙해져 있습니다. ‘안녕하세요, {이름} 님’에 그치는 수준의 개인화로는 더 이상 소비자들을 설득할 수 없습니다. 결국, 더 수준높은 개인화 경험을 제공하는 브랜드만이 경쟁에서 살아남을 수 있습니다.
브랜드가 진정으로 고객과 소통하고 장기적인 충성도를 높이기 위해서는 모든 채널에서 일관되게 개인화된 경험을 제공해야 합니다. 바로 여기서 ‘개인화 엔진(Personalization Engine)’이 필요합니다. 개인화 엔진은 실시간으로 고객 행동 데이터를 분석하고, 예측 하여 개인 수준에서 메시지와 경험을 커스터마이징합니다. 높은 목표를 가진 브랜드의 경우 이러한 확장 가능한 개인화는 전략적으로 필수적입니다.
이번 아티클에서 개인화 엔진이 무엇이고, 어떻게 작동하며 고객 참여를 이끌어 내는데 어떻게 도움이 되는지 자세히 알아보세요.
개인화 엔진은 기업이 고객 데이터를 수집하고 분석하여 개인화된 고객 경험을 만드는 데 사용하는 소프트웨어입니다. 기업은 인공지능(AI)을 기반으로 한 개인화 기능이 내장된 고객 참여 플랫폼을 개인화 엔진으로 활용할 수 있습니다.
일반적으로 개인화 엔진은 구매 이력, 웹사이트 또는 앱 상호작용과 같은 행동 정보와 함께 인구 통계 데이터, 브랜드 충성도, 고객 서비스 또는 영업과 같은 다른 부서의 정보를 수집합니다. 개인화 엔진이 수집하는 데이터가 더 포괄적이고 고품질일수록 해당 데이터를 사용하여 개인화된 메시지를 더 정확하게 전달할 수 있습니다.
개인화 엔진은 유저 행동 데이터를 지속적으로 수집하고 학습합니다. 개인화 엔진은 학습한 데이터를 바탕으로 다양한 정보를 제공합니다. 예를 들어, 특정 고객의 구매 시점을 예측한 정보를 바탕으로, 마케터가 적시에 구매를 유도하는 메시지를 보낼 수 있도록 돕습니다. 또는 고객이 언제 이탈할지 예측하여 고객이 이탈하지 않고 머물도록 유도하는 메시지를 보낼 수도 있습니다.
인공지능을 활용하면 개인화 엔진의 복잡한 프로세스를 자동화하여 대규모의 개인화가 가능합니다. 예를 들어, 브레이즈(Braze)의 AI 상품 추천은 인공지능을 사용하여 각 고객의 구매 이력과 개별 속성을 기반으로 한 맞춤형 제품을 추천합니다. 더불어 추천 내역은 캠페인에 통합되어, 브랜드가 각 고객에게 가장 관련성 높은 제품이나 콘텐츠를 제공할 수 있도록 도와줍니다.
마케터는 브레이즈 개인화 경로(Personalized Path)와 같은 기능을 통해 개별 고객이 참여할 가능성이 가장 높은 콘텐츠를 기반으로 메시지 콘텐츠, 크리에이티브, 채널 또는 오퍼를 간단한 토글로 자동으로 조정할 수 있습니다.
다음은 개인화 엔진을 사용했을 때의 주요 장점입니다.
고객이 구매할 확률이 높은 제품을 적극적으로 추천해, 수익을 극대화해보세요.
이메일, 문자 메시지와 같은 비즈니스 플랫폼부터 인앱 메시지(IAM), 푸시(Push) 알림 등 플랫폼 간 유기적인 연결을 통해 메시지의 도달 가능성을 높이는 것은 중요합니다. 하지만 여러 채널로 메시지를 보내는 것보다 얼마나 관련있는 메시지를 제공하는지가 훨씬 중요합니다. 위치 기반 푸시 알림이나 관심사 기반 인앱 메시지가 적절한 시점에 제공될 때 더 강력한 감정적 연결을 형성하고 더 나은 성과를 만들 수 있습니다.
개인화 엔진은 적절한 개인화 도구와 함께 활용되어 고객 데이터를 수집, 분석할 뿐만 아니라 지속적으로 성과를 추적합니다. 즉, 특정 데이터가 필요한 시점에 해당 데이터가 최신 상태로 유지되고 있으므로 의사결정을 내리고 계획을 조정하는 것이 훨씬 쉬워집니다. 최신 데이터를 기반으로 캠페인을 구성하면서, 더 관련성이 높은 메시지를 구성할 수 있습니다. 더불어 이 모든 과정을 빠르고 효율적으로 구현할 수 있습니다.
마케팅 조직의 주요한 불만 중 하나는 각 팀이 각기 다른 데이터와 목표를 기반으로 일하고 있다는 점입니다. 개인화 엔진은 모든 데이터를 고객 참여 플랫폼에 통합해 다양한 캠페인을 위해 활용할 수 있도록 합니다. 이를 통해 보다 각 팀의 프로세스를 일원화하고, 이는 곧 고객의 일관된 경험으로 이어집니다.
AI와 자동화를 통해 수작업으로 하던 과정을 대규모로 한 번에 처리할 수 있습니다. 실시간 데이터를 빠르게 처리하는 이 기능은 개인화 엔진이 가진 가장 큰 장점 중 하나입니다.
개인화를 활용하면 구매를 유도할 수 있는 맞춤형 메시지를 구성할 수 있습니다. 위와 같이, 고객이 확인한 상품, 고객의 이름, 고객이 가지고 있는 쿠폰 등의 정보를 활용해 맞춤형 메시지를 구성해 보세요.
고객이 스스로 이해했다고 느낄 때, 더 오래 머물 가능성이 높아집니다. 개인화 엔진은 브랜드가 각 사용자에게 적합한 직관적인 고객 여정을 만들 수 있도록 돕습니다. 검색, 구매, 기기 간 상호작용 등 모든 고객 여정에서 관련성 높은 콘텐츠를 제공합니다.
자동화를 통해 고객 여정의 주요한 순간에 개인화 경험을 고도화할 수 있습니다. 개인화 엔진과 통합 도구를 활용해 보세요. 예를 들어, 브레이즈의 개인화 경로를 사용하면 마케터는 고객의 참여를 유도할 수 있는 메시지, 크리에이티브와 채널을 결정할 수 있습니다.
코드를 작성할 필요 없이, 캔버스(Canvas)를 활용하여 높은 반응을 이끌어낼 수 있는 역동적인 고객 여정을 구성해 보세요.
마케터는 ‘예측’을 통해 적절한 시점에 행동을 취하고 결과를 더 유리한 방향으로 전환할 수 있습니다. 브레이즈의 Predictive Suite를 사용하면, 브랜드는 이탈 위험이 있는 사용자 또는 핵심 행동을 취할 가능성이 가장 높은 사용자를 자동으로 식별하여 참여를 유도할 수 있습니다.
개인화 엔진은 데이터를 더 많이 활용하고, 더 고도화된 전략을 사용하고, 더 효율적으로 일할 수 있도록 돕습니다. 예측 기반의 추천부터, 동적 콘텐츠와 AI 기반 고객 여정 오케스트레이션(Orchestration)까지. 속도나 규모에 구애받지 않고 아이디어를 실행할 수 있습니다.
이러한 개인화 엔진이 브레이즈와 같은 고객 참여 플랫폼에 내장되면, 모든 채널과 고객 여정 전반에서 더 효율적인 개인화가 가능합니다. 이는 고객이 브랜드와 상호작용하는 모든 순간을 연결하는 경험을 창출하는 일입니다. 지금 바로 개인화 엔진과 브레이즈를 활용해 개인화된 고객 경험을 설계해 보세요.
고객 여정에는 ‘아하 모먼트(Aha Moment)’라는 중요한 순간이 있습니다. 유저가 프로덕트의 핵심 가치를 이해하는 순간입니다.
아하 모먼트를 찾고, 디자인하는 것이 중요한 이유는 아하 모먼트를 통해 목표에 도달하는 데 프로덕트가 어떻게 도움이 되는지 보여주고, 결과적으로 유저가 이탈할 확률을 줄여주기 때문입니다. 아하 모먼트를 파악하기 위해서는 기능 이해, 온보딩 완료와 같은 기본적인 유저 행동을 확인해야 합니다.
이번 아티클에서 더 많은 유저를 장기 고객으로 전환할 수 있는 아하 모먼트란 무엇인지, 그리고 어떻게 아하 모먼트를 찾고, 아하 모먼트로 유저를 유도할 수 있는지 알아보세요.
아하 모먼트는 유저가 프로덕트의 핵심 가치를 파악하고 내면화하는 순간입니다. 활성화(Activation) 모먼트, 유레카 모먼트, 깨달음의 순간(Lightbulb moment)이라고도 합니다. 아하 모먼트는 단일 순간일 수도 있고, 사용자가 프로덕트의 가치를 진정으로 파악할 수 있을만큼 충분히 사용한 시점일 수도 있습니다. 이 갑작스러운 순간은 유저를 활성화시키는 데 아주 중요하며, 일반적으로 유저가 프로덕트에 투자하기로 한 의사결정과 일치합니다.
션 엘리스(Sean Ellis)는 그의 저서 ‘진화된 마케팅 그로스 해킹’에서 아하 모먼트를 ‘유저에게 프로덕트의 유용성이 인식되는 순간, 유저가 핵심 가치를 진정으로 얻을 때’라고 정의합니다. 여기서 핵심 가치란, ‘프로덕트가 무엇을 위한 것인지, 왜 필요한지, 그리고 그것을 사용함으로써 얻을 수 있는 이익은 무엇인지’에 대한 개념입니다.
프로덕트의 아하 모먼트는 만드는 것이 아니라 사용자가 느끼는 것입니다. 아하 모먼트를 만들 수는 없지만 '프로덕트에서 아하 모먼트가 발생할 수 있는 조건'을 만들 수는 있습니다. 프로덕트 팀은 아하 모먼트를 이해하고 더 많은 유저가 아하 모먼트에 도달할 수 있도록 안내해야 합니다.
프로덕트의 아하 모먼트를 알 수 있는 몇 가지 방법을 소개합니다.
유저들은 모두 같은 특성을 갖고 있지 않습니다. 유저는 각자 가지고 있는 니즈와 해결하고자 하는 문제가 다르기 때문에 서로 다른 아하 모먼트를 경험할 수 있습니다. 이러한 아하 모먼트를 알아내려면 유저가 프로덕트를 사용하는 방법과 이유에 따라 서로 다른 페르소나를 파악하고, 그룹화해야 합니다.
몇몇 기업의 경우 유저 세그먼트를 지역과 연령대로 분류합니다. 다른 기업은 유저 역할(엔지니어 vs 디자이너, PM vs 디자이너 등)을 중심으로 세그먼트를 분류하기도 합니다. 유저 세그먼트에 대한 정의를 내리면 각 세그먼트의 라이프사이클을 보다 정확하게 분석할 수 있습니다.
위 질문에 대한 답변은 유저가 프로덕트의 가치를 빠르게 파악하고, 아하 모먼트가 발생하도록 유저를 가이드하는 데 도움을 줄 수 있습니다.
아하 모먼트를 이해하고 최적화하려면 고객 여정 전체를 파악해야 합니다. 앰플리튜드의 ‘세션 리플레이’ 기능은 유저 세션 리플레이(Session Replay)와, 실시간 분석을 결합하여 보여주기 때문에 고객 여정을 쉽게 파악할 수 있습니다.
세션 리플레이를 통해 유저의 ‘돌파구’와 같은 순간을 시각적으로 확인해 보세요. 유저가 인터페이스를 어떻게 탐색하고, 어떤 기능을 주로 사용하며, 어느 시점에 프로덕트에 대한 이해가 높아지는지 관찰할 수 있습니다. 유저 행동을 분석해 아하 모먼트가 발생하는 정확한 지점을 파악하세요. 여기서 유저 경험을 세분화하면 더 많은 유저를 아하 모먼트로 안내할 수 있습니다.
유저 피드백을 사용하여 프로덕트의 아하 모먼트를 발견할 수도 있습니다. 유저의 공감을 불러일으키는 기능을 이해하여 프로덕트 경험을 개선하고, 더 많은 유저에게 이 기능을 안내할 수 있습니다.
분석 도구를 활용해 전환율, 유저 리텐션과 같은 프로덕트 지표를 분석해 보세요. 특정 기능이 선택된 이유, 특정 조건이 적용되는 위치를 통해 리텐션 데이터를 시각화할 수 있습니다. 예를 들어 소셜미디어 앱에서 고객 행동을 분석하면, 처음 며칠 이내에 특정 수의 유저와 연결되는 것이 장기적인 리텐션으로 이어지는 것과 밀접한 관련이 있음을 알 수 있습니다.
프로덕트와 유저에 대한 깊이있는 분석으로 아하 모먼트에 대한 중요한 인사이트를 얻을 수 있습니다. 그러나 ‘선택 편향’을 주의해야 합니다. 예를 들어, 특정 온보딩 플로우를 완료한 유저에게만 초점을 맞추면 그들의 리텐션을 해당 플로우에 대한 기여로만 측정하는 오류를 범할 수 있습니다. 해당 플로우를 건너뛴 유저의 아하 모먼트는 완전히 다를 수 있습니다. 따라서 분석을 할 때에는 다양한 액션과 고객 여정을 포함하여 더 많은 유저에게 리텐션을 유도할 수 있는 아하 모먼트를 정확하게 판단해야 합니다.
아하 모먼트를 정의했다면, 프로덕트에서 유저가 아하 모먼트를 효과적으로 경험하도록 안내해 보세요.
유저를 아하 모먼트로 안내하는 것도 중요하지만 강압적인 전략은 역효과를 낼 수 있습니다. 유저는 정해진 경로대로 따라가는 것을 꺼려하고, 자신의 속도에 맞춰 프로덕트의 가치를 발견하고 싶어하는 경향이 있습니다.
방해가 되는 모달과 툴팁으로 유저 여정을 방해하기보다 직관적인 유저 여정을 설계해 보세요. 잘 설계된 도시에는 명확한 표지판, 유용한 랜드마크, 탐험의 자유를 제공하면서도 목적지까지 쉽게 이동할 수 있는 길이 있습니다.
이와 마찬가지로 프로덕트는 유저가 자연스럽게 아하 모먼트를 경험할 수 있도록 주요 액션과 기능을 부드럽게 연결해야 합니다.
유저를 아하 모먼트로 안내하는 것은 단순히 기능을 보여주는 것이 아닙니다. 새로운 유저가 프로덕트의 핵심 가치를 경험할 수 있도록 명확한 경로를 설계해야 합니다. 이해와 참여를 유도하는 주요 액션과 상호 작용에 우선순위를 두는 ‘유저 저니 맵(User Journey Map)’을 만든다고 생각해 보세요.
사용자를 자연스럽게 안내하는 직관적인 워크플로우를 구축해 보세요. 예를 들어 파일 공유 앱의 아하 모먼트가 ‘어디서든 파일에 액세스 할 수 있다는 것을 인식하는 순간’이라면, 온보딩 플로우를 통해 유저가 다른 장치에서 파일을 업로드하고 액세스할 수 있도록 즉시 유도할 수 있습니다.
프로덕트에 세 가지 일반적인 아하 모먼트가 있다고 가정했을 때, 이 세 가지 순간을 모두 경험하게 하는 것은 어려운 일입니다. 유저가 모든 아하 모먼트에 도달하도록 하는 대신 유저의 의도에 집중해 보세요. 유저가 두 번째 아하 모먼트로 나아가고 있는 것을 발견했다면 그 순간으로 이동시키는 데 집중해야 합니다.
유저의 반응이 예상되는 시점이 있다면 해당 시점에 유저를 안내해야 합니다. 유저가 몇 가지 모달이나 툴팁이 표시되자마자 닫거나 삭제한 경우, 시간차를 두고 다른 내용을 보여주는 것이 효과적입니다.
성공적인 프로덕트는 여러 경험을 통해 유저에게 가치를 제공합니다. 단 하나의 아하 모먼트에만 의존하는 것이 아니라, 유저에게 가치를 제공할 수 있는 다양한 방법을 생각해 보세요.
핵심 가치를 제안하는 주요 아하 모먼트와 유저 참여를 지속할 수 있는 보조 아하 모먼트를 설계하세요. 이를 통해 프로덕트 내에서 여러 경로를 만들어 유저가 프로덕트의 잠재력을 최대한으로 경험할 수 있습니다.
세션 리플레이를 충분히 살펴보면, 프로덕트 내에서 정처 없이 떠돌아 다니는 유저를 발견할 수 있습니다. 유저가 이 지점에 도달하기 전에, 온보딩을 완료하도록 유도해야 합니다. 때로는 유저가 스스로 해낼 수 있도록 도와야 할 때도 있습니다.
‘아하 모먼트’라는 용어는 고객 여정의 다른 성과 지표와 혼동되기도 합니다. 예를 들어, 유저의 원활한 온보딩 경험은 중요하지만 아하 모먼트라고 볼 수는 없습니다. 아하 모먼트는 유저가 프로덕트의 핵심 가치를 처음으로 이해하는 순간입니다. 온보딩 프로세스는 아하 모먼트로 유저를 안내하는 역할이라고 할 수 있습니다.
마찬가지로 단순히 프로덕트 사용 방법을 이해하는 것만으로는 아하 모먼트라고 볼 수 없습니다. 예를 들어 디자인 툴에서 디자인 기능을 이해하는 것은 꼭 필요한 과정이지만, 유저의 아하 모먼트는 툴을 활용해 팀원들과 실시간 협업의 힘을 경험하는 순간일 수 있습니다. 툴팁이나 단계별 온보딩 같은 인앱 가이드도 프로덕트의 가치를 전달하는 데 도움이 될 수는 있습니다. 그러나 아하 모먼트는 이러한 팁의 전달이 아니라 팁을 따를 때 유저가 프로덕트가 왜 필요한지 이해하게 되는 순간입니다.
유저 여정을 분석하여 프로덕트의 아하 모먼트를 정확히 파악해 보세요. 앰플리튜드의 분석 기능은 사용자 경로를 시각화하고, 참여를 유도할 수 있는 주요 기능을 식별하는 데 도움이 됩니다. 퍼널 분석을 사용하여 사용자 이탈 지점을 확인하거나, 여정 분석을 통해 일반적인 액션을 파악할 수 있습니다. 이러한 인사이트를 사용자 리서치와 결합하면 사용자 여정을 최적화하고 더 많은 사용자가 아하 모먼트를 경험하도록 안내할 수 있습니다.
CRM 마케팅이 중요해지면서 많은 기업들이 Braze를 도입하고 있다.
대부분 앱 푸시 발송과 개인화 마케팅을 위해 Braze를 사용하지만, 다양한 기능을 활용해 마케팅을 고도화하는 경우는 많지 않다.
아직 Braze 관련 학습 자료나 강의가 부족해 공식 문서에만 의존해야 하다 보니, 많은 마케터들이 Braze의 기능을 제대로 활용하지 못하고 있다.
이 글에서는 Braze를 제대로 활용하고 있는지 점검하고, 놓치고 있는 유용한 기능들을 소개하려 한다.
아래 Braze 용어 중 내가 사용한 적이 있거나, 사용하지 않았더라도 들어본 용어가 있는지 확인해 보자.
(Braze 이용자라면 누구나 사용하는, 꼭 알아야 하는 기능은 빼두었다.)
3개 이상 사용해 봤다면 Braze를 잘 활용하고 있는 셈이다.
하나도 사용해 보지 않았더라도 걱정하지 말자. 지금부터 각 기능의 활용법을 자세히 설명할 예정이다.
Frequency Cappping이란 사용자가 받는 메시지 수를 제한해 피로감을 줄여주는 기능이다.
설정 예시
위와 같이 채널별로 기간과 수신 횟수를 설정할 수 있고, Campaign이나 Canvas에 Tag를 추가하면 특정 캠페인에만 제한을 걸 수도 있다.
예를 들어 이벤트 태그가 있는 캠페인은 하루 1개만 발송하는 식이다.
"푸시가 너무 많이 와요", "인앱메시지가 자주 떠서 불편해요" 같은 VOC를 자주 받는다면 Frequency Capping을 적극 활용해보자. 사용자 경험도 개선하고 고객 만족도도 높일 수 있다.
Braze에서 자주 쓰는 필터로 'X Custom Event Property In Y Days'와 'X Purchase Property In Y Days'가 있다. 실시간으로 반영된다는 장점이 있지만, 몇 가지 제한사항이 있다.
반면 Segment Extension은 아래와 같은 장점이 있다.
예를 들어 일반 필터로는 '지난 30일간 패딩 구매자'만 찾을 수 있지만, Extension으로는 '지난 1년간 패딩 구매자' 세그먼트를 만들 수 있다.
단, Extension은 실시간 업데이트가 아닌 정해진 주기로 업데이트된다. 기존에는 매일 오전 12시마다 업데이트 되었는데, 최근 Weekly, Monthly 옵션이 추가됐다.
Webhook으로 카카오톡, 문자 메시지를 보내는 것 뿐만 아니라 빈 웹훅인 Spacer를 발송하여 A/B Test를 진행하거나, 성과를 측정하는 것도 가능하다.
Spacer 활용 사례
또한 잘못 설정된 Conversion 지표를 보완할 때도 유용하다.
Connected Content는 API를 통해 외부 데이터를 실시간으로 가져와 메시지에 활용하는 기능이다.
활용 가능한 데이터:
이러한 데이터는 Braze에 저장되지 않아 보안성이 높고, 실시간 데이터로 더 정확한 개인화가 가능하다.
API Response 값을 메시지에 바로 사용하거나, Liquid 구문으로 메시지 발송 조건으로 활용할 수도 있다.
API 개발이 필요하지만, 활용하면 한층 더 다양한 개인화 메시지를 만들 수 있다.
Connected Content 사용 사례
1. Open API 활용 : 누구나 이용할 수 있는 Open API를 활용하여 다양한 캠페인을 진행할 수 있다.
2. 내부 API 활용 : 기개발된 API가 있다면 해당 API를 활용하여 다양한 캠페인 운영이 가능하다.
Query Builder는 SQL Query를 사용해 데이터를 출력하는 기능이다.
Campaign Analytics와 Engagement Report를 통해 캠페인 발송 수와 전환 수는 확인할 수 있지만, 유저가 어떤 상품을 구매했는지, 혹은 다른 이벤트가 발생했는지는 알 수 없다.
유저 행동을 더 자세히 분석하고 싶다면 쿼리빌더를 활용해보자. SQL에 익숙하다면 직접 쿼리를 작성할 수 있고, 그렇지 않다면 Query Template이나, AI Query Builder를 통해 쿼리를 생성하여 사용하면 된다.
Query Builder를 통해 N Day Retention과 같은 데이터도 확인할 수 있다.
N Day Retention 활용 사례 보러가기
어트리뷰트 데이터 테이블은 지원하지 않지만, 캠페인, 캔버스, 이벤트, 세션 정보 같은 유용한 데이터는 쉽게 추출할 수 있다. 다양한 분석을 원한다면 Query Builder를 적극 활용하자.
(단, Query Builder는 매월 사용할 수 있는 크레딧이 있으니, 쿼리 실행 시 크레딧이 줄어드는 점을 주의해야 한다!)
앞서 언급한 기능 외에도 Braze를 더 깊이 활용할 수 있는 방법은 많다.
실무로 바빠서 Braze를 자세히 살펴볼 시간이 없더라도, 틈틈이 다양한 기능을 활용해 보다 효율적이고 정교한 CRM 마케팅을 진행하길 바란다.
또한 기존 기능에 새로운 요소가 추가되거나 새로운 기능이 출시되니, 매월 업데이트되는 Braze Release Note를 확인하는 것을 추천한다.
*글의 원문은 최영아님의 브런치스토리 에서도 읽어보실 수 있습니다.
엑셀과 스프레드시트를 어느정도 다루시던 분들은 조건부 서식에 어느정도 익숙하실 겁니다.
조건부 서식은 데이터를 보다 효과적으로 표현하고 분석하는 강력한 기능입니다. 이는 특정 조건에 따라 셀의 모양(글자 색상, 셀 색상)을 자동으로 변경하여 중요한 정보를 시각적으로 돋보이게 만드는 기능입니다.
위의 이미지 예시를 보면 더 쉽게 이해할 수 있습니다. 왼쪽은 아무런 설정을 하지 않은 차트라면 오른쪽은 숫자의 백분위수를 기준으로 색상을 표현하였습니다. 오른쪽의 표가 일자별 노출수의 차이를 훨씬 쉽게 이해할 수 있습니다.
조건부 서식의 가장 큰 특징은 데이터에 기반한 동적인 시각화입니다. 사용자가 정의한 규칙에 따라 데이터가 변경될 때마다 서식도 자동으로 업데이트됩니다. 이는 단순히 정적인 색상이나 서식을 적용하는 것과는 다르게, 항상 최신 데이터를 반영한 시각적 표현을 제공합니다.
루커스튜디오와 같이 실시간으로 변하는 데이터 시각화 솔루션에서는 필수적으로 활용하면 좋을 기능입니다.
루커스튜디오에도 이러한 조건부 서식이 있으며 다른 엑셀과 Tableau와 같은 BI와 유사한 기능을 사용할 수 있습니다.
기본적으로 'Tablea' 차트와 'Score' 차트에서 활용가능합니다.
단색과 색상스케일에 따라 구분할 수 있습니다. KPI 달성이나 임계값 달성에 대한 강조를 원한다면 단색 유형이 유용합니다. 반면에 데이터의 양이 많고 데이터간 상대적 차이가 중요하다면 색상 스케일이 유용합니다.
규칙별로 하나의 조건만 가능하며 조건 형식은 셀 또는 전체 행에 적용할 수 있습니다.
대부분의 비즈니스 문제는 두 가지 이상의 데이터 소스들을 결합하여 바라봐야 의미 있는 인사이트를 도출 할 수 있습니다. 광고데이터와 성과데이터, 매출데이터와 쿠폰데이터, 사용자데이터와 행동데이터 등과 같은 여러 데이터 조합들이 존재합니다.
루커 스튜디오의 기능 중 하나인 데이터 혼합은 두 가지 이상의 데이터간 결합을 제공하는 기능으로 데이터 시각화 및 분석을 더욱 풍부하게 만들어줍니다.
이러한 데이터 혼합 방식은 루커 스튜디오만의 방식은 아닙니다. 이미 데이터를 처리하는 데이터베이스 분야에서는 널리 사용 되고 있습니다.
이번 시간에는 루커 스튜디오 데이터 혼합 기능에 대해 배워보고 루커 스튜디오의 대시보드를 더 깊이 있게 만들어봅시다.
데이터 혼합 방식을 처음 접한 분들은 개념이 생소할 수 있습니다. 뿐만 아니라 이미 SQL 등을 공부하면서 혼합 방식을 알고 계셨던 분들도 혼합은 헷갈리는 개념입니다. 먼저 루커 대시보드를 가지고 혼합에 대한 개념을 가볍게 살펴보도록 하겠습니다.
루커 스튜디오가 제공하는 5가지 조인방식을 동일한 데이터를 가지고 혼합하였을 경우 혼합된 최종 결과 데이터가 어떻게 구성되는지 시각적으로 본다면 이해가 좀 더 편할 것입니다. 아래의 이미지에 각 혼합 방식에 따른 결과 테이블을 살펴보실 수 있습니다.
먼저, 루커 스튜디오 데이터 혼합에 대한 기본적인 내용을 알아보겠습니다. 데이터 혼합은 최대 5개의 데이터 소스를 조합하여 차트를 생성하는 기능을 제공합니다. 이를 통해 서로 다른 데이터 소스 간 측정항목과 측정기준을 조합한 새로운 차트를 만들 수 있습니다. 데이터 혼합을 통해 다양한 데이터 소스의 구성을 효과적으로 활용할 수 있습니다.
1) 기본 : 리소스 → 혼합 소스 관리 클릭 후 데이터 혼합
2) 설정탭 이용 : 설정탭 내 데이터 소스 → 데이터 혼합 클릭
3) 차트 이용 : 두 개 이상의 차트를 선택하고 데이터 혼합 생성
혼합 데이터는 루커 스튜디오의 데이터 혼합 부분에서 새롭게 만들거나 업데이트를 합니다. 해당 화면과 데이터 혼합에 대한 기본적인 구성을 살펴봅시다.
왼쪽 조인 유형은 가장 기본적인 조인 유형입니다. 왼쪽 테이블을 기준으로 모든 행을 반환하고 오른쪽 테이블은 왼쪽 테이블 조인 키값과 일치하는 행만 반환합니다.
ㅤ
오른쪽 테이블에 존재하지 않거나 누락된 값은 최종 혼합 데이터에서 빈칸 혹은 null 값으로 표현됩니다.
라이트 아우터 조인 유형은 왼쪽 조인과 반대로 오른쪽 테이블을 기준으로 왼쪽 테이블을 모두 반환합니다. 테이블이 반대일 뿐 왼쪽 조인과 동일한 원리 입니다.
활용
2개의 보완적인 데이터 소스로 하나의 데이터 소스를 만드는 경우에 활용 가능합니다. 예를 들어 아래와 같이 매출 데이터 소스를 확장하기 위해 한쪽에는 유저 소스를 레프트 조인으로(키값은 유저 ID), 다른 한쪽에는 제품 정보 소스(키값은 판매 상품)를 넣어서 매출 데이터 분석을 더욱 풍부하게 만들 수 있습니다.
ㅤ
ㅤ
내부 조인은 두 테이블 조인 조건 모두에서 일치하는 행만 반환합니다. 각 데이터 세트의 다른 모든 행은 제거됩니다.
두 데이터 소스 간 중복에 관련한 분석을 하는 경우 많이 사용합니다. 또한 동적 데이터로 데이터 세트를 필터링하는 쉬운 방법입니다.
ㅤ
활용
ㅤ
ㅤ
외부 조인은 조인 조건이 충족되지 않더라도 두 테이블의 모든 행을 반환합니다.
활용
데이터베이스(1st party data)와 GA4(3rd party data)를 연결하며 데이터베이스에서 삭제된 데이터가 GA4에서 확인 가능하며 GA4에서 추적되지 않은 값이 데이터베이스에서 확인 가능합니다. 이처럼 양쪽의 환경을 모두 고려해야 하면서 서로의 데이터가 모두 필요한 경우 사용합니다.
ㅤ
ㅤ
교차 조인은 모든 테이블 행의 데카르트 곱(두 소스의 모든 구성요소의 순서 쌍)을 반환합니다.
즉, 왼쪽 데이터 세트의 모든 행은 반복을 통해 오른쪽 데이터 세트의 모든 행과 곱해져서 데이터를 반환합니다.
이는 조인 키가 필요하지 않은 유일한 조인 유형입니다.
ㅤ
활용
데이터의 각 행 별 조인이 필요한 경우에 사용합니다.
데이터 혼합의 조인 조건을 잘 활용한다면 분석을 더욱 풍부하게 만들어주는 게임 체인저가 될 수 있습니다.
이러한 기능을 활용하기 위해서는 처음에는 까다로울 수 있지만 연습해서 여러분들 것으로 만든다면 멋진 대시보드를 만드시는데 도움이 되실 겁니다.
데이터마케팅이란 [데이터]를 활용하여 마케팅한다는 뜻으로 데이터드리븐마케팅(Data-driven Marketing)으로도 불릴 수 있습니다.
데이터마케팅과 데이터드리븐마케팅의 차이는 미미하나, 데이터마케팅은 데이터를 [활용] 하나 데이터 드리븐 마케팅은 데이터를 [기반]으로 하기에 후자에서 데이터의 중요성이 좀 더 강조된다고 볼 수 있습니다.
데이터마케팅을 위해서 필수 조건은 (당연하게도) 데이터 분석입니다. 결괏값을 측정하여 데이터를 잘 쌓아두고, 보유한 데이터를 가공하여 상황을 해석하고 문제나 개선점에 대한 인사이트를 도출하는 것이 기본적인 데이터 마케팅의 프로세스라고 할 수 있습니다.
그로스 조직(=그로스팀)은 기본적으로 데이터 드리븐 마케팅을 하기에, 프로세스가 같습니다.
데이터를 기반으로 가설을 세우고, 실험을 바탕으로 검증하고, 배움을 축적하는 과정을 빠르게 반복합니다. (*출처: 양승화 님의 그로스해킹)
마티니에서 진행한 컨설팅 프로젝트였던, 패션 커머스를 기준으로 데이터마케팅의 사례를 보겠습니다.
커머스 내에서도 여러 안건의 데이터 분석이 있는데요. 1. 에디토리얼(=콘텐츠), 2. 프로모션 간의 비교 (미드세일 vs 시즌오프세일), 3. 주요 대시보드 (KPI, AARRR) 4. 특정 프로모션 (블랙프라이데이) 등입니다.
블랙프라이데이 프로모션을 세부 사례로 앰플리튜드(Amplitude)를 활용했던 분석을 예시로 들어보겠습니다.
*앰플리튜드는 SaaS(Software as a Service: 클라우드 기반의 소프트웨어 제공 모델) 솔루션으로 웹/앱 서비스 내의 사용자 행동 분석을 할 수 있는 프로덕트 애널리틱스(Product Analytics)입니다.
왜 프로모션 데이터 분석을 해야 할까요? 그 배경부터 먼저 짚고 넘어갑시다.
다양한 형태로 스스로에게 질문을 해봅니다.
Q. 프로모션을 기획하고 운영한 후 가장 궁금한 것은?
Q. 프로모션을 운영한 이유는 무엇일까요?
여러 가설을 세워봅니다.
이렇게 물어보면, 보통은 '셋 다'라고 대답하는 경우가 많은데요. 충분히 이해는 하지만(^^...!) 우선순위는 정해야 합니다. 대개 우선순위는 [매출]이기에, 매출 관련 분석을 먼저 진행합니다.
매출의 기본적인 구성 요소를 먼저 파악합니다.
*건단가와 객단가
건단가와 객단가는 혼용되어 쓰이기도 하는데요. 주문[건]의 건, 고[객]의 [객]을 생각하시면 됩니다.
즉 어제 제가 배민에서 점심 주문 건으로 1.5만 원을 쓰고 저녁 주문 건으로 2.5만 원을 썼다면 일 기준 제 건단가는 [1.5만 원] / [2.5만 원] 두 건일 것이고 제 객단가는 [1.5만 원]+[2.5만 원]의 4만 원이 될 수도 있습니다.
*물론 건단가와 객단가는 내부적으로 정의하기 마련입니다! 일간 건단가를 평균으로 낼 수도 있으니까요.
이에 따라 앰플리튜드(Amplitude)에서 매출, 주문수/건단가, 구매자수/객단가로 그래프를 구성합니다. 우선 매출로 전체적인 추이를 보고 주문수/건단가, 구매자수/객단가를 개별로 쪼개보는 것이죠.
해당 프로모션에서는 객단가와 건단가가 유사한 추이를 보이기에 특이 사항이 없다고 판단되었지만, 가끔 특정 프로모션에서 객단가와 건단가의 차이가 크게 발생하는 경우도 있습니다. (리셀러의 등장?!)
이외 위 그래프에서 두 개의 선이 있는데요. 데이터를 볼 때의 꼭 필요한 [비교 기준]입니다. 비교 기준은 사용자 특성이 될 수도, 행동이 될 수도 있지만 [기간]을 가장 기본적으로 고려합니다.
*비교 기준: 기간(일간, 주간, 월간, 분기, 반기, 연간… 시즌성 고려!
블랙프라이데이 프로모션의 분석이라면 전년도 11월과 비교하는 것 vs 전월인 10월과 비교하는 것 - 어떤 것이 더 합리적일까요? 당연히 전년도일 것입니다.
전월 10월과 당월 11월의 할인율, 마케팅 수준 등이 다를 테니까요. 물론 전년 대비 회원수도 브랜드수도 많아졌고 등의 변동 요인들이 많아 YoY만 비교하는 것이 의미가 없다고 판단된다면 결국 전년도(YoY)/전월(MoM)/전주(WoW) 등 비교 대상들이 많아질 수 있습니다.
현대의 직장인이라면 대개 모든 업무의 결과를 [숫자]로 보긴 합니다. 그렇다면 그냥 숫자를 확인하는 것과 데이터 분석의 가장 큰 차이점은 무엇일까요?
예를 들어 2024년 7월 A 커머스의 구매 전환율 (메인 페이지 조회 > 결제 완료)이 10%라고 했을 때, 어떤 해석을 할 수 있을까요?
전월 대비 높아졌다/낮아졌다, 전년 대비 높아졌다/낮아졌다의 판단을 위해서는 전월 데이터, 전년도 데이터가 필요합니다.
전년, 전월, 전주의 데이터를 보며 추이를 확인했을 때 눈에 띄게 높거나/낮은, 혹은 변동이 생기는 시점을 찾아내어 그 배경이 무엇이었는지 파악하는 것이 필요합니다.
혹은 유사한 프로모션이 진행되었던 시기와 비교하여 구매전환율이나, 구매수, 유입수, 가입수 등의 주요 지표에서 차이가 있었는지를 파악해 보는 것도 좋습니다.
프로모션 vs 프로모션 간의 비교 외에도 uiux를 개선하거나 특정 기능을 배포했을 때 그 시점 이후의 변화가 있는지를 확인할 수 있습니다.
매출을 구매수와 건단가, 구매자수와 객단가로 나눠 전반적인 추이를 파악한 후 세부 분석을 진행합니다.
매출은 결국 [사용자]가 [상품]을 [구매]하여 발생하는 결괏값입니다. 이에 따라 [사용자]와 [상품]의 측면에서도 분석을 진행합니다.
: 카테고리별, 브랜드별, 상품별 매출 추이
프로모션의 매출을 브랜드, 카테고리 등으로 나눠서 확인해 봅니다.
더 개별적으로는 브랜드를 기준으로 매출과 월별 성장률 등을 확인하며 주요 브랜드를 도출하기도 합니다.
프로모션을 진행하고 쌓인 데이터를 분석하고 회고하고 다음 프로모션에 적용하는 것. 그것이 프로모션 측면에서 데이터를 활용한 데이터 마케팅이라고 볼 수 있습니다.
이외 데이터마케팅은 어떤 부문에도 동일하게 적용됩니다. 정량적인 수치로 표현되는 데이터를 쌓고, 데이터를 여러 측면에서 분석하고, 다음 유사 업무 시 배운 점을 적용하고 또 실험하는 것입니다.
MRR 이란?
Monthly Recurring Revenue로 월간 반복 매출 구독형 서비스의 경우 핵심 지표로 활용됩니다.
요즘은 누구나 한 번 쯤은 구독형 서비스를 결제해본 경험이 있을텐데 구독 비즈니스는 사용자가 카드를 등록하면 자동으로 월마다 반복적으로 자동결제가 됩니다. (유튜브 프리미엄 구독, 넷플릭스 등)
MRR 산출 공식은 다음과 같습니다.
예를 들면, 유튜브 프리미엄 월 구독 비용이 10,000원이고 이용자가 10명이라면 MRR 은 100,000원이 되는 겁니다.
그런데 MRR이 100,000원 입니다. 에서 끝나면 안되겠죠?
MRR이 어떻게 변화했는지를 분석하는 것도 굉장히 중요합니다.
MRR 지표를 쪼개보면 아래와 같습니다.
그러면 이 지표를 가지고 우리는 New MRR을 구할 수 있습니다.
실무하면서 MRR calculation 하는데 고생 고생을 했는데 이 방법으로 도움을 받을 수 있는 누군가를 위해 공유합니다.
우선 방법은 DB에 적재된 결제 데이터와 구글 스프레드 시트에서 세금계산서로 처리되는 고객 결제 내역을 바탕으로 Rawdata를 준비하고 파이썬을 활용해서 frequency(월결제, 연결제)를 flatten 해주고 이를 Looker Studio로 시각화해줍니다.
1. DB에서 데이터 불러오기
2. 구글 스프레드시트에서 데이터 불러오기
3. 파이썬으로 데이터 클렌징하기
4. 클렌징한 DB, 스프레드시트 데이터 합치기
5. 클렌징 결과 시각화를 위해 구글 스프레드시트로 보내기
6. Looker Studio로 시각화 하기
아래는 실제 활용했던 MRR 대시보드 입니다.
첫 번째 대시보드는 월매출과, MRR 지표 현황을 살펴보고 고객사별 월간 구독 현황을 확인 해볼 수 있고 ARR, 이번달 예상 매출도 확인 할 수 있게 구성했었습니다.
두 번째 대시보드는 위에서 언급한 대로 MRR 지표를 쪼개서 모니터링하는 대시보드입니다.
이를 통해 MRR 상승하는데 어떤 지표 때문에 상승했는지 한눈에 볼 수 있습니다. 또한 MRR 성장추이도 함께 볼 수 있도록 구성되었습니다. 이제 이 대시보드를 통해서 전사가 우리 서비스의 MRR 현황을 볼 수 있고 이탈한 유저수가 특히 많았던 월에는 고객 인터뷰를 진행해보거나 해당 유저들의 특징을 파악해보면 어떤 지점에서 불편함을 느꼈는지 페인 포인트는 무엇이었는지 원인을 파악하고 제품 개선에 반영해볼 수 있겠죠?
DB에서 결제 데이터를 위의 컬럼만 파이썬 SQLAlchemy 를 활용해서 데이터를 불러옵니다.
SELECT
user_id,
company_name,
sales,
pay_datetime_id,
freq,
user_status
FROM
(SELECT tmp2.user_id,
tmp2.company_name,
tmp2.id,
tmp1.sales,
date_format(tmp1.auth_date, '%Y-%m-01') auth_date,
tmp1.subscription_id,
tmp1.user_status,
tmp1.card_updated_at
FROM
(SELECT B.user_id,
A.sales,
A.auth_date,
A.subscription_id,
A.user_status,
A.card_updated_at
FROM
(SELECT st0.*,
st1.user_status,
st1.card_updated_at
FROM
-- billing_payment_history 테이블에서 조건에 맞는 데이터 가져오기
(SELECT billing_id,
subscription_id,
auth_date,
IF(cancelled_at IS NULL ,amount, IF (amount <= cancellation_cancel_amount,0,cancellation_remain_amt)) AS sales
FROM nicepay_billing_payment_history
) st0
left join
-- nicepay_card_info 테이블에서 가장 최근의 카드 정보(created_at이 최대인)를 가져오며, user_status를 is_deleted와 is_active 값에 따라 ‘churned_user’ 또는 ‘active_user’로 설정
(select t1.billing_id,
t1.created_at,
t1.is_deleted,
t1.is_active,
t1.created_at card_updated_at,
(case when t1.is_deleted = 1 and t1.is_active = 0 then 'churned_user' else 'active_user' END) user_status
from nicepay_card_info t1
inner join (select billing_id,
max(created_at) max_date
from nicepay_card_info
group by 1) t2
on t1.billing_id = t2.billing_id and t1.created_at = t2.max_date) st1
ON (st0.billing_id = st1.billing_id)) A
LEFT OUTER JOIN
(SELECT billing_id,
user_id
FROM nicepay_billing_info) B
ON (A.billing_id = B.billing_id)) tmp1
INNER JOIN (SELECT user_id,
company_name,
id
FROM user
) tmp2
ON (tmp1.user_id = tmp2.user_id)) tmp3
inner join
(select seq,
freq,
date_format(plan_start_datetime_id, '%Y-%m-01') subscription_plan_start_datetime_id
from subscription) tmp4
ON (tmp3.subscription_id = tmp4.seq)
where sales > 0;
먼저 계산을 위해 필요한 데이터를 DB에서 추출해주고 flatten을 해줄껍니다.
flatten이 뭐냐 뜻 그대로 평탄화한다는 의미입니다. 예를들어 고객이 연간 결제를 1,200,000원을 했다고 하면 월별 결제액은 12개월로 나눠서 월별로 데이터를 평탄화 해주는 과정이라고 보시면 됩니다.
#expand the yearly records
mrr_base = mrr_df.loc[np.repeat(mrr_df.index, mrr_df['freq'].map({"years":12,"months": 1}))]
mrr_base.loc[mrr_base["freq"] == "years", "sales"] /= 12
mrr_base.loc[mrr_base["freq"] == "years", "pay_datetime_id"] += \
mrr_base.groupby(["user_id", "freq"]).cumcount().loc[mrr_base["freq"] == "years"]\
.map(lambda i: pd.DateOffset(months=i))
저의 경우 DB에 기록되지 않은 세금계산서 데이터를 가지고 있었는데
해당 데이터는 구글 스프레드시트에 기록하고 있으므로 구글 스프레드시트에서 데이터를 불러옵니다.
#구글 스프레드시트에서 data load하기
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'credential 파일 경로(json파일)', scope)
gc = gspread.authorize(credentials)
spreadsheet_url = "가져올 스프레드시트 주소"
gc1 = gc.open_by_url(spreadsheet_url).worksheet('시트 이름')
#기존에 기록된 데이터 가져와서 리스트 형태로 리턴
gc2 = gc1.get_all_values()
#데이터프레임으로 판다스로 가져오기
gc2 = pd.DataFrame(gc2, columns=gc2[0])
gc2 = gc2.reindex(gc2.index.drop(0))
#날짜 형식으로 변경
gc2['pay_datetime_id'] = pd.to_datetime(gc2['pay_datetime_id'])
#sales 컬럼 숫자로 변경
gc2['sales'] = gc2['sales'].astype(str).astype(int)
#expand the yearly records
gc2_base = gc2.loc[np.repeat(gc2.index, gc2['freq'].map({"years":12, "months": 1, "2years":24}))]
# compute monthly fee and join date
#years 12개월로 나누기
gc2_base.loc[gc2_base["freq"] == "years", "sales"] /= 12
gc2_base.loc[gc2_base["freq"] == "years", "pay_datetime_id"] += \
gc2_base.groupby(["user_id", "freq"]).cumcount().loc[gc2_base["freq"] == "years"] \
.map(lambda i: pd.DateOffset(months=i))
#2years 24개월로 나누기 / years 12개월로 나누기
gc2_base.loc[gc2_base["freq"] == "2years", "sales"] /= 24
gc2_base.loc[gc2_base["freq"] == "2years", "pay_datetime_id"] += \
gc2_base.groupby(["user_id", "freq"]).cumcount().loc[gc2_base["freq"] == "2years"] \
.map(lambda i: pd.DateOffset(months=i))
gc2_base_result = gc2_base[['user_id', 'company_name', 'sales', 'pay_datetime_id', 'freq']]
출처: https://botongsaram.tistory.com/entry/B2B-SaaS-MRR-계산하기 [알랭드보통사람:티스토리]
위의 과정에서 DB에서 불러온 데이터와 구글 스프레드시트의 데이터 형태를 통일 시켰습니다.
이제 Raw Data를 만들기 위해서 합쳐줍니다.
#구글시트rawdata와 DB에서 불러온 데이터의 결합
df_union= pd.concat([mrr_result, gc2_base_result])
데이터를 통합한 다음에 데이터 시각화를 위해 데이터 시각화를 위해 스프레드시트에 최종 정리된 데이터를 다시 구글 스프레드시트로 전달합니다.
# union 된 결과를 다시 구글 스프레드시트로
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name(
'credential 파일 경로(json)', scope)
gc = gspread.authorize(credentials)
spreadsheet_url = '스프레드시트주소
gc_mrr = gc.open_by_url(spreadsheet_url).worksheet('새로 데이터를 업로드할 시트명')
#기존에 기록되어 있던 데이터 삭제(처음 업로드할 때는 필요 없음)
gc_mrr.clear()
# 오늘 가져온 데이터 업로드
gd.set_with_dataframe(gc_mrr,merge)
위의 결과는 MRR 대시보드 예시(1)에서 활용했던 과정입니다.
다음으로 MRR detail view 에 사용될 지표를 만들 차례입니다.
# pay_datetime_id 열에서 월과 연도를 추출하여 새로운 열 생성
mrr_detail_result['month_year'] = mrr_detail_result['pay_datetime_id'].dt.to_period("M")
# max_date 컬럼 만들기
mrr_detail_result['max_date'] = pd.NaT
mrr_detail_result.head()
# user_id를 기준으로 그룹화
grouped = mrr_detail_result.groupby('user_id')
# 각 그룹에서 최대 결제일을 찾고 max_date 열에 할당
for name, group in grouped:
max_date = group['pay_datetime_id'].max()
max_index = group['pay_datetime_id'].idxmax()
mrr_detail_result.loc[group.index, 'max_date'] = max_date
# 데이터프레임을 corporate_id와 pay_datetime_id 기준으로 정렬
transactions_ver2 = mrr_detail_result.sort_values(by=['corporate_id', 'pay_datetime_id'])
# 이전 거래 금액을 저장할 새로운 열 prev_amount 추가
transactions_ver2['prev_amount'] = transactions_ver2.groupby('corporate_id')['sales'].shift(1)
# 사용자 상태를 저장할 새로운 열 user_status 추가
transactions_ver2['mrr_status'] = 'new'
# 이전 거래 금액과 동일한 금액을 가진 사용자에게 'existing' 할당
transactions_ver2.loc[transactions_ver2['sales'] == transactions_ver2['prev_amount'], 'mrr_status'] = 'existing'
# 이전 거래 금액보다 높은 금액을 가진 사용자에게 'upgrade' 할당
transactions_ver2.loc[transactions_ver2['sales'] > transactions_ver2['prev_amount'], 'mrr_status'] = 'upgrade'
# 이전 거래 금액보다 낮은 금액을 가진 사용자에게 'downgrade' 할당
transactions_ver2.loc[transactions_ver2['sales'] < transactions_ver2['prev_amount'], 'mrr_status'] = 'downgrade'
# 이전에 'churned' 상태였고 이제 새로운 거래가 있는 사용자에게 'reactivation' 할당
# 모든 고유한 corporate_id 값을 포함하는 리스트 생성
corporate_ids = transactions_ver2['corporate_id'].unique()
# 각 corporate_id에 대해 루프를 돌며 각 거래의 상태를 업데이트
for corporate_id in corporate_ids:
user_data = transactions_ver2[transactions_ver2['corporate_id'] == corporate_id]
for i in range(1, len(user_data)):
prev_month = user_data.iloc[i-1]['month_year']
curr_month = user_data.iloc[i]['month_year']
if (curr_month - prev_month).n > 1:
transactions_ver2.loc[(transactions_ver2['corporate_id'] == corporate_id) & (transactions_ver2['month_year'] == curr_month), 'mrr_status'] = 'reactivation'
# user_status가 churn_user인 사용자의 마지막 결제일에 'churn' 상태 할당
transactions_ver2.loc[(transactions_ver2['user_status'] == 'churned_user') & (transactions_ver2['pay_datetime_id'] == transactions_ver2['max_date']), 'mrr_status'] = 'churned'
transactions_ver2.head()
이제 MRR 대시보드 예시(2)에 활용된 데이터가 전처리되었고 구글 스프레드시트로 데이터를 적재해주면 됩니다.
이걸 매일 하기는 귀찮으니 Airflow DAG를 활용해서 자동화해주면 됩니다.
여기까지 MRR계산을 위해 SQL, 구글 스프레드시트, python을 활용한 과정을 소개해봤습니다.
누군가 B2B SaaS에서 MRR 계산을 위해 고군분투하고 계시다면 이 코드가 도움이 되시면 좋겠네요
추가로 초기에 대시보드 기획에 많은 참고가 되었던 Baremetrics라는 MRR 대시보드 외산 툴이 있는데 상당히 잘만들었다고 생각되는 서비스입니다.
SaaS 비즈니스를 운영하신다면 참고해보시면 좋을 서비스네요!
분석 데이터의 하위 집합입니다.
사용자, 세션, 이벤트 데이터를 분리해서 세그먼트를 정의하면 분석하고자 하는 대상을 쉽게 정의할 수 있게 만드는 기능입니다.
세그먼트를 정의하게 되면 특정 유저의 그룹 vs 나머지 유저의 특징을 비교 분석해 볼 수 있습니다.
GA4에서 세그먼트 기능을 통해 웬만한 유저들의 특징을 잡아낼 수 있습니다.
그런데 GA4가 어떻게 유저들의 행동 데이터를 수집하고 활용하는지 제대로 알지 못하면 활용하기 힘들겠죠?
이번 글에서는 큰 틀에서 GA4가 어떤 원리로 조건이 설정되는지 알아보려고 합니다.
세그먼트 생성화면을 들여다보면 꽤 많은 조건들을 설정할 수 있는 기능들이 많습니다.
일단 크게 3가지 유형의 세그먼트가 있습니다. (아래 유형에 대한 이해를 잘하셔야 합니다.)
세그먼트 유형 선택은 세그먼트를 조건에 해당하는 결과와 관련이 있는 거라고 생각하시면 이해하시기 쉬울 겁니다.
특히! 각 유형별로 소스 / 매체 선택할 때 주의할 점을 꼭! 숙지하시길 바랍니다!
이렇게 정의는 그럭저럭 이해는 할 수 있지만 역시 예시를 통해 어떻게 데이터가 선택되는지 알아보겠습니다.
특정 유저가 2개의 세션 안에서 몇 가지 이벤트를 발생시켰다고 가정해 보겠습니다.
1. 사용자 세그먼트 예시
사용자 세그먼트 기준으로 구매한 유저를 세그먼트를 만들면 어떻게 데이터가 선택될까요?
총 7개의 이벤트가 모두 선택됩니다. 사용자 기준이니까 조회한 날짜에 있는 이벤트가 모두 포함되기 때문입니다.
2. 세션 세그먼트 예시
최소 한 개의 구매 이벤트가 발생한 모든 세션의 데이터기 때문에 이 기준으로 충족되는 데이터는 purchase(구매) 이벤트가 발생한 session - 2 만 선택됩니다( session - 1 에는 구매 이벤트가 없음)
3. 이벤트 세그먼트 예시
이벤트 기준이면 기준에 맞는 이벤트만 선택한다는 말이기 때문에 session - 2에서 발생한 purchase 이벤트만!! 선택됩니다. 다른 이벤트는 선택 안됩니다!
여기서는 어떤 조건의 유저를 선택할지 셋팅하는 옵션을 선택할 수 있습니다.
여기서 AND, OR 조건을 선택할 수 있는데 회원가입과 구매 이벤트를 발생시킨 유저 선택해 보겠습니다.
그런데 하단에 보면 포함할 조건 그룹 추가라는 버튼이 있습니다.
동일한 방식으로 회원가입과 구매를 한 조건을 설정하면 이렇게 할 수 있죠
즉 하나의 조건 그룹에 회원가입 이벤트와 구매 이벤트를 선택한 것이고 나머지 하나는 두 개의 조건 그룹에 회원가입 이벤트와 구매 이벤트가 각각 설정을 했습니다.
첫 번째 방식과 차이점은 뭘까요? 동일한 결과가 나올까요? 결과는 동일합니다.
???
이게 무슨 말이냐면 그룹 간 영역에서 오른쪽 상단에 보면 사람모양의 드롭다운 버튼이 있습니다.
이걸 클릭하면 조건 범위를 지정할 수 있습니다.
세그먼트 설정할 때랑 동일한 방식이죠? 사용자, 세션, 이벤트 단위로 조건설정이 가능합니다.
세션 및 이벤트 세그먼트에는 조건 지정 범위에 대한 옵션이 더 적습니다. 아래 표는 사용할 수 있는 세그먼트 유형별 조건 범위 간 조합입니다.
다시 예시를 들어볼게요
GA4에서 첫 구매 유저를 따로 이벤트를 개발하지 않으면 특정하기 힘든데 회원가입 후 첫 구매 유저를 세그먼트로 한 번 만들어 보겠습니다.
해당 유저들을 특정하기 위한 필요한 이벤트는 first_visit(첫 방문)과 purchase 이벤트겠죠?
첫 구매 유저를 특정한다고 해도 이를 어떻게 정의하느냐에 따라 결과는 달라집니다! (주의!!)
유저의 행동은 정말 엄청나게 많은 경우의 수로 발생을 하죠.
A유저 : 구매 의사 결정이 빠른 A유저는 동일한 세션 시간 내에서 구매
B유저 : 구매 의사 결정이 느린 B유저는 어제 상품을 처음 둘러보고 내일 구매
이 예시처럼 첫 구매를 동일한 세션 시간내 첫 구매를 한 유저를 특정할 것인지, 세션에 상관없이 첫 구매 유저를 식별한 것인지 정의하기 나름입니다.
첫 구매 유저 세그먼트를 만든다면 어떤 조건을 설정해야 될까요?
사용자 세그먼트를 기준으로 세그먼트를 설정하면 유저의 조건에 해당하지 않는 방문데이터도 포함되게 됩니다.
그러니까 첫 방문 이후 첫 세션에 구매를 하지 않아도 구매를 특정시킨 뒤에 제외 조건을 구매 조건을 2번 이상으로 설정하여 첫 구매한 유저를 식별할 수 있습니다.
그런데 first_visit, 첫 구매 사용자의 방문 데이터만 확인하고자 한다면 사용자 세그먼트가 아닌 세션 세그먼트를 기준으로 동일 세션 내의 조건 범위를 선택하여 세그먼트를 생성해야 합니다.
첫 구매 유저를 모든 세션 범위 조건으로 하여 세그먼트를 생성하고 재구매자(purchase 이벤트가 2번 이상)와 겹치는 부분이 없는지 세그먼트 중복 기능을 활용해 벤다이어그램으로 확인해 보겠습니다.
중복 없이 잘 나뉘었습니다. 이런 식으로 내가 가진 유저의 특징을 세그먼트로 만들어서 비교해 보는 과정이 굉장히 중요한 것 같습니다.
이 개념을 토대로 한 번 만들어 보시면 좋을 것 같습니다.
GA의 세그먼트는 생각보다 할 수 있는 게 많긴 합니다.
하지만 제대로 활용하기 위해서는 위에 설명한 개념들이 잘 정리가 되어 있어야 됩니다.
이번 글을 쓰면서 느낀 건 솔직히 GA4는 사실 Amplitude를 사용해 봤다면 이런게 다 있나 싶을 정도로 불편하고... 뭔가 찜찜한 느낌을 지울 수 없었습니다.
이번 글에서 첫 구매 유저 세그먼트를 예시로 들었는데 GA4에서 First time purchases라는 측정항목이 존재하긴 하지만
이를 세그먼트로 활용은 못합니다... 약간 독립적인 측정항목 같은 느낌입니다.
Amplitude에서는 사실 아주 간단하게 첫 구매 유저를 특정할 수 있는 Historical Count 기능이 있어서.. 아쉬웠습니다.
(물론 제약 조건은 있습니다. 날짜 범위가 시작되기 전 최대 1년까지 기간만 포함됩니다. 그래도 이건 혁명적인 기능!)
본질적으로 GA의 목적은 유저 획득에 초점을 맞춰져 있다면 Amplitude는 Product Analytics 툴로 사용자 행동 분석에 초점이 맞춰져 있긴 합니다. 그래서 목적에 맞지 않아서 해당 기능 개발을 하지 않은 건가 싶기도 합니다.
당장 앰플리튜드를 도입하지 않을 거라면 속 편하게 GA4에서 First Purchase 이벤트 개발을 요청하거나 혹은 일단 소개드린 방식대로 우선 트렌드만 확인하는 용도로 세그먼트를 생성해서 데이터를 분석하시는 걸 권장드립니다.
Google Analytics를 사용해 보셨다면 ‘세션’이라는 용어에 익숙하실 것입니다. Universal Analytics(GA3)에서는 세션 단위로 데이터를 수집하여 지표를 측정했지만, GA4에서는 데이터 수집 방식이 달라져 주의가 필요합니다. GA4의 세션 관련 지표는 혼란을 일으킬 수 있습니다.
이번 글에서는 세션의 개념을 자세히 살펴보고, GA4에서의 세션이 어떻게 다른지 알아보겠습니다.
세션 관련해서 구글 가이드 문서에 따르면
- 세션은 사용자가 웹사이트 또는 앱과 상호작용하는 기간입니다.
- 세션은 사용자가 앱을 포그라운드에서 열거나 페이지나 화면을 보고 현재 활성화된 세션이 없는 경우 시작됩니다.
- 세션 수 : 고유 세션 ID 수를 추정하여 사이트나 앱에서 발생하는 세션 수를 계산합니다.
예를 들어 유저가 브라우저 탭에서 페이지를 열고 이메일을 확인하거나 다른 일을 하다가 2시간 뒤에 다시 돌아와서 브라우징을 할 수 있겠죠? GA4에서는 이를 페이지 뷰가 있는 세션으로 보고 2시간 뒤에 사용자 참여로 간주하고 새로운 세션으로 기록합니다.
1. 첫 번째 세션:
2. 두 번째 세션:
이때 새로운 세션이 시작되지만 페이지 조회 이벤트는 기록되지 않습니다.→ 두 번째 세션이 사용자 참여로만 기록됩니다
빅쿼리로 실제 어떤 케이스인지 특정 유저의 로그를 한 번 확인 해보겠습니다.
이렇게 페이지뷰 이벤트가 없는 두 번째 세션이 생기며, 이는 참여율(Engagement Rate) 지표로 나타납니다.
참여율 = 참여 세션 수 / 총 세션 수
이런 유저가 많아지면 세션 기반의 지표(예: 세션당 페이지뷰, 세션당 평균 참여시간)가 낮아집니다.
세션당 페이지뷰 수 계산 예시:
페이지뷰 수 / 세션 수 = 10 / 1 = 10
위와 같은 유저의 행동이 늘어나면:
페이지뷰 수 / 세션 수 = 10 / 2 = 5
페이지뷰 이벤트가 포함되지 않은 세션이 발생하니 지표가 감소하게 됩니다.(분모가 커지므로)
따라서 GA3에서 사용하던 세션 기반의 지표는 주의해서 사용해야 하며, 이벤트나 참여 관련 지표(참여 세션)를 보는 것이 좋습니다.
(GA4와 GA3의 데이터 수집 방식도 다릅니다)
자.. 그리고 또 있습니다.
세션 데이터의 현실.. 빅쿼리를 열어보면 .. 더 조심해야겠구나 라는 생각이 들겁니다.
일단 절대 세션수 ≠ session_start 이벤트의 수 가 아닙니다.
왜그런지 직접 조회해보죠!
아래 특정 유저의 세션을 특정해서 조회해봤습니다.
event_name 컬럼에 session_start 이벤트는 없고 다른 이벤트만 있죠?
이런 상황은 빈번하지 않지만 발생할 수 있습니다. 하나의 세션에 두 개의 세션 이벤트가 발생했고, 심지어 사용자 아이디도 다릅니다.
GA4 인터페이스에서는 당연히 단일 세션으로 계산하지 않을 것 같지만 빅쿼리에서는 이런 케이스 때문에 user_pseudo_id와 ga_session_id를 조합해서 각 세션에 대한 고유 식별자를 만들어서 session 을 카운팅 해야됩니다.
concat(user_pseudo_id, (select value.int_value from unnest(event_params) where key = 'ga_session_id')) as session_id,
GA3에서는 세션 윈도우(30분)가 지나면 완전히 새로운 세션이 시작되지만, GA4에서는 기존 세션이 계속 되기 때문에 이렇게 소스가 1개 이상 발생할 수 있습니다.
구글 애널리틱스에서도 세션수를 집계할 때 추정값을 사용합니다.
실제로 빅쿼리에 count(distinct ga_sesssion_id) 를 집계하면 성능에 영향을 줍니다..
그런데 전 세계에서 이걸 조회하는데 이걸 진짜 집계를 ?? 불가능하죠
그래서 HyperLogLog ++ (가이드 링크)라는 알고리즘을 적용해서 추산한 값을 보여줍니다.
실제로 성능을 눈으로 확인해보죠
ga_session_id를 고유하게 카운팅 해보는 쿼리로 비교를 해보겠습니다.
COUNT(DISTINCT ga_session_id)
HLL_COUNT.EXTRACT(HLL_COUNT.INIT(ga_session_id, 14))
차이가 보이시나요? (참고로 데이터 하루치만 조회했고 쿼리 결과는 같습니다)
모든면에서 더 효율적인 처리를 하고 있음을 알 수 있습니다.
사실 GA4에서는 세션이라는 개념은 더 이상 의미가 없고 지금까지 위의 예시를 통해 확인할 수 있었습니다.
그럼에도 세션 지표를 무조건 써야된다면 참여 세션지표를 사용하는게 좋습니다.
이제 이걸 통해서 다음 글에서는 GA4의 꽃 세그먼트 분석에 대해서 알아보겠습니다.
(세그먼트 기능을 쓰려면 세션에 대한 이해가 꼭 필요하기 때문에 이번 글부터 시작하게 되었습니다.)
디지털 전환이란 무엇일까요? DT 또는 DX로도 불리는 디지털 전환은 Digital Transformation에서 유래했습니다. 여기서 Transformation, 전환은 상태의 변화를 말합니다. 즉 디지털이 아니던 것이 디지털 상태로 변화하는 것입니다.
디지털 전환, 어쩐지 거창합니다. 마티니의 그로스팀에서 큰 규모의 회사를 방문했을 때 주로 DX실, DT실이 명함에 기재된 경우가 많더라고요. 즉 큰 곳에서 시도하는 경우가 많다는 것이겠죠.
온라인 비즈니스는 진행 중입니다. 오프라인을 온라인으로 전환시키는 DX와 DT는 상당수 진척되었습니다. 평범한 일상만 생각해 봐도 그렇습니다.
즉 현재의 디지털 트랜스포메이션, 디지털 전환(DT, DX)의 주요 과제는 오프라인의 온라인 전환은 아닌 듯합니다.
우리 프로덕트의 사용자가 10명, 100명, 1,000명일 때는 수기가 가능할 수 있습니다. 10명에게는 매일 전화를 할 수도 있을 것이고, 100명에게는 문자를 보낼 수 있을 것이고, 1,000명까지는 어떻게 수기로 그룹화를 해서 카카오톡을 보낼 수도 있겠죠.
하지만 [10,000명] 에게는요? [100,000명] 에게는요? 예를 들어보겠습니다.
[CRM마케팅/수동]
#1 보유한 데이터베이스(DB)에 접근하여
#2 조건에 맞는 쿼리문을 작성하여#3 '고정된 시점'의 사용자 데이터를 추출함
#4 성과 분석 시, 동일 프로세스를 거쳐 특정 시점의 사용자 데이터를 재추출함
#5 엑셀 등을 활용하여 수기로 데이터 값을 비교함
[CRM마케팅/자동] *솔루션 활용
#1 보유한 데이터베이스(DB)를 CRM 솔루션의 클라우드에 연동하고
#2 CRM 솔루션의 어드민에서 변수를 조절하여 (클릭!)
#3 '실시간'으로 사용자 데이터를 추출함
#4 성과 분석 시 어드민에서 변수를 조절하여 (클릭!)
#4 솔루션에서 제공하는 대시보드/그래프 형태로 데이터 값을 비교함
[퍼포먼스마케팅/수동]
#1 광고 매체 별 광고관리자에서 성과를 엑셀로 다운로드 후
#2 보고용으로 맞춰둔 엑셀 형식에 맞춰 복붙 합니다. (ctrl+C, ctrl+V)
*매체 A, 매체 B, 매체 C, 매체 D.... 매체를 많이 쓸수록 이 절차는 많아집니다.
**혹시 글로벌이라면? 국가별로도 쪼개줘야 합니다.
***신규 사용자와 기존 사용자의 리타겟팅을 나눈다고요? 이것도 쪼개서...
#3 매체 성과와 자사 내부 DB 성과의 숫자가 맞지 않습니다.
기여 모델 및 기여 기간의 설정이 다르거나...
[퍼포먼스마케팅/자동]
#1 광고 매체 별 데이터를 연동합니다.
#2 광고 매체와 MMP, CRM 솔루션의 데이터를 통합합니다. (DW)
마케팅 업무 자동화, 마케팅 오토메이션(Automation)의 효율에 대해서 이야기를 종종 하게 되는데요. 업무 효율성을 높이는 것이 수익 상승에 기여하지는 않는단 의견을 종종 듣습니다.
문제 정의와 해결 방안 제시 및 대응. 문제 해결자(problem-solver)라는 직무도 존재하는 것처럼 사실 모든 직업은 분야와 내용과 형식이 다를 뿐, 어떠한 문제를 해결하는 것 아닐까요?
위의 사례로 들었던 CRM 메시지 수신자 추출도, 퍼포먼스마케팅 성과 분석도 고객(사용자)이 아닌 실무자에게 필요한 디지털 전환, 즉 마케팅 자동화의 일환인데요.
여러 기업들의 디지털 전환을 도우면서 가장 기본적이지만 가장 중요했던 것은 바로 '측정'입니다. 웹과 앱에서의 성과 측정을 위해 필수적인 것, 바로 UTM입니다.
웹페이지의 주소인 URL에 UTM 파라미터를 넣어 유입된 사용자들이 어떤 경로로 들어왔는지 파악할 수 있습니다.
보통 퍼포먼스 광고를 운영할 때 페이스북 광고관리자의 구성에 맞추어 캠페인/그룹/소재 단으로 구성하는 경우도 있습니다.
유상 광고(paid media)를 운영하는 퍼포먼스마케팅 외에, 인플루언서 마케팅(earned media)이나 유튜브/인스타그램/블로그 등에 자체 콘텐츠(owned media)를 게재할 때도 UTM을 삽입한 URL을 활용하면 좋습니다!
개인화 추천 시스템: 고객의 과거 구매 내역 및 검색 기록을 바탕으로 맞춤형 제품 추천
챗봇 및 가상 어시스턴트: 고객 문의 및 지원을 자동화하여 실시간으로 대응
고객 세그멘테이션: 고객 데이터를 분석하여 세분화된 마케팅 전략 수립
실시간 데이터 분석: 판매, 트래픽, 재고 등의 데이터를 실시간으로 분석하여 빠른 의사 결정 지원
스케일러블 인프라: 트래픽 변동에 유연하게 대응할 수 있는 클라우드 기반 인프라.
클라우드 기반 CRM: 고객 관계 관리 시스템을 클라우드에서 운영하여 언제 어디서나 접근 가능.
모바일 최적화 웹사이트 및 앱: 모바일 사용자를 위한 최적화된 사용자 경험 제공.
모바일 결제 시스템: 다양한 모바일 결제 옵션 지원.
온라인 및 오프라인 데이터 통합: 고객의 온/오프라인 행동 데이터를 통합하여 일관된 경험 제공.
클라우드 컴퓨팅, 증강 현실 (AR), 사물 인터넷 (IoT), 결제 기술, 로봇 프로세스 자동화 (RPA) 등이 디지털 전환에 필요한 주요 기술로 여겨집니다.
디지털 전환을 검색하면 정말 방대한 의미의 내용들이 나옵니다. 클라우드 컴퓨팅, 인공지능(AI)과 머신러닝(ML), 빅데이터 분석, 사물인터넷(IoT), 블록체인, 사이버 보안 등이 대표되는 단어죠.
생각해 보면 그로스 컨설팅이라고 꼭 디지털 전환이 완료된 상황에서만 될 수 있는 것은 아닙니다. 어느 영역의 디지털 전환이 그로스 컨설팅의 실행 방안이 될 수도 있는 것이죠.
Chat GPT가 생활화되고 AI에 대한 기사가 쏟아지는 요즘이지만, UTM을 잘 쓰는 것도 생각보다 어렵습니다. 디지털 전환을 위해 AI 도입보다 먼저인 것들이 있지 않을까요?
최근 데이터 시각화 및 분석 도구들이 발전하면서 사용자 친화적인 인터페이스가 중요해지고 있습니다. Google Looker Studio는 이러한 요구에 맞춰 다양한 기능을 제공하며, 그 중 하나가 선형(Line) 차트와 막대(Bar) 차트를 전환할 수 있는 토글 스위치 기능입니다. 물론 기본적인 제공 기능 아니지만 루커스튜디오의 기능을 활용하면 간단하게 구현 가능합니다.
데이터를 분석하는 과정에서 서로 다른 유형의 차트를 사용하면 데이터를 다양한 각도에서 시각화할 수 있습니다. 예를 들어, 막대 차트는 특정 시점의 데이터를 비교하는 데 유용하며, 선형 차트는 시간에 따른 변화를 나타내는 데 적합합니다. 이러한 차트들을 손쉽게 전환할 수 있는 기능이 있으면, 사용자는 더 쉽게 다양한 인사이트를 얻을 수 있습니다.
💡스위치 필터 사용 시 매개변수는 숫자형만 반응. 따라서 텍스트가 아닌 데이터 유형을 숫자로 설정하여 매핑.
💡BarIF(차트 타입 = 1, Revenue, null)
💡LineIF(차트 타입 = 2, Revenue, null)
이러한 토글 스위치 기능은 사용자에게 더 나은 데이터 시각화 경험을 제공합니다. 사용자는 필요에 따라 차트를 전환하며 데이터를 더 직관적으로 이해할 수 있습니다. 이는 데이터 분석의 효율성을 높이고, 더 나은 결정을 내리는 데 도움을 줍니다.
Google looker Studio에서 선형 및 막대 차트를 전환하는 토글 스위치를 구현하는 방법을 알아보았습니다. 이러한 기능은 데이터 분석을 더욱 직관적이고 효율적으로 만들어 줄 것입니다. 이제 여러분도 데이터 시각화를 한 단계 업그레이드 해보세요.
에어브릿지(Airbridge)는 데이터 수집부터 마케팅 성과 분석까지 하나의 대시보드에서 진행하는 마케팅 성과 분석 솔루션(MMP)으로, 라스트 터치 어트리뷰션, 멀티 터치 어트리뷰션, 마케팅 믹스 모델링 등 다양한 방법으로 앱과 웹사이트의 마케팅 성과를 함께 분석할 수 있는 통합 마테크 솔루션입니다.
오늘날 MMP 솔루션은 광고주들에게 필수적으로 사용되고 있습니다. 에어브릿지 역시 그 중 하나로, 별도의 연동 없이 통합된 데이터 분석과 어트리뷰션이 가능한 것이 강점입니다.
에어브릿지의 이벤트 구조는 타 플랫폼에 비해 비교적 복잡하기 때문에 이전에 GA4 및 타 분석 솔루션만을 사용하다 에어브릿지를 처음 접했다면 다소 혼란스러울 수 있습니다. 저 역시 꽤 헤맸던 것 같습니다.
이러한 계기로 에어브릿지 택소노미를 설계할 당시 이벤트 구조를 이해하는 데 실제로 도움이 됐던 자료들과 GA4의 구조를 비교하여 전체적인 구조를 설명드리고자 합니다.
ㅡ
에어브릿지의 이벤트 및 어트리뷰트 호출 코드의 작성 방법은 아래 세 가지 경로를 통해 확인하실 수 있습니다.
1. 에어브릿지 유저 가이드(Airbridge Help Center)
유저 가이드를 통해서도 코드를 작성하는 데에는 문제가 없지만 2번 자료의 코드 구조가 비교적 효율적이므로 가급적 2번 자료를 참고하시는 것을 권장드립니다.
2. AB180 깃허브(Github)
1번 유저 가이드의 코드 예시 보다 더욱 상세한 전체 코드를 확인하실 수 있습니다.
3. 유저 가이드 및 에어브릿지 공식 문서(Data Spec)
에어브릿지에서 제공하는 Event와 Attribute의 목록과 상세 정보들을 확인하실 수 있습니다.
에어브릿지 이벤트 구성 요소에는 카테고리(Event Category), 액션(Event Action), 라벨(Event Label), 밸류(Event Value), 어트리뷰트(Attribute), 트리거(Trigger)가 있습니다.
다소 복잡해 보이지만 조금만 들여다보면 이해하기 쉽습니다.
위 이벤트 구성 요소의 개념들이 조금 생소하신 분들은 GA4의 예시로 보면 이해하기 쉽습니다.
(GA4의 Metrics & Dimension에 대한 기본 개념이 궁금하신 분들은 관련 자료를 참고해 주세요)
- GA4 보고서
- Airbridge 보고서
GA4의 측정기준(Dimensions)이 에어브릿지의 카테고리, 액션, 라벨의 역할을 하고,
측정항목(Metrics)이 에어브릿지의 밸류의 역할을 한다고 비교해 볼 수 있습니다.
예를 들어, 의류를 판매하는 모 기업의 마케팅 담당자가 구매 이벤트 발생 시 아래와 같은 항목들의 데이터를 수집한다고 가정합니다.
Purchase
모두 시맨틱 어트리뷰트로 수집 가능한 항목들이지만 어트리뷰트의 경우 에어브릿지 리포트에서 확인할 수 없기 때문에 CDP와 같은 고객DB에 접근하거나 별도의 솔루션으로 전처리하여 확인해야 합니다. 이런 경우 유용하게 쓰일 수 있는 항목이 액션과 라벨입니다.
만일 자주 사용하는 어트리뷰트 항목을 에어브릿지의 리포트와 대시보드에서 활용하고자 한다면 어트리뷰트 항목을 액션과 라벨에 세팅하여 어트리뷰트에 대한 데이터를 리포트에서도 확인할 수 있습니다.
다시 말해, 1개의 카테고리와 2개의 어트리뷰트(액션, 라벨)에 대한 통계를 에어브릿지의 리포트와 대시보드에서 쉽고 빠르게 확인할 수 있습니다.
아래 이미지는 스탠다드 이벤트 중에서 일정 예약 이벤트(airbridge.subscribe)의 예시입니다. 일정을 예약한 지역은 액션 또는 라벨로 수집할 수 있으며, 시맨틱 어트리뷰트를 활용하면 예약한 ID(scheduleID)와 예약일시(datetime)를 수집할 수 있습니다.
밸류는 에어브릿지 이벤트가 수집한 숫자를 계산에 이용하기 위해서 선택해야 하는 구성요소입니다. 에어브릿지 이벤트의 밸류로 수집된 숫자만 계산에 이용할 수 있습니다. 밸류로 소수점 9자리 이하 숫자까지 수집할 수 있습니다.
예를 들어, 레비뉴 리포트(Revenue Report)에서 판매한 제품의 가격을 더해 전체 판매 가격을 계산하거나 디지털 서비스의 구독료를 전부 합해서 전체 구독료를 확인하기 위해서는 밸류를 반드시 이벤트 구성요소로 사용해야 합니다.
또한, 밸류로 수집된 데이터는 밸류로 수집된 다른 데이터와 계산할 수 있습니다. 액션이나 라벨로 수집된 데이터는 계산에 활용할 수 없습니다. 그러나 이벤트 발생 횟수는 밸류 사용 여부와 상관없이 확인할 수 있습니다.
예시) 구매 완료 이벤트
위 예시와 같이 액션과 라벨, 밸류 모두 숫자로 수집한다고 하더라도 밸류로 수집한 데이터만 계산할 수 있으며, 액션과 라벨로 수집한 데이터는 계산할 수 없습니다. 예시에서는 구매 완료 이벤트의 밸류로 수집한 데이터를 더해서 30,000이라는 수치를 얻을 수 있습니다.
매출 관련 데이터는 속성으로 수집하는 것이 일반적이나, 에어브릿지의 경우에는 Attribute가 아닌 Value로 수집합니다. 즉 밸류에는 보통 구매액이 들어가고, 어트리뷰트에서는 기타 정보들을 수집합니다.
Semantic Attribute로 사용할 수도 있지만, Actuals Report나 Revenue Report에서는 이벤트 밸류에 Semantic Attribute의 isRevenue 값을 True로 설정한 카테고리(이벤트)로부터 발생한 매출액(Value 값)을 기준으로 확인하기 때문에 이는 적절하지 않습니다. (설정 가능한 Revenue 이벤트 수: 최대 5개)
Revenue 이벤트를 설정할 때 한 가지 유의할 점은 Revenue의 구조가 다양한 서비스일 경우(전환 포인트: 포인트 충전, 제품 결제, 광고 충전 포인트 등), Revenue Report에서 확인할 최종 전환 기준 한 가지를 선정하셔야 합니다.
만일 아래와 같이 구매 완료 시 2개의 매출 관련 이벤트가 동시에 호출되고 2개의 이벤트 모두 Revenue 이벤트로 설정한 경우 중복집계가 될 수 있기 때문입니다.
예시)
- 주문 완료 이벤트 발생 시 단위별 이벤트 동시 호출
매출액 집계 기준을 제품 단위로 볼지, 주문서 단위로 볼지 결정하고 결정된 하나의 카테고리(이벤트)에 isRevenue를 세팅해야 중복집계를 방지할 수 있습니다.
따라서 Revenue로 집계할 이벤트와 기타 매출 관련 데이터를 집계해야 하는 이벤트를 별도로 관리하시는 것을 권장드립니다.
각 카테고리(이벤트)에는 다양한 속성 정보가 수집되는데, 플랫폼마다 정의하는 '속성명'이 상이합니다. GA의 경우 Parameter, 에어브릿지의 경우 Attribute로 정의합니다. 이벤트(카테고리)명 역시 GA4의 경우 Event, 에어브릿지의 경우 Standard Event라고 정의합니다. 각 플랫폼별로 기본적으로 제공되는 속성들이 있으며, 에어브릿지의 경우 Data Spec에서 확인이 가능합니다.
Airbridge Event
Airbridge Attribute
따라서 데이터의 수집 구조를 충분히 고려하여 분석 환경을 구축해 놓는 것이 좋습니다.
디지털 시대의 급속한 발전과 함께 마케팅 환경이 빠르게 변화하고 있습니다. 다양한 채널을 통한 고객 접점이 증가하면서 기업들은 복잡해진 고객 관계 관리(CRM)에 직면하고 있습니다. 이러한 상황에서 CRM 대시보드의 중요성이 더욱 부각되고 있습니다.
CRM 대시보드는 여러 채널에서 수집된 CRM 캠페인 데이터를 통합하여 분석하고, 현황을 한눈에 파악할 수 있게 해주는 강력한 방법입니다. 다양한 CRM 채널로 인해 단일 기준으로 분석하기 어려운 데이터들을 대시보드를 통해 효과적으로 통합하고 시각화함으로써, 마케터들은 보다 신속하고 정확한 CRM 마케팅 의사결정을 내릴 수 있게 됩니다.
이러한 CRM 대시보드의 활용은 단순히 데이터를 보여주는 것에 그치지 않습니다. 실시간으로 캠페인 성과를 모니터링하고, 고객 행동 패턴을 분석하며, 각 채널별 효과를 비교할 수 있게 해줍니다. 이를 통해 기업은 더욱 효율적인 마케팅 전략을 수립하고, 고객 경험을 개선하며, 궁극적으로는 ROI를 향상시킬 수 있습니다.
본 글에서는 범용적으로 활용가능한 CRM 대시보드를 템플릿을 제공합니다.
Looker Studio CRM 캠페인 대시보드 템플릿은 마케팅 캠페인의 성과를 실시간으로 모니터링하고, 데이터를 시각화하여 분석할 수 있도록 돕는 강력한 도구입니다. 이 템플릿을 통해 효과적인 의사결정을 지원하고, 전략을 최적화할 수 있습니다.
Looker Studio CRM 캠페인 대시보드 템플릿은 캠페인의 실시간 성과 모니터링, 데이터 시각화, 마케팅 전략 최적화를 목적으로 활용됩니다. 이를 통해 효과적인 의사결정과 전략적 개선이 가능합니다.
실시간 대시보드를 통해 데이터를 업데이트하고, 다양한 필터 기능을 사용하여 원하는 데이터를 정확히 추출할 수 있습니다. 맞춤형 리포트를 생성하여 필요에 따라 커스터마이즈된 분석이 가능합니다.
마케팅 팀, 경영진, 데이터 분석가 등 다양한 사용자들이 이 템플릿을 활용하여 캠페인 성과를 모니터링하고 분석할 수 있습니다.
1. 주기적인 업데이트
2. 필터 활용
3. 성과 지표 설정
4. 데이터 비교
5. 팀과 공유
템플릿은 마케팅 캠페인의 성과를 종합적으로 관리하고 분석하는 데 유용하며, 데이터를 기반으로 한 전략적 의사결정을 지원합니다.
지난 편에서는 각 솔루션별 데이터 수집 방법(바로가기)에 대해서 알아보았습니다.
1. Third Party 데이터 수집 자동화
2. 수집된 데이터 전처리하기
3. 시각화하기
이번에는 수집된 데이터를 활용하여 어떻게 전처리 해야 되는지 알아보겠습니다.
각 데이터 셋들은 분석하려는 차원(dimension)을 기준으로 집계(group by)를 통해서 동일한 형태로 전처리한 후 조인 연산을 통해 데이터를 통합하는 과정이라고 생각하시면 됩니다.
마케팅 성과를 분석하기 위해서 필요한 데이터 다음과 같습니다.
Dimension : 날짜(일별), 유입소스(GA4 = utm_source, Appsflyer = Media_source), 캠페인
Metric : 구매수, 매출, 인스톨 수
GA4가 웹, 앱 모두 트래킹을 할 수 있지만 WEB은 GA4, APP은 MMP로 성과를 합쳐서 보실 겁니다.
GA4, Firebase는 앱과 웹 내 고객 행동 분석에 주로 쓰이는 툴이고 MMP 는 광고 성과를 측정하는 툴이니깐요
그러면 이렇게 됩니다.
<GA4 데이터 집계> - WEB
Dimension : 날짜(일별), 세션 소스, 캠페인
Metric : 구매수, 매출
<MMP 데이터 집계> - APP
Dimension : 날짜(일별), Media_source, 캠페인
Metric : 구매수, 매출, 인스톨 수
집계된 두개의 테이블을 UNION 다시 한번 집계를 해줍니다.
이렇게 하면 집계된 웹앱 데이터 통합이 되었습니다. (MMP 데이터 전처리 과정은 생략)
Dimension : 날짜(일별), Media_source, 캠페인
Metric : 구매수, 매출, 인스톨 수
브레이즈 커런츠(braze currents)데이터는 유저 인게이지먼트 데이터입니다.
여기에는 유저별로 어떻게 우리 서비스로 참여를 하고있는지를 기록한 데이터들이 기록되어 있으니 메시지 발송 수단별로 노출, 클릭 성과들이 들어있습니다. 하지만 우리는 성과(구매) 판단은 MMP, GA4로 해야 하므로 서로 다른 데이터들을 어떻게 통합해서 볼지를 알아보겠습니다.
커런츠 데이터는 아래와 같이 구성이 되어있습니다.
위와 같은 데이터를 일자, 메세지 발송 타입, 캠페인 or 캔버스별 발송수, 노출수, 클릭수 데이터를 집계를 하기 위해서는 유니크한 ID를 나타내는 차원 데이터를 만들어 줘야 합니다.
동일한 유저라도 캠페인, 캔버스, 베리에이션 등 다양한 형태로 타겟이 될 수 있으므로, 아래와 같이 유니크한 차원 데이터를 만들기 위해 새로운 아이디를 생성합니다. (해당 아이디는 발송 타입별로 카운트하기 위해 활용됩니다.)
차원의 이름은 원하시는대로 명명하시면 되고 저는 user_id_dispatch_id 이렇게 명명하였습니다.
-- 태블로 계산식
IFNULL([User Id],'') + '-' +
IFNULL([Campaign Id],'') + '-' +
IFNULL([Message Variation Id],'') + '-' +
IFNULL([Canvas Id],'') + '-' +
IFNULL([Canvas Variation Id],'') + '-' +
IFNULL([Canvas Step Message Variation Id],'') + '-' +
IFNULL([Dispatch Id],'')
다음으로 캠페인 단위로 성과를 집계할 예정이기 때문에 캠페인 차원을 만들어줘야 합니다.
왜냐하면 브레이즈에는 캠페인과 캠버스로 나뉘는데 campaign_name 값이 존재하면 canvas_name 이 빈값이고 거꾸로 canvas_name 값이 존재하면 campaign_name이 빈값이기 때문입니다.
-- 태블로 계산식
IFNULL([Campaign Name],[Canvas Name])
{send_type}_click 이런 식으로 차원 이름을 명명하고 아래와 같은 태블로 계산식으로 차원을 만들어줍니다.
이렇게 되면 email_click, push_click, in_app_message_click 이벤트별로 ID(user_id_dispatch_id)를 생성됩니다.
-- 태블로 계산식
{ FIXED [user_id_dispatch_id],[Event Type] : COUNTD(IF CONTAINS([Event Type], 'inappmessage_click') THEN [user_id_dispatch_id] END)}
최초에 S3에 적재된 currents 데이터(avro 파일)를 DW에 적재할 때 파일별 Event 구분을 위해 Event_Type 칼럼을 생성하였습니다. (이전 글을 참고해 주세요)
['users.messages.email.Open.avro',
'users.messages.email.Click.avro',
'users.messages.pushnotification.Send.avro',
'users.messages.inappmessage.Click.avro',
'users.messages.email.Delivery.avro',
'users.messages.pushnotification.Open.avro',
'users.messages.inappmessage.Impression.avro']
-- 태블로 계산식
IF CONTAINS([Event_Type], 'email') then 'email'
elseif CONTAINS([Event_Type], 'push') then 'push'
elseif CONTAINS([Event_Type], 'inappmessage') then 'iam' end
이제 집계를 위한 전처리는 완료되었습니다(세세한 전처리 과정은 생략됨)
이제 위에서 만들었던 차원을 가지고 집계를 합니다.
일자별, send_type, campaign/canvas, device_category 별 오픈, 클릭, 노출, delivery 데이터는 아래와 같이 집계되었습니다.
통합된 GA4 / MMP 데이터와 커런츠 데이터를 통합해야 되는 과정이 또 남았습니다.
어떻게 이 두 데이터를 엮어야 될까요?
조인키를 위에서 집계한 차원 데이터로 잡고 Full Outer Join으로 데이터를 조인합니다.
이유는 특정 날짜에 브레이즈 커런츠 데이터는 존재하는데 성과 데이터(GA4, MMP) 데이터가 존재하지 않는다면 매칭될 수 없으니 누락이 되어버립니다. 거꾸로 성과 데이터(GA4, MMP) 데이터가 존재하는데 브레이즈 커런츠 데이터가 존재하지 않을 경우 누락이 되어버리기 때문입니다.
광고 성과 데이터 전처리하는 예시를 통해 Full Outer JOIN 이 어떻게 데이터를 처리되는지 예시를 통해 잠깐 확인해 보겠습니다
2024년 1월 1일 twitter 채널의 e 캠페인에서 비용이 1000원 소진했습니다. 그런데 GA4, MMP 데이터에는 해당 광고 채널의 캠페인에서 전환이 아예 일어나질 않았습니다. 하지만 비용이 발생했기 때문에 이 데이터를 버릴 수는 없겠죠? 무조건 살려야 됩니다.
거꾸로 광고 데이터에서 비용은 발생하지 않았는데 Attribution Window로 인해 전환이 발생했습니다. 이것도 버릴 수 없겠죠?
이 두 데이터에서 LEFT JOIN 또는 RIGHT JOIN을 수행하게 되면 조인키에 대응하지 않은 데이터는 매칭이 안되어 누락이 되어 버립니다. 이를 방지하기 위해서 INNER, LEFT OUTER, RIGHT OUTER 조인 집합을 생성하는 FULL OUTER JOIN을 수행합니다.
결과를 보면 각 테이블의 모든 데이터들이 출력이 되는 걸 알 수 있습니다.
본론으로 돌아와서!
Full Outer Join을 수행하기 전에 앞서 GA4, MMP 데이터를 합친 후 우리는 CRM 데이터만 필요하기 때문에 CRM 데이터만 필터를 합니다.
이제 Braze Current 데이터와 성과 데이터(GA4, MMP)를 날짜, 유입소스명, 캠페인명을 조인키로 두고 Full Outer Join 을 수행합니다.(분석하고자 하는 차원데이터가 추가로 더 있다면 추가로 필요한 차원도 조인키로 활용하시면 됩니다.)
이와 같은 방식으로 Paid 성과 데이터를 전처리 할 때도 위와 같은 방법으로 수행하면 됩니다.
데이터를 전처리 할 때 중요한 건 분석하고자 하는 결과물을 먼저 그려본 뒤에 결과를 도출하기 위해서 각 테이블을 어떻게 만들어 갈 것인지 생각하면서 만들어가면 됩니다. 실제로 전처리하다 보면 자잘하게 처리해야 되는 부분이 상당히 많습니다.
특히 데이터를 통합하기 위해서는 무엇보다 네이밍 컨벤션이 가장 중요한 점은 강조하지 않을 수 없습니다.
데이터 수집까지 잘했는데 캠페인 네이밍 컨벤션이 서로 다르다?.. 데이터 통합은 불가능합니다..
네이밍 컨벤션은 말 그대로 명명 규칙입니다.
위에서 언급한 대로 우리가 데이터 통합을 위해 차원 데이터를 조인키로 활용한다고 했었는데 캠페인 차원이 MMP, GA4, Braze or 광고 데이터가 모두 다르면 안 되겠죠? 아래와 같이 통일을 시켜야만 데이터를 연결할 수 있습니다.
여기까지 마케팅 데이터 수집부터 전처리 과정까지 알아보았습니다.
다음 글에서는 이 데이터를 활용해서 시각화 하는 방법을 살펴보겠습니다.
루커 스튜디오(Looker Studio)는 구글에서 제공하는 강력한 데이터 시각화 도구입니다. 다양한 데이터 소스를 연결하여 직관적인 대시보드를 만들 수 있으며, 이를 통해 복잡한 데이터를 쉽게 이해할 수 있습니다. 특히, 마케팅, 영업, 운영 등 다양한 분야에서 유용하게 활용될 수 있습니다. 루커스튜디오가 궁금한 분들은 해당 글을 참고해주세요.
인터랙티브 퍼널 차트는 사용자 행동을 단계별로 분석하여 시각적으로 표현하는 방식입니다. 특히, 마케팅 퍼널 분석에 유용하며, 고객이 제품이나 서비스를 구매하기까지의 과정을 시각화하여 각 단계에서의 전환율을 파악할 수 있습니다.
퍼널 분석에는 두 가지 전환율 분석 방식이 존재합니다:
이 두 가지 방식 모두 데이터의 절대값(absolute) 형태와 비율(rate) 형태로 나눠서 분석할 수 있습니다. 이를 통해 어떤 단계에 문제가 있는지 비교하면서 파악할 수 있습니다.
퍼널 분석을 통해 마케팅 전략의 효과를 검토하고 개선할 수 있는 인사이트를 얻을 수 있습니다. 예를 들어, 특정 단계에서 이탈율이 높다면 해당 단계의 문제점을 찾아 해결하는 방식으로 퍼널의 전반적인 전환율을 개선할 수 있습니다.
루커 스튜디오 인터렉티브 퍼널 분석 차트 만들기 | Looker studio
인터랙티브 퍼널 리포트를 작성하는 단계는 크게 데이터 준비, 바 차트 생성, 차트에 인터랙티브 기능 추가로 나눌 수 있습니다.
먼저, 데이터 소스를 연결한 후 필요한 데이터를 정리합니다. 예시는 GA4 데모 데이터를 활용 하였습니다.
계산된 필드와 매개변수 설정이 필요합니다.
아래 이미지에 활용할 매개변수 2가지를 만들어봅시다.
Drop-off type
Value type
데이터 혼합을 이후에 활용할 예정입니다. 데이터 혼합에서 매개변수 사용을 위해서는 매개변수를 측정기준으로 아래와 같이 변경하는 작업이 필요합니다.
앞서 살펴봤던 매개변수의 계산된 필드 변환을 포함하여 3가지 측정기준을 만들어 줍니다.
Drop-off type dim
Value type dim
Funnel step order #
GA4의 전자상거래 5개 이벤트를 선택하고 해당 단계의 순서를 지정하는 이벤트를 만들어줍니다.
Looker Studio 코드 1
CASE
WHEN 이벤트 이름 = "add_to_cart" THEN 1
WHEN 이벤트 이름 = "add_shipping_info" THEN 2
WHEN 이벤트 이름 = "begin_checkout" THEN 3
WHEN 이벤트 이름 = "add_payment_info" THEN 4
WHEN 이벤트 이름 = "purchase" THEN 5
ELSE NULL
END
GA4 – Checkout steps
앞서 정의한 5개 외 나머지 이벤트는 Null로 처리 되었습니다. 해당 이벤트는 분석에 활용하지 않을 예정이므로 필터를 이용하여 제외 처리를 해줍니다. 해당 필터는 이후 단계에서 활용하도록 하겠습니다.
퍼널 분석을 위해선 직전단계와 다음 단계 사용자의 차이를 구해야합니다. 다만 루커스튜디오는 단일 소스로 해당 계산을 하기가 어렵기 때문에 데이터 혼합의 교차 조인을 활용하여 단계별 유저 차이를 구하는 식을 만들 수 있습니다.
데이터 준비가 완료되면, '차트 추가' 메뉴에서 바 차트를 선택합니다. 바 차트를 생성한 후, X축과 Y축에 표시할 데이터를 설정합니다.
3.4.1 설정 탭
Abs users
Looker Studio 코드 2
IF(
Values type dim = "Absolute values"
,
Total users
,
null
)
Abs exited users
Looker Studio 코드 3
IF(
Values type dim = "Absolute values"
,
IF
(
Drop-off type dim = 'Funnel drop-off'
,
IF(Ref Funnel step order = 1 AND Funnel step order != 1, (Ref Total users - Total users),null)
,
IF(Ref Funnel step order = Funnel step order - 1, (Ref Total users - Total users),null)
)
,
null
)
% active
Looker Studio 코드 4
IF(
Values type dim != "Absolute values"
,
IF
(
Drop-off type dim = 'Funnel drop-off'
,
CASE
WHEN Funnel step order = 1 THEN 1
WHEN Ref Funnel step order = 1 AND Funnel step order != 1 THEN (Total users ) / Ref Total users
ELSE NULL
END
,
CASE
WHEN Funnel step order = 1 THEN 1
WHEN Ref Funnel step order = Funnel step order - 1 THEN (Total users ) / Ref Total users
ELSE NULL
END
)
,
null
)
% drop off
Looker Studio 코드 5
IF(
Values type dim != "Absolute values"
,
IF
(
Drop-off type dim = 'Funnel drop-off'
,
IF(Ref Funnel step order = 1 AND Funnel step order != 1, (Ref Total users - Total users)/Ref Total users,null)
,
IF(Ref Funnel step order = Funnel step order - 1, (Ref Total users - Total users)/Ref Total users,null)
)
,
null
)
3.4.2 스타일 탭
인터랙티브 퍼널 리포트는 다양한 마케팅 시나리오에서 유용하게 활용될 수 있습니다. 예를 들어, 고객의 구매 여정을 단계별로 분석하여 각 단계에서 발생하는 이탈율을 파악하고, 이를 개선하기 위한 전략을 세울 수 있습니다.
또한, 특정 마케팅 캠페인의 성과를 분석할 때도 퍼널 리포트를 사용하면 각 채널별로 고객의 반응을 비교할 수 있습니다. 이를 통해 어떤 채널이 가장 효과적인지 파악하고, 마케팅 예산을 효율적으로 분배할 수 있습니다.