'์์์ ์ฅ ๋ฉ๋ด ์์ ์์ธก'์ ์ฃผ์ ๋ก ํ LG Aimers ํด์ปคํค์ ์ฐธ์ฌํ์ต๋๋ค. ์ต์ข Private Score 0.48718๋ก 61์๋ฅผ ๊ธฐ๋กํ๋ฉฐ ๋ณธ์ ์ง์ถ์๋ ์คํจํ์ง๋ง, ์ฒด๊ณ์ ์ธ ์คํ์ ํตํด ์ ์๋ฏธํ ์์๋ธ ์ ๋ต์ ๋ฐ๊ฒฌํ๊ณ ์ต์ ํํ๋ ๊ณผ์ ์ ํ๊ณ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
1. ์ด๊ธฐ ์ ๋ต์ ์คํจ์ ํผ๋ด
์ฒ์์๋ ์ ๊ตํ ํผ์ฒ ์์ง๋์ด๋ง๊ณผ ํธ๋ฆฌ/๋ฅ๋ฌ๋ ํ์ด๋ธ๋ฆฌ๋ ๋ชจ๋ธ์ ๊ฒฐํฉํ ๋ณต์กํ ๋ชจ๋ธ์ ๊ตฌ์ํ์ต๋๋ค. ํ์ง๋ง ์ด๋ก ์ ์ฝ๋๋ก ์ฎ๊ธฐ๋ ๊ณผ์ ์์ ์๋ง์ ๋๋ฒ๊น ๊ณผ ์์๋ณด๋ค ๋ฎ์ ์ฑ๋ฅ์ ๋ถ๋ชํ์ต๋๋ค. ์ด ์ ๊ทผ๋ฒ์ ์๊ฐ ์๋ชจ๊ฐ ํฌ๊ณ , ๊ฐ์ ๋ฐฉํฅ์ ์ก๊ธฐ ์ด๋ ต๋ค๊ณ ํ๋จํ์ต๋๋ค.
์ ๋ต ์์ : ๋ณต์กํ ๋จ์ผ ๋ชจ๋ธ์ ์ฒ์๋ถํฐ ๋ง๋๋ ๋์ , ์ด๋ฏธ ๊ฒ์ฆ๋ ์ ์ฝ๋(V44)๋ฅผ ๋ฒ ์ด์ค๋ผ์ธ์ผ๋ก ์ผ์์ต๋๋ค. ์ด ๋ฒ ์ด์ค๋ผ์ธ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ๊ฐ์ ์ ๊ฐ์ง ์ธ ๋ชจ๋ธ์ ์์ธก์ ๋จ์ ํ๊ท ํ๋ ์์๋ธ ๊ตฌ์กฐ์์ต๋๋ค.
- V19: ํผ์ฒ ๊ธฐ๋ฐ ์ ๋ฌธ๊ฐ (LGBM, XGBoost, CatBoost) - V31: ๊ฐ๋ณ ๋ฉ๋ด ์๊ณ์ด ํจํด ์ ๋ฌธ๊ฐ (PatchTST) - V34.2: ๊ธ๋ก๋ฒ ์๊ณ์ด ํจํด ์ ๋ฌธ๊ฐ (N-BEATS)
์ด์ ๋ชฉํ๋ ์ด ๊ฐ๋ ฅํ ๋ฒ ์ด์ค๋ผ์ธ์ '์ด๋ป๊ฒ ๋ ๋๋ํ๊ฒ ๊ฒฐํฉํ ๊ฒ์ธ๊ฐ'๋ก ๋ช ํํด์ก์ต๋๋ค.
2. ์ฒด๊ณ์ ์ธ ์คํ๊ณผ ํต์ฌ ๋ฐ๊ฒฌ
๊ฐ์ฅ ์ค์ํ ์คํ ์์น์ ์ธ์ ์ต๋๋ค: ๋ฒ ์ด์ค๋ผ์ธ์ ๊ตฌ์ฑํ๋ ๊ฐ๋ณ ๋ชจ๋ธ์ ๊ทธ๋๋ก ๋๊ณ , ์ค์ง ์์ธก ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํฉํ๋ ์ธ๋ถ ๋ก์ง๋ง ์์ ํ์ฌ ์ฑ๋ฅ ๋ณํ๋ฅผ ๊ด์ฐฐํ๋ค.
2.1. ์คํจํ ๊ฐ์ค: ๋ชจ๋ธ ๋ด๋ถ ์์
๊ฐ์ฅ ๋จผ์ ์๋ํ ๊ฒ์ ๋ฒ ์ด์ค๋ผ์ธ์ ํต์ฌ์ธ V19 ๋ชจ๋ธ์ ์๋ก์ด ํผ์ฒ๋ฅผ ์ถ๊ฐํ์ฌ ์ฑ๋ฅ์ ๋์ด๋ ๊ฒ์ด์์ต๋๋ค.
๊ฒฐ๊ณผ: ์์ธก ์ฑ๋ฅ ํ๋ฝ (Public Score 0.5030 โ 0.5092)
๋ถ์: V19 ๋ชจ๋ธ์ด ๋ ๋ณต์กํด์ง๋ฉด์, ๋ค๋ฅธ ๋ฅ๋ฌ๋ ๋ชจ๋ธ(V31, V34.2)๋ค๊ณผ์ ์์ธก ์ ์ฌ๋๊ฐ ๋์์ก์ต๋๋ค. ์ด๋ ์์๋ธ์ ํต์ฌ์ธ ๋ชจ๋ธ ๊ฐ์ ๋ค์์ฑ(Diversity)์ ํด์ณค๊ณ , ์คํ๋ ค ์ ์ฒด ์ฑ๋ฅ์ ์ ํ์ํค๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ก์ต๋๋ค. ์ด๋ฅผ ํตํด ์์๋ธ์์๋ ๊ฐ ๋ชจ๋ธ์ด '์ ๋นํ ์ํ๋ฉด์๋ ์๋ก ๋ค๋ฅธ' ์์ธก์ ๋ด๋๋ ๊ฒ์ด ์ค์ํ๋ค๋ ๊ตํ์ ์ป์์ต๋๋ค.
2.2. ์ฑ๊ณตํ ๊ฐ์ค: ์ธ๋ถ ๊ฒฐํฉ ๋ฐฉ์ ์ต์ ํ
์คํจ ๋ถ์์ ๋ฐํ์ผ๋ก, ๋ชจ๋ธ ๋ด๋ถ๋ ๊ทธ๋๋ก ๋ ์ฑ ์ธ๋ถ ๊ฒฐํฉ ๋ฐฉ์์ ๋ฐ๊พธ๋ ๋ฐ ์ง์คํ์ต๋๋ค.
๊ฐ์ค 1: ๋ชจ๋ธ๋ณ ์ค์๋๊ฐ ๋ค๋ฅผ ๊ฒ์ด๋ค โ ๊ฐ์ค ํ๊ท ์คํ ๊ฒฐ๊ณผ, ํผ์ฒ ๊ธฐ๋ฐ์ ํธ๋ฆฌ ๋ชจ๋ธ(V19)์ด ์์๋ธ์ ์ค์ฌ์ถ ์ญํ ์ ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ๋ค. ๋จ์ ํ๊ท ๋์ V19์ ๋ ๋์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ์ ์ ์๊ฐ ํฌ๊ฒ ์์นํ์ต๋๋ค.
๊ฐ์ค 2: ํ๊ฐ์งํ(SMAPE)์ ํ์ ์ ๊ณต๋ตํ ์ ์๋ค โ ํ์ฒ๋ฆฌ SMAPE ์งํ๋ ์ค์ ๊ฐ์ด 0์ผ ๋ ํ๋ํฐ๊ฐ ์์ง๋ง, ์์ธก๊ฐ์ด 0์ผ ๋ ํ๋ํฐ๊ฐ ๋งค์ฐ ์ปธ๋ค. ์ด๋ฅผ ๋ฐฉ์ดํ๊ธฐ ์ํด, ์ต์ข ์์ธก๊ฐ์ด 0์ธ ๊ฒฝ์ฐ๋ฅผ 1๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ณต๊ฒฉ์ ์ธ ํ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๊ณ , ์ด๋ ์ ์๋ฅผ 0.4์ ๋๋ก ๋์ด์ฌ๋ฆฌ๋ ๊ฒฐ์ ์ ์ธ ํ ์๊ฐ ๋์์ต๋๋ค.
| ๋ฒ์ | ํต์ฌ ์ ๋ต | Public Score | ๋ถ์ ๋ฐ ๊ตํ |
|------|-----------|--------------|--------------|
| V44 | ๋ฒ ์ด์ค๋ผ์ธ (๋จ์ ํ๊ท ) | 0.5030 | ๋ชจ๋ ๊ฒ์ ๊ธฐ์ค์ . |
| V45 | V19 ๋ชจ๋ธ ๋ด๋ถ ์์ | 0.5092 (ํ๋ฝ) | [์คํจ] ์์๋ธ์ ๋ค์์ฑ ๋ถ๊ดด. |
| V49_B | V19 ๊ฐ์ค์น ์ํฅ (0.4) | 0.5017 (์ ๊ธฐ๋ก) | [์ฑ๊ณต] V19๊ฐ ์์๋ธ์ ์ค์ฌ์์ ๋ฐ๊ฒฌ. |
| V50 | V49_B + 0โ1 ํ์ฒ๋ฆฌ | 0.4921 (์ ๊ธฐ๋ก) | [์ฑ๊ณต] ๊ฐ์ค์น์ ํ์ฒ๋ฆฌ ์กฐํฉ์ ํจ๊ณผ ์ฆ๋ช . |
์ด ๊ณผ์ ์ ํตํด ์ ๋ง๋ค์ด์ง ์ฌ๋ฌ ๋ชจ๋ธ์ด ์๋ค๋ฉด, ๊ทธ ๋ด๋ถ๋ฅผ ๊ฑด๋๋ฆฌ๊ธฐ๋ณด๋ค ์ธ๋ถ ๊ฒฐํฉ ๋ฐฉ์์ ์ ๊ตํ๊ฒ ๋ค๋ฌ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ด๋ค๋ผ๋ ๋ช ํํ ๊ฒฐ๋ก ์ ์ป์ ์ ์์์ต๋๋ค.
3. ์ต์ข ์ ์ถ ๋ชจ๋ธ ์ฝ๋
์ต์ข ๋ชจ๋ธ์ ๊ฐ์ค ํ๊ท ๊ณผ ํ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ ๋จ์ํ Python ์ฝ๋๋ก ๊ตฌํ๋์์ต๋๋ค.
import pandas as pd import numpy as np # ๊ฐ ๋ฒ ์ด์ค๋ผ์ธ ๋ชจ๋ธ์ ์์ธก ๊ฒฐ๊ณผ ๋ก๋ pred_v19 = pd.read_csv('submission_v19.csv')['answer'] pred_v31 = pd.read_csv('submission_v31.csv')['answer'] pred_v34_2 = pd.read_csv('submission_v34_2.csv')['answer'] # V19์ 0.5, ๋๋จธ์ง ๋ชจ๋ธ์ 0.25์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ ๊ฐ์ค ํ๊ท # V19๊ฐ ์์๋ธ์ ์ค์ฌ ์ญํ ์ ํ๋ฏ๋ก ๊ฐ์ฅ ๋์ ๊ฐ์ค์น๋ฅผ ํ ๋น weighted_pred = 0.5 * pred_v19 + 0.25 * pred_v31 + 0.25 * pred_v34_2 # wSMAPE ์งํ ๋ฐฉ์ด๋ฅผ ์ํ 0 -> 1 ํ์ฒ๋ฆฌ final_pred = np.where(weighted_pred == 0, 1, weighted_pred) # ์ ์ถ ํ์ผ ์์ฑ submission = pd.read_csv('sample_submission.csv') submission['answer'] = final_pred submission.to_csv('final_submission.csv', index=False)
4. ํ๊ณ
์ต์ข Private Score 61์. ๋ณธ์ ์ ์ง์ถํ์ง ๋ชปํ ๊ฒ์ ์์ฝ์ง๋ง, ์ด๋ฒ ๋ํ๋ฅผ ํตํด ๋ณต์กํ ๋ฌธ์ ์ ๋ํ ์ฒด๊ณ์ ์ธ ์ ๊ทผ๋ฒ๊ณผ ์์๋ธ ์ ๋ต์ ์ค์์ฑ์ ์ฒด๊ฐํ์ต๋๋ค. ํนํ, ์๋ฒฝํ ๋จ์ผ ๋ชจ๋ธ์ ํฅํ ์ง์ฐฉ์ ๋ฒ๋ฆฌ๊ณ , ๊ฒ์ฆ๋ ๋ชจ๋ธ๋ค์ ์ ์๋ ๊ฒ์ ์ง์คํ์ ๋ ๋น๋ก์ ์ฑ๋ฅ์ด ์ค๋ฅด๊ธฐ ์์ํ๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ๋ฐฐ์์ด์์ต๋๋ค.
๋ค์ ๋ํ์์๋ ์ด ๊ฒฝํ์ ๋ฐํ์ผ๋ก, Temporal Fusion Transformer(TFT)์ ๊ฐ์ ์๋ก์ด ์ํคํ ์ฒ์ ๋ชจ๋ธ์ ์์๋ธ์ ์ถ๊ฐํ์ฌ ๋ค์์ฑ์ ๋ ํ๋ณดํ๋ ์ ๋ต์ ์๋ํด ๋ณผ ๊ณํ์ ๋๋ค.