๋ค์ค๊ณต์ ์ฑ์ด๋?
ํ๊ท๋ถ์์ ํ ๋ ๋ค์ค๊ณต์ ์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ํ๋๋ฐ, ๊ณผ์ฐ ๋ค์ค๊ณต์ ์ฑ์ด๋ ๋ฌด์์ผ๊น?
๋ค์ค๊ณต์ ์ฑ(Multicollinearity)๋ ํ๊ท๋ถ์ ์ ๋ ๋ฆฝ๋ณ์๋ค ๊ฐ์ ๊ฐํ ์๊ด๊ด๊ณ๊ฐ ๋ํ๋ ๋๋ฅผ ์ผ์ปซ๋ ์ฉ์ด๋ค. ๋ง์ฝ ๋ณ์๋ค ๊ฐ ๋ค์ค๊ณต์ ์ฑ์ด ๋๋ค๊ณ ํ๋จ๋๋ฉด, ์ด ๋ณ์๋ค์ ๋์ด์ ๋ ๋ฆฝ๋ณ์๋ผ๊ณ ๋ณด๊ธฐ ์ด๋ ต๋ค. ํ๊ท๋ถ์์ ์ ์ ์ธ ๋ ๋ฆฝ๋ณ์ X๋ค์ ํตํด Y๋ฅผ ์์ธกํ๋ค๋ ๊ฐ์ ์ด ์ฑ๋ฆฝํ ์ ์๊ฒ ๋๋ฏ๋ก ๋ค์ค๊ณต์ ์ฑ์ ํ๊ท๋ถ์์ ์ฌ๊ฐํ ๋ฌธ์ ์ค ํ๋๋ก ์๊ผฝํ๋ค.
VIF
Variance Inflation Factor์ ์ฝ์์ธ VIF๋ ํ๊ตญ์ด๋ก ๋ฒ์ญํ๋ฉด ๋ถ์ฐ ํฝ์ฐฝ ์ธ์๋ค. ์ด ๊ฐ์ ๋ ๋ฆฝ๋ณ์์ ๋ค์ค๊ณต์ ์ฑ์ ํ๋จํ๊ธฐ ์ํ ์งํ๋ก ์ฌ์ฉ๋๋ฉฐ ๊ณ์ฐ์์ ๋ค์๊ณผ ๊ฐ๋ค.
r_i๋ i๋ฒ์งธ ๋ณ์๋ฅผ ์ ์ธํ ํ๊ท์์ R^2๊ฐ์ด๋ค.
๋ณดํต VIF ๊ฐ์ด 10์ ์ด๊ณผํ๋ฉด ๋ค์ค๊ณต์ ์ฑ์ด ์ ์๋ฏธํ๊ฒ ๋๋ค๊ณ ํ๋จํ์ฌ ์ ๊ฑฐํ๋ค. ์ ํํ 10์ผ๊น?
VIF > 10 ์์ ์์ ๋์จ ์์์ผ๋ก ๋์ฒดํ์ฌ ๊ณ์ฐํ ๊ฒฝ์ฐ, r_i > 0.9 ๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๋์จ๋ค. ์ฆ i๋ฒ์งธ ๋ณ์๊ฐ ์์์ ๋น ์ ธ๋ ๋๋จธ์ง๊ฐ Y๋ฅผ 90% ์ด์ ์ค๋ช ํ ์ ์๋ค๋ ๋ป์ด๋ค. ์ฆ ์ ๊ฑฐํด์ ๋ค๋ฅธ ๊ฐ๋ค๋ก ๋์ฒดํด๋ ์ ์๋ฏธํ๊ฒ ์์ธก์ด ๋ฌ๋ผ์ง์ง ์๋๋ค.
VIF in python
ํ์ด์ฌ์์ VIF๋ฅผ ๊ตฌํ๊ธฐ ์ํด ๋ชจ๋์ ์ด์ฉํ๋ค.
from statsmodels.stats.outliers_influence import variance_inflation_factor as vif
ํน์ ๋ฐ์ดํฐํ๋ ์์์ ๋ ๋ฆฝ๋ณ์๋ณ๋ก VIF๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
vif_factors = [vif(X.values, i) for i in range(0, X.shape[1])]
vif_report = pd.DataFrame({"variable": X.columns, "VIF Factors": vif_factors})
vif_report๋ ๊ฐ ๋ ๋ฆฝ๋ณ์๋ณ VIF๊ฐ ์ ์ฅ๋ ๋ฐ์ดํฐํ๋ ์์ด๋ฏ๋ก, ์ด๋ฅผ ํ์ธํ๋ฉด ์ด๋ค ๋ ๋ฆฝ๋ณ์์ VIF๊ฐ ํฐ์ง ์์์ง ์ ์ ์๋ค. ๊ทธ๊ฒ์ ๋ณด๊ณ VIF๊ฐ 10์ ์ด๊ณผํ๋ค๋ฉด ๊ฐ์ ์ ๊ฑฐํ๋ฉด ๋๋ค.
๋ค๋ฅธ ํ๊ท๋ถ์์์๋ ๋ค์ค๊ณต์ ์ฑ์ ๊ณ ๋ คํด์ผ ํ ๊น?
์ด ๋ถ๋ถ์ ๋ํด์ ๋ช ํํ ๋ต์ ์ฐพ์ง ๋ชปํ๋ค. ์ธํฐ๋ท ์๋ฃ๋ฅผ ๋ค์ ธ๋ด๋ ์ ํํ๊ท๋ฅผ ์ ์ธํ ๋ค๋ฅธ ํ๊ท๋ถ์(์๋ฅผ ๋ค์ด ๋ก์ง์คํฑ ํ๊ท)์ ๋ค์ค๊ณต์ ์ฑ์ ๊ณ ๋ คํด์ผํ๋์ง์ ๊ดํ ๋ฌธ์ ์ ๋ชจ๋ ๋ค๋ฅธ ๋ต์ ๋ด๋์๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ์ง๋ง ๋ค์ค๊ณต์ ์ฑ์ ๋ณธ์ง๊ณผ ํ๊ท๋ถ์์ ๊ฐ์ ์ ์๊ฐํด๋ณธ๋ค๋ฉด, ๋ค์ค๊ณต์ ์ฑ์ผ๋ก ์ธํด ๋ ๋ฆฝ๋ณ์๋ค ๊ฐ์ ๋ ๋ฆฝ์ฑ์ด ๋ณด์ฅ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก, ๋ชจ๋ ํ๊ท๋ถ์์์ ๋ค์ค๊ณต์ ์ฑ์ ๊ณ ๋ คํด์ผ ํ ๊ฒ์ด๋ผ๊ณ ํ๋จํ์๋ค.
์ฌ์ค ๋ด ๋ง์ด ์ณ์ง ์์ ์๋ ์๋ค. ์ด ๋ถ๋ถ์ ๋ ผ๋ฌธ ๊ฐ์ ์๋ฃ๋ฅผ ๋ ์ฐพ์๋ณผ ํ์๊ฐ ์๋ค.