엔지니어링


데이터브릭스 AI 해커톤 한국어 트랙 1위 "BAAMM" 수상 후기

한국신용데이터
2026-07-08
조회수 304


26cc8d11add92.png


안녕하세요. 데이터분석팀 Data Analyst Ben입니다.

마케팅 메시지를 효과적으로 보내는 방법은 제가 오래 고민해온 주제입니다. 이 글은 그 문제를 데이터분석팀 세 명이 한 팀으로 Databricks 'Building Intelligent Apps with Data + AI' 해커톤에서 BAAMM이라는 프로덕트로 구현한 과정을 정리한 것입니다. 짧은 기간이었지만 팀이 같은 방향으로 집중해 만든 결과물입니다. 메시지를 많이 보내는데도 성과가 오르지 않는 문제에 관심이 있다면 참고가 될 만합니다.


이 해커톤은 Databricks가 AWS와 함께 아시아·태평양 지역에서 개최한 대회입니다. 대시보드를 넘어 데이터와 AI를 묶어 실제로 쓸 수 있는 앱을 만드는 것이 과제였고, 트랙은 공개 데이터로 사회 문제를 푸는 쪽과 자사 데이터로 비즈니스 문제를 푸는 쪽으로 나뉘었습니다. 저희는 후자를 골랐습니다. KCD가 가진 데이터로 앞서 말한 마케팅 메시지 문제를 직접 다룰 수 있었기 때문입니다. 이 주제로 만든 BAAMM이 한국어 트랙에서 1위를 했습니다.


61a146745c7cd.jpeg


보낼수록 무뎌지는 메시지

캐시노트는 많은 사장님과 연결되어 있고, 그만큼 보내는 메시지도 많습니다. 그런데 한 가지 문제가 반복됐습니다. 발송량은 느는데 성과는 거의 늘지 않았습니다.

원인을 파고들어 보니 두 가지로 좁혀졌습니다.


첫째, 무차별 발송입니다. 광고 상품에 관심 없는 사장님께도 똑같은 메시지가 갑니다.
둘째, 소구점 미스매치입니다. 메시지가 내세우는 핵심 포인트("이걸 보세요!")가 정작 그 사장님의 관심사와 어긋나 있습니다. 매출이 줄어 고민인 사장님께 장기 저축을 권하는 식이죠.


이번 작업에서 가장 어려웠던 건 모델 구현이 아니라 문제 정의였습니다. 정의가 명확해진 뒤에는 구현이 비교적 수월했습니다. 저희가 내린 정의는 이렇습니다. 메시지 발송은 누구에게(WHO)와 왜(WHY)라는 두 질문이 겹친 문제인데, 지금까지는 이 둘을 한 덩어리로 풀어 왔다. 그래서 둘을 분리해 따로 풀기로 했습니다.


보내기 전에 거른다

BAAMM(Business Accelerating AI Messaging Machine)의 핵심 아이디어는 한 문장으로 요약됩니다. 발송 버튼을 누르기 전에, AI가 부적합한 조합을 미리 걸러낸다.


기존 방식은 일단 보내고 결과를 보며 배웠습니다. 저희는 순서를 뒤집었습니다. "이 페르소나에게 이 소구점을 보내는 게 맞나?"를 LLM이 발송 전에 채점하게 한 겁니다. 채점 결과는 네 단계로 나옵니다.


  • HIGH — 강한 정렬. 1순위 추천

  • MEDIUM — 일부 정렬. 후보로 검토

  • LOW — 약한 정렬. 보통 제외

  • INCOMPATIBLE — 명백히 부적합. 자동 차단


마케터는 회색으로 표시된 INCOMPATIBLE을 피하고, 녹색 HIGH부터 고르면 됩니다. "보낼 만한 조합"을 사람이 일일이 머리로 따지지 않아도 된다는 뜻입니다.


실제로는 어떻게 작동하나

각 단계가 안에서 어떻게 동작하는지 정리하면 다음과 같습니다. 비개발 직군도 이해할 수 있도록 기술 용어는 최소화하고 "무엇을 왜 했는지" 위주로 적었습니다.


1) 모든 사장님을 20개의 페르소나로 압축합니다. 사장님 한 분 한 분을 다 다르게 대할 수는 없습니다. 그렇다고 전부 똑같이 묶으면 메시지가 무뎌집니다. 그래서 사장님을 네 개의 축으로 잘랐습니다. 앱에서 무엇을 주로 보는지, 매출 흐름이 어떤지, 외부 서비스(홈택스·POS·배달앱 등)와 얼마나 연결돼 있는지, 최근에 얼마나 활발히 들어오시는지입니다. 이 네 축을 격자처럼 교차하면 수백 개의 칸이 생기는데, 의미가 비슷한 칸끼리 묶어 마케터가 한눈에 읽을 수 있는 20개로 압축했습니다.


여기서 저희가 신경 쓴 부분이 하나 있습니다. 묶기만 하면 "3번 클러스터"처럼 의미 없는 번호가 됩니다. 그래서 각 그룹의 통계를 읽어 "광고 골든 사장님", "세무 충성 사장님", "콘텐츠 헤비 사장님" 같은 한글 이름을 자동으로 붙였습니다. 마케터는 코드나 ID를 외울 필요 없이, 사람 이름 부르듯 페르소나를 부릅니다.


2) "오늘 누가 반응할까?"를 매일 다시 계산합니다. 같은 사장님이라도 어제와 오늘의 관심사가 다를 수 있습니다. 그래서 광고 캠페인별로 "이 사장님이 오늘 이 메시지를 클릭할 확률"을 매일 갱신합니다. 한 번 학습하고 끝내는 게 아니라, 데이터가 쌓일 때마다 어제의 예측을 오늘의 예측으로 덮어씁니다.


3) 과거에 보낸 메시지에서 '소구점'을 캐냅니다. '소구점'이라는 말부터 잠깐 풀어보겠습니다. 소구점은 메시지가 사장님을 움직이려고 내세우는 한 가지 포인트입니다. "미조회 환급금을 무료로 확인하세요"의 소구점은 '공짜로 새 정보를 알려준다'이고, "소멸 임박"의 소구점은 '지금 안 하면 놓친다'인 셈이죠. 그동안 보낸 메시지에는 이런 소구점이 담겨 있었지만 따로 정리된 적은 없었습니다. 그래서 발송 이력을 LLM에게 통째로 읽혀, 각 메시지가 어떤 소구점을 쓰고 있었는지 찾아내 라벨을 붙이게 했습니다. 한 캠페인에서 여덟 개 안팎의 소구점 후보를 추리고, 메시지마다 최소 한 개의 소구점을 답니다. 이 작업이 있어야 다음 단계에서 "이 소구점을 이 페르소나에게 보내도 될까?"를 따질 수 있습니다.


4) LLM이 6,800개 조합을 미리 채점합니다. 앞서 만든 페르소나와, 방금 캐낸 소구점을 메시지 단위까지 펼치면 약 6,800개의 조합이 나옵니다. 이걸 사람이 다 검토하는 건 불가능합니다. 대신 LLM이 각 조합을 읽고 "매출이 줄어드는 사장님께 환급 안내는 강한 정렬", "저축 니즈가 약한 그룹에 장기 저축 유도는 우려 신호" 식으로 정렬도와 부정 신호를 함께 평가해 점수를 매깁니다.


5) 페르소나에 맞는 카피 3종을 생성합니다. 조합이 확정되면 LLM이 카피 세 개를 씁니다. 특히 첫 줄에 공을 들였습니다. 카카오톡 미리보기의 첫 줄이 사실상 클릭 여부를 가르기 때문입니다. 기존에 반응이 좋았던 메시지를 본보기로 삼아, 페르소나에 맞춰 변주합니다. 마케터는 친구톡 미리보기와 iOS·안드로이드 시뮬레이터로 실제 푸시 모양을 확인하고, 버튼 하나로 발송 큐에 보냅니다.

e6bd403878e5b.png

이렇게 만들어진 결과물은 마케터의 한 화면으로 모입니다. 히트맵에서 좋은 조합을 고르고, 슬라이더로 모수를 조절하고, 카피를 비교해 고르고, 발송용 파일을 내보내기까지를 한 사람이 한 시간 안에 끝낼 수 있습니다.


모델보다 까다로웠던, 운영에서 깨지기 쉬운 곳들

좋은 모델을 만드는 것과, 그 모델이 매일 안정적으로 도는 것은 다른 이야기입니다. 운영에서 깨지기 쉬운 두 지점을 특히 신경 썼습니다.

하나는 그 페르소나 라벨이 매주 흔들리지 않게 하는 일입니다. 클러스터링은 매주 다시 학습하는데, K-Means가 만든 클러스터에는 원래 이름이 없어 그냥 두면 지난주의 "광고 골든 사장님"이 이번 주엔 엉뚱한 그룹을 가리킬 수 있습니다. 그래서 이름을 자유롭게 붙이는 대신, 통계 임계값으로 정의한 도메인 규칙을 프롬프트에 넣어 라벨을 부여했습니다. 매주 다시 학습해도 라벨의 의미가 큰 틀 안에서 유지되게 한 것이죠. 라벨마다 통계 근거가 함께 나오기 때문에, 마케터가 "왜 이 사장님이 이 페르소나인지"를 직접 확인할 수 있다는 것도 의도한 부분입니다. 블랙박스가 아니라는 뜻입니다.


다른 하나는 무거운 계산과 즉각 반응이 서로를 방해하지 않게 하는 일입니다. 클러스터링·소구점 추출·매칭·반응 예측처럼 미리 계산해 둘 수 있는 작업은 배치로 돌려 결과를 테이블에 쌓아두고, 마케터가 화면에서 버튼을 누르는 순간 일어나는 문안 생성과 발송은 실시간으로 분리했습니다. 미리 계산하는 흐름과 실시간 흐름을 나눠 둔 덕분에, 한쪽이 바빠도 다른 쪽이 느려지지 않습니다.


숫자로 본 결과

ecd56db39cd5e.png

실험 캠페인에서 나온 결과는 이렇습니다.

  • 클릭률(CTR): 실험군 약 2.26% vs 대조군 약 1.12% — 약 2배

  • 실제 매출이 발생한 전환 유저: 약 3배 개선

  • 마케터 셋업 시간: 1시간 → 15분

  • 모수 효율: 대조군 절반의 모수로 동일한 클릭 수 달성

마지막 항목이 특히 중요하다고 봅니다. 절반의 모수로 같은 성과를 냈다는 건 나머지 절반의 사장님께 불필요한 메시지를 보내지 않았다는 뜻입니다. 클릭률을 올리는 것과 사장님의 피로도를 낮추는 것이 상충하지 않는다는 점을 데이터로 확인했습니다.


마무리하며

BAAMM은 해커톤이 끝난 뒤 사내 운영 단계에 들어섰습니다. 현재는 데모가 아니라 실제 캠페인이 이 시스템 위에서 운영되고 있습니다.

개인적으로는 수상 자체보다 세 명이 같은 문제에 집중해 짧은 기간에 결과를 낸 과정이 더 의미 있었습니다. 함께한 팀원 Rice, Hani께 감사합니다. 이번 작업을 거치며 데이터분석팀이 모델을 만드는 데 그치지 않고 문제를 정의하고 프로덕트까지 완성할 수 있는 팀이라는 점을 다시 확인했습니다.

데이터로 사장님의 문제를 푸는 일에 관심 있는 분께 이 글이 참고가 되면 좋겠습니다. 비슷한 문제를 다루고 계신 분들의 피드백도 환영합니다.


팀원 짧은 후기

Ben :  팀원분들 모두 수고하셨고 무엇보다 내년 DAIS 행사로 샌프란시스코를 같이 가게 돼 매우 기대됩니다! 프로젝트가 사내에서 잘 활용돼 마케팅 자원이 효율적이고 효과적으로 운용되길 바랍니다. 

Hani :  든든한 팀원들과 함께하여 얻은 값진 결과라서 더 뿌듯하고 함께 해주신 마케터분들께도 감사합니다. 다축 클러스터링 구조 개발을 통해 유저에 대한 이해를 깊게 할 수 있는 좋은 경험이었고, Apps/지니룸/대시보드 등 Databricks의 주요 기능들을 다양하게 활용하며 완성도를 높여 더 의미있는 수상이라 느껴집니다. 이번 해커톤을 자양분 삼아 앞으로도 KCD와 사장님들을 위한 분석과 개발에 힘쓰겠습니다.

Rice :  훌륭한 팀원들과 든든한 시너지를 내며 1위라는 좋은 결과까지 얻게 되어 무척 소중한 시간이었습니다. 단순히 업무를 넘어, 마치 대학생 시절 공모전을 준비하던 때로 돌아간 것 같아 대회 기간 내내 정말 즐거웠습니다.

개인적으로, 평소 주력하던 분야를 벗어나 프론트엔드와 백엔드 등 서비스 개발의 전 과정에 직접 부딪혀보며 프로덕트 관점에서 깊이 고민해 볼 수 있어 더욱 뜻깊은 프로젝트였습니다. 우리 팀원들과 함께 데이터가 실제 비즈니스 문제 해결로 이어지는 전 과정을 함께 만들어갈 수 있어 진심으로 행복했습니다!


7fbaa23590c71.png





1 0

월간 인기글