I Was Tired of Waiting for GridSearchCV. So I Built Something Smarter. ๐
๋จธ์ ๋ฌ๋ ์์ง๋์ด๊ฐ GridSearchCV ๋์ ์กฐ๊ธฐ ํ๋ฝ(early pruning) ๊ธฐ๋ฐ SmartSearch๋ฅผ ๊ฐ๋ฐํด ๋์ผ ์ ํ๋ ์ ์งํ๋ฉด์ ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋ ์๋ 17% ๊ฐ์
AI ์์ฝ
Context
GridSearchCV๋ ๋ชจ๋ ํ์ดํผํ๋ผ๋ฏธํฐ ์กฐํฉ์ ๋ํด ์ ์ฒด ๋ฐ์ดํฐ์ ์ผ๋ก ์ ์ฒด ํ์ต ๊ณผ์ ์ ์ํํ๋ค. ์๋ฅผ ๋ค์ด 4ร4ร4=64๊ฐ์ง ์กฐํฉ์ 5-fold CV๋ฅผ ์ ์ฉํ๋ฉด 320๋ฒ์ ์์ ํ ํ์ต์ด ์คํ๋์ด ๋งค์ฐ ๋๋ฆฌ๋ค.
Technical Solution
- ๋ชจ๋ ํ๋ผ๋ฏธํฐ ์กฐํฉ์ ์ ์ฒด ๋ฐ์ดํฐ์ 30%๋ง ์ฌ์ฉํด 3-fold CV๋ก ๋น ๋ฅด๊ฒ ์คํฌ๋ฆฌ๋: ์ด๊ธฐ ์ฑ๋ฅ ์์ ํ๊ฐ
- ์คํฌ๋ฆฌ๋ ๊ฒฐ๊ณผ์์ ํ์ X%๋ฅผ ์ ๊ฑฐ(prune_ratio ํ๋ผ๋ฏธํฐ๋ก ์ ์ด): ๋ช ํํ ์ฑ๋ฅ์ด ๋ฎ์ ์กฐํฉ์ ์ ์ฒด ํ์ต์์ ์ ์ธ
- ๋จ์ ์กฐํฉ๋ค๋ง ์ ์ฒด ํ๋ จ ๋ฐ์ดํฐ(70%)๋ก proper CV ์คํ: ๋ฆฌ์์ค ์ง์ค ํฌ์
- 80/20 train-test ๋ถํ + 30/70 screening-validation ๊ณ์ธตํ ์ ๋ต: ํธํฅ ์ ๊ฑฐ ๋ฐ ์ ๋ขฐ๋ ํ๋ณด
- SmartSearch ํด๋์ค๋ฅผ GridSearchCV์ ๋์ผํ API๋ก ๊ตฌํ: ํ์ต ๊ณก์ ์ต์ํ
Impact
- ๋๊ท๋ชจ ๋ฐ์ดํฐ์ (143.5์ด ์์) ๋ฒค์น๋งํฌ์์ GridSearchCV ๋๋น ์ ํ๋ ๋๋ฑ(0.982 vs 0.978) ๋ฌ์ฑํ๋ฉฐ ์คํ ์๊ฐ 17% ๋จ์ถ(122.3์ด)
- ์๊ท๋ชจ ๋ฐ์ดํฐ์ ๋ฒค์น๋งํฌ์์ GridSearchCV(0.909), RandomizedSearchCV(0.909), Optuna(0.912), Hyperopt(0.913) ๋๋น ๊ฐ์ฅ ๋์ ์ ํ๋(0.940) ๊ธฐ๋ก
- ์์ ๊ทธ๋ฆฌ๋(9๊ฐ ์กฐํฉ)์์ 3๊ฐ๋ง ์ ์ฒด ํ์ต: ๊ณ์ฐ ๋น์ฉ 67% ๊ฐ์
Key Takeaway
ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋์์ ๋ชจ๋ ์กฐํฉ์ ๋๋ฑํ๊ฒ ํ๊ฐํ ํ์๋ ์๋ค. ์ ๋น์ฉ ์คํฌ๋ฆฌ๋์ผ๋ก ์ด๊ธฐ ์์๋ฅผ ํ์ ํ ํ ์ ๋งํ ํ๋ณด๋ง ์ง์ค ํ์ตํ๋ two-stage ์ ๊ทผ๋ฒ์ sklearn ์ํ๊ณ ๋ด์์๋ GridSearchCV ์์ค์ ์ ํ๋๋ฅผ ์ ์งํ๋ฉด์ ์คํ ์๊ฐ์ ๋จ์ถํ ์ ์๋ค.