From 1d3d61d31e6bd1f19a8b4e66d277dec5886618ff Mon Sep 17 00:00:00 2001 From: hyungi Date: Tue, 12 May 2026 21:44:00 +0000 Subject: [PATCH] =?UTF-8?q?fix(briefing):=20lower=20clustering=20threshold?= =?UTF-8?q?=200.78=20=E2=86=92=200.70?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 배포 후 관측 결과 (2026-05-13 새벽): - 126 docs / 7 countries 인데 THRESHOLD=0.78 로 raw_clusters=124, dropped_min_articles=122, kept=1. - 거의 매 article 이 별 cluster 로 갈려 토픽 묶음 실패. - 같은 cron 어제 (5/12) 는 101 docs 에서 6 topics 성공 — 그날 뉴스가 우연히 같은 토픽으로 더 모인 case. 수동 측정 (5/13 동일 docs): - 0.78 → kept=1 - 0.70 → kept=5 (allowed) 영구 변경 = THRESHOLD=0.70. cross-country 필터 (MIN_COUNTRIES≥2) + min_articles(≥2) 그대로 유지하므로 noise topic 위험은 제한적. 원본 주석 (0.75~0.80 중간값) 도 갱신. --- app/services/briefing/clustering.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/services/briefing/clustering.py b/app/services/briefing/clustering.py index 2b62569..6896f6e 100644 --- a/app/services/briefing/clustering.py +++ b/app/services/briefing/clustering.py @@ -5,7 +5,7 @@ Phase 4 와 axis 반대: country 별 cluster 가 아닌 **전체 doc 합쳐서 t 파라미터 (5h 윈도우용): - LAMBDA = ln(2)/2h ≈ 0.347 (2시간 반감기, 야간 5h 윈도우라 빠른 감쇠) -- threshold = 0.78 고정 (Phase 4 0.75~0.80 중간값) +- threshold = 0.70 (2026-05-13 조정 — 0.78 에서 spread case kept=1 발생 후 완화) - MIN_ARTICLES_PER_TOPIC = 2 (야간 sparse 대비 완화) - MIN_COUNTRIES_PER_TOPIC = 2 (cross-country 가치 핵심) - MAX_TOPICS = 7 (1페이지 분량) @@ -22,7 +22,7 @@ from services.clustering_common import ( logger = setup_logger("briefing_clustering") LAMBDA = math.log(2) / (2.0 / 24.0) # 2시간 반감기 (단위: 일) -THRESHOLD = 0.78 +THRESHOLD = 0.70 CENTROID_ALPHA = 0.7 MIN_ARTICLES_PER_TOPIC = 2 MIN_COUNTRIES_PER_TOPIC = 2