니치 맵: 개념적 공간의 공백
이 스킬은 도메인에서 타당한 공백을 찾습니다. 모호한 환경을 실제 아이템 × 명시적 차원 테이블로 변환하고, 아무도 차지하지 않은 조합과 영역을 찾아 구체적인 아이디어로 변환한 후 그것이 신기루가 아님을 확인합니다.
기본 원칙. 숫자는 판단을 조직화할 뿐 대체하지 않습니다. 코드는 분석가의 결정이므로, 공간은 시장만큼이나 루브릭을 반영합니다. 그렇기 때문에 제안된 모든 공백은 코드의 신뢰성 검사(2b단계)와 외부 검증(6단계)을 통과해야 합니다.
이 저장소의 도구
| 파일 | 역할 |
|---|---|
niche_core.py | 3-4단계: 인코딩, 클러스터, PCA, UMAP, 트리플 갭, 밀도 갭, 후보 이웃, 공급 대 수요, 그림 |
recode_check.py | 2b단계: 블라인드 재코딩 샘플 시트 및 차원별 일치도(Cohen's kappa) |
md_to_pdf.py | 7단계: Markdown 보고서를 PDF로 변환 |
templates/report_template.md | 7단계: 보고서 골격 |
examples/ | 전체 파이프라인을 종단간 테스트하기 위한 합성, 가상 데이터셋 |
0. 입력 및 범위 설정 질문
시작하기 전에 이러한 답변을 얻으십시오. 누락된 항목이 있으면 한 번에 한 블록으로 질문하십시오.
| 입력 | 질문 | 중요성 |
|---|---|---|
| 주제 및 경계 | 무엇이 아이템으로 간주됩니까? (예: "핵심 가치가 X인 도구") | 혼합된 카테고리와 갭 아티팩트를 방지합니다. |
| N | 아이템 수는? (기본 80-100; 유용한 최소 ≈ 50) | N < 50이면 트리플 카운트가 노이즈입니다. |
| 포함 기준 | 최소 수신, 가용성, 플랫폼, 언어, 날짜 | 1단계에서 적용하고 문서화합니다. |
| 대상 사용자 | 결과물을 만들거나 구매할 사람은 누구입니까? | 적합도 점수 및 target_filter의 기초입니다. |
| 제약 조건 | 예산, 시간, 기술, 판매 채널, 제외 주제 | target_filter 및 적합 기준이 됩니다. |
| 결과물 | 언어, 통화(및 환율 출처), 형식 | 기본값: 순위, 니치 카드, 지도 및 링크가 포함된 전체 코퍼스 테이블이 있는 PDF. |
1. 코퍼스: N개의 실제 검증된 아이템
- 광범위한 시드. 다양한 출처(도메인 스토어 또는 디렉토리, "최고" 목록, "X 대안" 검색 및 최근 롱테일 출시(런칭 사이트, 니치 디렉토리, 오픈소스 레지스트리))에서 약 1.3 × N개의 후보를 수집합니다. 유명한 제품만 포함되면 나중에 잘못된 공백이 나타납니다.
- 아이템별 존재 확인. 각 아이템에는 해결되는 URL(스토어 페이지, 가격 페이지 또는 리포지토리)이 필요합니다. HTTP 상태, 최종 URL 및 날짜를 기록합니다. 사이트가 봇을 차단하는 경우(403), 도메인 루트를 확인하거나 브라우저를 사용하십시오. 차단이 아이템이 존재하지 않음을 의미하지는 않습니다.
- 수신 신호. 하나 이상의 공개 신호(스토어 평점 및 리뷰 수, 런칭 사이트 투표, 리포지토리 별, 설치 수, 수상 내역)를 기록하고 각각의 출처와 범위를 선언합니다. 신호가 없다고 해서 아이템을 버리지 마십시오. 수신이 포함 기준인 경우 명시적 임계값을 적용하십시오.
- 중복 제거 변형, 리브랜드, 에디션 및 지역 SKU. 정식 이름과 링크를 유지합니다.
- 경계별 제외 포함 기준에 실패한 아이템을 제외하고 이유와 함께 보고서에 나열합니다.
- 코퍼스 편향 검사(보고서에 답변 작성):
- 롱테일 아이템의 비율(예: 최근 24개월 이내 출시 또는 중앙값 수신 신호 미만). 약 20% 미만이면 더 많은 롱테일 아이템을 샘플링합니다.
- 출처 집중도: 단일 출처가 아이템의 약 40% 이상을 기여해서는 안 됩니다.
- 명시된 경계 대비 플랫폼 또는 언어 왜곡.
- 출처별 신호 커버리지(일부 출처는 특정 사용자 유형을 과대 대표함, 예: 코드 호스팅 사이트의 개발자 도구).
출력: items.csv, 식별 및 링크 열이 있는 아이템당 한 행, 확인 원시 JSON.
2. 차원, 척도 및 코딩 루브릭
- 8-15개 차원 도출 약 20개 아이템 샘플을 읽어서. 두 가지 유형으로 분할:
- 개념 차원은 아이템이 무엇인지: 동사 또는 행동, 입력, 출력, 트리거, 도메인 또는 주제, 사용자, 미학. 공백은 이러한
gap_dims로 검색됩니다. - 속성 차원은 어떻게 구축되거나 판매되는지: 복잡성, 범위, 셀프서비스, 가격 모델, 가격 등급. 필터링하고 점수를 매깁니다. 갭 검색에 사용되면 "이벤트 트리거 + AI 없음 + 높은 복잡성"과 같은 "메타" 갭을 생성합니다.
- 개념 차원은 아이템이 무엇인지: 동사 또는 행동, 입력, 출력, 트리거, 도메인 또는 주제, 사용자, 미학. 공백은 이러한
- 척도. 3-14개의 상호 배타적인 값을 가진 명목 범주, 각각 읽을 수 있는 레이블이 있거나 설명된 앵커가 있는 짧은 서열(0-1, 0-2, 1-3).
- 서면 루브릭: 값당 한 줄로 정의와 예제 아이템이 있고, 아래 결정 규칙이 있습니다. 보고서 부록에 포함되며 2b단계에서 두 번째 코더가 받는 유일한 자료입니다.
- 논리적 구조를 코딩하고 렌더링은 코딩하지 않습니다. 공간적 또는 구조적 차원의 경우 사용자가 실제로 상호 작용하거나 추론하는 방식을 코딩하고, 어떻게 보이는지가 아닙니다(예: 평평한 평면에서 사용되는 3D 렌더링 제품은 "3D"가 아닙니다).
- 겹치는 값에 대한 우선 순위 순서. 명목 척도가 지각적 또는 스타일적(외관, 어조, 스타일)인 것을 설명할 때 값이 겹칩니다. 명시적인 결정 순서를 제공하거나("A가 적용되면 A를 코딩하고, 그렇지 않으면 B...") 코더가 구분할 수 없는 값을 병합합니다.
- 서열에 대한 측정 가능한 앵커. 기간, 크기 또는 노력과 같은 앵커는 측정 방법과 출처를 명시해야 합니다(예: "스토어 설명에 명시되거나 데모 비디오에서 관찰된 일반적인 세션; 레벨 기반 아이템의 경우 한 레벨"). 관찰할 수 없으면 최빈 사례를 코딩하고 표시합니다.
- 기본 모드를 코딩합니다. 아이템이 모호하면 기본 모드를 코딩하고
notes열에 의문점을 기록합니다.
- 가중치. 기본값 1.0. 핵심 개념 차원(예: 동사 1.2)을 높이고 주변 차원(예: 가격 모델 0.4)을 낮춥니다. 각 가중치를 정당화합니다.
- 구조적 검사:
- 2개 미만의 아이템이 있는 범주 없음; 병합 또는 삭제(
niche_core.py가 경고). - 교차표를 사용하여 중복 차원(상관 관계 ≈ 1) 감지: 하나를 삭제하거나 병합합니다.
- 2개 미만의 아이템이 있는 범주 없음; 병합 또는 삭제(
- 한계 인정: 코드는 판단입니다.
출력: 아이템 × 차원 CSV 및 척도, 가중치 및 규칙이 있는 config.json.
2b. 블라인드 재코딩 검사 (필수)
목적: 루브릭이 코더의 기억이 아닌 코드를 결정하는지 측정합니다. 신뢰할 수 없는 차원에 구축된 공백은 루브릭 아티팩트입니다.
- 샘플. 고정 시드로 코퍼스의 10%, 최소 10개 아이템을 무작위로 추출:
python recode_check.py sample --items items.csv --config config.json --out recode_sheet.csv --keep link시트에는 아이템 ID와 링크만 포함되며 차원 열은 비어 있습니다. - 블라인드 두 번째 코더. 다른 사람 또는 첫 번째 코드를 본 적이 없는 별도의 에이전트 세션(
items.csv, 클러스터 또는 보고서에 액세스할 수 없음)이 서면 루브릭과 아이템의 공개 페이지만 사용하여 시트를 코딩합니다. 동일한 에이전트가 수행해야 하는 경우 새 컨텍스트를 시작하고 시트와 루브릭만 제공합니다. 비교하기 전에 결과를 잠급니다(예: 체크섬 저장). - 차원별 일치도:
python recode_check.py agree --items items.csv --config config.json --recode recode_sheet.csv --out agreement.csv- 범주형 차원: Cohen의 kappa (κ).
- 서열 차원: 선형 가중 Cohen의 kappa (κw), 근접 실수에 대해 부분 점수를 부여합니다.
- 원시 백분율 일치도는 함께 보고되며, 아이템별 불일치 목록이 제공됩니다.
- 임계값. 차원은 κ (또는 κw) ≥ 0.60 그리고 원시 일치도 ≥ 80%로 통과합니다. n ≈ 10에서 kappa는 노이즈가 있습니다: 분류에 사용하고 모든 불일치를 읽습니다.
- 임계값 미만인 경우, 다음 순서로:
- 불일치를 읽고 분류합니다: 루브릭 모호성(겹치는 값, 측정 불가능한 앵커), 렌더링 대 구조 혼동 또는 코더 오류.
- 2.3단계의 결정 규칙 중 하나로 루브릭을 수정합니다(우선 순위 순서, 측정 가능한 앵커, 구분할 수 없는 값 병합).
- 수정된 루브릭으로 전체 코퍼스에 대해 해당 차원을 재코딩한 다음 해당 차원에 대해 새로운 10% 샘플(새 시드)로 검사를 다시 실행합니다.
- 여전히 실패하면: 가중치 낮추기(≤ 0.6),
gap_dims에서 제거 또는 삭제. 설명하는 트리플이 두 번 실패한 차원에 의존하는 공백을 보고하지 마십시오.
- 보고서(차원, n, % 일치도, κ/κw, 상태) 테이블, 루브릭 변경 사항 및 두 번째 코더의 ID 유형(인간, 별도 에이전트)을 보고합니다.
일반적인 결과: 기능(행동, 목표, 입/출력, 트리거)에 관한 차원은 잘 일치합니다. 지각적 또는 추정된 차원(스타일, 공간 구조, 기간)이 일반적인 실패이며, 이것이 2.3단계의 결정 규칙이 존재하는 이유입니다.
3. 공간: 인코딩, 클러스터, 그래디언트 및 시각화
niche_core.py에 의해 수행됩니다. 황금 규칙: 클러스터와 갭은 원래 코딩된 공간에서 계산됩니다. UMAP은 그리기 전용입니다.
- 인코딩. 범주형 차원의 경우 One-hot × 가중치/√2, 서열의 경우 (x − min)/(max − min), 따라서 범주 전환 비용은 끝에서 끝까지 서열 이동과 동일합니다.
- 클러스터.
k_range내에서 실루엣으로 k를 선택하는 응집형 Ward. 더 큰 k는 실루엣이 0.005 이상 향상되는 경우에만 허용됩니다.- k-범위 검사: 선택한 k가 범위의 어느 가장자리에 있으면 범위를 넓히고 다시 실행하십시오. 스크립트가 경고합니다. 가장자리에 남아 있으면 해석 가능성으로 k를 선택하고 명시하십시오.
- 실루엣 0.15에서 0.30 사이는 범주형 데이터에서 정상입니다. "선명한 클러스터"로 판매하지 마십시오.
- 3개 미만의 아이템이 있는 클러스터와 동일한 벡터를 가진 아이템은 플래그가 지정됩니다. 후자는 아이템을 구별하기에는 루브릭이 너무 거칠다는 것을 암시합니다.
cluster_profiles.md에서 각 클러스터 이름을 수동으로 지정하고 이름을cluster_names에 저장합니다.
- 그래디언트. PCA 로딩(PC1-PC3,
pca_loadings.csv)은 "A에서 B로"의 축으로 읽습니다. - 시각화. KDE 밀도 배경이 있는 UMAP (n_neighbors 10-15, min_dist 0.25, 고정 시드). 한계:
- 전역 거리와 섬 크기는 아무 의미가 없습니다.
transform은 새 점을 가장 가까운 섬으로 끌어당기는 경향이 있으므로 후보의 참신함은 원래 공간의dist_min에서 읽혀지며 플롯에서 절대 읽지 않습니다.
- 쌍별 히트맵 차원은 빈 셀을 한눈에 보여줍니다.
4. 갭
4a. 조합 갭 (트리플). 갭(개념) 차원 값의 각 트리플에 대해 독립성 하에서 관찰된 것을 예상과 비교: e = N · p(a) · p(b) · p(c), z = (e − o)/√e. 트리플은 다음과 같은 경우 유지됩니다:
- o ≤
max_observed(기본값 1); - e ≥
min_expected(기본값 1.2); - 트리플의 모든 쌍이 최소
min_pair_support아이템(기본값 2)에 나타납니다: 조각이 별도로 존재합니다. - 최소 하나의 앵커 차원(
anchor_dims, 예: 도메인 또는 동사)을 건드립니다.
메타-갭 필터: 속성 차원을 gap_dims 밖에 유지하고 anchor_dims를 제품의 내용을 설명하는 차원으로 설정합니다. 속성으로만 만들어진 트리플은 니치가 아닙니다.
4b. 밀도 갭. 50,000-400,000개의 무작위 합성 벡터가 생성되고 다음과 같은 경우에만 유지됩니다:
- 값의 모든 쌍이 적어도 하나의 실제 아이템에 존재합니다(알려진 조각의 재조합);
- 일관성 규칙이 이를 금지하지 않습니다(
rules: 도메인에서 터무니없는 조합); - 대상 사용자 프로필(
target_filter, 예: 복잡성 ≤ 1 및 셀프서비스 = 1)과 일치합니다. 이것이 사용자 적합 필터입니다. 이것이 없으면 밀도 갭은 사용자가 구축하거나 판매할 수 없는 제품으로 표류합니다.
생존자는 가장 가까운 실제 아이템까지의 거리로 순위가 매겨지고 주요 개념 차원에서 중복 제거됩니다(density_dedupe). 별개의 실제 아이템 간의 중앙값 최근접 이웃 거리(median_nn_distance)와 비교합니다.
4c. 공급 대 수요 (선택 사항). 클러스터별: 아이템 수(공급) 대 수요 신호(리뷰, 설치, 검색량, 별)의 중앙값, 항상 그 커버리지(supply_demand_clusters.csv)와 함께. 높은 수요를 가진 작은 클러스터는 갭 힌트입니다 (추론).
4d. 예비 점수. 참신성(1-5, 상대적 거리 및 갭을 설명하는 트리플에서), 실행 가능성(1-5, 사용자 리소스를 사용한 MVP 노력) 및 적합성(1-5, 0단계의 선호도 및 제약 조건). 각 후보에 대해 candidates에 추가하고 다시 실행하여 가장 가까운 이웃 3개를 확인합니다.
5. 의미론적 변환: 벡터에서 아이디어로
가장 높은 z의 트리플과 가장 먼 밀도 갭에서 8-12개의 후보를 선택합니다. 신호를 병합하고 중복을 제거합니다. 각 후보는 다음을 얻습니다:
- 작업 이름 및 2-3문장 구체적인 피치: 사용자가 무엇을 하고, 제품이 무엇을 제공하는지.
- 모든 차원의 벡터; 규칙을 충족해야 함.
- 가장 가까운 아이템 거리 포함 (× 중앙값).
- 코퍼스에서 비어 보이는 이유: 어떤 트리플 또는 영역이 이를 설명하는지, 그리고 그 차원 중 하나라도 2b단계에서 실패했는지 여부.
- 위험: 기술적, 시장 및 적합성.
6. 외부 검증 및 미라지 테스트
-
후보당 타겟 검색, 코퍼스 외부:
- "[개념] + 앱/도구 + 가격";
- "[개념] 대안";
- 2-3개 동의어가 있는 도메인 스토어;
- 오픈소스 리포지토리.
링크와 가격이 포함된 3-5개의 경쟁자를 기록합니다. 일부는 거의 항상 나타날 것이라고 가정하십시오: N ≈ 100의 코퍼스는 롱테일을 다루지 않습니다. 그에 따라 참신성을 조정합니다.
-
미라지 테스트 (white-space-analysis에서 채택, 참고 자료 참조). 후보는 네 가지 질문에 직면합니다:
- 크기: 이 작업을 수행해야 하는 충분한 사람들이 있습니까?
- 지불 또는 전환 의향: 가장 강력한 증거에서 가장 약한 증거로, 그들은 이미 부분 솔루션에 비용을 지불하고, 값비싼 해결 방법을 유지하거나, 직접 구축하려고 시도했습니다.
- 기존 업체 질문: 왜 아무도 그것을 채우지 않았습니까? 수용 가능한 답변: 비즈니스 모델 또는 채널 충돌, 최근 외부 변화, 성장하는 세그먼트. 놀라운 답변: "이유를 찾을 수 없습니다".
- 승리 가능성: 대상 사용자가 갭을 비워두는 장벽을 극복할 수 있습니까?
평결: 통과(계수 1.0), 의심스러움(0.7) 또는 실패(0.4).
-
최종 점수 = 참신성 × 실행 가능성 × 적합성 × 미라지 계수 (범위 0.4-125).
-
검증에서 실패한 후보는 "거짓 갭"으로 보고서에 남습니다. 그들은 코퍼스 편향을 노출시키고
…
[번역을 위해 잘림]