25-2 KHU Capstone Design Project โ ML-driven Database Optimization for Quantitative Backtesting
QuantiMizer๋ ๋ณต์กํ ํํธ ํฌ์ ์ ๋ต์ ๋๊ตฌ๋ ์์ฝ๊ฒ ์์ฑํ๊ณ , ๋จธ์ ๋ฌ๋ ๊ธฐ๋ฐ DB ํ๋์ ํตํด ์ด๊ณ ์ ๋ฐฑํ ์คํ ์ ์ํํ ์ ์๋๋ก ์ค๊ณ๋ ํตํฉ ํ๋ซํผ์ด๋ค. ์ฌ์ฉ์๋ ๋ธ๋ก์ฝ๋ฉ(Blockly) ๊ธฐ๋ฐ ๋ ธ์ฝ๋ ์ ๋ต ๋น๋๋ก ์ ๋ต์ ๋ง๋ค๊ณ , ๋ฐฑ์๋๋ ์ด๋ฅผ ๊ณ ์ฑ๋ฅ SQL๋ก ์๋ ๋ณํํ์ฌ PostgreSQL์์ ์คํํ๋ค. ๋ํ PilotScope ๊ธฐ๋ฐ ML ํ๋ ์์ง์ด ์ฟผ๋ฆฌ ์ํฌ๋ก๋๋ฅผ ํ์ตํด DB ์ฑ๋ฅ์ ์๋ ์ต์ ํํ๋ค.
๋ณธ ํ๋ก์ ํธ๋ DB ํ๋ ์ฐ๊ตฌ์ ์ค์ ๊ธ์ต ๋๋ฉ์ธ์ ๊ฒฐํฉํ ์ค์ฆ์ ์์คํ ์ผ๋ก, ํนํ ๊ณ ํ์ ์จ(High-turnover) ์ ๋ต์ ๋ฐฑํ ์คํ ์๋๋ฅผ 24.8s โ 1.8s (13.5๋ฐฐ ํฅ์) ์์ผฐ๋ค.
- ๋๋๊ทธ ์ค ๋๋กญ์ผ๋ก ๊ฐ์น/๋ชจ๋ฉํ /๊ธฐ์ ์ ์งํ ๊ธฐ๋ฐ ์ ๋ต ์์ฑ
- ์ ๋๋ฒ์ค ์ค์ , ํฉํฐ ์กฐํฉ(๊ฐ์ค์น ์ ์ฉ), ํฌํธํด๋ฆฌ์ค ๊ท์น์ ์๊ฐ์ ์ผ๋ก ๊ตฌ์ฑ
- ์ ๋ต์ JSON ํํ๋ก ์ ์ฅ โ ๋ฐฑ์๋๊ฐ SQL๋ก ์๋ ๋ณํ
- ์ ๋ต JSON โ Dynamic SQL Compiler
- ์์ ํ PIT(Look-ahead bias-free) ๋ฐฑํ ์คํ ๋ณด์ฅ
- Window Functions, LATERAL JOIN, Z-score ์ ๊ทํ, Weighted Score ํฉ์ฑ ์๋ ์์ฑ
- ๋ฐฑํ ์คํ ๊ฒฐ๊ณผ๋ฅผ Equity Curve / MDD / CAGR ํํ๋ก ์ ๊ณต
- ์ค์ ๊ธ์ต ์ ๋ต ์ํฌ๋ก๋ 3์ข (Fundamental / Momentum / High-turnover)์ ์๋ ์์ฑ
- PilotScope๊ฐ ์ํฌ๋ก๋ ์คํ ๋ก๊ทธ๋ฅผ ๋ถ์ํด ์ต์ Knob์ ์ถ์ฒ
- work_mem ์ฆ๊ฐ, JIT ์ต์ ํ, random_page_cost ์กฐ์ ๋ฑ ์๋ ์ ์ฉ
- ๊ฒฐ๊ณผ: High-turnover ์ ๋ต์์ 13.5ร ์ฑ๋ฅ ํฅ์
- 300๊ฐ+ ์ฌ๋ฌด/๊ธฐ์ ์ /๊ฑฐ์ ์งํ ๊ธฐ๋ฐ
- ์ฌ์ฉ์๊ฐ Feature / Hyperparameter ์ค์ ํ ์ง์ ํ์ต ๊ฐ๋ฅ
- shap ๊ธฐ๋ฐ Feature Importance ์๊ฐํ
- MAPE 6.82%, Rยฒ 0.94 ์ฑ๋ฅ ํ๋ณด
- ๋ฐฑํ ์คํธํ ์ ๋ต์ ๊ฒ์๊ธ๋ก ๊ณต์
- ๋ค๋ฅธ ์ฌ์ฉ์๋ Forkํ์ฌ ์ ๋ต์ ์ฌ์ฌ์ฉ ๋ฐ ํ์ฅ
- ์ง๋จ์ง์ฑ์ ํตํ ์ ๋ต ๊ฐ์ ํ๋ฆ ์ ๊ณต
- Frontend: React + Blockly
- Backend API: FastAPI
- DB: PostgreSQL + PilotScope ํ๋ ๋ฃจํ
- Strategy Engine: JSON โ SQL ๋ณํ ๋ฐ ์๋ฎฌ๋ ์ด์
- ML Optimization Loop: Workload Generator + PilotScope + Admin Service
stocks_daily_info: ์ฝ 850๋ง ๊ฑด OHLCV + ๊ธฐ์ ์ ์งํfinancials_quarterly: LATERAL JOIN ๊ธฐ๋ฐ ์์ ๋งค์นญfundamentals_daily: PER/PBR ๋ฑ ์ผ๋ณ ๋ฐธ๋ฅ์์ด์
strategies: ๋ธ๋ก์ฝ๋ฉ ์ ๋ต ํธ๋ฆฌ(JSONB)backtest_settings: ๋์ผ ์ ๋ต์ผ๋ก ๊ธฐ๊ฐ/์๋ณธ ์กฐ๊ฑด์ ๋ค๋ฅด๊ฒ ์คํbacktest_results: Equity Curve, Metrics ์ ์ฅ(JSONB)
- ์ํฌ๋ก๋ ์คํ ๊ธฐ๋ก
- DB ์ค์ ์ค๋ ์ท
- PilotScope ํ๋ ๋ก๊ทธ
| Type | Before | After | Improvement |
|---|---|---|---|
| High-turnover | 24,841 ms | 1,844 ms | +1,247% (13.5ร) |
ํต์ฌ ์์ธ:
- work_mem ์ฆ๊ฐ โ Disk Sort ์ ๊ฑฐ
- ๋น์ฉ ์์ ์กฐ์ โ ์ธ๋ฑ์ค ํ์ฉ ํฅ์
- JIT ํ์ฑํ
Momentum / Fundamental์ 18~40ms ์ ๋์ ์์ ์ง์ฐ ๋ฐ์ํ์ผ๋ UX ์ํฅ ์์. ML ํ๋์ ๋ชฉ์ ํจ์๊ฐ โ์ ์ฒด ์ง์ฐ ์ต์ํโ์ด๋ฏ๋ก High-turnover์ ๊ฐ์ ์ด ์ต์ ์ ๋ต.
| Name | Role | Work |
|---|---|---|
| ์ด์ข ๊ท | ํ์ฅ | ํ๋ก ํธ/๋ฐฑ์๋ ๊ฐ๋ฐ, ์ ๋ต ์์ง, ๋ฐฑ์คํผ์ค ๊ตฌ์ถ |
| ์ ํ์ค | ํ์ | PilotScope ๊ธฐ๋ฐ DB ํ๋, ML4DB ์คํ |
| ์ ํ๊ท | ํ์ | Selenium ํฌ๋กค๋ง, TFT ์ฃผ๊ฐ ์์ธก ๋ชจ๋ธ ๊ฐ๋ฐ |
Frontend: React, TypeScript, Tailwind, Blockly Backend: FastAPI, SQLAlchemy DB: PostgreSQL 17, Parquet Staging ML/Optimization: PilotScope, MLflow, TFT, LlamaTune/SMAC/Lero Infra: Azure VM, Docker Compose
๋ณธ ํ๋ก์ ํธ๋ ๋ค์๊ณผ ๊ฐ์ ์ค์ํ ๊ธฐ์ฌ๋ฅผ ๋ฌ์ฑํ์๋ค:
๊ธ์ต ์๊ณ์ดยท๋ฆฌ๋ฐธ๋ฐ์ฑยท๋๊ท๋ชจ ์๋์ฐ ์ฐ์ฐ ํ๊ฒฝ์์ ML ํ๋์ ํจ๊ณผ ๊ฒ์ฆ
24์ด ์์ค์ ๊ณ ๋ณต์ก๋ ์ฟผ๋ฆฌ๋ฅผ 1์ด ๋ด์ธ๋ก ๋จ์ถํ์ฌ ์ค์๊ฐ ์ ๋ต ์คํ ๊ฐ๋ฅ
๋ฐ์ดํฐ ํฌ๊ธฐ ์ ์ฝ ์์ด ๊ณ ํ์ ยท๋ํ ์ฐ์ฐ ์ ๋ต๊น์ง ๊ฒ์ฆ ๊ฐ๋ฅ