virtual-insanity
← 뒤로

섹터나침반 v3 아키텍처 및 운영 가이드

evergreen 2026-03-21

섹터나침반 v3 아키텍처 및 운영 가이드

1. 구조 개요

17개 섹터 / 108개 하위섹터

섹터 키 한글명 하위섹터 수
semiconductor 반도체 메모리, 비메모리, 장비, 소재, 파운드리, AI반도체 등
display 디스플레이 OLED, LCD, 장비/부품 등
shipbuilding 조선 LNG선, 컨테이너선, 방산선박, 해양플랜트 등
shipping_logistics 해운/물류 컨테이너 해운, 벌크, 항만, 물류 등
energy_refinery 에너지/정유 정유, E&P, LNG, 가스유통 등
petrochemical 석유화학 기초유분, 합성수지, 합성고무, 특수화학 등
battery_ev 배터리/EV 광물/정련, 양극재/음극재, 전해질/분리막, 셀, EV OEM, 충전인프라 등
defense_space 방산/우주 무기체계, 우주발사체, 위성, 방산전자 등
nuclear_power 원전/전력인프라 원자로, 핵연료, 전력기기, 송배전 등
bio_healthcare 바이오/헬스케어 CDMO, 바이오시밀러, 신약, 의료기기, 제약 등
robot_auto 로봇/자율주행 산업로봇, 서비스로봇, 자율주행, 센서/LiDAR 등
consumer_discretionary 경기소비재 자동차OEM, 부품, 의류, 면세/여행, 미디어 등
consumer_staples 필수소비재 식품, 음료, 생활용품, 농업 등
financials 금융 은행, 증권, 보험, 부동산/REITs 등
comm_platform 플랫폼/미디어 인터넷플랫폼, 게임, 광고, 엔터테인먼트 등
infra_utilities 인프라/유틸리티 전력, 가스, 수처리, 건설, 물류인프라 등
materials 소재/철강 철강, 비철금속, 시멘트, 특수소재 등

파일 구조

scripts/pipeline/webapp/blueprints/sector_compass.py  (5376줄, 데이터+로직 통합)
scripts/pipeline/webapp/templates/market/sector_compass.html  (UI)
scripts/pipeline/signal_synthesizer.py  (582줄, 3축 시그널 합성)
scripts/pipeline/linkage_validator.py  (1416줄, 연결 정량 검증)

sector_compass.py 내부에 _SECTOR_KR, _LINKAGE, _SUBSECTOR_LINKAGE, _SUBSECTORS, _WATCH_INDICATORS 딕셔너리가 모두 포함. sector_data.py 분리 작업 진행 중.

데이터 흐름

analyst-fundamental (LLM 에이전트)
    ↓ memory/analyst-fundamental/*.json (섹터별 사이클/시그널)
sector_research.py (6단계 분석 집계)
    ↓ memory/sector-research/*.json
signal_synthesizer.py (3축 시그널 합성)
    ↓ memory/signal-synthesizer/latest.json
sector_compass.py → _load_sectors()
    ↓ 웹앱 렌더링

Moat 데이터 흐름

company_financials (DART + KIS API)
    ↓ 영업이익률/고객유지율/시장집중도 등 재무 지표
moat_scorer.py (기업별 정량 스코어, 주 1회)
    ↓ memory/moat-scores/{date}.json
company_valuations (3-Stage DCF Fair Value — 예정)
    ↓ Fair Value + Star Rating
sector_compass.py → 기업 상세 패널
    ↓ Moat 등급 + 밸류에이션 표시

2. 핵심 아키텍처 결정

볼트-나침반 독립 운영

  • 볼트: GICS 11개 섹터 기반 (310~340 번호체계)
  • 나침반: 독자 17개 섹터 분류

매핑 레이어를 만들지 않는다. 이유: - GICS와 나침반의 분류 철학이 근본적으로 다름 (GICS=글로벌 표준, 나침반=한국 시장 특화) - 매핑 테이블은 유지보수 지옥을 만듦 (분류 변경 시 양쪽 동기화 필요) - 대신 gics_code 필드로 단방향 참조만 유지. 나침반 하위섹터마다 GICS 코드 태깅되어 있어 역추적 가능

17섹터 구조재편 (2026-03-20)

GICS 11개로는 한국 시장 분석이 불가능한 이유: - 반도체: GICS에서는 IT 안에 묻힘. 한국 시총 20%+ 차지하는 핵심 섹터 - 조선: GICS 산업재에 포함되나 한국 독보적 경쟁력, 독립 추적 필수 - 방산/우주: 글로벌 지정학 변화로 독립 모니터링 필요 - 디스플레이/해운물류: 신설 — 기존에 반도체나 산업재에 묻혀 있던 것을 분리 - 소비재 분리: consumer_discretionary(경기민감) vs consumer_staples(필수) 구분 - 부동산 흡수: real_estate → financials로 통합 (한국 REITs 시장 규모 고려)

종목 수 제한 없음 + 교차 배치

한 종목이 여러 하위섹터에 배치될 수 있음. exposure 태그로 관계 강도 표시: - 핵심: 매출의 주요 부분이 해당 하위섹터 - 확장중: 신규 진출/투자 확대 중 - 부분: 매출 일부만 관련 - 간접: 밸류체인 간접 연결

예시: 포스코퓨처엠 → battery_ev/upstream_mineral(핵심) + battery_ev/cathode_anode(핵심)

3축 시그널

signal_synthesizer.py가 LLM 없이 순수 집계: 1. 주가 시그널: ETF/종목 가격 변동, 상대강도 2. 산업지표 시그널: _WATCH_INDICATORS의 실제 데이터 변화 3. 전후방 영향 시그널: _LINKAGE/_SUBSECTOR_LINKAGE 기반 연쇄 효과

연결 검증

linkage_validator.py (1416줄)가 정량 검증 수행: - Phase A: 그레인저 인과관계 검정 - Phase B: ETF 상관관계 분석 - Phase C: 스프레드/마진 연동 확인 - Phase D: DART 공시 기반 거래관계 확인 - Phase E-F: ECOS 산업연관표, 전파 모델 (미구현)

3. 크론 스케줄

파이프라인 스케줄 역할
market_indicator 평일 07:05 32개 시장 지표 수집
signal_synthesizer 평일 07:35 3축 시그널 합성
analyst_fundamental 평일 07:38 LLM 에이전트 기반 사이클/시그널 분석
sector_research 평일 17:30 6단계 분석 + ETF 흐름 통합 집계
linkage_validator 일요 03:00 연결 정량 검증 (주 1회)
moat_scorer 일요 04:00 기업별 Moat 정량 스코어 산출 (주 1회)

4. Moat 분석 구조

_MOAT_ANALYSIS — 17섹터 정성 분석 (sector_data.py)

각 섹터에 대해 Moat 원천과 대표 기업의 해자 특성을 정성 기술. sector_data.py 내부에 딕셔너리로 정의.

_MOAT_ANALYSIS = {
    "semiconductor": {
        "dominant_moat_source": "switching_costs",  # 5가지 원천 중 주력
        "secondary_moat": "intangible_assets",
        "sector_moat_comment": "장비/소재는 high switching cost. 메모리는 원가우위+규모. 팹리스는 IP+생태계",
        "wide_moat_candidates": ["ASML", "엔비디아", "ARM"],
        "narrow_moat_candidates": ["SK하이닉스", "삼성전자 반도체"],
        "moat_risk": "기술전환기(HBM4→HBM5)에서 기존 해자 약화 가능",
    },
    "shipbuilding": {
        "dominant_moat_source": "efficient_scale",
        "secondary_moat": "intangible_assets",  # 설계 노하우/선급 인증
        "sector_moat_comment": "LNG선 건조 가능한 한국 3사가 사실상 과점. 규모+기술로 신규 진입 차단",
        "wide_moat_candidates": ["한국조선해양", "삼성중공업"],
        "narrow_moat_candidates": ["한화오션"],
        "moat_risk": "중국 대형 조선소의 LNG선 기술력 추격",
    },
    # ... 17섹터 전체
}

moat_scorer.py — 기업별 정량 스코어 (주 1회)

스코어링 항목 가중치 측정 방법
영업이익률 지속성 25% 5년 평균 vs 섹터 중앙값 — 지속적 초과이익 여부
고객 전환비용 프록시 20% 장기계약 비중, 재계약율, 구독 매출 비중
시장 집중도 20% HHI 또는 상위3사 점유율 — 효율적 규모
R&D/특허 강도 20% R&D비율, 특허 수 증가율 — 무형자산
네트워크 효과 프록시 15% 사용자/거래량 증가율 vs 비용 증가율 — 레버리지

등급 기준: - Wide (80+): 20년 이상 지속 가능한 경쟁 우위 확인 - Narrow (60~79): 경쟁 우위 존재하나 지속성 불확실 - None (~59): 경쟁 우위 미확인 또는 단기성

5. 수정 가이드

종목/지표 추가

sector_compass.py의 _SUBSECTORS 딕셔너리에서 해당 하위섹터를 찾아 수정: - representative_stocks → kr/global 배열에 종목 추가 - watch_indicators → 지표 추가 - exposure 태그 필수 지정 (핵심/확장중/부분/간접)

섹터 간 연결 추가

  • 섹터 레벨: _LINKAGE 딕셔너리에 항목 추가 (sector, type, direction, structure, impact, what_to_watch 필드)
  • 하위섹터 레벨: _SUBSECTOR_LINKAGE 리스트에 항목 추가

새 섹터 추가 시 체크리스트

  1. _SECTOR_KR — 영문키→한글명 매핑
  2. _SUBSECTORS — 하위섹터 배열 전체 정의 (key, gics_code, label, description, watch_indicators, representative_stocks, etf_proxy, cycle_independence)
  3. _WATCH_INDICATORS — 섹터 레벨 모니터링 지표
  4. _LINKAGE — 전후방 산업 연결 정의
  5. analyst_fundamental_prompt.md — AF 에이전트 프롬프트에 섹터 추가
  6. sector_research.py — 집계 대상에 포함

GICS 오분류 수정

볼트 측 GICS 분류 수정 시: - shared/vault_paths.pyGICS_SUBFOLDER_MAP 수정 (GICS 코드→폴더 매핑) - shared/vault_paths.py_SECTOR_PRIORITY_KEYWORDS 수정 (키워드 기반 우선 분류) - 나침반의 gics_code 필드와는 독립적 — 양쪽 수정이 서로 영향 없음

6. 절대 하지 말 것

  • 매핑 레이어/매핑 테이블 추가 금지 (볼트↔나침반 사이). 유지보수 지옥. gics_code 단방향 참조로 충분
  • 나침반을 GICS 11개로 축소 금지. 한국 시장 분석 능력 상실 (반도체/조선/방산이 묻힘)
  • _SUBSECTORS를 JSON 외부화 금지. 현재 유즈케이스 없음, Python dict의 타입 안전성과 IDE 지원 상실
  • etf_tracker.py 수정 절대 금지 (사고 이력 있음)

7. Known Issues

이슈 상태 비고
필수소비재/디스플레이/해운물류 사이클 데이터 없음 대기 AF 크론 다음 실행 시 자동 생성 예정
linkage_validator Phase E-F 미구현 미착수 ECOS 산업연관표 + 전파 모델
sector_compass.py 5376줄 비대화 진행중 sector_data.py 분리 작업 중
analyst_fundamental 설명에 "12섹터" 표기 잔여 17섹터 재편 후 미갱신, 실동작은 17섹터