누비랩
경력근거: 가설을 빠르게 세우고 다양한 방식으로 해법을 실험하며, 실험 결과와 사용자 피드백을 기반으로 제품을 지속적으로 개선합니다.
※ 실제 산출물이 아닌 AI 예측 시안입니다.
누비랩의 Product Engineer(Marketing)는 공고 첫 줄부터 단순히 마케팅을 운영하는 사람이 아닌 성장 시스템을 설계하는 엔지니어라고 못박고, 풀려는 문제로 '마케팅 실행이 사람의 시간과 반복 작업에 의존하는 구조를 어떻게 전환할 것인가' 를 앞세웁니다. 우대사항에는 Amplitude·Mixpanel·GA4로 퍼널 분석부터 인사이트 도출, 실행까지 연결해 본 경험이 있고, 필요하면 직접 스크립트와 내부 도구, API 워크플로우를 구현한다고 적혀 있습니다. 이 관리자 페이지는 그 문장이 가리키는 반복 작업 자체를 대상으로 삼습니다. 매주 손으로 하던 퍼널 재집계와 채널·소재 분해를 한 번의 실행으로 옮기고, 분석에서 멈추지 않도록 이탈 구간을 그 구간 사람들이 실제로 보고 들어온 문구와 이어 붙여 다음 실험 후보까지 만들어 냅니다. 첫 식판 스캔을 마지막 단계로 둔 것은 누비랩 제품이 현장에 설치돼 실제로 스캔이 일어나야 가치가 생기기 때문이고, 학교·기업구내식당·병원처럼 도입 주체가 갈리는 것도 이 회사 고객 구조에서 나온 것입니다. 다만 이 포트폴리오가 보여주는 것은 이벤트 로그 정규화와 퍼널 집계, 축별 분해와 표본 판정, 근거 인용 생성이라는 기술 역량이며, 급식·푸드테크 도메인이나 퍼포먼스 마케팅 집행 전문성은 주장하지 않습니다. 광고 계정 연동과 실제 집행은 사업자 계정이 필요해 범위 밖으로 두었습니다.
공고가 첫 줄에서 단순히 마케팅을 운영하는 사람이 아닌 성장 시스템을 설계하는 엔지니어라고 못박고, 마케팅과 성장을 하나의 엔지니어링 문제로 재정의하는 일이라고 다시 씁니다. 그래서 캠페인 운영 화면이 아니라 반복되던 분석과 판단을 코드로 옮긴 것이 이 자리의 산출물입니다.
유저 행동 데이터를 기반으로 가설과 실험, 학습과 개선이 반복되는 구조를 설계하고 운영하며, 필요하면 직접 스크립트와 내부 도구, API 기반 워크플로우를 구현한다고 적혀 있습니다. 실험을 돌리기 전에 무엇을 시험할지 고르는 단계가 가장 오래 걸리는 구간입니다.
우대사항에 Amplitude·Mixpanel·GA4로 퍼널 분석부터 인사이트 도출, 실행까지 연결해 본 경험이 있습니다. 분석에서 멈추지 않으려면 이탈 구간이 곧 다음에 시험할 문구 후보로 이어져야 합니다.
제품 사용 이벤트 로그와 퍼널 단계 정의를 받아, 단계마다 몇 명이 들어와 몇 명이 다음으로 넘어갔는지 세고 유입 채널과 광고 소재별로 나눠 보여주는 관리자 페이지입니다. 이탈이 가장 크게 벌어진 구간을 고르면 그 구간에서 빠져나간 사람들이 실제로 보고 들어온 소재 문구와 진입 경로를 함께 펼쳐 주고, 그 문구를 근거로 다음에 시험할 문구 후보를 만들어 붙입니다. 각 후보에는 인용한 기존 문구와 대상 구간, 그리고 지금 유입량으로 며칠이면 판단할 만큼 쌓이는지가 함께 적힙니다. 표본이 모자란 채널·소재 조합은 후보로 올리지 않고 얼마나 더 필요한지만 알려주며, 이벤트가 로그에 없어 아예 셀 수 없는 단계는 수치에서 빼고 확인 목록으로 세웁니다. 실제 광고 계정에 문구를 올리거나 집행하는 일은 하지 않고, 무엇을 시험할지 정하는 데까지가 이 관리자 페이지의 범위입니다.
누비랩에서 그로스를 맡은 담당자입니다. 매주 월요일이면 이벤트 로그를 내려받아 스프레드시트에서 퍼널을 다시 세고, 채널별로 나눠 보고, 어디가 나빠졌는지 눈으로 찾습니다. 그 작업만 반나절이 가서 정작 '다음에 뭘 시험할까' 는 감으로 정하게 됩니다. 이탈이 큰 구간을 숫자로 짚고 싶고, 그 구간 사람들이 어떤 문구를 보고 들어왔는지 이어서 보고 싶습니다. 유입이 적은 채널에서 우연히 튄 수치를 성과로 착각해 예산을 옮긴 적이 있어서, 표본이 모자라면 도구가 먼저 말려 주기를 바라는 사람입니다.
퍼널 이탈과 채널·소재별 차이는 전부 이벤트 로그에서 계산되는 값이라고 보고 규칙으로 먼저 다 계산한 다음, 모델에게는 이탈 구간의 실제 문구를 인용해 다음 후보 문구를 쓰는 일만 맡기면, (a) 반나절짜리 주간 분석이 한 번 실행으로 끝나고, (b) 모든 후보에 인용한 기존 문구와 대상 구간이 붙어 왜 이걸 시험하는지 설명이 되며, (c) 표본이 모자란 조합과 셀 수 없는 단계가 후보에서 먼저 빠져 우연한 수치로 예산을 옮기는 일이 줄어듭니다.
이벤트 로그와 퍼널 정의를 받아 단계별 전환·이탈을 계산하고 채널과 소재로 나눠 보여주며, 이탈이 큰 구간에 기존 문구를 인용한 실험 후보를 붙여 내보내는 관리자 페이지입니다. 표본이 모자란 조합과 이벤트가 없어 셀 수 없는 단계는 수치에서 빼고 따로 세웁니다. 광고 플랫폼 API 연동은 사업자 계정이 있어야 하므로 넣지 않고, 유입 기록은 로그의 캠페인 파라미터만 씁니다.
대소문자와 띄어쓰기만 다른 캠페인·소재 표기를 정규화 규칙으로 묶어 같은 소재가 갈라지지 않게 하고, 그로스 담당 2명이 실험 후보가 실제로 시험할 만한지 라벨링해 일치도를 붙이는 단계입니다.
매주 월요일 자동으로 실행해 지난주 퍼널과 비교하고, 나빠진 구간과 지난주 후보가 실제로 시험됐는지를 함께 보여주는 단계입니다. 실행과 알림은 n8n 워크플로우로 잇습니다.
함정을 섞은 이벤트 12만 건과 퍼널 정의 6단계를 넣으면 단계별 전환·이탈이 채널과 소재로 갈려 나오고, 이탈이 큰 구간을 펼치면 그 구간에서 빠진 사람들이 보고 들어온 실제 문구와 그걸 인용한 실험 후보가 함께 보이는 걸 시연합니다
단계별 전환 수를 같은 로그에서 손으로 센 값과 대조해 100% 자동 판정합니다. 일부러 만든 함정 4종(캠페인 표기 흔들림, 로그에 없는 이벤트를 쓰는 단계, 세션 중복 이벤트, 유입 30명 미만 조합)이 후보에 섞이지 않고 확인 목록이나 표본부족으로 빠지는지 매번 검사합니다
export 파일이 지저분한 30종(열 누락·시각 역전·같은 세션 중복·인코딩 깨짐·빈 파일)을 넣어도 화면이 죽지 않고 읽지 못한 행을 따로 세워 보여줍니다
생성된 실험 후보가 인용한 기존 문구를 벗어났는지, 후보 문장과 원본 소재 문구를 기계로 대조해 검사합니다. 필요 표본 수는 현재 전환율과 보고 싶은 차이로 계산해 붙입니다(표본이 이만큼은 쌓여야 우연과 구분된다는 뜻입니다). 단, 로그와 문구를 모두 작성자가 만든 합성 기준이라 '성능 검증' 이 아니라 '데모 조건에서의 동작' 입니다
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실험 후보가 실제로 성과를 움직였는지는 누비랩의 실제 사용 로그와 그로스 담당자가 돌린 실험 결과가 있어야 측정 가능합니다. 이 관리자 페이지는 그 검증을 바로 돌릴 수 있는 상태로 만듭니다
이건 고객·실데이터 없이 혼자 만든 포트폴리오입니다. 모든 수치는 합성 데이터 자가채점이라 '성능 증명' 이 아닙니다. 면접에서 '데모 조건 동작 + 실검증 준비 상태' 로 솔직히 설명합니다
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 캠페인 표기 흔들림·로그에 없는 이벤트·세션 중복·유입이 적은 조합 같은 경계 케이스를 더미에 섞어, 쉬운 문제만 푸는 게 아님을 보여줍니다
퍼널에서 어디가 빠지는지는 셀 수 있어도 왜 빠지는지는 못 셉니다. 문구를 바꿔 좋아졌다면 문구 때문인지 그 주에 다른 게 바뀐 건지 로그만으로는 갈리지 않으므로, 후보는 시험할 거리이지 원인 진단이 아니라고 화면에 함께 씁니다
표본이 적은 채널에서 튄 수치를 성과로 읽으면 예산이 잘못 움직입니다. 유입이 적은 조합은 아예 후보에서 빼는 쪽을 기본값으로 두었고, 그만큼 작은 채널의 기회를 놓칠 수 있다는 것도 함께 감수합니다
실제 도입 시 달라지는 것을 명시합니다. 누비랩 실제 이벤트 택소노미와 캠페인 규칙, 광고 계정 연동, 그로스 담당자 검수로 교체해야 하며 이는 도입 단계 과제로 분리합니다
이 포트폴리오가 보여주는 것은 이벤트 로그 정규화와 퍼널 집계, 축별 분해와 표본 판정, 근거 인용 생성이라는 기술 역량이며, 급식·푸드테크 도메인이나 퍼포먼스 마케팅 집행 전문성은 주장하지 않습니다. 모르는 깊이는 면접에서 모른다고 말하는 편이 낫습니다
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
제품에서 내보낸 사용자 행동 이벤트입니다. 퍼널 집계와 채널·소재 분해가 모두 이 표에서 나옵니다. 캠페인 표기 흔들림, 유입 정보 없음, 같은 세션 중복 이벤트, 시각 역전, 소재 코드 미등록을 일부러 섞어 쉬운 데이터만 푸는 게 아님을 보여줍니다.
| event_id | user_id | session_id | event_name | occurred_at | channel_raw | campaign_raw | creative_id | org_type | device |
|---|---|---|---|---|---|---|---|---|---|
| e0001 | u001 | s001 | landing_view | 2026-06-02T09:12:00+09:00 | foodwaste_2026Q2 | cr-101 | 학교 | web | |
| e0002 | u001 | s001 | demo_request_view | 2026-06-02T09:13:20+09:00 | foodwaste_2026Q2 | cr-101 | 학교 | web | |
| e0003 | u001 | s001 | demo_request_submit | 2026-06-02T09:15:40+09:00 | foodwaste_2026Q2 | cr-101 | 학교 | web | |
| e0004 | u002 | s002 | landing_view | 2026-06-02T10:01:00+09:00 | FoodWaste_2026Q2 | cr-101 | 기업구내식당 | web | |
| e0005 | u002 | s002 | landing_view | 2026-06-02T10:01:00+09:00 | FoodWaste_2026Q2 | cr-101 | 기업구내식당 | web |
아래 JSON Schema 에 맞는 B2B 급식 솔루션 랜딩의 사용자 행동 이벤트 400건을 JSON 배열로 생성. event_name 은 landing_view · pricing_view · demo_request_view · demo_request_submit · trial_start · scan_first_try 다섯~여섯 단계를 자연스러운 순서로, 한 세션에 여러 이벤트가 시간순으로 붙도록.
{"type":"object","properties":{"event_id":{"type":"string"},"user_id":{"type":"string"},"session_id":{"type":"string"},"event_name":{"type":"string"},"occurred_at":{"type":"string"},"channel_raw":{"type":["string","null"]},"campaign_raw":{"type":["string","null"]},"creative_id":{"type":["string","null"]},"org_type":{"enum":["학교","기업구내식당","병원","미상"]},"device":{"enum":["web","ios","android"]}},"required":["event_id","user_id","session_id","event_name","occurred_at","org_type","device"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. (1) 같은 캠페인을 대소문자·언더바·띄어쓰기만 다르게 적은 campaign_raw 표기 흔들림 40건 이상(foodwaste_2026Q2 / FoodWaste_2026Q2 / foodwaste 2026q2), (2) channel_raw 와 campaign_raw 가 모두 null 인 직접 유입 50건, (3) 같은 session_id 안에서 같은 event_name 이 같은 시각에 두 번 찍힌 중복 20건, (4) 같은 세션인데 뒤 단계 이벤트의 occurred_at 이 앞 단계보다 이른 시각 역전 12건, (5) creative_id 가 소재 마스터에 없는 미등록 코드 15건, (6) 유입이 30명 미만이라 비교가 무의미한 채널·소재 조합 4~5개(표본부족 판정 대상), (7) landing_view 만 찍고 다음 단계가 아예 없는 세션을 전체의 절반 가까이. event_id 는 e0001 부터 연속으로. JSON 배열만.{"type":"object","properties":{"event_id":{"type":"string"},"user_id":{"type":"string"},"session_id":{"type":"string"},"event_name":{"type":"string"},"occurred_at":{"type":"string"},"channel_raw":{"type":["string","null"]},"campaign_raw":{"type":["string","null"]},"creative_id":{"type":["string","null"]},"org_type":{"enum":["학교","기업구내식당","병원","미상"]},"device":{"enum":["web","ios","android"]}},"required":["event_id","user_id","session_id","event_name","occurred_at","org_type","device"]}퍼널 단계 정의입니다. 새 체계를 제정하는 것이 아니라 이미 찍히고 있는 이벤트에 순서와 창 시간을 붙인 것입니다. 이벤트가 로그에 없는 단계와 창 시간이 비어 있는 단계를 함께 넣어, 셀 수 없는 단계가 수치에 섞이지 않는지 검사하게 합니다.
| step_order | step_key | label_ko | event_name | window_hours | required | note |
|---|---|---|---|---|---|---|
| 1 | landing | 랜딩 방문 | landing_view | — | true | 퍼널 시작점이라 창 시간이 없습니다 |
| 2 | pricing | 가격 확인 | pricing_view | 24 | false | 건너뛰고 바로 문의하는 경로가 있어 선택 단계입니다 |
| 3 | demo_view | 도입 문의 화면 진입 | demo_request_view | 24 | true | — |
| 4 | demo_submit | 도입 문의 제출 | demo_request_submit | 24 | true | — |
| 5 | trial | 체험 시작 | trial_start | 168 | true | 영업 접촉이 끼어 창 시간을 일주일로 둡니다 |
아래 JSON Schema 에 맞는 B2B 급식 솔루션 퍼널 단계 정의 18건을 JSON 배열로 생성. 이미 찍히고 있는 이벤트에 순서와 창 시간을 붙이는 설정이라는 전제로(새 이벤트 체계를 제정하지 말 것).
{"type":"object","properties":{"step_order":{"type":"number"},"step_key":{"type":"string"},"label_ko":{"type":"string"},"event_name":{"type":"string"},"window_hours":{"type":["number","null"]},"required":{"type":"boolean"},"note":{"type":["string","null"]}},"required":["step_order","step_key","label_ko","event_name","required"]}
쉬운 데이터만 만들지 말 것. 다음 하드 케이스를 의도적으로 섞어라. (1) event_name 이 product_events 에 한 번도 안 나오는 단계 4건(셀 수 없음이 정답이어야 한다), (2) window_hours 가 null 이라 전환 판정을 보류해야 하는 단계 3건, (3) 서로 다른 두 단계가 같은 event_name 을 쓰는 충돌 1쌍, (4) required=false 라 건너뛰어도 되는 선택 단계 6건, (5) step_order 가 실제 사용 흐름과 어긋나 보이는 단계 2건(사람 확인이 필요한 사례로 남길 것). JSON 배열만.{"type":"object","properties":{"step_order":{"type":"number"},"step_key":{"type":"string"},"label_ko":{"type":"string"},"event_name":{"type":"string"},"window_hours":{"type":["number","null"]},"required":{"type":"boolean"},"note":{"type":["string","null"]}},"required":["step_order","step_key","label_ko","event_name","required"]}| Python | 이벤트 로그 파싱, 퍼널 집계, 채널·소재 분해, 표본 판정과 후보 생성 파이프라인을 구현하는 대표 언어 |
| SQL | 이벤트를 사용자·세션 축으로 이어 붙여 단계별 진입·이탈을 세는 집계 계층 |
| Amplitude | 제품에서 내보낸 이벤트 export 를 입력 스키마의 기준으로 삼습니다(같은 모양이면 Mixpanel export 도 그대로 읽힙니다) |
| Mixpanel | 이벤트 이름과 속성 구조가 달라도 같은 파서로 읽히도록 매핑표를 두어 도구 종속을 끊습니다 |
| GA4 | 웹 유입의 캠페인 파라미터(utm)를 채널·소재로 정규화하는 규칙의 출처 |
| n8n | 3주차에 주간 실행과 결과 전달을 워크플로우로 이어 사람이 손으로 돌리지 않게 합니다 |
| 생성형 AI | 이탈 구간의 기존 소재 문구를 인용해 다음 실험 문구 후보를 쓰는 데만 쓰며, 무엇을 시험할지 고르는 판정은 규칙이 합니다 |
| Google Ads · Meta Ads | 소재 문구와 대상 구간을 각 플랫폼 업로드 양식에 맞춘 파일로 내보내는 데까지만 씁니다. 실제 계정 연동과 집행은 사업자 계정이 필요해 범위 밖입니다 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우고 싶으면 2주차(캠페인 표기 정규화·후보 검수)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우면 3주차(주간 자동 실행·지난주 대비 추적)로 진행합니다.
한 주 분석 결과입니다. 단계별 전환·이탈, 채널·소재별로 나눠 본 차이, 이탈이 큰 구간에 붙인 실험 후보와 그 근거로 인용한 기존 문구, 그리고 표본이 모자라거나 셀 수 없어 후보에서 뺀 항목을 담습니다. 수치와 근거가 어긋난 출력을 기계로 걸러낼 수 있게 필드를 나눠 둡니다.
{"type":"object","properties":{"scan_id":{"type":"string"},"period":{"type":"string"},"funnel":{"type":"array","items":{"type":"object","properties":{"step_key":{"type":"string"},"entered":{"type":"number"},"advanced":{"type":"number"},"drop_rate":{"type":["number","null"]},"countable":{"type":"boolean"}},"required":["step_key","entered","advanced","countable"]}},"segments":{"type":"array","items":{"type":"object","properties":{"step_key":{"type":"string"},"channel":{"type":"string"},"creative_id":{"type":["string","null"]},"users":{"type":"number"},"drop_rate":{"type":"number"},"gap_vs_overall":{"type":"number"}},"required":["step_key","channel","users","drop_rate","gap_vs_overall"]}},"experiments":{"type":"array","items":{"type":"object","properties":{"target_step":{"type":"string"},"target_channel":{"type":"string"},"cited_creative_id":{"type":"string"},"cited_copy":{"type":"string"},"proposed_copy":{"type":"string"},"reach_per_week":{"type":"number"},"days_to_read":{"type":"number"}},"required":["target_step","target_channel","cited_creative_id","cited_copy","proposed_copy","reach_per_week","days_to_read"]}},"excluded":{"type":"array","items":{"type":"object","properties":{"reason":{"enum":["표본부족","이벤트없음","창시간없음","소재미등록","단계충돌"]},"refs":{"type":"array","items":{"type":"string"}},"note_ko":{"type":"string"}},"required":["reason","refs","note_ko"]}}},"required":["scan_id","period","funnel","segments","experiments","excluded"]}[
{
"input_ref": "2026-06-01 ~ 2026-06-07 · 이벤트 12만 건 · 퍼널 정의 10단계",
"output": {
"scan_id": "scan-2026-w23",
"period": "2026-06-01/2026-06-07",
"funnel": [
{
"step_key": "landing",
"entered": 4820,
"advanced": 1735,
"drop_rate": 0.64,
"countable": true
},
{
"step_key": "demo_view",
"entered": 1735,
"advanced": 612,
"drop_rate": 0.65,
"countable": true
},
{
"step_key": "demo_submit",
"entered": 612,
"advanced": 341,
"drop_rate": 0.44,
"countable": true
},
{
"step_key": "trial",
"entered": 341,
"advanced": 198,
"drop_rate": 0.42,
"countable": true
},
{
"step_key": "first_scan",
"entered": 198,
"advanced": 117,
"drop_rate": 0.41,
"countable": true
},
{
"step_key": "weekly_report",
"entered": 0,
"advanced": 0,
"drop_rate": null,
"countable": false
}
],
"segments": [
{
"step_key": "first_scan",
"channel": "meta",
"creative_id": "cr-207",
"users": 64,
"drop_rate": 0.58,
"gap_vs_overall": 0.17
},
{
"step_key": "demo_view",
"channel": "google",
"creative_id": "cr-101",
"users": 402,
"drop_rate": 0.71,
"gap_vs_overall": 0.06
},
{
"step_key": "demo_view",
"channel": "naver",
"creative_id": "cr-311",
"users": 118,
"drop_rate": 0.55,
"gap_vs_overall": -0.1
}
],
"experiments": [
{
"target_step": "first_scan",
"target_channel": "meta",
"cited_creative_id": "cr-207",
"cited_copy": "급식 잔반, 데이터로 관리하세요",
"proposed_copy": "첫 스캔까지 15분. 설치 기사 방문 없이 식판만 올리면 잔반이 자동으로 집계됩니다",
"reach_per_week": 64,
"days_to_read": 18
},
{
"target_step": "demo_view",
"target_channel": "google",
"cited_creative_id": "cr-101",
"cited_copy": "학교 급식 잔반 절감 솔루션",
"proposed_copy": "우리 학교 잔반이 전국 평균보다 많은지 3분 만에 확인해 보세요",
"reach_per_week": 402,
"days_to_read": 5
}
],
"excluded": [
{
"reason": "이벤트없음",
"refs": [
"weekly_report",
"contract"
],
"note_ko": "주간 리포트 열람과 계약 전환은 이벤트가 로그에 찍히지 않아 셀 수 없습니다. 계약은 영업 시스템에만 남는 것으로 보입니다."
},
{
"reason": "표본부족",
"refs": [
"meta/cr-999",
"naver/cr-402"
],
"note_ko": "유입이 각각 12명, 8명이라 차이를 우연과 구분할 수 없어 후보에서 뺐습니다. 주당 30명은 모여야 판단할 만합니다."
}
]
}
},
{
"input_ref": "캠페인 표기가 흔들린 주 · 정규화 전후 비교",
"output": {
"scan_id": "scan-2026-w23-raw",
"period": "2026-06-01/2026-06-07",
"funnel": [
{
"step_key": "landing",
"entered": 4820,
"advanced": 1735,
"drop_rate": 0.64,
"countable": true
}
],
"segments": [
{
"step_key": "landing",
"channel": "google",
"creative_id": "cr-101",
"users": 402,
"drop_rate": 0.64,
"gap_vs_overall": 0
},
{
"step_key": "landing",
"channel": "Google",
"creative_id": "cr-101",
"users": 388,
"drop_rate": 0.63,
"gap_vs_overall": -0.01
}
],
"experiments": [],
"excluded": [
{
"reason": "표본부족",
"refs": [
"google/cr-101",
"Google/cr-101"
],
"note_ko": "같은 캠페인이 표기만 달라 둘로 갈렸습니다. 각각은 후보 기준을 넘지만 합치기 전에는 같은 소재를 두 번 세는 셈이라 후보로 올리지 않았습니다. 2주차 정규화 대상입니다."
}
]
}
},
{
"input_ref": "창 시간이 정해지지 않은 단계만 뽑은 경우",
"output": {
"scan_id": "scan-window-check",
"period": "2026-06-01/2026-06-07",
"funnel": [
{
"step_key": "menu_upload",
"entered": 0,
"advanced": 0,
"drop_rate": null,
"countable": false
}
],
"segments": [],
"experiments": [],
"excluded": [
{
"reason": "창시간없음",
"refs": [
"menu_upload"
],
"note_ko": "메뉴표 업로드는 며칠 안에 하면 전환으로 볼지가 정해지지 않아 판정을 보류했습니다. 기준을 정해 주시면 다음 실행부터 셉니다."
}
]
}
}
][자동 검증: 결정론, 사람 없이 통과] 1. JSON Schema 통과: funnel·segments·experiments·excluded 의 필수 필드와 reason 열거값을 기계로 검사해 형식이 깨진 출력을 거릅니다. 2. 퍼널 재계산: 단계별 entered·advanced 를 같은 로그로 독립 계산한 값과 비교하고, 다음 단계의 entered 가 앞 단계 advanced 와 맞는지 확인합니다. 3. 인용 실재·원문 일치: experiments 의 cited_creative_id 가 소재 마스터에 있는지, cited_copy 가 그 소재의 실제 문구인지 공백 정규화 후 대조합니다. 없는 소재를 인용하면 그 자리에서 실패입니다. 4. 후보 근거 이탈 검사: proposed_copy 에 등장하는 수치와 제품 기능이 cited_copy 나 입력 컨텍스트에 있는 것인지 대조해, 모델이 없는 기능을 지어낸 후보를 거릅니다. 5. 제외 규칙 강제: countable=false 인 단계와 유입 30명 미만 조합이 experiments 에 들어가면 실패로 처리합니다. 표본이 얇은 조합으로 예산이 움직이는 것을 막는 핵심 검사입니다. 6. 판단 소요일 재계산: days_to_read 를 reach_per_week 와 현재 전환율로 다시 계산해 맞는지 확인합니다(표본이 이만큼은 쌓여야 우연과 구분된다는 뜻의 수치입니다). [수동 검증: 사람 필요] 1. 그로스 담당 2명이 각 실험 후보가 실제로 이번 주에 시험할 만한지 라벨링하고, 두 사람 판정 일치도를 Cohen's κ(두 사람 답이 우연 이상으로 일치하는 정도, 0~1)로 봅니다. 2. proposed_copy 가 브랜드 어조와 표현 규정에 맞는지 10% 표본을 사람이 읽습니다.