하이픽셀
경력근거: 팔다의 새 서비스(키워드 분석, 스토어 진단, AI 광고 관리)를 만듭니다
※ 실제 산출물이 아닌 AI 예측 시안입니다.
하이픽셀은 팔다 로드맵에 키워드 분석을 개발 중으로 올려 두고, 이 자리에 팔다의 새 서비스를 무엇을 만들지 정하는 일부터 출시 후 반응 확인까지 맡깁니다. 이미 알림톡 발송 자동화로 셀러 스토어와 연결된 제품이라, 셀러의 상품 목록과 카테고리를 알고 그 위에서 키워드를 골라 주는 기능이 자연스럽게 이어집니다. 이 포트폴리오는 카테고리별 검색수 중앙값과 경쟁 강도 순위로 키워드를 고르는 규칙과, 그 판정을 Node.js 와 AWS Lambda 위에서 셀러 화면으로 내는 구성을 보여줍니다. 네이버 쇼핑 검색 순위가 실제로 어떻게 매겨지는지나 셀러 광고 운영에 대한 전문성은 주장하지 않습니다.
공고는 팔다 로드맵에서 키워드 분석을 개발 중으로 적고, 이 자리에 팔다의 새 서비스를 만드는 일을 맡깁니다. 셀러가 상품명에 넣을 키워드를 고르는 화면은 키워드 분석이 해야 할 일 그 자체라, 이 포트폴리오는 그 기능의 첫 판을 만듭니다.
한 기능을 맡으면 무엇을 만들지 정하는 일부터 개발, 배포, 출시 후 반응 확인까지 직접 챙기는 자리입니다. 판정 다섯 가지를 셀러의 손해에서 거꾸로 정하고, 배포한 뒤 셀러가 어느 키워드를 실제로 상품명에 넣었는지 세는 흐름이 여기에 닿습니다.
업무의 95% 이상을 AI 로 해결하는 회사이고, AI 로 설계·구현·테스트·문서화를 하되 결과물은 본인이 직접 검증하라고 적었습니다. 판정 규칙은 Claude Code 로 짜되 손으로 매긴 정답과 대조해 통과한 것만 배포하고, 상품명 초안은 모델이 쓰되 키워드 포함 여부와 길이를 규칙으로 다시 보는 구성이 여기에 닿습니다.
팔다는 하이픽셀이 이커머스 셀러에게 파는 운영 효율화 플랫폼이고, 키워드 분석은 그 로드맵에서 개발 중인 서비스입니다. 이 화면은 셀러의 상품 목록과 카테고리별 후보 키워드 표를 받아 상품과 키워드 한 쌍마다 다섯 판정 중 하나를 붙입니다. 후보 키워드 표에는 월 검색수, 쇼핑 검색 상품 수, 검색 결과 상위 상품이 가장 많이 속한 카테고리가 들어 있습니다. 카테고리마다 검색수 중앙값과 경쟁 강도(상품 수 ÷ 검색수) 순위를 계산하고, 띄어쓰기를 지운 상품명에 키워드가 이미 있는지 봅니다. 셀러는 상품을 올리기 전에 이 판정으로 상품명에 넣을 말을 고르고, 빼야 할 말은 왜 빠졌는지 숫자로 봅니다.
스마트스토어에 상품을 올리기 전 상품명을 정하는 소규모 이커머스 셀러 — 지금은 키워드 도구 몇 개를 오가며 검색량을 엑셀에 옮겨 적고 감으로 고른다
소규모 셀러는 키워드 도구 몇 개에서 검색량과 상품 수를 따로 보고 엑셀에 옮겨 적은 뒤, 많이 검색되는 말부터 상품명에 넣습니다. 검색량이 큰 말일수록 경쟁 상품도 수십만 개라 새 상품은 그 결과에서 보이지 않고, 검색량이 거의 없는 말이나 다른 카테고리 손님이 찾는 말이 상품명 자리를 차지하기도 합니다. 카테고리 단위로 검색량 중앙값과 경쟁 강도 순위를 세우고 이미 쓴 말을 빼 주면, 셀러는 같은 표를 오가지 않고 넣을 키워드 몇 개를 바로 얻습니다.
셀러가 상품 목록과 후보 키워드 표 두 CSV 를 올리고 상품 하나를 고르면 후보 키워드마다 다섯 판정 중 하나와 월 검색수·경쟁 상품 수·경쟁 강도 순위가 서는 React 화면입니다. 카테고리마다 검색수 중앙값과 경쟁 강도 상위 20% 를 계산하고, 띄어쓰기를 지운 상품명과 키워드를 견주는 규칙이 Node.js 로 이 주에 들어갑니다. 검색수와 상품 수는 키워드 도구에서 내려받은 표를 그대로 올리는 것으로 시작하고, API 연동은 두지 않습니다.
네이버 검색광고 키워드 도구 API 와 쇼핑 검색 API 에서 후보 키워드의 월 검색수와 상품 수를 불러오는 AWS Lambda 함수를 붙이고, 판정 API 도 AWS Lambda 에 배포해 PostgreSQL 에 결과를 쌓습니다. 더미 셀러 세 명의 상품 30개로 늘린 480쌍에는 넣을지 뺄지를 제가 먼저 적어 두고, 화면 판정과 갈린 쌍만 모아 보는 정답 대조 탭을 엽니다.
셀러가 넣을 키워드를 고르면 Claude 가 그 키워드를 모두 담은 상품명 초안 세 개를 쓰고, 규칙이 고른 키워드가 다 들어갔는지, 이미 있음·다른 카테고리로 빠진 말이 섞이지 않았는지, 50자를 넘지 않는지 다시 봅니다. 셀러가 어느 초안을 실제로 저장했는지 기록해 출시 뒤 반응을 판정별로 셉니다.
셀러가 「여성 린넨팬츠 밴딩 와이드 9부」를 고르면 여름 린넨바지·와이드 밴딩 슬랙스가 넣을 키워드로 서고, 와이드팬츠·여성바지·냉장고바지가 경쟁이 많은 묶음에, 린넨 원단이 다른 카테고리 묶음에 서는 과정을 시연합니다. 같은 묶음에 남은 린넨 와이드팬츠는 상품명 낱말을 순서만 바꾼 말이라, 포함 검사가 어디까지 보는지를 이 키워드로 설명합니다.
셀러가 경쟁 묶음 바로 밖에 남은 여자 와이드 슬랙스를 펼쳐 경쟁 강도 15.92 와 4위라는 순위, 3위 냉장고바지 16.07 을 읽고 상품명에 넣을지 정합니다.
검색수가 10 미만이라 비어 있는 키워드, 상품명과 띄어쓰기만 다른 키워드, 문턱 바로 밑 경쟁 강도를 한 상품에 붙여도 키워드마다 묶음 하나가 정해지고, 검색수 칸에 「< 10」 같은 문자가 들어간 키워드 표 10종을 올려도 해당 키워드만 결측으로 바뀌고 나머지 순위는 다시 계산됩니다.
2주차 정답 대조 탭은 더미 셀러 세 명의 상품 30개로 늘린 480쌍을 띄우고, 제가 붙인 정답과 갈린 쌍이 10% 문턱과 상위 20% 문턱 가운데 어디에 몰리는지 판정별로 보여줍니다. 정답의 출처가 저라서 이 숫자는 다섯 규칙이 문서대로 걸리는지까지만 보여주고, 그 키워드가 실제로 주문을 늘리는지는 보여주지 않습니다.
위 수치는 더미데이터 자가채점이며, 넣을 키워드가 실제로 노출과 주문을 늘리는지는 하이픽셀 팔다 셀러의 실제 상품과 키워드 검색수, 상품명을 바꾼 뒤의 유입 기록이 있어야 측정됩니다. 실제 셀러 상품과 키워드 도구 값을 두 표에 담으면 같은 화면이 그대로 열리도록 형식을 맞춰 둡니다.
480쌍의 정답 판정은 상품을 팔아 본 셀러가 아니라 제가 붙였으므로, 자동 판정과 맞는 수가 늘어도 그 키워드로 주문이 느는지는 알 수 없습니다. 시연에서 보여줄 수 있는 것은 검색수가 비어 있는 린넨 와이드 7부나 경쟁 강도 4위에 걸친 여자 와이드 슬랙스가 어느 묶음으로 가는지까지입니다.
후보 키워드를 짧은 일반어와 긴 세부어로만 깔끔하게 나눠 지으면 검색수만 봐도 판정이 갈려, 규칙 하나가 틀려도 드러나지 않습니다. 바지 카테고리 후보 12개 안에 검색수가 비어 있는 린넨 와이드 7부, 상품명과 띄어쓰기만 다른 린넨 팬츠, 경쟁 강도 차이가 0.15 인 냉장고바지와 여자 와이드 슬랙스, 검색수 6,200회인데 원단 손님이 찾는 린넨 원단을 함께 두어 규칙이 어긋나면 그 키워드의 묶음이 바로 바뀌게 했습니다.
경쟁 강도는 상품 수를 검색수로 나눈 단순 비율이라 실제 검색 순위를 정하는 판매 실적·리뷰·광고는 담지 않습니다. 판정은 상품명 후보를 좁히는 데서 멈추고, 경쟁이 많은 말을 광고로 밀어붙일지는 셀러가 정합니다.
월 검색수는 한 달 값이라 계절을 탑니다. 린넨처럼 여름에 몰리는 말은 겨울에 받은 표로 판정하면 검색이 거의 없음으로 떨어질 수 있어, 기준 달을 화면에 함께 적고 계절 보정은 실데이터를 본 뒤 정할 도입 과제로 둡니다.
포함 검사는 띄어쓰기만 지우고 낱말 순서는 보지 않습니다. 상품명 「여성 린넨팬츠 밴딩 와이드 9부」처럼 린넨·팬츠·와이드가 흩어져 든 이름에도 「린넨 와이드팬츠」가 넣을 키워드로 올라옵니다. 낱말 단위 겹침까지 이미 있음으로 볼지는 셀러가 실제로 상품명을 어떻게 짓는지 본 뒤 정할 도입 과제로 둡니다.
① 인라인 샘플 · ② seed.json 다운로드 · ③ 증강 프롬프트. 세 층 모두 동일한 schema 에서 파생.
팔다에 스토어를 연결한 셀러의 상품 목록입니다. 상품 하나에 한 줄이고, 상품명은 지금 스마트스토어에 쓰는 그대로입니다. 키워드와 띄어쓰기만 다른 상품명을 일부러 담았습니다.
| product_id | product_name | category_id |
|---|---|---|
| P-2401 | 여성 린넨팬츠 밴딩 와이드 9부 | 50000836 |
| P-2402 | 여성 하이웨스트 세미와이드 슬랙스 | 50000836 |
| P-2403 | 린넨 셔츠 원피스 롱 여름 | 50000805 |
| P-2404 | 여성 코튼 조거팬츠 데일리 | 50000836 |
| P-2405 | 여름 플리츠 롱원피스 쉬폰 | 50000805 |
아래 JSON Schema 에 맞는 스마트스토어 셀러 상품 행을 더 만들어 주세요. {"type":"object","properties":{"product_id":{"type":"string","description":"팔다에 연결된 셀러 스토어의 상품 번호입니다."},"product_name":{"type":"string","description":"지금 스마트스토어에 올라 있거나 올릴 예정인 상품명입니다."},"category_id":{"type":"string","description":"스마트스토어 상품 카테고리 번호입니다."}},"required":["product_id","product_name","category_id"]} 셀러 한 명의 상품을 10~40개 만들고, 카테고리는 두세 개에 몰리게 합니다. 상품명은 실제 셀러처럼 성별·소재·핏·길이·계절 말을 띄어쓰기 섞어 이어 붙인 15~40자로 씁니다. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) 후보 키워드와 띄어쓰기만 다른 말이 들어간 상품명, (2) 같은 말이 두 번 들어간 상품명, (3) 카테고리 이름과 상품명이 어긋나 보이는 상품. 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"product_id":{"type":"string","description":"팔다에 연결된 셀러 스토어의 상품 번호입니다."},"product_name":{"type":"string","description":"지금 스마트스토어에 올라 있거나 올릴 예정인 상품명입니다."},"category_id":{"type":"string","description":"스마트스토어 상품 카테고리 번호입니다."}},"required":["product_id","product_name","category_id"]}상품 카테고리마다 모은 후보 키워드와 그 검색 통계입니다. monthly_search 는 키워드 도구의 최근 한 달 PC·모바일 검색수 합이고, 도구가 10 미만으로만 알려 주는 키워드는 null 입니다. product_count 와 top_category_id 는 그 키워드로 쇼핑 검색했을 때의 상품 수와 상위 상품이 가장 많이 속한 카테고리입니다. 값은 실제 도구 화면을 본떠 작성자가 만든 더미입니다.
| keyword_no | keyword | category_id | monthly_search | product_count | top_category_id |
|---|---|---|---|---|---|
| KW-0101 | 린넨 와이드팬츠 | 50000836 | 18,400 | 9,120 | 50000836 |
| KW-0102 | 와이드팬츠 | 50000836 | 52,000 | 1,280,000 | 50000836 |
| KW-0103 | 린넨 밴딩바지 7부 | 50000836 | 90 | 210 | 50000836 |
| KW-0104 | 린넨 원단 | 50000836 | 6,200 | 48,000 | 50000167 |
| KW-0105 | 여름 린넨바지 | 50000836 | 14,800 | 31,500 | 50000836 |
아래 JSON Schema 에 맞는 카테고리별 후보 키워드 행을 더 만들어 주세요. {"type":"object","properties":{"keyword_no":{"type":"string","description":"후보 키워드 번호입니다."},"keyword":{"type":"string","description":"후보 키워드 원문입니다. 띄어쓰기는 키워드 도구가 준 그대로 둡니다."},"category_id":{"type":"string","description":"이 키워드를 후보로 모은 상품 카테고리입니다."},"monthly_search":{"type":["integer","null"],"minimum":10,"description":"최근 한 달 PC·모바일 검색수 합입니다. 키워드 도구가 10 미만으로만 알려 주면 null 입니다."},"product_count":{"type":"integer","minimum":0,"description":"그 키워드로 쇼핑 검색했을 때 나오는 상품 수입니다."},"top_category_id":{"type":"string","description":"그 키워드 검색 결과 상위 상품이 가장 많이 속한 카테고리 번호입니다."}},"required":["keyword_no","keyword","category_id","monthly_search","product_count","top_category_id"]} 카테고리 하나에 후보 10~30개를 만들고, 짧은 일반어(검색수 수만·상품 수 수십만~수백만)와 긴 세부어(검색수 수십~수천·상품 수 수백~수만)를 섞습니다. 쉬운 데이터만 만들지 말 것 — 다음 하드 케이스를 의도적으로 섞어라: (1) monthly_search 가 null 인 키워드, (2) 검색수는 넉넉한데 top_category_id 가 다른 카테고리인 키워드(원단·부자재·수선 같은 말), (3) 경쟁 강도가 상위 20% 문턱 바로 위와 바로 밑에 붙어 있는 두 키워드, (4) product_count 가 검색수보다 작은 키워드. 생성한 행은 위 스키마를 통과해야 하며, 형식을 깨뜨리는 시도는 별도로 3건만 표시해 두세요.{"type":"object","properties":{"keyword_no":{"type":"string","description":"후보 키워드 번호입니다."},"keyword":{"type":"string","description":"후보 키워드 원문입니다. 띄어쓰기는 키워드 도구가 준 그대로 둡니다."},"category_id":{"type":"string","description":"이 키워드를 후보로 모은 상품 카테고리입니다."},"monthly_search":{"type":["integer","null"],"minimum":10,"description":"최근 한 달 PC·모바일 검색수 합입니다. 키워드 도구가 10 미만으로만 알려 주면 null 입니다."},"product_count":{"type":"integer","minimum":0,"description":"그 키워드로 쇼핑 검색했을 때 나오는 상품 수입니다."},"top_category_id":{"type":"string","description":"그 키워드 검색 결과 상위 상품이 가장 많이 속한 카테고리 번호입니다."}},"required":["keyword_no","keyword","category_id","monthly_search","product_count","top_category_id"]}| TypeScript | 카테고리 중앙값, 경쟁 강도 순위, 띄어쓰기 지운 포함 검사, 판정 차례를 담은 규칙 엔진과 화면 코드의 언어입니다. |
| Node.js | 두 CSV 를 받아 판정을 내주는 API 서버입니다. 2주차부터는 같은 코드를 AWS Lambda 핸들러로 감쌉니다. |
| AWS Lambda | 2주차부터 판정 API 와 키워드 검색수 불러오기 함수를 AWS Lambda 에 배포해 운영합니다. |
| PostgreSQL | 셀러 상품, 후보 키워드, 판정 결과, 3주차 상품명 초안과 셀러 선택 기록을 담습니다. |
| React | 상품 하나를 고르면 판정별 키워드 묶음과 키워드 펼침, 3주차 상품명 초안 카드를 그립니다. |
| Claude Code | 규칙 엔진·Lambda 함수·화면 작업을 나눠 맡기고, 정답 판정 대조를 통과한 코드만 배포합니다. |
| Claude Sonnet | 3주차에 셀러가 고른 키워드로 상품명 초안 세 개를 씁니다. |
✗ fail → 셀러가 빼고 싶은 말과 판정이 다르면 다른 카테고리를 검색 거의 없음보다 앞에 둔 차례를 다시 시험하고, 두 사유가 겹친 키워드는 펼침에서 둘 다 보이게 합니다.
✓ pass → 검색량 불러오기 Lambda 와 480쌍 정답 대조로 2주차를 엽니다.
✗ fail → 어긋난 쌍만 모아 10% 문턱과 상위 20% 문턱을 다시 봅니다.
✓ pass → 3주차 상품명 초안과 셀러 선택 기록으로 넘어갑니다.
위 예측 UI 는 3주차까지 완주했을 때의 화면입니다. 1주차에 실제로 만드는 것은 아래 표시된 화면 하나입니다.
verdict사유 라벨 · keyword_no + 한 줄 요약(근거 수치 포함)화면·코드·면접에서 이 단어를 그대로 씁니다. 키는 출력 스키마의 enum 과 같습니다.
상품명에 넣을 키워드넣을 키워드경쟁 상품이 너무 많음경쟁 많음검색이 거의 없음검색 거의 없음다른 카테고리 검색어다른 카테고리이미 상품명에 있음이미 들어감상품과 후보 키워드 한 쌍이 띄어쓰기 지운 포함 검사, 카테고리 비교, 검색수 중앙값 견줌, 경쟁 강도 순위를 거쳐 어떤 판정을 받는지 남기는 형식입니다. 넣을지 뺄지는 중앙값과 순위가 정하고, 3주차 상품명 초안 문장만 모델이 짓습니다.
{"type":"object","properties":{"product_id":{"type":"string"},"keyword_no":{"type":"string"},"keyword":{"type":"string"},"verdict":{"type":"string","enum":["상품명에 넣을 키워드","검색이 거의 없음","경쟁 상품이 너무 많음","이미 상품명에 있음","다른 카테고리 검색어"]},"category_id":{"type":"string"},"monthly_search":{"type":["integer","null"]},"product_count":{"type":"integer","minimum":0},"top_category_id":{"type":"string"},"category_median_search":{"type":"number","minimum":0,"description":"같은 category_id 후보 키워드 가운데 monthly_search 가 null 이 아닌 것들의 중앙값입니다."},"low_search_cutoff":{"type":"number","minimum":0,"description":"category_median_search × 0.1 입니다. monthly_search 가 이보다 작거나 null 이면 검색이 거의 없음입니다."},"competition_ratio":{"type":["number","null"],"minimum":0,"description":"product_count / monthly_search 를 소수 둘째 자리로 반올림한 경쟁 강도입니다. monthly_search 가 null 이면 null 입니다."},"competition_rank":{"type":["integer","null"],"minimum":1,"description":"같은 category_id 후보 가운데 경쟁 강도가 높은 순서입니다. 반올림 전 값으로 셉니다."},"competition_top_n":{"type":"integer","minimum":1,"description":"ranked_keyword_count × 0.2 를 올림한 값입니다. competition_rank 가 이 값 이하면 상위 20% 입니다."},"ranked_keyword_count":{"type":"integer","minimum":1,"description":"경쟁 강도를 셀 수 있는(monthly_search 가 null 이 아닌) 같은 카테고리 후보 수입니다."},"evidence":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"agg":{"type":["string","null"]},"value":{}},"required":["field","value"]}},"summary":{"type":"string"},"hedge":{"type":["string","null"]}},"required":["product_id","keyword_no","keyword","verdict","category_id","monthly_search","product_count","top_category_id","category_median_search","low_search_cutoff","competition_ratio","competition_rank","competition_top_n","ranked_keyword_count","evidence","summary"]}[
{
"product_id": "P-2401",
"keyword_no": "KW-0101",
"keyword": "린넨 와이드팬츠",
"verdict": "상품명에 넣을 키워드",
"category_id": "50000836",
"monthly_search": 18400,
"product_count": 9120,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 0.5,
"competition_rank": 11,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 18400
},
{
"field": "product_count",
"value": 9120
},
{
"field": "top_category_id",
"value": "50000836"
}
],
"summary": "린넨 와이드팬츠는 월 검색 18,400회에 경쟁 상품 9,120개로, 검색 한 번당 경쟁 상품이 0.5개뿐이라 상품명에 넣을 키워드입니다.",
"hedge": "상품명에 린넨·팬츠·와이드가 이미 흩어져 들어 있어 넣으면 같은 낱말이 되풀이됩니다. 포함 검사는 띄어쓰기만 지우고 낱말 순서는 보지 않아 넣을 키워드로 남았습니다."
},
{
"product_id": "P-2401",
"keyword_no": "KW-0107",
"keyword": "여자 와이드 슬랙스",
"verdict": "상품명에 넣을 키워드",
"category_id": "50000836",
"monthly_search": 9800,
"product_count": 156000,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 15.92,
"competition_rank": 4,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 9800
},
{
"field": "product_count",
"value": 156000
},
{
"field": "keyword_no",
"value": "KW-0108"
}
],
"summary": "여자 와이드 슬랙스는 월 검색 9,800회로 카테고리 중앙값과 같고, 경쟁 강도 15.92 는 후보 11개 중 4위라 상위 3개에 들지 않아 넣을 키워드로 남았습니다.",
"hedge": "3위 냉장고바지(16.07)와 차이가 0.15 뿐이라, 경쟁 상품 수가 조금만 늘어도 경쟁이 많은 쪽으로 넘어갈 수 있습니다."
},
{
"product_id": "P-2401",
"keyword_no": "KW-0102",
"keyword": "와이드팬츠",
"verdict": "경쟁 상품이 너무 많음",
"category_id": "50000836",
"monthly_search": 52000,
"product_count": 1280000,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 24.62,
"competition_rank": 2,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 52000
},
{
"field": "product_count",
"value": 1280000
}
],
"summary": "와이드팬츠는 월 검색 52,000회로 많지만 경쟁 상품이 1,280,000개라 검색 한 번당 24.62개가 겨루고, 후보 11개 중 경쟁 강도 2위입니다.",
"hedge": null
},
{
"product_id": "P-2401",
"keyword_no": "KW-0103",
"keyword": "린넨 밴딩바지 7부",
"verdict": "검색이 거의 없음",
"category_id": "50000836",
"monthly_search": 90,
"product_count": 210,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 2.33,
"competition_rank": 9,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 90
},
{
"field": "product_count",
"value": 210
},
{
"field": "monthly_search",
"agg": "count",
"value": 11
}
],
"summary": "린넨 밴딩바지 7부는 월 검색이 90회로, 바지 카테고리 후보 키워드 중앙값 9,800회의 10%(980회)에 크게 못 미칩니다.",
"hedge": null
},
{
"product_id": "P-2401",
"keyword_no": "KW-0112",
"keyword": "린넨 와이드 7부",
"verdict": "검색이 거의 없음",
"category_id": "50000836",
"monthly_search": null,
"product_count": 64,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": null,
"competition_rank": null,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": null
},
{
"field": "product_count",
"value": 64
},
{
"field": "keyword_no",
"value": "KW-0112"
}
],
"summary": "린넨 와이드 7부는 키워드 도구가 월 검색수를 10 미만으로만 알려 줘 숫자가 비어 있고, 검색이 거의 없는 키워드로 셌습니다.",
"hedge": "monthly_search 가 null 이라 중앙값 계산과 경쟁 강도 순위에서 뺐습니다. 경쟁 상품이 64개뿐이어도 찾는 사람이 거의 없으면 상품명 자리만 차지합니다."
},
{
"product_id": "P-2401",
"keyword_no": "KW-0104",
"keyword": "린넨 원단",
"verdict": "다른 카테고리 검색어",
"category_id": "50000836",
"monthly_search": 6200,
"product_count": 48000,
"top_category_id": "50000167",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 7.74,
"competition_rank": 5,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 6200
},
{
"field": "product_count",
"value": 48000
},
{
"field": "top_category_id",
"value": "50000167"
},
{
"field": "category_id",
"value": "50000836"
}
],
"summary": "린넨 원단은 검색 결과 상위 상품이 가장 많이 속한 카테고리가 생활/건강>수예(50000167)라, 이 검색어로 찾는 사람은 바지가 아니라 원단을 삽니다.",
"hedge": "월 검색 6,200회로 적지 않지만 카테고리가 달라 넣을 키워드에서 뺐습니다."
},
{
"product_id": "P-2401",
"keyword_no": "KW-0110",
"keyword": "린넨 팬츠",
"verdict": "이미 상품명에 있음",
"category_id": "50000836",
"monthly_search": 7600,
"product_count": 22000,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 2.89,
"competition_rank": 7,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 7600
},
{
"field": "product_count",
"value": 22000
},
{
"field": "product_name",
"value": "여성 린넨팬츠 밴딩 와이드 9부"
}
],
"summary": "린넨 팬츠는 띄어쓰기를 빼고 보면 상품명 「여성 린넨팬츠 밴딩 와이드 9부」에 이미 들어 있습니다.",
"hedge": "키워드와 상품명의 띄어쓰기가 달라도 같은 말로 봅니다. 상품명에 같은 말을 두 번 넣지 않게 이 키워드는 추천에서 뺍니다."
},
{
"product_id": "P-2406",
"keyword_no": "KW-0101",
"keyword": "린넨 와이드팬츠",
"verdict": "이미 상품명에 있음",
"category_id": "50000836",
"monthly_search": 18400,
"product_count": 9120,
"top_category_id": "50000836",
"category_median_search": 9800,
"low_search_cutoff": 980,
"competition_ratio": 0.5,
"competition_rank": 11,
"competition_top_n": 3,
"ranked_keyword_count": 11,
"evidence": [
{
"field": "monthly_search",
"value": 18400
},
{
"field": "product_count",
"value": 9120
},
{
"field": "product_name",
"value": "여성 린넨와이드팬츠 9부"
}
],
"summary": "린넨 와이드팬츠는 띄어쓰기를 빼면 상품명 「여성 린넨와이드팬츠 9부」에 그대로 있어, P-2401 에서는 넣을 키워드였지만 이 상품에서는 이미 들어간 키워드입니다.",
"hedge": null
}
][자동 검증 · 코드가 판정합니다] 1. verdict 가 상품명에 넣을 키워드·검색이 거의 없음·경쟁 상품이 너무 많음·이미 상품명에 있음·다른 카테고리 검색어 다섯 값 중 하나인지 확인합니다. 2. product_id·keyword_no·keyword·verdict·category_id·monthly_search·product_count·top_category_id·category_median_search·low_search_cutoff·competition_ratio·competition_rank·competition_top_n·ranked_keyword_count·evidence·summary 필드가 빠짐없이 있는지 확인합니다. 3. product_count·category_median_search·low_search_cutoff·competition_ratio 가 0 이상이고 competition_rank 가 ranked_keyword_count 이하인지 확인합니다. 4. category_median_search 를 같은 category_id 후보의 monthly_search 중앙값으로, competition_ratio 를 product_count / monthly_search 로, competition_rank 와 competition_top_n 을 같은 카테고리 후보 순위로 다시 계산합니다. 5. keyword 의 띄어쓰기를 지운 문자열이 product_name 의 띄어쓰기를 지운 문자열 안에 있으면 verdict 는 이미 상품명에 있음입니다. 6. 앞 조건에 걸리지 않고 top_category_id 가 seller_products.category_id 와 다르면 verdict 는 다른 카테고리 검색어입니다. 7. 앞 두 조건에 걸리지 않고 monthly_search 가 null 이거나 monthly_search × 10 이 category_median_search 보다 작으면 verdict 는 검색이 거의 없음입니다. 8. 앞 세 조건에 걸리지 않고 competition_rank 가 competition_top_n 이하이면 verdict 는 경쟁 상품이 너무 많음이고, 그렇지 않으면 상품명에 넣을 키워드입니다. 9. evidence 의 field 이름이 seller_products·keyword_stats 에 있는 컬럼인지 대조합니다. 10. evidence 의 value 가 수록된 행의 원문 값과 같은지 확인합니다. 여러 줄을 세어 얻은 수는 agg 를 적습니다. 11. summary 가 존댓말로 끝나는지 확인합니다. [판정 차례 · 위 규칙이 둘 이상 동시에 걸릴 때] 상품과 키워드 한 쌍에는 판정을 하나만 남깁니다. ① 이미 상품명에 있음 → ② 다른 카테고리 검색어 → ③ 검색이 거의 없음 → ④ 경쟁 상품이 너무 많음 → ⑤ 상품명에 넣을 키워드. 셀러가 이미 쓴 말과 엉뚱한 손님을 부르는 말을 먼저 빼고, 남은 말을 검색량과 경쟁 강도로 고릅니다. 중앙값과 경쟁 순위는 상품이 아니라 카테고리 단위로 한 번 계산해, 같은 카테고리 상품들이 같은 기준을 씁니다. [하드 케이스 · 판정이 갈리는 이유] KW-0112 는 monthly_search 가 null 인 결측이라 중앙값과 경쟁 순위 계산에서 빼고 검색이 거의 없음으로 셉니다. KW-0110 「린넨 팬츠」와 KW-0101 「린넨 와이드팬츠」는 상품명과 띄어쓰기만 달라 지운 뒤 견주면 이미 상품명에 있음입니다. KW-0107 은 경쟁 강도 15.92 로 4위이고 3위 KW-0108 은 16.07 이라, 상위 20% 문턱(11개 중 3개) 바로 밑에서 갈립니다. KW-0104 는 검색량이 넉넉해도 top_category_id 가 달라 다른 카테고리 검색어입니다. [평가 러너 · 2주차] 더미 셀러 세 명의 상품 30개와 후보 키워드를 묶은 480쌍에 손으로 매긴 정답 판정과 자동 판정을 대조해 판정별 일치율을 내고, 어긋난 쌍은 따로 모아 10% 문턱과 상위 20% 문턱을 다시 봅니다. [수동 검증 · 사람이 봅니다] 1. 넣을 키워드로 나온 말이 실제 상품과 맞는 말인지(린넨이 아닌 바지에 린넨을 붙이지 않는지)는 셀러가 판단합니다. 2. 경쟁이 많은 키워드라도 광고로 밀어붙일지는 셀러가 정합니다.