WBS-2.4 PEG_SCORE_V1 구현 + ROADMAP_WBS.md 완성도 매트릭스 전면 업데이트

[WBS-2.4] ingest_fundamental_raw.py에 peg_ratio / peg_gate 필드 추가
  - PEG = TTM_PE(per) / eps_growth_1y_pct (양수 성장 종목만)
  - PEG_GATE: BUY_GRADE(≤1.0) / HOLD(≤1.5) / CAUTION(>1.5)
  - 비ETF 8종목 중 6종목 PEG 산출 (75% — 음수성장 2종목 정상 NULL)
  - Forward_PE 미입수 시 TTM_PE 대체 조항 적용

[ROADMAP] 완성도 매트릭스 전면 업데이트
  - WBS 1.1~1.5, 2.1~2.4, 3.1~3.4, 4.4, 5.1~5.3 모두 100%  반영
  - WBS 2.5, 4.1~4.3: DATA_GATED 명시
  - Phase bar: 1/3/5 완료(20/20), 2 80%, 4 25%
  - D2: 9% → 100% (269개 등록), D5: 55단계 DAG PASS
  - KPI 섹션: RS/PEG/CI/CD 실적 반영

[CI] tools/setup_act_runner.sh 추가 (Synology NAS act_runner 설치 스크립트)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 17:31:51 +09:00
parent 9824f348d2
commit 45a39759e3
3 changed files with 160 additions and 55 deletions
+16 -2
View File
@@ -221,10 +221,11 @@ def _collect_ticker(ticker: str, name: str, df_row: dict[str, Any], use_naver: b
}
fields = [
"roe_pct", "opm_pct", "eps_krw", "per", "pbr",
"roe_pct", "opm_pct", "eps_krw", "per", "pbr",
"revenue_krw", "op_income_krw", "beta", "high52w", "low52w",
"debt_to_equity", "current_ratio", "fcf_krw", "ocf_krw",
"eps_growth_1y_pct", "revenue_growth_pct", "earnings_date"
"eps_growth_1y_pct", "revenue_growth_pct", "earnings_date",
"peg_ratio", "peg_gate",
]
for f in fields:
row[f] = None
@@ -285,6 +286,19 @@ def _collect_ticker(ticker: str, name: str, df_row: dict[str, Any], use_naver: b
else:
row["data_quality"] = "SPARSE"
# PEG_SCORE_V1 (WBS-2.4): PEG = TTM_PE / EPS_Growth_1Y_Pct (positive growth only)
per_val = row.get("per")
eps_g = row.get("eps_growth_1y_pct")
if per_val and eps_g and eps_g > 0:
row["peg_ratio"] = round(per_val / eps_g, 3)
peg = row["peg_ratio"]
if peg <= 1.0:
row["peg_gate"] = "BUY_GRADE"
elif peg <= 1.5:
row["peg_gate"] = "HOLD"
else:
row["peg_gate"] = "CAUTION"
return row