← 홈

NEWSGLOBE 시스템 설명서

1. 시스템 개요

NEWSGLOBE는 RSS 뉴스를 실시간 수집하여 9개 레이어(L0~L9)에 걸친 파이프라인으로 처리합니다. 각 레이어는 독립적으로 실행되며, 상위 레이어의 출력이 하위 레이어의 입력이 됩니다.

L0
RSS 수집기node-cron 5분 주기 RSS 피드 수집
L1
전처리 & 중복제거Jaccard ≥ 0.55 중복 판정, 7일 만료 정리
GEO
지오코딩256개 지명 DB로 좌표 매핑 → 세계지도 마커 표시
L2
키워드 스코어링3,508개 키워드 가중치 점수 산출 → P1/P2/P3
L3
시나리오 엔진11개 다단계 시나리오 단계 활성화 추적
L4
시나리오 영향도완화/악화 요인 반영, 위험도 0→critical 단계화
L5
패턴 감지7개 거시패턴 matchRatio 임계값 돌파 감시
L6
방향성 엔진16개 규칙 × 7단계 강도 multiplier 적용
L7
리스크 지수4개 구성요소 가중합 → 0~100 지수 산출
L9
예측 생성기31개 템플릿 다중조건 매칭 → 신뢰도 조정 예측
RSS 피드 → 키워드 스코어링 → 시나리오 추적 → 패턴 감지 → 수학 분석 → 예측 생성

2. 데이터 수집 (L0-L1)

RSS 수집 주기매 5분 (node-cron)
총 피드 수24개 피드
영어 피드19개
한국어 피드5개
중복 기준Jaccard ≥ 0.55
P3 기사 만료7일 이상 자동 삭제

크론 스케줄

*/5 * * * *   // 5분마다 RSS 수집 실행

소스 티어

티어대표 소스보너스
Tier 1Reuters, AP, 연합뉴스+5점
Tier 2BBC, Bloomberg, Al Jazeera+3점
Tier 3기타 주요 언론0점
Tier 4+소규모 / 비검증 소스-3점

Jaccard 중복 제거

제목과 본문의 토큰 집합을 비교합니다. 유사도가 0.55 이상이면 동일 기사로 판정하여 제거합니다.

Jaccard(A, B) = |A ∩ B| / |A ∪ B|

3. 지오코딩 & 지도 매핑

수집된 뉴스의 제목과 본문에서 지명을 추출하여 위도/경도 좌표를 부여합니다. 좌표가 매핑된 뉴스만 세계지도 위에 마커로 표시됩니다.

지명 DB 규모256개 항목 (도시 137 + 해상 19 + 국가/지역 100)
등록 Alias545+개 (한/영/중/일)
매핑 성공률~82%
매칭 시점뉴스 수집 시 자동 실행

작동 흐름

뉴스 수집 → geocodeText(title + description) 호출
→ geo-db.json에서 지명 매칭
→ 매칭 성공 시 latitude, longitude, location 저장
→ 세계지도에 마커 표시

매칭 우선순위

더 구체적인 지명을 먼저 매칭합니다. 같은 단계 내에서는 긴 이름이 우선됩니다.

우선순위유형예시설명
1순위도시/초크포인트Tehran, Strait of Hormuz가장 구체적인 위치
2순위국가/지역/조직Iran, NATO, ASEAN넓은 범위 매핑

다국어 매칭 방식

언어매칭 방식예시
영어 (4자+)단순 포함 검사 (대소문자 무시)"Tehran", "Netanyahu"
영어 (1~3자)단어 경계(\b) 정규식 매칭"US", "UK", "EU" — "business"의 "us" 오매칭 방지
한국어/CJK직접 포함 검사"이란", "미국", "호르무즈"

Alias 유형

각 지명에는 다양한 유형의 alias가 등록되어 폭넓은 매칭을 지원합니다.

유형예시매핑 대상
공식 명칭United States, Russian Federation해당 국가
약칭US, UK, PRC, DPRK해당 국가 (단어 경계 매칭)
한국어미국, 러시아, 이란, 호르무즈해협해당 위치
인물명Trump, Putin, Xi Jinping, Netanyahu해당 인물의 국가
인물명 (한국어)트럼프, 푸틴, 시진핑, 젤렌스키해당 인물의 국가
기관/조직Pentagon, Kremlin, White House, IRGC해당 기관의 위치
한국어 기관명백악관, 크렘린, 혁명수비대해당 기관의 위치

geo-db.json 구조

{
  "cities": [
    {
      "name":    "Tehran",
      "aliases": ["테헤란"],
      "lat":     35.69,
      "lon":     51.39,
      "country": "Iran"
    },
    ...
  ],
  "chokepoints": [
    {
      "name":    "Strait of Hormuz",
      "aliases": ["Hormuz", "호르무즈", "호르무즈해협"],
      "lat":     26.57,
      "lon":     56.25
    },
    ...
  ],
  "countries": [
    {
      "name":    "Iran",
      "aliases": ["Iranian", "이란", "IRGC",
                 "Khamenei", "하메네이", "혁명수비대"],
      "lat":     35.69,
      "lon":     51.39
    },
    ...
  ]
}

커버리지 분포

지역도시 수국가 수주요 항목
동아시아187서울, 도쿄, 베이징, 타이베이, 평양
중동1611테헤란, 예루살렘, 가자, 리야드, 바그다드
유럽2225런던, 파리, 베를린, 키이우, 모스크바
북미63워싱턴, 뉴욕, 오타와, 멕시코시티
동남아109싱가포르, 방콕, 자카르타, 하노이
아프리카109카이로, 나이로비, 라고스
남미76상파울루, 부에노스아이레스, 보고타
해상/전략지점--호르무즈, 남중국해, 수에즈, 발트해 등 19개

재스코어링

geo-db 확장 후 기존 뉴스에도 새 좌표를 적용하려면 POST /api/rescore를 호출합니다. 모든 뉴스의 제목+본문을 최신 geo-db로 재매칭하여 좌표를 갱신합니다.

4. 키워드 스코어링 (L2)

총 키워드3,508개
카테고리geopolitics / economy / ai_tech / market
가중치 범위1 ~ 8
정규화 기준NORMALIZER = 90

키워드 구조

{
  term:     string,      // 영어 키워드
  category: string,      // 분류
  weight:   1~8,         // 기본 가중치
  active:   boolean,     // 활성 여부
  ko:       string,      // 한국어 매칭 텍스트
  patterns: string[],    // 추가 패턴 목록
}

점수 공식

rawScore = (baseScore + comboBonus + sourceBonus + timeBonus)
           × categoryWeight × dirMult

normalizedScore = min(100, max(0,
  round((rawScore / 90) × 1000) / 10
))

매칭 방식

언어방식설명
영어 단어토큰 Set O(1) 조회공백 분리 후 Set 교집합
영어 구문\b 정규식 경계 매칭다중 단어 구문 처리
한국어rawText.includes(ko)CJK는 \b 미지원 → 직접 포함 검사

보너스 체계

항목조건보너스
콤보 — 2항2개 키워드 동시 매칭+10
콤보 — 3항3개 키워드 동시 매칭+25
콤보 — 최고급특정 고위험 조합+40
소스 Tier1Reuters, AP, 연합뉴스+5
소스 Tier2BBC, Bloomberg 등+3
소스 Tier4+소규모 소스-3
시간 1h 이내최신 기사+10
시간 6h 이내최근 기사+5
시간 24h 이내당일 기사0
시간 72h 이내3일 이내-5
시간 72h 초과오래된 기사-10

우선순위 분류

P1긴급 — 점수 ≥ 60
P2주요 — 점수 ≥ 40
P3일반 — 나머지

5. 방향성 엔진 (L6)

각 뉴스에 위기/완화 방향성을 부여하고, 16개 도메인 규칙과 7단계 강도 배율을 적용합니다.

7단계 강도 배율

단계설명
strong_crisis1.8×초위기 — 즉각적 충격
crisis1.5×위기 — 심각한 상황
mild_crisis1.2×경미한 위기
neutral1.0×중립
mild_relief0.85×경미한 완화
relief0.7×완화 신호
strong_relief0.5×강한 안정화

16개 방향 규칙 도메인

이란/핵관세군사에너지금리주식반도체러-우대만북한중동홍해AI암호화폐부동산기타

부정어 보정

방향성 키워드 앞 4단어 이내에 부정어("not", "denied", "no", "false" 등)가 감지되면 반대 방향으로 0.5를 가산합니다.

crisisConf = negCount / (negCount + posCount)
// 위기 신호와 완화 신호의 비율로 신뢰도 산출

6. 시나리오 추적 (L3-L4)

총 시나리오11개
지정학G1~G5 (5개)
경제E1~E6 (6개)
기술A1 (1개)
시장M1~M4 (4개)

단계 활성화 조건

조건 유형설명
키워드 매칭단계 정의 키워드가 최근 뉴스에서 감지됨
방향 필터해당 단계의 요구 방향성(crisis/relief) 충족
선행조건 hard반드시 충족해야 하는 이전 단계 조건
선행조건 soft가중치 감소 없이 선택적으로 충족하는 조건
TTL 만료활성화 후 설정 시간 경과 시 자동 만료

진행률 및 위험도

진행률 = activeCount / totalCount × 100

위험도:
  0%     → low
  < 40%  → medium
  < 80%  → high
  ≥ 80%  → critical

영향도 구조

{
  target:    string,          // 영향 대상 (유가, 달러 등)
  direction: "up"|"down"|"mixed",
  strength:  0~5,            // 영향 강도
}

완화 / 악화 요인

유형트리거효과
완화"ceasefire", "peace deal" 키워드 감지영향 strength -40%
악화특정 고위험 키워드 감지strength 증가

7. 패턴 엔진 (L5)

7개 거시 패턴은 여러 지표의 충족 비율(matchRatio)이 임계값을 초과할 때 활성화됩니다.

matchRatio = Σ(충족 지표 가중치) / Σ(전체 가중치)

7개 거시 패턴

ID패턴 이름임계값관련 도메인
P1지정학 폭풍0.60이란, 러-우, 대만, 북한, 중동
P2경제 도미노0.50관세, 금리, 인플레이션
P3기술 분열0.50반도체, AI, 수출통제
P4시장 패닉0.60주식, 채권, 환율
P5에너지 위기0.50유가, 홍해, 에너지
P6금융 전염0.50은행, 신용, 채권
P7다중 위기 수렴0.70P1+P2+P4 동시 활성

심각도 단계

watch
warning
alert
critical

8. 수학 모듈 (6종)

7-1. 키워드 MACD

키워드 점수 시계열에 EMA(지수이동평균)를 적용해 모멘텀 전환점을 감지합니다.

EMA(12) - EMA(26) = MACD선
EMA(9, MACD선)  = 신호선
히스토그램      = MACD선 - 신호선

강도 = |히스토그램| / max(최근 20봉)

골든크로스: MACD선이 신호선 위로 돌파 → 상승 모멘텀
데드크로스: MACD선이 신호선 아래로 이탈 → 하락 모멘텀

7-2. 베이지안 확률

사전확률과 증거(뉴스 이벤트)를 결합해 사후확률을 갱신합니다. 5개 이벤트 유형, 각 4~5개 증거 항목.

odds(prior) = prior / (1 - prior)
odds(posterior) = odds(prior) × likelihoodRatio
posterior = odds(posterior) / (1 + odds(posterior))

// 클램핑: 확률 범위 [0.01, 0.99]

7-3. 교차 상관관계 & 시차

두 키워드 시계열의 피어슨 상관계수를 최대 14일 시차에서 계산합니다.

r = (nΣXY - ΣXΣY)
    / √((nΣX² - (ΣX)²)(nΣY² - (ΣY)²))
원인 이벤트결과 지표시차(일)
이란 제재 강화유가 상승2
관세 발표인플레이션14
반도체 수출규제기술주 하락3
금리 인상달러 강세1
전쟁 확전안전자산 수요1
에너지 공급 차질CPI 상승7
중앙은행 발언채권 수익률0
경기침체 신호주식 하락2

7-4. 이벤트 임팩트

9개 이벤트 유형의 역사적 평균 영향%와 신뢰구간을 제공합니다.

신뢰도 = min(0.95, 0.5 + sampleSize × 0.08)

68% 구간  = [avg - σ,   avg + σ  ]
95% 구간  = [avg - 2σ,  avg + 2σ ]

7-5. 확률 체인

10개 연쇄 시나리오(각 3~4단계)의 누적 발생 확률을 계산합니다.

누적확률 = P(A) × P(B|A) × P(C|B)

Wilson Score 신뢰구간으로 불확실성 범위 산출

7-6. 앙상블 신뢰도

6개 모듈의 출력을 가중 합산하여 최종 신뢰도를 도출합니다.

모듈가중치역할
베이지안0.25사전/사후 확률 갱신
확률 체인0.20연쇄 시나리오 누적확률
이벤트 임팩트0.15역사적 영향 추정
키워드 MACD0.15모멘텀 방향성
시나리오 상태0.15현재 활성 단계
교차 상관관계0.10시차 패턴 일치
일관성 = max(up, down) / total

해석:
  신뢰도 ≥ 70% + 일관성 ≥ 0.80 → 높은 신뢰도 예측
  신뢰도 < 50%               → 예측 보류 권장

9. 리스크 지수 (L7)

4개 핵심 구성요소와 2개 선택 요소를 가중 합산하여 0~100 사이의 글로벌 리스크 지수를 산출합니다.

구성요소 가중치

구성요소가중치설명
keywordSeverity0.30P1/P2 기사 비율과 최고 점수 기반
crisisRatio0.25위기 방향 뉴스 비율
p1Density0.25P1 긴급기사 밀도
scenarioPressure0.20활성 시나리오 위험도 압력
trendMomentum0.10(선택) MACD 모멘텀
lagPressure0.05(선택) 시차 상관 누적 압력

위험 단계

단계범위색상
low0 ~ 20정상
elevated20 ~ 40관찰
high40 ~ 60주의
severe60 ~ 80심각
extreme80 ~ 100극단

10. 예측 엔진 (L9)

총 템플릿31개 (16+10+4+1)
시나리오 템플릿16개
트렌드 템플릿10개
통계 템플릿4개

다중 조건 매칭 배율

조건 3/3 충족 → 1.0× (확신)
조건 2/3 충족 → 0.6× (가능)
조건 1/3 충족 → 0.3× (낮은 확률)

신뢰도 조정 (L9-3)

조건조정값방향
복수 소스 확인+5%상향
24시간 내 시나리오 활성+10%상향
48시간 뉴스 없음-10%하향
공식 부인 감지-20%하향

예측 만료 기간

분류만료예시
즉시~1주7일단기 가격 움직임
1~2주14일정책 반응
1개월30일중기 추세
1~3개월90일구조적 변화

정확도 추적

모든 예측은 PredictionLog 테이블에 기록됩니다. 만료 후 결과(correct / incorrect / partial)를POST /api/predictions/resolve로 기록하면 통계가 자동 집계됩니다.

11. API 엔드포인트

메서드경로설명
GET/api/news스코어링된 뉴스 목록 조회
GET/api/collectRSS 수집 즉시 실행
GET/api/rescore전체 뉴스 재스코어링
GET/api/scenarios시나리오 현재 상태
GET/api/trends키워드 트렌드
GET/api/predictions예측 생성 (수학 보강)
GET/api/predictions/accuracy예측 정확도 통계
POST/api/predictions/resolve예측 결과 기록
GET/api/stocks주가 / 환율 / 암호화폐
GET/api/cleanup오래된 뉴스 정리

12. 핵심 상수

파라미터설명
NORMALIZER90점수 정규화 기준값
중복 임계값0.55Jaccard 유사도 기준
P1 임계값60긴급 뉴스 기준 점수
P2 임계값40주요 뉴스 기준 점수
MACD 기간12 / 26 / 9Fast / Slow / Signal EMA
확률 범위[0.01, 0.99]베이지안 클램핑 경계
최대 시차14일상관관계 탐색 범위
패턴 임계값0.5 ~ 0.7지표 충족 비율
수집 주기5분RSS 크론 주기
키워드 수3,508개4개 카테고리 합계
시나리오 수11개G1~G5, E1~E6, A1, M1~M4
예측 템플릿31개16 시나리오 + 10 트렌드 + 4 통계 + 1 기타