
February 4, 2026

MCP(Model Context Protocol)는 AI가 외부 데이터를 활용할 수 있도록 연결해 주는 개방형 표준 프로토콜입니다. 쉽게 말해, AI 도구가 실시간으로 필요한 데이터를 가져와 활용할 수 있게 만드는 기술입니다.
앱스플라이어는 이 기술을 활용해 자연어만으로 마케팅 데이터에 바로 접근 가능한 MCP를 선보였습니다. Claude, ChatGPT 같은 AI 도구와 앱스플라이어를 연결하면, 캠페인 성과 분석부터 오디언스 관리, 딥링크 문제 해결까지 질문만으로 처리할 수 있습니다.
또한 앱스플라이어 MCP는 기술적 배경과 관계없이 누구나 필요한 데이터를 즉시 확인할 수 있도록 지원합니다. 사용자가 직접 질문하든, AI 에이전트에게 작업을 맡기든, 대기 시간 없이 명확한 정보와 실행 결과를 바로 받아볼 수 있습니다.

앱스플라이어 MCP는 Claude, ChatGPT, Gemini 같은 사용자가 선호하는 LLM(Large Language Model) 도구와 앱스플라이어를 연결합니다. 사용자가 질문을 입력하면 MCP가 자동으로 필요한 데이터를 찾아 이해하기 쉬운 형태로 보여줍니다. 어트리뷰션, 분석, 오디언스, OneLink(원링크) 등 앱스플라이어의 모든 기능을 자연어로 바로 활용할 수 있습니다.
또한 앱스플라이어는 7,000개 이상의 주요 브랜드가 신뢰하는 풍부하고 정확한 데이터를 제공하기 때문에 개인정보 보호를 철저히 준수하며 마케터가 필요한 인사이트를 즉시 확인하고 빠르게 의사결정을 내릴 수 있도록 돕습니다.
앱스플라이어 MCP는 개방형 구조로 설계되어 있어, 원하는 방식으로 커스터마이징할 수 있습니다. 미디어 믹스를 최적화하는 AI를 만들거나, 오디언스를 자동으로 관리하는 시스템을 구축하거나, 내부 도구에 MCP를 연결하는 등 복잡한 설정 없이도 필요한 기능을 유연하고 자유롭게 구현할 수 있습니다.

채널별 ROAS를 확인하고 싶거나, 어떤 캠페인이 가장 높은 LTV를 만드는지 알고 싶을 때 앱스플라이어 MCP를 활용해 보세요. 질문만 입력하면 필요한 데이터를 바로 확인할 수 있습니다.
앱스플라이어 MCP는 사람이 직접 질문하거나 AI 에이전트가 자동으로 작업하는 방식 모두 지원합니다. Growth, CRM, 제품, 마케팅 팀 등 어떤 팀이든 별도의 설정이나 개발 작업 없이 필요한 인사이트를 바로 확인할 수 있습니다.
앱스플라이어 MCP는 앱스플라이어의 어트리뷰션 기술을 기반으로 만들어졌습니다. 모든 데이터는 개인정보 보호 규정을 철저히 준수하며, 설계 단계부터 암호화와 보안을 적용했습니다.

캠페인 성과를 실시간으로 확인하고, ROI를 비교할 수 있습니다. 채팅창에서 직접 확인하거나, AI 에이전트를 활용해 성과 모니터링부터 최적화, 작업 실행까지 자동으로 처리하세요.
오디언스가 어떻게 나뉘고 활용되는지 한눈에 확인할 수 있습니다. 질문만으로 오디언스 현황을 조회하거나 실시간 성과를 분석할 수 있으며, 중복된 오디언스를 찾아내고 개선 방안을 제안하는 AI를 직접 만들 수도 있습니다. 필요하다면 여러 채널의 오디언스 정보를 자동으로 동기화하거나 작업을 실행할 수도 있습니다.
대화형 인터페이스로 OneLink 템플릿과 링크 동작을 간편하게 점검하거나, 에이전트를 활용해 링크 상태를 지속적으로 모니터링할 수 있습니다. 문제가 있는 링크를 자동으로 찾아내고, 모든 캠페인이 올바르게 운영되도록 관리할 수 있습니다.
앱 설정이나 구현 방법이 궁금할 때 질문만으로 바로 확인할 수 있습니다. AI 어시스턴트가 설정 오류를 찾아내 해결 방법을 알려주거나, 상황에 맞는 가이드 문서를 자동으로 보여줍니다.
앱스플라이어 MCP는 AI 기반 마케팅을 향한 중요한 첫걸음입니다. 사람의 창의성과 AI의 분석 능력이 결합되면, 마케터는 더 나은 의사결정을 내릴 수 있습니다.
MCP는 캠페인 분석, 오디언스 확인, 딥링크 관리 같은 마케터들의 핵심 업무를 지원하고 있으며, 추후 예측 분석과 에이전트 기반 자동화까지 확대 될 예정입니다. 데이터 기반으로 더 빠르고 정확한 의사결정을 내리고 싶다면, 지금 바로 앱스플라이어 MCP를 경험해 보세요.

January 9, 2026


브레이즈 캔버스(Canvas)는 고객의 행동과 속성을 기준으로 개인화된 메시지 흐름을 설계하는 고객 여정 오케스트레이션 도구입니다. 단일 캠페인이 하나의 캠페인을 특정 조건에 따라 발송하는 데 초점을 맞춘다면, 캔버스는 고객의 행동에 따라 여러 메시지와 채널을 유기적으로 연결합니다.
예를 들어, 회원가입 후 7일까지의 유저 저니 설계, 첫 구매까지의 지속적인 구매 유도 메시지 발송 등 단일 순간에 그치지 않고 지속되는 기간 동안 유저 저니에 따라 메시지를 보낼 수 있습니다.
캔버스를 활용하면, CRM 마케팅을 ‘단발성 메시지 발송’에서, 지속적인 고객 경험 관리로 확장할 수 있습니다.
특히 고객 행동이 빠르게 변화하는 환경에서는, 잘 설계된 캔버스가 마케터의 반복적인 운영 부담을 크게 줄여줍니다.


브레이즈 캔버스는 크게 진입 조건(Entry), 액션(Step), 분기(Split)으로 이루어져 있습니다.
해당 속성을 잘 활용하면, CRM 마케터는 하나의 캔버스 안에서 다양한 시나리오를 운영할 수 있습니다. 그뿐만 아니라 고객의 입장에서도 ‘자연스러운 경험’이 가능해져 더 높은 전환 성과를 기대할 수도 있습니다.
브레이즈 캔버스는 강력한 도구이지만, 설계 목적이 명확하지 않으면 오히려 캠페인 운영이 복잡해질 수 있습니다. 하나의 캔버스에는 하나의 목표를 두고, 온보딩•전환•리텐션 등 목적별로 캔버스를 분리해 설계하는 것이 효과적입니다.
또한, 지나치게 많은 분기와 조건은 운영 중 오류나 누락을 유발할 수 있습니다. 초기에는 단순한 구조로 시작하고, 성과와 데이터를 기반으로 점진적으로 고도화하는 방법이 안정적입니다.
마지막으로 데이터 반영 시점을 고려하여 적절한 대기 시간과 조건을 설정해야 합니다.
캔버스는 한 번 만들고 끝나는 것이 아니라, 운영 후 지속적으로 점검하고 개선해야 성과로 이어집니다.

January 6, 2026
CRM 마케팅의 중요성이 높아지면서, 많은 기업에서 브레이즈(Braze)를 활용해 CRM 마케팅을 진행하고 있습니다. 간단하게는 푸시 메시지 발송부터, 깊게는 캠페인 자동화까지. 브레이즈는 많은 CRM 마케터들에게 익숙한 도구가 되었습니다. 하지만 실제로 현장에서 듣는 이야기는 조금 다릅니다.
“기능은 많은데, 어디까지 쓰고 있는지 모르겠다”
”이 정도면 잘 쓰고 있는 건지 감이 안 온다”
브레이즈를 사용하는 것과 잘 ‘활용’하는 것은 다른 문제이기 때문입니다.
마티니는 이러한 고민에서 출발해, 브레이즈 활용도를 자가진단 해볼 수 있는 질문을 마련했습니다. 자가진단의 목적은 단순히 점수를 매기는 것이 아니라, 현재 우리 팀의 CRM 운영이 어느 단계에 와 있는지, 그리고 다음 단계로 나아가기 위해 무엇이 필요한지를 스스로 인식할 수 있도록 돕는 데 있습니다.
실제로 자가진단에 참여한 기업들을 살펴보면, 캠페인과 자동화는 잘 운영되고 있지만, 데이터 활용, AI 기능, 신규 채널(RCS 등)은 아직 충분히 활용되지 못하고 있는 경우가 많았습니다.

브레이즈를 사용하고 있다면, 이제는 ‘얼마나 잘 활용하고 있는지’를 점검해야 할 시점입니다. 지금 바로 우리 팀의 브레이즈 활용도를 진단해 보세요.
자가진단 점수 구간에 따라 현재 브레이즈 활용도가 어느 수준인지 쉽게 확인해볼 수 있습니다. 결과 페이지에서는 현재 활용 단계에 따른 제안도 함께 확인해볼 수 있습니다.
마티니가 정리한 브레이즈 활용 인사이트와 실제 사례를 통해, CRM을 한 단계 더 고도화하는 방법을 확인해 보세요.

September 20, 2024
데이터마케팅이란 [데이터]를 활용하여 마케팅한다는 뜻으로 데이터드리븐마케팅(Data-driven Marketing)으로도 불릴 수 있습니다.
데이터마케팅과 데이터드리븐마케팅의 차이는 미미하나, 데이터마케팅은 데이터를 [활용] 하나 데이터 드리븐 마케팅은 데이터를 [기반]으로 하기에 후자에서 데이터의 중요성이 좀 더 강조된다고 볼 수 있습니다.
데이터마케팅을 위해서 필수 조건은 (당연하게도) 데이터 분석입니다. 결괏값을 측정하여 데이터를 잘 쌓아두고, 보유한 데이터를 가공하여 상황을 해석하고 문제나 개선점에 대한 인사이트를 도출하는 것이 기본적인 데이터 마케팅의 프로세스라고 할 수 있습니다.
그로스 조직(=그로스팀)은 기본적으로 데이터 드리븐 마케팅을 하기에, 프로세스가 같습니다.
데이터를 기반으로 가설을 세우고, 실험을 바탕으로 검증하고, 배움을 축적하는 과정을 빠르게 반복합니다. (*출처: 양승화 님의 그로스해킹)
![양승화 님의 [그로스해킹] 책을 기반한 이미지 | 그로스 조직이 일하는 방식](https://cdn.prod.website-files.com/656d3c53a795ed37cbbc9e32/66ceb8add44db997abca7b19_66ceb78b6a2e8955782324a8_%25EB%258D%25B0%25EC%259D%25B4%25ED%2584%25B0%25EB%25A7%2588%25EC%25BC%2580%25ED%258C%25851.jpeg)
마티니에서 진행한 컨설팅 프로젝트였던, 패션 커머스를 기준으로 데이터마케팅의 사례를 보겠습니다.
커머스 내에서도 여러 안건의 데이터 분석이 있는데요. 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를 개선하거나 특정 기능을 배포했을 때 그 시점 이후의 변화가 있는지를 확인할 수 있습니다.

매출을 구매수와 건단가, 구매자수와 객단가로 나눠 전반적인 추이를 파악한 후 세부 분석을 진행합니다.
매출은 결국 [사용자]가 [상품]을 [구매]하여 발생하는 결괏값입니다. 이에 따라 [사용자]와 [상품]의 측면에서도 분석을 진행합니다.



: 카테고리별, 브랜드별, 상품별 매출 추이

프로모션의 매출을 브랜드, 카테고리 등으로 나눠서 확인해 봅니다.

더 개별적으로는 브랜드를 기준으로 매출과 월별 성장률 등을 확인하며 주요 브랜드를 도출하기도 합니다.
프로모션을 진행하고 쌓인 데이터를 분석하고 회고하고 다음 프로모션에 적용하는 것. 그것이 프로모션 측면에서 데이터를 활용한 데이터 마케팅이라고 볼 수 있습니다.
이외 데이터마케팅은 어떤 부문에도 동일하게 적용됩니다. 정량적인 수치로 표현되는 데이터를 쌓고, 데이터를 여러 측면에서 분석하고, 다음 유사 업무 시 배운 점을 적용하고 또 실험하는 것입니다.

September 13, 2024


행사명 : 마티니 AP 본부 채용설명회
장소: 서울 서초구 서초대로38길 12 마제스타시티 타워2 12F
일시: 2024년 9월 26일 목요일 오후 7시 ~ 9시
대상:


2024년 9월 26일 목요일 오후 7시 Marketing Intelligence People, 마티니와 마티니 AP 본부의 퍼포먼스 마케팅을 여러분들께 소개합니다.
AP 본부에서 진행했던 고객사 및 프로젝트 사례들을 기반으로 직무 및 채용 관련 설명을 드릴 예정입니다.
마티니 근무환경과 문화, 복지도 함께 살펴보세요!

19:00 - 19:20 Martinee Marketing Intelligence 2024 | 이선규 Martinee CEO
19:20 - 19:40 About Martinee Account Planning | 김영근 Martinee Account Planning Lead
19:40 - 19:50 사전 QnA (현장질문포함)
19:50 - 20:00 Break Time
20:00 - 20:15 About Martinee Culture & Benefits | Aimed People Team
20:15 - 21:00 Networking & QnA

- 자리가 한정되어 있어 별도로 선정 안내를 드릴 예정입니다.
- 주차권 제공 가능하며 리셉션 데스크 문의바랍니다.
- 참석자분들에게 간단한 음식이 제공됩니다.
- 문의사항은 mkt@martinee.io 로 문의바랍니다.


September 12, 2024

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 비즈니스를 운영하신다면 참고해보시면 좋을 서비스네요!

September 9, 2024


행사명 : 데이터 기반 고객 여정 설계를 위한 CRM과 PA 연계 전략 세미나
장소: 서울 서초구 서초대로38길 12 마제스타시티 타워2 12F
일시: 2024년 9월 25일 수요일 오후 4시 ~ 6시
대상


2024년 9월 25일 수요일 오후 4시 마티니, 앰플리튜드, 원시그널이 함께하는 세미나에서각 솔루션의 활용 사례와 고객 경험을 최적화할 수 있는 PA & CRM 솔루션 연계 활용법을 알려드립니다.
이번 세미나에서 PA 및 CRM 솔루션 활용 사례를 확인하고 비즈니스에 직접 적용할 수 있는 과정들을 살펴보세요.


16:05 ~ 16:30
[앰플리튜드 세션] 이재철 연사
앰플리튜드 국내 활용사례
16:30 ~ 16:55
[원시그널 세션] 서영진 연사
원시그널 글로벌 활용사례
16:55 ~ 17:20
[마티니 세션] 이건희 연사
CRM 자동화 & PA 솔루션 시너지 발휘하기
세션 이후에는 자유로운 네트워킹과 QnA를 할 수 있는 시간이 마련되어있어 솔루션 연계 활용 및 PA와 CRM 솔루션 도입 관련해서 고민을 나누고 소통할 수 있습니다.

- 신청 시 회사 이메일이 아닐 경우 등록이 제한될 수 있습니다.
- 자리가 한정되어 있어 별도로 선정 안내를 드릴 예정입니다.
- 주차권 제공 가능하며 리셉션 데스크 문의바랍니다.
- 참석자분들에게 간단한 음식이 제공됩니다.
- 문의사항은 mkt@martinee.io 로 문의바랍니다.


September 9, 2024
분석 데이터의 하위 집합입니다.
사용자, 세션, 이벤트 데이터를 분리해서 세그먼트를 정의하면 분석하고자 하는 대상을 쉽게 정의할 수 있게 만드는 기능입니다.
세그먼트를 정의하게 되면 특정 유저의 그룹 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 이벤트 개발을 요청하거나 혹은 일단 소개드린 방식대로 우선 트렌드만 확인하는 용도로 세그먼트를 생성해서 데이터를 분석하시는 걸 권장드립니다.

September 6, 2024
전 보통 평일 아침에 운동을 하는데, 끝나고 나면 다른 멤버분들과 이야기를 나누게 됩니다. 아무래도 출근 시간이다보니 스몰톡이 직업 쪽으로 흘러갔습니다. [마케팅]을 하고 계신다고 하시더라고요.
반가운 마음에 전 그로스마케팅을 한다 말해더니 모르는 눈치십니다. [퍼포먼스마케팅]을 하시는 거냐 물었더니 그렇다고 합니다. 어떤 매체를 주로 운영하시냐 했더니 말끝을 흐리십니다.
얘기해보니 그 분의 업무는 <인스타그램 계정 육성> 이었습니다. 특정 부문의 콘텐츠만 게재하는 다수의 계정을 생성해서 ~N만의 팔로워를 가진 계정으로 키우고 광고를 받으며 수익화를 하는죠. 즉 [SNS마케팅]이자 [콘텐츠마케팅]이자 [인플루언서 마케팅]입니다. 저 또한 헷갈렸습니다. 이 또한 퍼포먼스 마케팅일까...?
퍼포먼스는 마케팅은 퍼포먼스(Performance)의 실적, 성과라는 뜻에서 파생됩니다. 즉 퍼포먼스 마케팅이란 성과를 확인할 수 있는 마케팅입니다. 성과란 일의 결과를 뜻하고요.
시험을 보고 성적표를 받듯, 마케팅을 하고 이 일에 대한 성적표를 만들 수 있는 것이 퍼포먼스 마케팅입니다. 어떤 요소에서 얼마나 잘했는지에 대해서 수치 기반의 정량적인 기준으로 평가할 수 있는 거죠.



전통적인 마케팅은 주로 ATL (Above The Line)에 속하는 전통적인 매체를 통한 것을 말합니다. TV, 라디오, 옥외 광고, 신문 등이 있겠죠.
이러한 매체들은 몇 명에게 노출되었는지까지는 대략 추산할 수 있지만 실제로 그 중에 몇 명이 어느 정도로 관심을 보였는지를 알 수 없습니다.

즉 TV가 틀어져있는 가구수는 셀 수 있겠지만, 그 가구 내에서 몇 명의 인원이 영상을 보고 있었는지, 다른 일을 하면서 보고 있었는지 아니면 TV 영상에만 집중하고 있었는지, 그래서 TV 광고에 나온 상품을 인지하게 되었는지 상호 작용이 불가능하므로 알기 어렵습니다.
라디오나 옥외광고도 마찬가지로, 라디오가 청취수는 알겠으나 청취수는 청취자수와 일치하지 않고 옥외광고의 경우 그 앞을 지나간 사람들을 추산할 수 있을 뿐입니다. 그러므로 전통적인 마케팅에서의 ATL 매체는 성과를 정확하게 측정하기가 어렵습니다.
그래서 비즈니스에서는 ROI를 묻습니다. 투자금 대비 이익률이죠. (이익-마케팅 비용)/(마케팅 비용)의 수식으로 비용 대비 매출이 아닌 [이익]의 수준을 봅니다.
마케팅에서는 주로 ROAS를 봅니다. (마케팅에 의한 매출)/(마케팅 비용)의 수식입니다. 여기서 주목할 점은 <마케팅에 의한 매출>입니다.
마케팅에 의한 매출 = 마케팅에 의한 성과, 이를 알고 싶었기 때문에 성과(매출)을 측정할 수 있는 퍼포먼스 마케팅이 중요해졌다고 볼 수 있습니다.

특정 브랜드에서 마케팅을 운영한다고 할 때, 사용자는 신규와 기존으로 나눌 수 있습니다. 신규는 우리를 모르는 사람들, 기존은 우리를 아는 사람들로 정의할 수 있겠으나 [안다/모른다]의 상태를 명확하게 구별해줄 수 있는 변인이 필요합니다.
대개 이 상태를 [가입] 행동으로 구분합니다. 즉 이미 우리 브랜드의 회원인 사용자는 기존, 비회원인 사용자는 신규가 되는 것이죠. 이와 같이 신규 사용자를 대상으로 하는 마케팅을 사용자 획득: UA (User Acquisition) 이라고 합니다.
인지도 증대 및 관심 유도에 유효한 [배너 광고]
배너 광고 매체들은 마케터가 아니어도 익숙한 이름들입니다. 말 그대로 '배너'가 노출되어야 하기 때문에 많은 수의 사용자를 확보하고 있는 플랫폼이어야 경쟁력이 있기 때문이죠.
의사결정 및 구매 전환에 유효한 [검색 광고]
A/B 테스트는 원칙적으로 대조군(Control Group)과 실험군(Experimental Group)을 나누어 다른 모든 환경이 동일하다고 할 때, 한 가지의 변인을 다르게 하여 그 변인의 영향도를 실험하는 것입니다.
광고 집행 시, 모든 외부 요인을 통제할 수 없기 때문에 그 부분을 감안하고 광고 셋팅(타겟팅 등)이나 소재를 A/B 테스트 해볼 수 있습니다. 특정 상품의 경우 소재에서 어떤 내용을 강조할지가 주요 테스트 내용이 됩니다. 1. 개발스토리 2. 리뷰 3. USP 4. 가격 등 강조할 수 있을만한 것들을 제일 메인 요소로 활용해보는 것입니다. A/B 테스트는 매우 큰 개념으로 마케팅에서도 매체, 세팅/타겟팅, 소재 기획/제작 등에서 다양하게 적용될 수 있습니다.

1. 인지도 증대 (Awareness)
'트래픽' 캠페인으로도 불립니다. 불특정 다수(오픈타겟, 논타겟)에게 최대한 많은 도달/노출을 이루어 제품의 인지도 향상과 클릭에 의한 유입, 트래픽을 의도합니다.
2. 관심 유도 (Interest)
타겟 세팅 시 관심사를 설정하여, 다른 행동으로 특정 관심사를 가진 것으로 추론되는 사용자들에게 소재를 노출할 수 있습니다. 혹은 관련도가 높은 웹사이트로 노출 위치를 설정할 수 있습니다.
3. 의사 결정 및 구매 전환 (Decision & Action)
구매 의도 있는 상태에서 특정 키워드를 검색했을 시 광고가 노출되거나, 이전에 방문했던 사용자를 대상으로 재방문 등을 유도할 수 있습니다.
배너 광고든 검색 광고든 각 매체를 통해서 광고가 운영이 되면 관심을 가진 사람들이 클릭하여 설정해둔 페이지로 유입됩니다.
이 때, 페이지에 유입된 사용자가 100명이라고 할 때 (이 100명을 정확하게 구분하는 것도 꽤 어려운 일입니다...) 100명이 [배너 광고]를 보고 왔을지 [검색 광고]를 보고 왔을지 [배너 광고]도 보고 [검색 광고]도 보고 왔을지, [배너 광고]만 보고 10일 후에 페이지 주소를 입력해서 들어왔을지...

어떤 채널, 어떤 매체로 들어왔을지 유입 경로를 알고 싶다면 매체에 광고를 세팅할 때 URL에 UTM이라는 변수를 붙여준 후 이를 Google Analytics로 측정해야 합니다.


유상 광고의 경우 모든 광고 매체에서 관리자(Admin) 페이지를 지원하며 성과를 측정하여 보여주는데 굳이 구글 애널리틱스를 봐야하는 이유가 뭘까요?

자사몰에서의 단 한 건의 성과가 메타에서도 성과로 집계하고, 네이버에서도 성과로 집계하고, 구글에서도 성과로 집계될 수 있습니다. 자사몰 데이터 기준 전환 1건이, 광고 관리자 기준 전환 3건이 될 수 있는 것이죠. 그렇기에 매체 별 광고관리자만을 사용해서 성과를 측정하지 않고 웹으로 랜딩되는 경우 구글 애널리틱스(Google Analytics)를 주로 사용하는 것입니다.


광고 매체가 전환에 기여한 기준은 기간과 방식에 따라 달라질 수 있습니다. 기여 기간을 1일로 설정한다면 3일 전 클릭한 성과는 인정되지 않을 수 있습니다. 기여 모델은 라스트 터치, 퍼스트 터치, 멀티 터치 등으로 구분되고 약 일주일 간 광고를 운영했을 때 (메타, 네이버, 구글 등)
- 사용자가 구매하기 전 마지막으로 누른 광고 매체가 가장 크게 기여했다고 한다면 > 라스트 터치 (Last touch) 모델,
- 사용자가 구매하기 전 처음으로 누른 광고 매체가 가장 크게 기여했다고 한다면 > 퍼스트 터치 (First touch) 모델입니다.
그에 따라 MMP(Mobile Measurement Partner)로 통칭되는 Appsflyer, Airbridge, Adjust와 같은 SDK를 붙이는 등의 추가 tracker가 필요합니다.

보통은 이 부분에서 가장 많은 어려움을 겪습니다. GA와 MMP, 여기서 CRM 솔루션(Braze, Insider 등) 이나 PA(Product Analytics: Amplitude, Mixpanel 등) 솔루션까지 쓴다면 솔루션 내의 데이터 정합성을 맞추는 것 등의 관리가 복잡해지기 때문입니다.
마케팅 웹(Web) 캠페인의 성과는 웹페이지로 랜딩되기에 GA만으로도 측정이 수월합니다. 문제는 앱설치를 목표로 앱스토어로 랜딩시키면서 시작됩니다. 그래서 보통 앱 성과 데이터를 측정하기 위핸 MMP (앱스플라이어/Appsflyer, 에어브릿지/Airbridge, 애드저스트/Adjust 등)을 도입하는데요.

위의 데이터파이프라인 예시처럼, 구글 애널리틱스의 웹 데이터 앱스플라이어의 앱 데이터, 기타 광고 매체들의 광고 데이터를 모아 구글 빅쿼리에 적재하고 이를 태블로를 통해서 대시보드로 제작합니다.

다양한 시각적 형태로, 다양한 성과를, 다양한 차원으로 볼 수 있습니다. 커머스의 배너 성과를 볼 수도 있고, 상품/카테고리/브랜드의 매출 성과를 볼 수 도 있고, 광고 성과를 볼 수도 있습니다. 유입된 광고 매체에 따라 유저들의 LTV로 대변되는 충성도가 다른지도 확인할 수 있고요.
처음의 의문으로 돌아가자면, 인스타그램 계정 키우기도 어떤 측면에서는 퍼포먼스 마케팅으로 볼 수 있겠습니다. '측정'이 가능하기 때문입니다. 콘텐츠를 올리면서 올라가는 팔로워수, 피드의 좋아요수 및 댓글수 그리고 릴스의 조회수 등으로 계정의 성장을 숫자로 '측정'할 수 있습니다.
최근 읽은 '순서 파괴'라는 책에서 인상 깊게 읽은 부분이 있습니다. 아마존의 주요 구성원들이 아마존의 일하기 방식에 대해서 쓴 책입니다.
아마존에서는 목표를 설정할 때 아래 다섯 개 요소를 반영한다고 합니다.
이 중 저에게 가장 와닿았던 것은 측정에 관한 것이었습니다.
.png)

September 5, 2024
데이터를 다루면서 고객의 업무 효율을 높이는 것을 도와드리고 있지만, 정작 저의 일에서는 데이터 정리와 효율화는 잘 못하고 있더라고요. 그래서 요즘은 Make와 Zapier를 통해 최대한 많은 일들을 자동화 하면서 좀 더 저의 자유(?) 시간을 만들어가고 있습니다.
👉 Make 자동화 : https://www.make.com/en
그런데 어느순간 Make 자동화가 많아지면서 제가 만들고 운영중인 자동화가 뭔지 헷갈리기 시작했습니다. Make 자동화로 업무효율화를 만들었지만 그럴수록 자동화 솔루션이 정리가 되지 않는 아이러니...
Make에서는 하나의 자동화 과정을 시나리오라고 해서 각 시나리오를 Json 형식으로 저장해서 관리할 수 있습니다. 이러한 Make의 특징을 활용해서 Make에서 시나리오가 새롭게 만들어지거나 업데이트가 되면 각각 구글 드라이브와 노션에 저장 & 업데이트 되는 자동화를 만들어봤습니다.
- 자동화 솔루션 : Make
- DB : Notion, Make DB
- 자료 정리 : 구글 드라이브



1️. Make 어드민의 다양한 시나리오들입니다. 카테고리를 만들 수 있긴하지만 그것만으로는 한번에 어떤게 있는지 확인이 쉽지 않습니다.
2️. Make 자동화 설계 화면 입니다.
3️. Notion에 저장된 최종적인 모습입니다.
👉 업무를 하다보면 고객 리드, 업무 파일, 데일리 보고 등 DB화 & 자료를 정리해야하는 업무들이 빈번하게 있습니다. 해당 시나리오처럼 매번 생산되는 자료를 구글 드라이브와 노션에 자동으로 기록한다면 생각보다 많은 업무를 효율화 할 수 있습니다.

September 4, 2024
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의 꽃 세그먼트 분석에 대해서 알아보겠습니다.
(세그먼트 기능을 쓰려면 세션에 대한 이해가 꼭 필요하기 때문에 이번 글부터 시작하게 되었습니다.)

September 2, 2024
디지털 전환이란 무엇일까요? 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 도입보다 먼저인 것들이 있지 않을까요?