2023. 1. 25. 09:37ใ๐ง๐ป๐ป With Data/๋ฐ์ดํฐ ๋ถ์
ํ๊ท๋ถ์์ ํต๊ณํ์์ ์์๋์ด ์ฐ๊ตฌ๋์๊ธฐ ๋๋ฌธ์, ํต๊ณ์ ๋ถ์์ ํนํ๋ R์ ์ด์ฉํ๋ ๊ฒ์ด ๋ ํจ๊ณผ์ ์ผ ์ ์๋ค.
R์์๋ ํ์ด์ฌ๊ณผ ๋ฌ๋ฆฌ ๊ธฐ๋ณธ ๋ด์ฅํจ์๋ก ํ๊ท๋ถ์์ ์ํํ ์ ์๊ณ , ์ฌ๋ฌ ํต๊ณ์ ๊ฒ์ ์ด๋ ๊ฐ์ ์ ํ์ธํ๋ ๋ฐ์๋ ๋งค์ฐ ์ ๋ฆฌํ๋ค.
๋ํ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ณ์์ ํ๋ฒ์ ์๋์ผ๋ก ์ํํด์ฃผ๋ ๋ฑ R์ ํ๊ท๋ถ์์ ๋ค๊ฐ๋๋ก ์ํํด๋ณผ ์ ์๋ ๋งค์ฐ ์ข์ ํ๊ฒฝ์ ์ ๊ณตํ๋ค.
์ด์ R์ ํตํ ํต๊ณ์ ์คํ ์ค๋ก ๋น์ฆ๋์ค ๋๋ฉ์ธ์์ ํ๊ท๋ถ์์ด ์ด๋ ํ ์ญํ ์ ํ ์ ์๋ ์ง, ๊ทธ ๊ณผ์ ์ ์ดํด๋ณด๊ณ ์ ํ๋ค.
์ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์จ๋ค.
library(dplyr)
df = read.csv("purch_behavior.csv") #์ด ๋ฐ์ดํฐ๋ ๋ง์ผํ ํ๋์ ์ํด ์ ๋ต์ ์ผ๋ก ์์งํ ๋ฐ์ดํฐ์ด๋ค.
df %>%
glimpse()
๋จผ์ ๋ฐ์ดํฐ๋ฅผ ์ดํด๋ณด๋ฉฐ ์ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ง์ ์ ํ์ํ๋ค.
์ดํด๋ณด๋ ๋ช๋ช ๋ณ์๋ค์ ํํ๋ฅผ ๋ฐ๊ฟ์ค ํ์๊ฐ ์์์ ํ์ ํ ์ ์๋ค.
# purchase(๋ง์ผํ ๊ธฐ๊ฐ ๋ด ๊ตฌ๋งค์ฌ๋ถ) + married(๊ฒฐํผ์ฌ๋ถ) + loyalty_card(๋ก์ํฐ ์นด๋ ์ ๋ฌด), int -> factor(๋ฒ์ฃผํ)
์ ํํ๊ท๋ถ์์์ ๋ฒ์ฃผํ ๋ณ์๋ฅผ ์ด์ฉํ๊ธฐ ์ํด์๋ "๋๋ฏธํ"๋ฅผ ํตํด ์์นํ ๋ณ์๋ก ์ทจ๊ธํด์ผ ํ๋ค. (reference = 0, ๋ถ์๋์ = 1)
์ฐธ๊ณ ๋ก R์์ ํ๊ท๋ชจ๋ธ์ ๋ง๋๋ ํจ์๋ค์ ์๋์ผ๋ก ๋๋ฏธํ, ์์นํ ๋ณํ์ ํด์ค๋ค.
ํ๊ท๋ถ์ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ๋ถ์์ ์์ด์, ์ฌ๋ฌ ์์ด๋์ด๋ฅผ ํตํด ๋ค๋ฅธ ๋ณ์๋ฅผ ์กฐํฉํด์ ์ฌ์ฉํ ์ ์๋ค.
df$married = as.factor(df$married)
df$loyalty_card = as.factor(df$loyalty_card)
df$purchase = as.factor(df$purchase)
๋ณ์๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ์ ๊ทผ์ด ์๋ค.
๋จ๊ณ์ ์ ํ๋ฒ, ์๊ด๊ด๊ณ๊ฐ ๋์ ๋ณ์, VIF(๋ถ์ฐํฝ์ฐฝ์ง์)๊ฐ ๋ฎ์ ๋ณ์๋ฅผ ์ ํํ๋ ๋ฑ ์ฌ๋ฌ ํต๊ณ์ ์๋ฃจ์ ์ด ์กด์ฌํ๋ค.
๊ทธ๋ฐ๋ฐ, ๋ถ์๊ฐ๊ฐ ๊ณ ์ํ ํ๋ฆ์ด ๋ ผ๋ฆฌ์ ์ด๋ผ๋ฉด, ๊ทธ๋ฌํ ๋ฐํ ์ (๋ฐ์ดํฐ์์ ๋๋ฉ์ธ์ผ๋ก)์ด ์๋ ํ๋ค์ด(๋๋ฉ์ธ์์ ๋ฐ์ดํฐ๋ก) ์ ๊ทผ๋ฐฉ์์ด ์ ํจํ ๋์๋ ์๋ค.
์ฆ, ํ๋ค์ด ๋ฐฉ์์ ๋จผ์ ๊ด์ฌ์ด ๊ฐ๋ ๋ณ์๋ค๊ณผ ๊ทธ ๊ด๊ณ๋ฅผ ๊ฐ์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ดํด ๋ชจ๋ธ์ ๋ง๋ค์ด ๋ณด๋ ๊ฒ์ด๋ค.
์ ํํ๊ท๋ชจํ
์ฝ๋: lm(์ข ์๋ณ์ ~ ๋ ๋ฆฝ๋ณ์, data = )
์ฐธ๊ณ ๋ก, lm(์ข ์๋ณ์ ~. ,data = ) ์ด๋ ๊ฒ .์ ๋ฃ์ผ๋ฉด ํ๊ฒ(์ข ์๋ณ์)์ ์ ์ธํ ๋ชจ๋ ๋ณ์๋ฅผ ๋ ๋ฆฝ๋ณ์๋ก ๋ฃ๋๋ค.
ํ์๋ ๋ณ์๋ค ์ค "์ํ๋ณ์"๋ค๊ณผ(๊ฒฐํผ์ฌ๋ถ, ๋ก์ํฐ ์นด๋, ์์ต) "ํ๋๋ณ์"(purchase, recency_days)๊ฐ ์ฃผ๋ฌธ ์์ ์ผ๋ง๋, ์ด๋ค ์ํฅ์ ๋ฏธ์น๋ ์ง๋ฅผ ํ์ธํ๊ณ ์ ํ์๋ค.
lm1 = lm(number_of_orders ~ married + loyalty_card + purchase + income, data = df)
summary(lm1)
________________________
๋ชจ๋ธ์ ๋ง๋ค์๋ค๋ฉด ๋ค์์ผ๋ก ํด์ผํ ๊ฒ์ ๊ทธ ๋ณ์์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ์ผ์ด๋ค.
์ด๋ ํต๊ณ์ ๊ฐ์ค๊ฒ์ ์ ๊ฑฐ์ณ์ผ ํ๋๋ฐ, ์ ๊ฒฐ๊ณผ๋ ๊ทธ ๊ณผ์ ์ ๋งค์ฐ ๊ฐํธํ๊ฒ ํด์ค๋ค.
์์์ Pr์ t-test์์ ์ ์์์ค๊ณผ ๋น๊ต๋์์ด ๋๋ p-value์ด๋ฉฐ, ์ด๋ฅผ ํตํด ๋ณ์์ ์ ํจ์ฑ์ ๊ฒ์ ํ๋ค.
ํต์์ ์ธ ์ ์์์ค์ 0.05(์ ๊ฒฐ๊ณผ์์ *)๋ก, Pr์ด ์ด๋ณด๋ค ์๋ค๋ฉด ์ด ๋ณ์๋ 95% ์ ๋ขฐ์์ค์์ ์ ํจํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์๋ค.
์ ๋ชจ๋ธ์์ ์ ์๋ฏธํ ๋ณ์๋ฅผ ํด์ํด๋ณด๋ฉด, ๋ง์ผํ ์บ ํ์ธ์ ๋ฐ์ํ๋ ๊ณ ๊ฐ์ด, ๋ฐ์ํ์ง ์๋ ๊ณ ๊ฐ์ ๋นํด ์ฃผ๋ฌธ ์๊ฐ ์ฆ๊ฐํ๋ค๋ ๊ฒ๊ณผ(๋จ์๋น 9.8), ๊ณ ๊ฐ์ ์์ ์ด ๋์์๋ก ๊ทธ ๊ณ ๊ฐ์ ์ฃผ๋ฌธ ์ ๋ํ ์ฆ๊ฐํ๋ค๋ ๊ฒ์ด(๋จ์๋น 0.017) 95%์์ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ๋ค๋ ๊ฒฐ๋ก ์ด ๋์จ๋ค.
๋ฌผ๋ก , ์ด๋ฌํ ๋ชจ๋ธ์ด ๋ ์ค๋๋ ฅ์ ๊ฐ์ง๊ธฐ ์ํด์๋ "๋ชจ๋ธ ์ ์ฒด์ ์ ํจ์ฑ"๊ณผ ์ด ๋ชจ๋ธ์ "ํต๊ณ์ ๊ฐ์ "์ ํ์ธํด์ผ๋ง ํ๋ค.
์ด ๋ชจ๋ธ์ ์ ํจ์ฑ์ ์ ๊ฒฐ๊ณผ์ ํ๋จ์์ ๋ณผ ์ ์๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก f-test์ p-value๊ฐ ๊ทธ ์ ์์์ค์์ ๋น๊ต๊ฐ ๋๊ณ , ๋ชจ๋ธ์ ์ค๋ช ๋ ฅ์ R-squared๋ฅผ ํตํด ๋ํ๋๋ค. ์ ๋ชจ๋ธ์ p-value๊ฐ 0.05๋ณด๋ค ํ์ฐธ ์์, ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ ๋ชจ๋ธ์ด์ง๋ง ๊ทธ ์ค๋ช ๋ ฅ์ด ์ฝ 11%์ ๊ทธ์น๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ด ๋ชจ๋ธ์ด ๋ฐ์ดํฐ๋ฅผ ์ถฉ๋ถํ ์ค๋ช ํ๊ณ ์์ง๋ ์๋ค๊ณ ํ ์ ์๋ ๊ฒ์ด๋ค.
๋ํ, ํ๊ท๋ถ์์ ์์ฐจ์ ์ ๊ท์ฑ(์ ๊ท๋ถํฌ๋ฅผ ๋ฐ๋ฅธ๋ค๊ณ ๊ฐ์ ), ๋ฑ๋ถ์ฐ์ฑ(๋ถ์ฐ์ด ์ด๋ ์ง์ ์์๋ ๊ฐ๋ค๋ ๊ฐ์ ), ๋ ๋ฆฝ์ฑ(์ด๋ ์ง์ ์์๋ ๋ ๋ฆฝ์ ์ด๋ค.) ๊ฐ์ ํ์ ๋ชจ๋ธ์ ๋ง๋ค๊ณ ๊ฒ์ ํ๋ค. ์ด์, ์ด๋ค ํ๊ท๋ชจ๋ธ์ด ์ ํจ์ฑ์ ๊ฐ๊ธฐ ์ํด์๋ ์ด๋ฅผ ๋ชจ๋ ํ์ธํด์ผ ํ๋ค.
R์์๋ plot()์ ํตํด ์ด๋ค์ ๊ฐ๋จํ ํ์ธํด ๋ณผ ์ ์๊ณ , ์ฌ๋ฌ ํ์ํ ๊ฒ์ ๋ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ์ ๊ณตํ๋ค.
plot(lm1) #plot(๋ชจ๋ธ)
#์ ๊ท์ฑ ๊ฒ์
qqnorm(lm1$residuals) #normal Q-Q plot
shapiro.test(lm1$residuals)
hist(lm1$residuals)
#๋ ๋ฆฝ์ฑ๊ฒ์
install.packages("lmtest")
library(lmtest)
dwtest(lm1) #๋ชจ๋ธ์ ์ธ์๋ก ๋ฐ๋๋ค.
________________________
๋ก์ง์คํฑํ๊ท๋ชจํ
๋ค์ ๋ถ์์ผ๋ก ๋์์ ์ ์ ํํ๊ท๋ชจ๋ธ์ ์์ธํ ๋ณด๋ฉด, ๋ง์ผํ ์บ ํ์ธ์ ๋ฐ์ํ๋ ๊ณ ๊ฐ์ด ๋ฐ์ํ์ง ์๋ ๊ณ ๊ฐ์ ๋นํด ์ฃผ๋ฌธ ์๊ฐ ์ฆ๊ฐํ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.(๋จ์๋น 9.8)
์ฆ, purchase ๋ณ์(๋ง์ผํ ์บ ํ์ธ์ ์ํ ๊ตฌ๋งค์ฌ๋ถ)๊ฐ ์ฃผ๋ฌธ ์์ ์ํฅ์ ๊ฐํ๊ฒ ๋ฏธ์น๊ณ ์๋, ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ ๋ณ์์ธ ๊ฒ์ด๋ค.
์ด์, purchase๋ฅผ ๊ทน๋ํ ํ๋ค๋ฉด ์ฃผ๋ฌธ ์ ๋ํ ์ค๋ฅผ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์๋๋ฐ, ์ด๋ฅผ ์ํด ์๋ก์ด ๋ชจ๋ธ์ ๋ง๋ค์ด๋ณผ ์ ์๋ค.
purchase๋ R์์ factorํ, ์ฆ, ๋ฒ์ฃผํ ๋ณ์์ด๋ฏ๋ก, ๋ฒ์ฃผํ ๋ณ์๋ฅผ ํ๊ฒ(์ข ์๋ณ์)์ผ๋ก ํ ํ๊ท๋ชจ๋ธ์ธ ๋ก์ง์คํฑํ๊ท๋ชจ๋ธ์ด ์ ์ ํ ๋ถ์ ๋ฐฉ๋ฒ์ด๋ค. ๋ก์ง์คํฑํ๊ท๋ชจ๋ธ์ ๋ง๋๋ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
#์ฝ๋: glm(์ข ์๋ณ์ ~ ๋ ๋ฆฝ๋ณ์, family = binomial, data = )
glm1 = glm(purchase ~ married + loyalty_card + number_of_orders + recency_days + income, family =binomial() , data = df)
summary(glm1)
์์ ํ๊ท๋ชจ๋ธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ ๋ฆฝ๋ณ์๋ค์ ์ํ๋ณ์์ ํ๋๋ณ์๋ฅผ ์กฐํฉํด์ ๋ฃ์ ์ ์๋ค.
p-value๋ฅผ ๋ณด๋ฉด, ๋ชจ๋ ๋ณ์์ p-value๊ฐ ์ ์์์ค 0.05๋ณด๋ค ์์ ๋ชจ๋ ๋ณ์๊ฐ ํต๊ณ์ ์ผ๋ก ์ ์๋ฏธํ๋ค๋ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์๋ค.
๋ก์ง์คํฑํ๊ท๋ชจ๋ธ์ ๋ก์งํ๋์ด์๋ ๊ฐ์ผ๋ก ๋ฐํ์ ํด์ฃผ๋๋ฐ, ์ด๋ฅผ ํด์ํ๊ธฐ ์ํด์๋ ์์ฐ์ ํจ์๋ฅผ ์ ์ฉํ๋ค.
exp(glm1$coefficients)
์ด ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด, ์๋์ ์ผ๋ก ํฐ ์ํฅ๋ ฅ์ ๊ฐ์ง๋ ๋ ๋ณ์์ธ married1๊ณผ loyalty_card1์ ์ฃผ๋ชฉํ ํ์๊ฐ ์๋ค.
์ด๋ฅผ ์น์ฐ๋น(odds ratio)๋ก ํด์ํ๋ฉด, ๊ธฐํผ์๋ ๋ฏธํผ์์ ๋นํด ๋ง์ผํ ์บ ํ์ธ์ ํตํ ๊ตฌ๋งคํ๋ฅ ์ 2.2๋ฐฐ ์ฆ๊ฐ์ํค๋ฉฐ, ๋ก์ํฐ ์นด๋๋ฅผ ๊ฐ์ง ์ฌ๋์ ๊ฐ์ง์ง ์์ ์ฌ๋์ ๋นํด 2.44๋ฐฐ ์ฆ๊ฐ์ํจ๋ค.
์ฆ, ์ฌ๊ธฐ์ ๋ง์ผํ ์์ฌ์ ์ ๋ฝ์๋ผ ์ ์๋ค. ์ด ๋ชจ๋ธ์ ๊ฒฐ๊ณผ๋ฅผ ํตํด, ๋ง์ผํ ์บ ํ์ธ์ ๊ตฌ๋งคํจ๊ณผ๋ฅผ ๋์ด๊ธฐ ์ํด ์ด๋ค ์ง์ ์ ๊ณต๋ตํด์ผํ ์ง ๊ทธ ์ง์ ์ ๋ฝ์๋ผ ์ ์๋ ๊ฒ์ด๋ค.
ํด๋น ๊ตฌ๋งค ๋ฐ์ดํฐ์ ๋ฐ๋ฅธ ๋ถ์๊ฒฐ๊ณผ๋ ๊ธฐํผ์์ ๋ก์ํฐ ์นด๋๋ฅผ ๊ฐ์ง ์ด๋ค์ด ๋ง์ผํ ์บ ํ์ธ ์ดํ ๊ตฌ๋งคํ ํ๋ฅ ์ ๋ ๋์ด๊ณ ์๋ค.
๋ฐ๋ผ์, ๋ง์ผํ ์ ๊ตฌ๋งค์ ํ์จ์ ๋์ด๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฃผ๋ฌธ๊ฑด์์ ์์ต์ ๋์ด๊ธฐ ์ํด์๋, ๊ธฐํผ์๋ฅผ ํ๊ฒ์ผ๋ก ํ ๋ง์ผํ ํ๋์ด๋ ๋ก์ํฐ ์นด๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ถฉ์ฑ๊ณ ๊ฐ์ ์ํ ๋ง์ผํ ํ๋์ ์ ๊ฐํ ํ์๊ฐ ์๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ ์ ์๋ค.
์ด์ฒ๋ผ ๋ถ์์ ํ๋ฆ์ ์ก๋ ๊ฒ์ ํ๊ท๋ถ์ ๋ด ์ผ๋ จ์ ๊ณผ์ ์์ ์์ด๋์ด๋ฅผ ์ป์ ์๋ ์๋ค.
์ค์ํ ๊ฒ์ ๋ถ์๊ฐ์ ํ๋ฆ์ ๋ ผ๋ฆฌ์ ์ด์ด์ผ ํ๋ค๋ ๊ฒ์ด๊ณ , ํต๊ณ์ ์ผ๋ก ๊ทธ ๊ทผ๊ฑฐ๊ฐ ํ๋ณด๋์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
*์ฐธ๊ณ
https://seollane22.tistory.com/9
'๐ง๐ปโ๐ป With Data > ๋ฐ์ดํฐ ๋ถ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PYTHON] ์์ฌ๊ฒฐ์ ๋๋ฌด (Decision Tree) (0) | 2023.02.07 |
---|---|
[R] Cox PH model [Survival Analysis] (0) | 2023.02.01 |
[R] ์นดํ๋ ๋ง์ด์ด(kaplan-meier) [Survival Analysis] (2) | 2023.01.10 |