๊ธฐ์ฐจ ์ธํธ์ ํ
์คํธ ์ธํธ ์ฌ์ด์ ๊ฐ๊ฒฉ์ด ์๋ ์๊ณ์ด ๋ฐ์ดํฐ์ ๋ํด ์์ผ๋ก ๊ฑท๊ธฐ cv๋ฅผ ๊ตฌํํฉ๋๋ค.
ํ์ฅ
@saninstein ์ ๊ฒฉ์ฐจ๊ฐ ์์ต๋๊น?
@clstaudt gap์ ์ฃผ์ ๊ฑฐ๋์์ ๋ชจ๋ธ ํ๊ฐ์ ์ ์ฉํ ๊ธฐ๋ฅ์ ๋๋ค. ๊ฐ๊ฒฉ ์์ธก์์ ๋ชจ๋ธ์ด ํ๋ จ ์ธํธ ์งํ ๋ฐ์ดํฐ์์ ๋งค์ฐ ์ ์ํ๋๊ณ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ์ ํ๋๋ ๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ ๋๋ค. ๋ฐ๋ผ์ ์ด๋ค ๊ฒฝ์ฐ์๋ ํ๋ จ ์ธํธ ํ์ ๋ฐ์ํ ์ฝ๊ฐ์ "์ํธํ" ๋ฐ์ดํฐ๋ฅผ ๊ฑด๋๋ฐ๋ ๊ฒ์ด ์ ์ฉํ ์ ์์ต๋๋ค.
์๊ณ์ด ๊ด๋ จ ๊ธฐ๋ฅ์ ๋ํ ์ฐ๋ฆฌ์ ์ผ๋ฐ์ ์ธ ์ ์ฅ์ sklearn์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค๋ ๊ฒ์ ๋๋ค(์ ์ด๋ ํ์ฌ๋ก์๋). ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ํ์์คํฌํ์ ๊ฐ์ ์ํ ์์ฑ์ด ์ฒจ๋ถ๋๋ฉด ๋ฌธ์ ๋ฅผ ๋ค์ ๊ฒํ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด์ ๋ํด @scikit-learn/core-devs๋ก๋ถํฐ ์ต์ํ ํ๋์ ๋ค๋ฅธ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ง๋ง ํ์ฌ๋ก์๋ "๊ณ ์น ์ ์๋" ๊ฒฐ์์์ด ์ ํฌํ์ ๋๋ค.
@adrinjalali sklearn์๋ ์ด๋ฏธ ์๊ณ์ด์ ๋ํ ๋ง์ ์ข์ ๋ชจ๋ธ์ด ์์ต๋๋ค.
์ด๋ ๊ฒ?
@adrinjalali ์ด๋ฏธ sklearn์์ ๊ตฌํ๋ TimeSeriesSplit์ด ์์ต๋๋ค :)
TimeSeriesSplit์ ์ ์๋ WalkForwardCV์ ํน์ ์ฌ๋ก์
๋๋ค( gap=0, expanding=True
์ธ์๋ก ๋ฌ์ฑ ๊ฐ๋ฅ). ์ค์ ๋ก TimeSeriesSplit์ WalkForwardCV๋ก ์ฝ๊ฒ ๋์ฒด๋ ์ ์์ต๋๋ค(์์ ์ธ๊ธํ ๋๋ก ๊ธฐ๋ณธ ์ธ์๋ฅผ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋จ).
์ ๋ ์ฃผ์ ๊ฑฐ๋ ML ํ์ ์ผ์์ด๋ฉฐ ๋ค์ํ sklearn ๊ธฐ๋ฅ๊ณผ sklearn ํธํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ ์ ํ CV ์คํ๋ฆฌํฐ๊ฐ ์์ด์ sklearn์ ๋ค์ ๊ธฐ์ฌํ๊ธฐ๋ก ๊ฒฐ์ ํ์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ ๊ฒ์ ๋๋ค. :)
TimeSeriesSplit์ ์ ์๋ WalkForwardCV์ ํน์ ์ฌ๋ก์ ๋๋ค(gap=0, expand=True ์ธ์๋ก ๋ฌ์ฑ ๊ฐ๋ฅ). ์ค์ ๋ก TimeSeriesSplit์ WalkForwardCV๋ก ์ฝ๊ฒ ๋์ฒด๋ ์ ์์ต๋๋ค(์ด์ ์ ์ธ๊ธํ ๋๋ก ๊ธฐ๋ณธ ์ธ์๋ฅผ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋จ).
๊ณต์ ํ์ง๋ง ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ ๋ฐฉ์์ผ๋ก TimeSeriesSplit
๋ฅผ ํจ์นํ๋ ค๊ณ ํ ๊ฒ์
๋๋ค. ๋ํ ์ปค๋ฎค๋ํฐ์์ ๋ฐ์๋ค์ผ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค.
WalkForwardCV์ ์ ์ผํ ๊ฒฝ์ฐ๋ ์๊ณ์ด ์์ธก์ด ์๋๋๋ค. ๋ฐ์ดํฐ ์ธํธ ๊ด์ฐฐ์ด ์๊ฐ์ ๋ฐ๋ผ ์ ๋ ฌ๋๊ณ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ํ๋์ด์ผ ํ ๋ ์ ์ฉํฉ๋๋ค.
์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ ์์ ์ค ํ๋๋ ๊ฑฐ๋์ "ํ๊ฐ"๋ฅผ ์ค ml ๋ชจ๋ธ๋ก ๊ธฐ์กด ๊ฑฐ๋ ์ ๋ต์ ๊ฐ์ ํ๋ ค๊ณ ํ ๋ ๋ถ๋ฅ ๋ฌธ์ ๋ฅผ ํํฐ๋งํ๋ ๊ฑฐ๋๋ฅผ ์๋ ๊ฒ์ ๋๋ค.
๊ณต์ ํ์ง๋ง ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ ๋ฐฉ์์ผ๋ก TimeSeriesSplit์ ํจ์นํ๋ ค๊ณ ํ ๊ฒ์ ๋๋ค. ๋ํ ์ปค๋ฎค๋ํฐ์์ ๋ฐ์๋ค์ผ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค.
์ต๊ณ ์ ์๋ฃจ์ ์ด ๋ ๊ฑฐ๋ผ ๋ฏฟ์ต๋๋ค.
์ ๋ ์๊ณ์ด ์์ธก ๋ชจ๋ธ์ ์ฐ๊ตฌํ๋ ๋ฐ์ดํฐ ๊ณผํ์์ ๋๋ค. ์๊ณ์ด ๊ด๋ จ ์ฌํญ์ scikit-learn์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฌ๋ค๊ณ ๊ฐ์ ํ๊ณ ์ด ์ค๋ ๋์์ ์ค๋ช ํ๋ ๋ฐฉ๋ฒ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ์์ฒด ์ ํจ์ฑ ๊ฒ์ฌ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์์ํ์ต๋๋ค.
๋์ค์ ๋๋ TimeSeriesSplit ์ ์กด์ฌ๋ฅผ ์๊ฒ ๋์๊ณ ๋ด๊ฐ ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ๊ธฐ ์์ํ๋์ง ๊ถ๊ธํ์ต๋๋ค. ๊ฒ์ฆ ์ฝ๋๋ฅผ ๊ธฐ์กด์ ํ๋ฆฝ๋ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ณ ์ถ์ต๋๋ค.
์ด๋ฐ ์ข ๋ฅ์ ๋ชจ๋ธ ํ๊ฐ์ ๋ํ ์๊ตฌ๊ฐ ๋ถ๋ช ํ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ด ์ด๋์ ์ ํฉํ์ง ์ฌ์ ํ ๊ถ๊ธํฉ๋๋ค.
์๊ณ์ด์ ๋ํ ์์ธก์ ์ํด์๋ ๋ง์ ํจํด์ด ํ์ํฉ๋๋ค. NS
์๋ฅผ ๋ค์ด ์จ์ด๋ธ๋ฆฟ ๊ธฐ๋ฅ์ ์์ฑํ๋ ๋ณํ๊ธฐ๊ฐ
๋งค์ฐ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ๋ค์ scikit-learn์ ๋ฒ์๋ฅผ ๋ฒ์ด๋ฉ๋๋ค. ์ ์ฉํ ๊ฒ์
๋๋ค
์ด ๋ชจ๋ ๊ฒ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ํจํค์ง๋ฅผ ๋ง๋ญ๋๋ค. ๊ทธ๊ฒ
์๋ง ์ถ์ง๋ ฅ์ ์ป์ ๊ฒ์
๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ ํจํค์ง๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ ์ฉํ ๊ฒ์ ๋๋ค. ์๋ง ํ๋ ฅ์ ๋ฐ์ ๊ฒ์ ๋๋ค.
์. ๊ฐ์ ํ์ธ์.
https://github.com/scikit-learn-contrib/์ ์ด๋ฌํ ํจํค์ง๊ฐ ์์ผ๋ฉด ๊ธฐ์ฉ๋๋ค.
๊ทธ๋ผ ์ด๋ง ์ข ๋ฃํฉ๋๋ค :)
๋ ๋์ ์๊ณ์ด ๊ต์ฐจ ๊ฒ์ฆ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ฒ์์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ํ ์ฐธ์กฐ #13666 #13204 #6322 #13761
๋ฒ์๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. @amueller ๊ฐ ์ด๋ฅผ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๋ก ํ์ฅํ๋ ๋ฐ ๊ฐ๋ฐฉ์ ์ด์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก scikit-learn ์ถ์ ๊ธฐ(์ฆ, sklearn ํจํค์ง)์์ ๋ชจ๋ธ์ด ์ํ ์์์ ๊ธฐ๋ฅ ์์์ ๋ค์๊ฐ ๋ถ๋ณํด์ผ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์๊ณ์ด ์ถ์ ๊ธฐ๋ ์ ์ธ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ค๋ซ๋์ ์ํ ์ฃผ๋ฌธ์ ์ฃผ์ํด์ผ ํ ์ฌํญ์ ๊ณ ๋ คํ ๊ต์ฐจ ๊ฒ์ฆ ์คํ๋ฆฌํฐ์๋ ์ด๋ฌํ ์ ์ฝ์ด ์์ต๋๋ค. ๊ถ๊ทน์ ์ผ๋ก ๊ต์ฐจ ๊ฒ์ฆ์ ML์ ๋ํ ํต์ฌ ๊ฐ์ ์ด ์๋ ๊ณณ์ ๋๋ค.
๊ทธ๋ฌ๋ @amueller ๋ ์ง์ ํ๋ฏ์ด ์ค์ ๋ก ๋ํ๋ ๊ธฐ์กด ํ ๋ฆฌํ์คํธ์์ ๊ณ์๋์ด ํธ์์ ์ธ ์ํ๋ก ์ด๋ํด์ผ ํฉ๋๋ค.
๋ฌผ๋ก , ํ์ง๋ง ๋ฐ์ดํฐ์ ์ค์ ํ์์คํฌํ๊ฐ ๋ถํ ์์ ์ค์ํด์ผ ํ๋ ๊ฒฝ์ฐ(IMO๊ฐ ์์ด์ผ ํจ)๊ฐ ์๋๋ผ ๋จ์ํ ํ ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์ฃผ์ํฉ๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ์กฐ๋ง๊ฐ ํ์์คํฌํ๋ฅผ ์ฒ๋ฆฌํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ต๋๊น?
https://github.com/scikit-learn/scikit-learn/issues/3202 ์์ ์ฒ์ ์ ์ํ ์ดํ 5๋ ๋์ ์ด ์ง๋ฌธ์ ๊ต์ก ๋๋ ์ ์ฉ ๋ํ์์ ์ต์ 50๋ฒ ๋์์ต๋๋ค. @saninstein , ์ฌ๊ธฐ์ ํฌํจํ ์ง ์๋๋ฉด -contrib๋ฅผ ์ถ์งํ ์ง ๊ฒฐ์ ํ์ จ๋์? ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ํ์ํ ๊ฒ์ด ์์ผ๋ฉด (์ด๋๊ฐ) ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค.
์ ๋ ๊ธฐ์ฌํ๊ณ ์ถ์ต๋๋ค. ์ด์ ๋ํด ๋ค๋ฅธ ๋ฌธ์ ์์ ์์ฑํ์ผ๋ฉฐ TimeSeriesSplit์ ํ์ฅํ๊ฑฐ๋ ์ด์ ๋ํ ๋ค๋ฅธ ํจํค์ง๋ฅผ ๋ง๋๋ ๋ฐ ํ๋ ฅํ๊ณ ์ถ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด CV ๋๋ฉ์ธ์ ๋ถํ ๊ณผ ๊ด๋ จ๋์ด ์์ผ๋ฉฐ sklearn์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์งํ ์ง๊ธ ์ด๋๋ก ๊ฐ์ผ ํ ์ง, ๋ฌด์์ ํด์ผ ํ ์ง ๋ง๋งํ๊ธฐ๋ ํ์ง๋ง ๊ณตํํ๊ณ ์ถ์ต๋๋ค. ๋๋ ๋ด ์๊ฐ์ ์ผ๋์๋๊ณ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
@mjbommar ์์ ๋์ @jnothman์ด ๋งํ๋ฏ์ด ์ฐ๋ฆฌ๋ ์์ผ๋ก ๋์๊ฐ๋ ๋ฐ ๋งค์ฐ ๊ฐ๋ฐฉ์ ์ด๋ฉฐ ์ผ๋ถ ๊ธฐ์กด PR, ํนํ #13761 ๋ฐ #13204๊ฐ ์์ผ๋ฉฐ ๋ API์ ๋ํ ํผ๋๋ฐฑ์ ๋ง์ด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
์ ์๊ฐ์๋ #13204๊ฐ ๊ฐ์ฅ ์ฑ์ํด ๋ณด์ฌ์ ๊ฑฐ๊ธฐ์์ ๊ฐ๋ ๊ฒ์ด ๊ฐ์ฅ ์๋ฏธ๊ฐ ์์ง ์์๊น์? @kykosic ์ด ์์ง ์์ ์ ํ๊ณ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋ฆ์ด์ก๋์ ?
ํ #13204๋ WalkForward๋ฅผ ๊ตฌํํ์ง ์์ง๋ง... #13204๋ฅผ ๋จผ์ ๋ณํฉํ๊ณ ๋์ค์ WalkForward๋ฅผ ๊ตฌํํ์๊ฒ ์ต๋๊น?
๊ทธ๊ฒ์ ๋ณ๋์ CV ๊ฐ์ฒด์ฌ์ผ ํฉ๋๊น?
@amueller ์ด ๊ธ์ด ์ฌ๋ผ์ค๊ธฐ ์ ๊น์ง #13204์ ๋ํด ์๊ณ ์์์ต๋๋ค. ๋๋ ๋ค์ ์ฃผ์ ๊ทธ๊ฒ์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋ฃจ๋ฉฐ ์ฌ์ ํ ์ ํฉํ์ง ํ์ธํ ๊ฒ์ ๋๋ค.
@kykosic ๊ต์ฅํฉ๋๋ค, ๊ฐ์ฌํฉ๋๋ค!
#13204๊ฐ ์๋ฃ๋์ด ์ด ๋ฌธ์ ๊ฐ ์ข ๋ฃ๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค. ๋๋ #13204๊ฐ ์ด๊ฒ์ ์ ์ ์กฐ๊ฑด์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
gap
๋ฅผ TimeSeriesSplit
ํ์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ ๋์ ์๊ณ์ด ๊ต์ฐจ ๊ฒ์ฆ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ฒ์์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.