์ด ๋ฌธ์๋ domain/ยทapplication/์ ํฉ์ด์ ธ ์๋ ๋งค์ง๋๋ฒ(์๊ณ๊ฐยท๋ฐฐ์จยท๊ณ์)๋ฅผ ํ๊ณณ์ ๋ชจ์ ๊ฒ.
๋ชฉ์ ์ "์ ์ด ๊ฐ์ธ์ง"์ "์ธ์ ๋ค์ ๋ด์ผ ํ๋์ง"๋ฅผ ์ฝ๋๋ง ๋ด์๋ ์ ์ ์๋ ๊ฒ๋ค์ ๋ช
์ํ๋ ๊ฒ -
๊ฐ ์์ฒด๋ฅผ ์ ๋นํํ๋ ค๋ ๊ฒ ์๋๋ผ, ๊ฐ ๊ฐ์ด ์ด๋ ์นดํ
๊ณ ๋ฆฌ์ธ์ง๋ฅผ ๋ถ๋ช
ํ ํด์ ์๋ชป๋ ๋ฐฉ์์ผ๋ก
๊ฒ์ฆํ๋ ค ๋ค์ง ์๊ฒ ํ๋ ๊ฒ ํต์ฌ์ด๋ค.
- [DATA] ์ค์ธก ๋ฐ์ดํฐ๊ฐ ์์ด๋ฉด ํต๊ณ์ ์ผ๋ก ์ฌ๊ณ์ฐ/๊ฒ์ฆ ๊ฐ๋ฅํ ๊ฐ. "๊ทผ๊ฑฐ๊ฐ ์๋ค"๋ ์ง์ ์ด ์ ํํ ๋ง๋ ์นดํ ๊ณ ๋ฆฌ - ์ง๊ธ์ synthetic ๋ฐ์ดํฐ๋ ์ง๊ด์ผ๋ก๋ง ์กํ ์๊ณ , ์ค์ธก ํ์ดํ๋ผ์ธ์ด ์์ผ๋ฉด ์์ํ ์์๊ฐ์ผ๋ก ๋จ๋๋ค.
- [POLICY] ํต๊ณ๋ก "์ ๋ต"์ด ๋์ค์ง ์๋ ์ ํ/๋๋ฉ์ธ ์ ์ฑ ๊ฐ. ์ค์ ์ ์ ์๋น์ค๋ ์ด๋ฐ ๊ฑด ๊ฐ์ฌยท ์ปจ์คํดํธ ํ๋จ์ผ๋ก ์ ํ๊ณ , ์ดํ ์์ฃผ์จ/์ฑ์ ํฅ์ ๊ฐ์ ๊ฒฐ๊ณผ ์งํ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ฉด์ ์ฌ๋์ด ์กฐ์ ํ๋ค. "๊ทผ๊ฑฐ๋ฅผ ๋๋ผ"๋ ์๊ตฌ ์์ฒด๊ฐ ์ฑ๋ฆฝํ์ง ์๋ ์นดํ ๊ณ ๋ฆฌ - ๋์ "์ด๋ค ์งํ๋ฅผ ๋ณด๊ณ ์กฐ์ ํ ์ง"๊ฐ ๋ช ์๋ผ์ผ ํ๋ค.
| ์์ | ์์น | ๊ฐ | ์นดํ ๊ณ ๋ฆฌ | ๊ทผ๊ฑฐ / ์ฌ๊ฒํ ์กฐ๊ฑด |
|---|---|---|---|---|
SLIP_BUFFER_WEEKS |
domain/scheduler.py | 2 | POLICY | ํ์์ด ์ ํ ์์ฃผ๊ธฐ๊ฐ์์ ์ต๋ ๋ฉฐ์น ๋ ๋ฐ๋ฆฌ๋ ๊ฑธ ํ์ฉํ ์ง. ์ฌ๊ฒํ : ์ค์ ์ฌ๋ฆฝ ๋ถํฌ(ํ์๋ค์ด ํ๊ท ๋ช ์ฃผ์ฉ ๋ฐ๋ฆฌ๋์ง) ๋์ค๋ฉด ์ด ๊ฐ์ด "๋๋ถ๋ถ์ ํ์์ ์ปค๋ฒํ๋์ง" ํ์ธ. |
REVIEW_BUFFER_WEEKS |
domain/scheduler.py | 3 | POLICY | ์๋ฅ ์ง์ ์ ์ง๋ ๊ธ์งยท์ด๋ณต์ต ๊ธฐ๊ฐ. ์ฌ์ฉ์๊ฐ "3์ฃผ(๊ด์ต์ ์ด์ ๋ฆฌ ๊ธฐ๊ฐ)"๋ก ํ์ (2026-07-09). ์ฌ๊ฒํ : ํ/์ปจ์คํดํธ ์ฌ๋ ผ์ ์์ด๋ ์ ๋ฐ๋. |
PUSH_CAP_MULTIPLIER |
domain/reflow.py | 1.5 | POLICY | ํ์ push_mode ๊ฐ๋ ๋ฐฐ์จ. ์ฌ๊ฒํ : ์ด ๋ฐฐ์จ๋ก ๋ฐ๋ฆฐ ํ์์ด ์ค์ ๋ก ๋ฐ๋ผ์ก๋ ๋น์จ(์์ฃผ์จ)์ ๋ณด๊ณ ์กฐ์ . |
FINAL_STRETCH_DAYS |
domain/reflow.py | 100 | POLICY | ์๋ฅ D-100(์ ์ ๋ฌธํ์ ์ผ๋ก ์๋ฏธ์๋ ์์ ). ์ฌ๊ฒํ : ์ ํจ(๊ด์ต์ ์์ง์ฑ์ด ๊ทผ๊ฑฐ๋ผ ๋ฐ์ดํฐ๋ก ์ ๋ฐ๋). |
FINAL_STRETCH_PUSH_CAP_MULTIPLIER |
domain/reflow.py | 1.8 | POLICY | D-100 ์ด๋ด ์ ๋ฐ ๊ฐ๋. ์ฌ์ฉ์๊ฐ "ํ์๋ณด๋ค ์ธ๊ฒ"๋ก ํ์ , 1.8์ ์์ ์ ํ. ์ฌ๊ฒํ : D-100 ์ง์ ํ ์ดํ๋ฅ ์ด ์คํ๋ ค ๋๋ฉด(๋๋ฌด ์ธ์ ์ญํจ๊ณผ) ๋ฎ์ถ๋ ๋ฐฉํฅ ๊ฒํ . |
MIN_EFFICIENCY_SAMPLES |
domain/scheduler.py | 3 | DATA (๋ฏธ๊ฒ์ฆ) | "3๊ฑด์ด๋ฉด ์ฝ๋์คํํธ ๋ฒ์ด๋จ"์ ์ง๊ด์น. ์ฌ๊ฒํ : ์ค์ธก ๋ฆฌ๋ทฐ ๋ก๊ทธ ์์ด๋ฉด ์ํ์๋ณ raw ๊ณ์์ ํ๋ณธ๋ถ์ฐ์ ๋ณด๊ณ "์์ ํ๋๋ ์์ "์ ๋ค์ ์ก์ ๊ฒ - scripts/calibrate_risk_weights.py๋ฅ ์คํฌ๋ฆฝํธ๋ก ํ์ฅ ๊ฐ๋ฅ. |
MIN/MAX_EFFICIENCY_COEFFICIENT |
domain/scheduler.py | 0.5 / 2.0 | POLICY (์์ ์ฅ์น) | ๊ทน๋จ์น ํด๋จํ - "ํต๊ณ์ ์ผ๋ก ์ณ์ ๋ฒ์"๊ฐ ์๋๋ผ ์์ ์ฅ์น. ์ฌ๊ฒํ ๋ถํ์(์ฌ๊ณ ๋ฐฉ์ง์ฉ ์ํ/ํํ์ด๋ผ ๋ํ๋ ๋๋ ๊ทผ๊ฑฐ๊ฐ ๋์ค๊ธฐ ์ ๊น์ง ์ ์ง). |
EFFICIENCY_STRETCH_FACTOR |
domain/scheduler.py | 0.5(๊ธฐ๋ณธ๊ฐ, ์ค์ ๋ก๋ ํ์๋ง๋ค ์คํ variant ์ ์ฉ) | DATA (A/B ์คํ ์งํ ์ค) | "์ ๋ฐ๋ง ๋ฐ์"์ ์ฌ์ฉ์ ์ ํ์ด์ง ์คํ ๊ทผ๊ฑฐ ์์. domain/experiments.py::assign_variant()๊ฐ ํ์๋ง๋ค [0.3, 0.5, 0.7] ์ค ํ๋๋ฅผ ๊ฒฐ์ ์ ์ผ๋ก ๋ฐฐ์ ํ๊ณ experiment_exposure ํ
์ด๋ธ์ ๋
ธ์ถ์ ๊ธฐ๋ก ์ค(๋ฐฐ์ ์ธํ๋ผ๋ ์๋ฃ). ๋จ์ ๊ฑด ์์ฃผ์จ/์ฑ์ ํฅ์ ๊ฐ์ ์ฑ๊ณผ ๋ฐ์ดํฐ์์ ์กฐ์ธ - ๊ทธ๊ฒ ์์ด๋ฉด scripts/calibrate_policy_constants.py::analyze_stretch_factor_ab_test()๋ฅผ ์ฑ์์ ๊ทธ๋ฃน๋ณ ๋น๊ต. |
DEFAULT_MAX_REVIEW_INTERVAL_DAYS |
application/use_cases.py | 180 | POLICY (ํด๋ฐฑ) | ์๋ฅ์ผ ๋ฏธํ์ธ ์ ํด๋ฐฑ. ์ฌ๊ฒํ : ์จ๋ณด๋ฉ ์๋ฃ์จ์ด ๋์์ ธ ์ด ํด๋ฐฑ์ด ๊ฑฐ์ ์ ์ฐ์ด๋ฉด ์ฐ์ ์์ ๋ฎ์. |
| risk ๊ฐ์ค์น (recency/streak/quiz) | domain/risk.py | 0.45 / 0.30 / 0.25 | DATA (๊ต์ฒด ๊ฒฝ๋ก ์์) | scripts/coxph_synthetic_population.py์ synthetic ground truth(0.9:0.6:0.4)๋ฅผ ์ ๊ทํํ ๊ฐ - synthetic์ด์ง ์ค์ธก ์๋. ์ฌ๊ฒํ : ์ค์ ์ดํ ์ด๋ฒคํธ๊ฐ ์์ด๋ฉด scripts/calibrate_risk_weights.py๋ก ์ค์ธก Cox PH ๊ณ์๋ฅผ ๋ฝ์ ์ด ์์์ ๋น๊ต, ๋๋ฆฌํํธ ํฌ๋ฉด ๊ต์ฒด(๋ก๋๋งต์ ์๋ "๊ท์น๊ธฐ๋ฐโCox PH ์น๊ธ"์ผ๋ก ์์ ๋ผ ์๋ ๊ฒ). |
risk_label ์๊ณ๊ฐ |
domain/risk.py | 0.7 / 0.4 (HIGH/MEDIUM) | POLICY | ์ค์ฝ์ด ๊ตฌ๊ฐ ๋๋๊ธฐ. ์ฌ๊ฒํ : ์ค์ ๋ผ๋ฒจ๋ณ ์ค์ ์ดํ๋ฅ ์ ์ง๊ณํด์ "HIGH๋ผ๊ณ ํ ํ์์ด ์ง์ง ๋ ๋ง์ด ์ดํํ๋์ง" ํ์ธ ํ ์กฐ์ . |
| ํด์ฆ์ ์โFSRS grade ์๊ณ๊ฐ | domain/review.py | 90/70/50 | POLICY | CLAUDE.md์ ์ด๋ฏธ ๋ช ์: "์ค์ ์ ์ ๋ฆฝ๋ ๊ณต์ ์์, ์ค์ธก ์์ด๋ฉด ์กฐ์ ๊ฐ๋ฅ." |
- [DATA] ํ์๋ ํญ๋ชฉ ์ค risk ๊ฐ์ค์น๋ ์ค์ธก ์ดํ ๋ฐ์ดํฐ๋ง ์์ด๋ฉด ๋ฐ๋ก ์ฌ๊ณ์ฐ ๊ฐ๋ฅํ ์คํฌ๋ฆฝํธ๊ฐ ์์(
scripts/calibrate_risk_weights.py). - **
EFFICIENCY_STRETCH_FACTOR**๋ A/B ํ ์คํธ ์์ด๋ ์์ฒ์ ์ผ๋ก ๊ฒ์ฆ ๋ถ๊ฐ - ์ค์ธก ํ์ดํ๋ผ์ธ์ ๋ง๋ค์ด๋ "๊ด์ฐฐ ๋ฐ์ดํฐ"๋ง์ผ๋ก๋ ์ธ๊ณผ๊ด๊ณ(์คํธ๋ ์น๋ฅผ ์ธ๊ฒ ์คฌ๋๋ ์ ์๊ฐ ์ฌ๋๋ค)๋ฅผ ์ฃผ์ฅํ ์ ์์. ์ด๊ฑด ๋์ค์ ์ค์ A/B ์คํ์ ์ค๊ณํด์ผ ํ๋ ํญ๋ชฉ์ผ๋ก ๋ณ๋ ๊ด๋ฆฌ.
EFFICIENCY_STRETCH_FACTOR ์กธ์
๊ธฐ์ค (์ธ์ "๊ณ ์ ์์"์์ "์ค์ธก ๋น๊ต"๋ก ๋์ด๊ฐ๋์ง)
์ง๊ธ์ ์ค์ฌ์ฉ์๊ฐ 0๋ช
์ด๋ผ ๊ฒ์ฆ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ ์ํ - ์๋ ์กฐ๊ฑด์ ์ ๋ถ ๋ง์กฑํ๊ธฐ ์ ๊น์ง๋
scripts/calibrate_policy_constants.py::analyze_stretch_factor_ab_test()๋ฅผ ์คํํด๋ ์๋ฏธ ์๋ค.
- ํ๋ณธ ์กฐ๊ฑด: variant([0.3, 0.5, 0.7]) ๊ทธ๋ฃน๋ง๋ค
experiment_exposure์ ๋ ธ์ถ๋ ํ์์ด ๊ฐ ๊ทธ๋ฃน ์ต์ 30๋ช ์ด์(risk ๊ฐ์ค์น ์ฌ๊ฒ์ฆ ๋ ์ดMIN_REAL_EVENTS_FOR_CALIBRATION=30๊ณผ ๋์ผ ๊ธฐ์ค - ์ผ๊ด์ฑ ์ ์ง). - ๊ธฐ๊ฐ ์กฐ๊ฑด: ๊ทธ ํ์๋ค์ด ์ต์ 4์ฃผ ์ด์ ํ๋ํ ๋ค - efficiency ๊ณ์ ์์ฒด๊ฐ ์์ ํ(์๋ฃ 3๊ฑด ์ด์)๋๋ ๋ฐ ๋ณดํต 1~2์ฃผ ๊ฑธ๋ฆฌ๋ฏ๋ก(์ด์ ์ธ์ ๋ถ์ ์ฐธ๊ณ ), ๊ทธ ์ดํ๋ก๋ ๊ฒฐ๊ณผ๊ฐ ๋์ ๋ ์๊ฐ์ด ํ์ํจ.
- ์ฑ๊ณผ ์งํ ์ ์: "์์ฃผ์จ"๊ณผ "ํด์ฆ ํ๊ท ์ ์ ์ถ์ด(๋ฑ๋ก ์์ ๋๋น 4์ฃผ ํ ๋ณํ๋)" ์ค ์ต์ ํ๋๊ฐ ์ค์ ๋ก ๋ก๊น ๋๊ณ ์์ด์ผ ํจ - ์ง๊ธ์ ์ด ์ฑ๊ณผ ์ง๊ณ ์์ฒด๊ฐ ์์คํ ์ ์์ผ๋ฏ๋ก, ์ ํ๋ณธ/๊ธฐ๊ฐ ์กฐ๊ฑด์ ๋ง์กฑํ๊ธฐ ์ ์ ์ด ๋ก๊น ๋ถํฐ ๋จผ์ ๋ง๋ค์ด์ผ ๋ถ์์ด ๊ฐ๋ฅํจ.
์ธ ์กฐ๊ฑด ์ค ํ๋๋ผ๋ ์ ์ฑ์์ง ์ํ์์ ๋์จ "0.5๊ฐ ๋ ๋ซ๋ค/์๋๋ค" ๊ฐ์ ๊ฒฐ๋ก ์ ํ๋ณธ ๋ถ์กฑ์ผ๋ก ์ธํ ๋ ธ์ด์ฆ์ผ ๋ฟ์ด๋, ๋ฐํ๋ ์์ฌ๊ฒฐ์ ๊ทผ๊ฑฐ๋ก ์ฐ์ง ๋ง ๊ฒ.