Semantic Layout 49 유형 · 계통 · 유사도 · 수요/공급

49개 내용 시각화 유형을 형질(trait)로 코딩해 계통을 세우고, 어떻게 구분하고 무엇으로 대체하며 어디에 공급 구멍이 있는지 종합한다. 발표·공유용 한 세트.

Part 0 · 계통도 — 각 유형은 어떤 형질을 물려받는가

아래에서 위로 읽는다. 뿌리(공동조상)에서 가지가 갈릴 때마다 그 가지가 새로 얻는 형질(공유파생형질)을 세로로 적었다. 같은 가지에 달린 잎은 그 형질을 함께 물려받는다. 점 크기 = 유저 수요, 색 = 진한 파랑은 수요가 높고 공급이 부족한 유형, 회색은 공급 과잉, 연회색은 보통.

계통이 말하는 것 (흔한 오해 교정)

List는 Steps의 조상이 아니다. 둘의 공통 조상은 정보 단위 2개 이상이고, 거기서 List는 동등 병렬 가지로, Steps는 순서 의존 가지로 갈라진다. 형질 거리도 List↔Steps = 0.67(사촌), Steps↔Cycle = 0.33(형제)로 이를 뒷받침한다.

분석 방법과 환경

어떻게 계통을 세웠나

각 유형을 27개 형질(정보 단위 수, 순서 의존, 시간축, 페이지 역할 …)의 0/1/2 값 벡터로 코딩했다. 두 유형 사이 거리는 가중 Jaccard(1 − 겹침/합집합). 가지는 공유파생형질로 정의하고 UPGMA 군집으로 교차 확인했다. 텍스트 임베딩은 계통을 만드는 데 쓰지 않고 검증(Mantel)에만 썼다.

데이터 소스

수요 = 유저 입력 분류 7,168건. 공급 = 프로덕션 design_object 최종 저장 태그(data_version 2.2, 173,786 태그, 49/49 유형 관측). 정의·경계 = 시멘틱 단어장 v7. 운영 혼동 = 태깅 rule 리맵 로그 + judge FAIL 1,899행.

Part 1 · 유사도 — 무엇이 비슷하고, 어떻게 구분하고 대체하는가

1-1. 어떤 것들이 비슷한가 (형질 거리)

거리 = 1 − 가중 Jaccard. 0에 가까울수록 같은 것이다. 계통에서 “형제”인 쌍이 그대로 작은 거리로 나타난다.

49 × 49 전체 거리 행렬 (2,401칸)

행·열은 계통 순서로 정렬했다. 진한 칸일수록 가깝다. 굵은 선은 계통상 clade 경계다. 대각선 블록이 진하게 뭉쳐 보이면 그 clade가 내부적으로 잘 묶였다는 뜻이고, 블록 밖의 진한 칸은 clade를 건너뛴 유사(예: TableOfContents ↔ List)다. 칸에 마우스를 올리면 정확한 값이 나온다.

1-2. 49개를 어떻게 가르는가 (판단 순서도)

먼저 큰 의미 갈래를 고른 뒤, 오른쪽의 내부 판별 질문을 계속 따라가면 유형 하나에 도달한다. 비교 유형 7종과 순서 흐름 6종(Cycle·Staircase·Funnel·FlowChart·Transformation·Steps)도 각각 별도 조건과 별도 종착 상자를 가진다. Steps는 “기본값”이 아니라, 시간축도 없고 순환·상승·전환·분기·전후대비도 아닌 일반 단계 순서일 때의 답이다. 모든 종착 상자는 한 유형만 포함하며, 전체 종착 상자는 정확히 49개다.

1-3. 폴백 정책 — A에 후보가 없으면 B → C → D

순서는 형질 거리(대체 품질)가 정하고, 공급량은 “다음 단계로 넘어갈지”만 정한다. L0 요청 그대로 → L1 형제(거리 ≤ 0.55) → L2(거리 ≤ 0.75) → L3 List 최후 → L4 태그 없는 후보(현행 유지). 아래는 49개 전 유형을 이름 오름차순으로 정렬했다. 이름 뒤 * 는 List 폴백 금지 유형이다.

체인 순서를 정한 근거

1) 같은 계통 갈래(clade)를 먼저 고른다. 2) 그 안에서는 27개 형질의 가중 Jaccard 거리가 가까운 순으로 놓는다. 3) 같은 거리라면 요청의 지배 형질(시간축·비율·위계 등)을 더 오래 보존하는 후보를 앞에 둔다. 4) 페이지 역할·단일 메시지·인물·KPI 11종은 List를 제외한다. 공급량은 체인 순서를 바꾸지 않고, 후보가 충분해져 탐색을 멈출 시점에만 사용한다.

List 최후 폴백 금지 (11종)

. 페이지 역할·텍스트·인물·KPI라서 List 카드로 채우면 “후보가 있다”는 착각만 만든다. 운영 혼동 rule(LongForm·HighlightedMessage → List)을 폴백으로 복사하지 않는다.

Part 2 · 수요-공급 — 어디가 비었고 무엇부터 채우나

+42.2%p
List 공급 과잉
−14.6%p
ListingTable 부족
0.292
수요→공급 EMD
3
P0 확보 유형

2-1. 공급이 부족한 유형

아래는 49개 전 유형의 수요−공급이다. gap이 양수면 수요보다 공급이 모자란 것이고, 음수면 공급이 남는 것이다. 수요 합 99.2%, 공급 합 100%로 같은 척도다.

2-2. 폴백을 고려하면 무엇부터 확보해야 하나

폴백만으로 gap을 메우면 결국 List 의존이 커진다. 아래 P0는 폴백 말단이 List로 떨어지는 것을 막기 위해 먼저 확보해야 하는 유형이다.

폴백 시뮬레이션 — 체인을 따라가면 공급이 채워지는가
한 줄

ListingTable · Steps · ComparisonTable의 유효 컴포넌트를 늘리는 것이 EMD를 직접 낮춘다. List는 이미 과잉이라 추가 확보는 다양성을 역행시킨다.

Appendix · Phase 0–4 분석 상세

본문에서 요약한 수치의 원 산출물이다. 단계별로 접혀 있으니 필요한 것만 펼쳐 본다.

Phase 0 · 형질 사전과 코딩 규약 (27)

모든 분석의 출발점. 49 × 27 문자 행렬을 만들고, 각 칸에 0(없음) / 1(약함·부수적) / 2(정의적 특징)을 넣었다. 값 2는 “이 형질이 없으면 그 유형이 아니다”라는 뜻이다. 가중 Jaccard는 이 0/1/2를 그대로 쓴다: 거리 = 1 − Σmin(a,b) / Σmax(a,b).

코딩 원칙

형질은 “보이는 모양”이 아니라 의미상 필수 조건으로 정의한다. 예를 들어 GanttChart의 tabular는 1(부수적)이다. 표처럼 그려지지만 표 격자가 없어도 Gantt는 Gantt이기 때문이다.

Phase 1 · 거리·최근접·최적수송 (49)

형질 행렬에서 49 × 49 거리를 뽑고(Part 1-1 행렬), 각 유형의 최근접 3개를 확인해 계통이 상식과 어긋나지 않는지 봤다. 그다음 수요 분포를 공급 분포로 옮기는 최소 비용(EMD)을 계산해 “어떤 수요가 어디로 흡수되는가”를 봤다.

보정 쌍 — 사람이 먼저 기대치를 적고 계산과 맞춰봤다

최근접 3개 (전 49 유형)

최적수송 — 수요가 실제로 어디로 흘러가는가

총 이동 비용 EMD = 0.292. mass는 전체 수요 대비 비중, unit dist는 그 이동의 형질 거리다. 상위 5개 흐름이 전부 List로 향한다 — 이것이 “List 블랙홀”의 정량적 근거다.

Phase 2 · UPGMA 군집·쌍 분해·형질 판별력 (33)

계통을 손으로 그리기 전에 기계적으로도 묶어봤다. UPGMA는 가장 가까운 둘을 계속 합치는 방식이라, 합쳐진 순서(height가 낮을수록 먼저)가 곧 “얼마나 형제인가”다.

초기 병합 — 거의 같은 것들

height 0.00 쌍은 형질로 구분되지 않는다

PieChart ↔ DonutChart, SWOT ↔ Quadrant, SectionDivider ↔ Ending, Location ↔ Highlight, LineAreaChart ↔ ComboChart. 이들은 형질이 아니라 표현 규약으로만 갈린다. 분류기에 형질만 주면 이 쌍은 원리적으로 못 맞춘다 — 별도 규칙이 필요하다.

중간 병합 — clade가 형성되는 지점

주요 쌍의 거리 분해 — 정확히 어떤 형질이 둘을 가르는가

형질별 판별력 — 어떤 형질이 유형을 잘 쪼개는가

점수가 높을수록 그 형질 하나로 소수 유형을 정확히 집어낸다. 1개 유형만 가리키는 형질(long_form, qa, conversion …)은 순서도의 말단에, 여러 유형을 크게 가르는 형질(equal_parallel, multi_unit)은 앞쪽에 두는 근거가 된다.

Phase 3 · 교차검증 (Mantel · 경계 IG · 혼동 그래프)

여기까지는 사람이 정한 형질이므로 “내 마음대로 만든 것 아니냐”는 반론이 가능하다. 그래서 형질과 무관하게 만들어진 세 가지 다른 자료 — 단어장 정의문, 실제 태깅 사유, 운영 혼동 로그 — 와 얼마나 맞는지 검정했다.

Mantel 검정 — 두 거리 행렬이 같은 이야기를 하는가

텍스트는 TF-IDF 코사인 거리로 만들었다(어휘 4,000). 순열 499회로 유의성을 봤다. r은 −1~1이고, 이런 종류의 비교에서 0.4는 상당히 강한 일치다.

Procrustes — 지도를 겹쳐보면

형질 MDS와 텍스트 MDS를 회전·축척 정렬했을 때 잔차 0.993, 형질과 혼동은 1.702. 텍스트는 형질과 겹치지만 혼동은 겹치지 않는다. 같은 결론이 두 방법에서 나왔다.

경계 정보이득 — 사람이 실제로 쓰는 판별 단서

혼동이 잦은 쌍에 대해, 유저·태깅 사유 문장에서 어떤 형질 단서가 나올 때 A로 갈리는지 정보이득(IG)으로 측정했다. 형질 모델이 지목한 차이와 실제 판별 단서가 같으면 “일치”다.

List ↔ ListingTable 만 불일치

형질 모델은 tabular(표 격자) 하나로 가른다고 보지만, 실제 사유문에서는 표 격자보다 “대상 간 대조· 공통 기준” 단서가 더 강하게 나온다. 유저는 표를 비교하려고 쓰기 때문이다. 순서도에서 이 경계를 물을 때는 격자 유무만 묻지 말고 비교 의도를 함께 물어야 한다.

형질 하나씩 빼보기 (LOTO) — 거리의 책임 소재

운영 혼동 그래프 — 현장에서 실제로 섞이는 것

가장 중요한 경고

LongFormTextLayout → List 19,891건, HighlightedMessage → List 8,368건은 rule에 의한 강제 리맵이다. 두 쌍 모두 형질 거리가 1.00, 즉 최대로 먼 쌍이다. 이 혼동을 “비슷하니까 섞였겠지”로 읽고 폴백에 복사하면 잘못된 후보를 대량 노출하게 된다. 그래서 이 두 유형은 List 폴백 금지 목록에 들어간다.

세 공간 비교 — 형질 / 텍스트 / 혼동에서의 이웃

Timeline·BigNumber처럼 세 공간이 겹치는 유형은 경계가 안정적이다. List·Opening처럼 합치가 0인 유형은 운영 규칙이 형질과 다르게 움직이고 있다는 신호다.

Phase 4 · 제품 연결 (정책·가드·훅)

폴백 레이어 정의

List 흡수 가드 — 리맵 직전에 검사할 술어

후보가 rule 또는 빈 결과로 List가 되려는 순간, 아래 조건을 먼저 확인해 해당하면 List 대신 지정된 유형으로 보낸다.

코드 훅 지점

SSoT는 prisonbreak 저장소

정책 원본(체인·금지 목록·가드)은 prisonbreak에 두고, rat-monitor에서 검색 실험으로 검증한 뒤 miricanvas-iui에 복제한다. 세 곳이 각각 정의를 갖지 않도록 한다.

하지 않기로 한 것