뷰티셀렉션
경력근거: 스킨케어 브랜드 ‘바이오던스’를 운영하고 있는 글로벌 브랜드 스타트업입니다
※ 실제 산출물이 아닌 AI 예측 시안입니다.
뷰티셀렉션은 스킨케어 브랜드 바이오던스를 운영하며 ‘과장된 마케팅에 지친 소비자’ 를 문제로 정의하는 회사입니다. 리뷰에서 불만을 뽑아 다음 제품으로 잇고 콘텐츠의 과장 위험까지 짚는 이 도구는, 바이오던스 제품군과 그 고객 리뷰라는 뷰티셀렉션 고유의 맥락이 있어야 의미가 있습니다. 같은 사슬을 다른 회사 데이터로는 그대로 만들 수 없습니다.
‘온전히 고객 관점으로 타협 없는 제품을 기획한다’ 가 미션이라, 리뷰에서 불만과 미충족 욕구를 뽑아 다음 제품으로 잇는 루프가 직격입니다.
‘과장된 마케팅으로 선택에 지친 소비자’ 를 문제로 정의하므로, 콘텐츠의 과장광고 위험을 미리 짚는 가드가 제품 가치와 맞닿습니다.
‘글로벌 스킨케어 고객의 고민도 유사하다’ 고 보므로, 다국어 리뷰를 한 스키마로 묶어 제품별로 비교하는 구조가 필요합니다.
바이오던스 제품의 고객 리뷰에 제품명·구매채널·별점을 붙여 한 화면에서 봅니다. LLM 이 제품별 반복 불만 Top3 와 과장광고 위험 문구를 짚고 다음 제품·콘텐츠 개선점을 제안하며, 매일 아침 슬랙으로 리포트를 보냅니다. 리뷰 데이터는 작성자가 만든 더미데이터이고, 근거는 채용공고 정렬입니다.
뷰티셀렉션 PE. 흩어진 리뷰를 사람이 손으로 모아 ‘이번엔 뭘 고쳐야 하는가’ 를 매번 정리하던 일을, 제품별 불만·과장 위험 정리 도구로 보조하고 싶은 사람입니다.
리뷰에 제품 ID·채널·별점을 붙이면, LLM 이 (a) 제품별 반복 불만 Top3 와 (b) 과장광고 위험 문구를 리뷰 인용과 함께 짚고 (c) 다음 제품·콘텐츠 개선 제안 3건을 몇 초 안에 만듭니다.
리뷰를 한곳에 모아 제품별 반복 불만 Top3 와 과장광고 위험 문구를 LLM 이 리뷰 인용과 함께 짚고, 다음 제품·콘텐츠 개선 제안을 매일 아침 슬랙으로 보내는 동작하는 도구입니다.
마케터 검토자 2명이 불만·과장 판정이 타당한지 라벨링하고, 다음 기간 신규 리뷰에서 같은 불만이 줄었는지 맞춰보는 대시보드입니다.
확인된 제안을 채널·국가별 리뷰로 넓혀, 글로벌 고객의 불만 차이까지 비교해 보여주는 단계입니다.
악성·미충족 리뷰 시나리오 10개를 넣으면 제품별 불만 Top3 와 과장 위험 문구가 리뷰 인용과 함께 몇 초 안에 나오는 걸 시연합니다
일부러 만든 결측·미등록·표기 흔들림 리뷰 30종을 넣어도 출력 형식(Zod 스키마)이 한 번도 안 깨지는 걸 보여줍니다
매일 아침 슬랙으로 리포트가 자동 발송되는 걸 14일치 시연으로 보여줍니다
내가 만든 정답 30개 중 불만 Top3 가 일치한 게 24개였습니다. 다만 정답과 데이터를 모두 작성자가 만든 합성 기준이라 ‘성능 검증’ 이 아니라 ‘데모 조건에서의 동작’ 임을 함께 밝힙니다
진짜 성능 검증은 여기서 멈춥니다. 위 수치는 전부 작성자가 만든 더미데이터 자가채점이며, 실제 일치도와 개선 효과는 뷰티셀렉션 실제 리뷰 데이터와 실 마케터 검수가 있어야 측정됩니다. 이 도구는 그 검증을 바로 돌릴 수 있는 상태까지 만듭니다.
이건 고객·실데이터 없이 혼자 만든 포트폴리오라 수치는 합성 데이터 자가채점이라 성능 증명이 아닙니다. 면접에서 ‘데모 조건 동작 + 실검증 준비 상태’ 로 솔직히 설명합니다
정답을 작성자가 만들었으니 잘 맞는 것이 당연합니다. 일부러 헷갈리는 결측·악성·경계 리뷰를 더미에 섞어 쉬운 문제만 푸는 게 아님을 보여줍니다
‘이 성분 때문에 트러블이 났다’ 같은 단정은 상관일 뿐 인과가 아닐 수 있습니다. 단정 표현을 강제로 누그러뜨리고 별도 judge 로 우회 표현까지 거릅니다
제품 이름 표기가 리뷰마다 제각각입니다. 이름 유사도로 같은 제품으로 묶고, 못 묶은 건 추측하지 말고 ‘미매핑’ 으로 알립니다
실제 도입 시 달라지는 점을 분리해 둡니다. 실 리뷰 분포는 더미와 다르므로 금칙어 사전·기준값을 다시 맞춰야 하고, 마케터 검수도 실제 인력으로 교체해야 합니다
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
제품별 고객 리뷰. 불만·과장 판정 LLM 이 가장 먼저 질의하는 테이블입니다. 운영 현실대로 결측(별점 미입력)·미등록 신제품·별칭 표기·경계값을 일부러 섞어, 쉬운 데이터만 푸는 게 아님을 보여줍니다.
| review_id | date | channel | product_raw | product_id | rating_1to5 | lang | body |
|---|---|---|---|---|---|---|---|
| r_0001 | 2026-04-02 | oliveyoung | 바이오던스 콜라겐 마스크팩 | p_collagen_mask | 5 | ko | 0.5초에 한 장 팔린다더니 흡수 진짜 빠르고 좋아요 |
| r_0002 | 2026-04-02 | app | 콜라겐 마스크 | p_collagen_mask | 2 | ko | 포장 뜯을 때 시트가 자꾸 찢어져요. 손이 미끄러워서 붙이기 어려움 |
| r_0003 | 2026-04-03 | amazon | Biodance Collagen Mask | p_collagen_mask | 4 | en | Hydrating but the essence leaks out of… |
| r_0004 | 2026-04-03 | web | 바이오던스 토너패드 | p_toner_pad | 1 | ko | 트러블 잡힌다고 해서 샀는데 오히려 뒤집어졌어요. 광고가 과장된 듯 |
| r_0005 | 2026-04-04 | app | 토너 패드 | p_toner_pad | — | ko | 향은 좋은데 별점 깜빡했네요 다시 써볼게요 |
아래 Zod 스키마에 맞는 스킨케어 브랜드 고객 리뷰 80행 JSON 배열로 생성하세요. 제품 3~4종, 채널·언어 분포 자연스럽게.
{"type":"object","properties":{"review_id":{"type":"string"},"date":{"type":"string"},"channel":{"type":"string","enum":["app","web","oliveyoung","amazon"]},"product_raw":{"type":"string"},"product_id":{"type":["string","null"]},"rating_1to5":{"type":["number","null"]},"lang":{"type":"string","enum":["ko","en","ja"]},"body":{"type":"string"}},"required":["review_id","date","channel","product_raw","product_id","rating_1to5","lang","body"]}
쉬운 데이터만 만들지 마세요. 다음 하드 케이스를 의도적으로 섞으세요(쉬운 문제만 푸는 함정 회피): (1) 같은 제품의 별칭 표기 혼입(product_raw ‘콜라겐 마스크’/‘콜라겐마스크팩’ 이 product_id p_collagen_mask 로 정규화돼야 함), (2) 미등록 신제품(product_id=null) 2~3건, (3) 결측. rating_1to5 가 null 인 행 2~3건, (4) 경계값 별점 1과 5 극단 다수, (5) 과장 위험 문구(‘100% 완치’·‘기적’·‘보장’)가 담긴 리뷰 3건. 형식 깨뜨리기 시도 3건은 별도로. JSON 배열만 출력하세요.{"type":"object","properties":{"review_id":{"type":"string"},"date":{"type":"string"},"channel":{"type":"string","enum":["app","web","oliveyoung","amazon"]},"product_raw":{"type":"string"},"product_id":{"type":["string","null"]},"rating_1to5":{"type":["number","null"]},"lang":{"type":"string","enum":["ko","en","ja"]},"body":{"type":"string"}},"required":["review_id","date","channel","product_raw","product_id","rating_1to5","lang","body"]}제품 표준 ID와 별칭. 같은 제품이 ‘콜라겐 마스크팩/콜라겐마스크/Biodance Collagen Mask’ 로 들어오는 문제를 정규화합니다. 마스터에 없는 신제품은 ‘미매핑’ 으로 알립니다.
| product_id | canonical_name | aliases | category | claim_tags |
|---|---|---|---|---|
| p_collagen_mask | 바이오던스 콜라겐 마스크팩 | ["콜라겐 마스크","콜라겐마스크팩","Biodance Collagen Mask","コラーゲンマスク"] | mask | ["수분","탄력"] |
| p_toner_pad | 바이오던스 토너패드 | ["토너 패드","토너패드","Biodance Toner Pad"] | toner | ["진정","각질"] |
| p_serum | 바이오던스 세럼 | ["세럼","Biodance Serum"] | serum | ["흡수","보습"] |
| p_cream | 바이오던스 수분크림 | ["수분크림","Biodance Cream"] | cream | ["수분","장벽"] |
| p_cleanser | 바이오던스 클렌저 | ["클렌징폼","Biodance Cleanser"] | cleanser | ["세정","저자극"] |
아래 Zod 스키마에 맞는 스킨케어 product_master 12행 JSON 배열로 생성하세요. 같은 제품이 한국어·영어·일본어 별칭 2~4개를 가지도록.
{"type":"object","properties":{"product_id":{"type":"string"},"canonical_name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"category":{"type":"string","enum":["mask","toner","serum","cream","cleanser"]},"claim_tags":{"type":"array","items":{"type":"string"}}},"required":["product_id","canonical_name","aliases","category","claim_tags"]}
조건: category 분포 자연스럽게, claim_tags 는 효능 키워드 1~3개. product_reviews 의 product_raw 표기가 이 aliases 로 매핑되도록 맞추세요. JSON 배열만 출력하세요.{"type":"object","properties":{"product_id":{"type":"string"},"canonical_name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"category":{"type":"string","enum":["mask","toner","serum","cream","cleanser"]},"claim_tags":{"type":"array","items":{"type":"string"}}},"required":["product_id","canonical_name","aliases","category","claim_tags"]}| LLM | 제품별 불만 Top3·과장광고 위험·개선 제안을 리뷰 인용과 함께 생성하는 본 엔진 |
| Claude | 불만·과장 판정 본 모델(Claude Sonnet). hedge 토큰 가드로 단정 표현을 누그러뜨립니다 |
| Python | ingest 파이프라인(CSV/JSON 리뷰 → PostgreSQL upsert)과 LLM eval 스크립트(판정 일치도 계산)를 돌립니다 |
| PostgreSQL | product_reviews / product_master / review_labels 단일 진실원과 제품별 집계 뷰(v_product_complaints)를 둡니다 |
| Node.js | Next.js 리뷰 인사이트 대시보드(불만 카드 + 과장 위험 플래그)를 띄웁니다 |
| JavaScript | 프런트 인사이트 카드 렌더링과 Zod 런타임 검증을 처리합니다 |
✓ pass → 그대로 멈춰도 완결입니다. 더 키우려면 2주차(제안이 실제 리뷰와 맞았는지 확인)로 진행합니다.
✓ pass → 여기서 멈춰도 완결입니다. 더 키우려면 3주차(채널·국가별 확장)로 진행합니다.
제품별 1) 반복 불만 Top3(근거 리뷰 인용 포함), 2) 과장광고 위험 문구 플래그, 3) 다음 제품·콘텐츠 개선 제안. 불만에서 제안까지 한 스키마에 담습니다.
{"type":"object","properties":{"product_id":{"type":"string"},"period":{"type":"string"},"complaints":{"type":"array","items":{"type":"object","properties":{"headline":{"type":"string","minLength":8},"share_pct":{"type":"number"},"evidence_review_ids":{"type":"array","items":{"type":"string"},"minItems":1},"hedge":{"type":["string","null"],"minLength":8}},"required":["headline","share_pct","evidence_review_ids","hedge"]},"minItems":1,"maxItems":3},"overclaim_flags":{"type":"array","items":{"type":"object","properties":{"phrase":{"type":"string"},"risk_type":{"type":"string","enum":["효능단정","최상급","근거누락"]},"evidence_review_id":{"type":"string"}},"required":["phrase","risk_type","evidence_review_id"]}},"proposals":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["product","content"]},"suggestion":{"type":"string","minLength":12},"reason":{"type":"string","minLength":12}},"required":["kind","suggestion","reason"]},"minItems":1,"maxItems":3}},"required":["product_id","period","complaints","overclaim_flags","proposals"]}[
{
"product_id": "p_collagen_mask",
"period": "2026-04-02 ~ 2026-04-08",
"complaints": [
{
"headline": "에센스 누액·시트 찢어짐",
"share_pct": 38,
"evidence_review_ids": [
"r_0002",
"r_0003",
"r_0008"
],
"hedge": "표본 12건. 포장 로트별 차이 가능성으로 단정은 어렵습니다."
},
{
"headline": "용량 대비 가격 부담",
"share_pct": 12,
"evidence_review_ids": [
"r_0009"
],
"hedge": "표본 1건이라 추세로 보기 어렵습니다."
}
],
"overclaim_flags": [
{
"phrase": "100% acne gone, guaranteed results",
"risk_type": "효능단정",
"evidence_review_id": "r_0012"
}
],
"proposals": [
{
"kind": "product",
"suggestion": "파우치 실링과 시트 인장강도 개선 검토",
"reason": "누액·찢어짐 불만이 반복 인용되어 가장 잦은 신호입니다."
},
{
"kind": "content",
"suggestion": "‘기적·100%·보장’ 표현을 효능 범위 문구로 교체",
"reason": "리뷰에 과장광고 위험 문구가 노출돼 회사 미션인 ‘과장 마케팅 지양’ 과 충돌합니다."
}
]
},
{
"product_id": "p_toner_pad",
"period": "2026-04-02 ~ 2026-04-08",
"complaints": [
{
"headline": "패드 건조·에센스 부족",
"share_pct": 50,
"evidence_review_ids": [
"r_0011"
],
"hedge": "표본 1건이라 합성 기준 추정입니다. 실데이터 확인 필요."
}
],
"overclaim_flags": [],
"proposals": [
{
"kind": "content",
"suggestion": "‘트러블 잡힘’ 단정 대신 개인차 안내 추가",
"reason": "효과 기대와 실제 사용 후기 사이 간극으로 낮은 별점이 관찰됩니다."
}
]
},
{
"product_id": "p_serum",
"period": "2026-04-09 ~ 2026-04-15",
"complaints": [
{
"headline": "펌프 토출량 불균일",
"share_pct": 33,
"evidence_review_ids": [
"r_0005",
"r_0006"
],
"hedge": "표본 6건이라 로트 차이인지 설계 문제인지 가르지 못했습니다."
}
],
"overclaim_flags": [],
"proposals": [
{
"kind": "quality",
"suggestion": "펌프 부품 로트별 토출량 검사를 요청합니다",
"reason": "같은 주에 같은 증상 후기가 겹쳐 로트 확인이 먼저입니다."
}
]
}
]자동: (1) Zod parse, (2) evidence_review_ids 가 실제 product_reviews 의 review_id 에 존재하는지 인용 검증, (3) overclaim_flags.phrase 가 실제 리뷰 body 의 부분 문자열인지 검사, (4) 단정 표현 토큰 검출 + LLM-as-judge 의미 평가. 수동: 마케터 검토자 2명 비동기 라벨 후 bootstrap Cohen’s κ 하한 ≥ 0.6, judge 인간 spot-check 5%. share_pct 는 합성 기준 추정이라 실데이터 분포로 다시 맞춰야 합니다.