본문 바로가기
R

[R 프로그래밍] 로지스틱 회귀분석

by 퍼포먼스마케팅코더 2017. 2. 9.
반응형

# CSV 파일 읽어들이기

dau <- read.csv("section7-dau.csv", header = T, stringsAsFactors = F)

head(dau)


# 유저별로 ID이전을 한 유저인지 아닌지를 나타내는 데이터를 정리

# MAU

mau <- unique (dau[, c("region_month", "device", "user_id")])

# FP MAU

fp.mau <- unique (dau[dau$device=="FP", c("region_month", "device",

"user_id")])

# SP MAU

sp.mau <- unique (dau[dau$device=="SP", c("region_month", "device",

"user_id")])


# 1월과 2월 데이터를 나누기

fp.mau1 <- fp.mau[fp.mau$region_month == "2013-01", ]

fp.mau2 <- fp.mau[fp.mau$region_month == "2013-02", ]

sp.mau1 <- sp.mau[sp.mau$region_month == "2013-01", ]

sp.mau2 <- sp.mau[sp.mau$region_month == "2013-02", ]

# 1월에 피쳐폰으로 이용했던 유저가 2월에도 이용했는가

mau$is_access <- 1

fp.mau1 <- merge(fp.mau1, mau[mau$region_month == "2013-02",

c("user_id", "is_access")], by = "user_id", all.x = T)

fp.mau1$is_access[is.na(fp.mau1$is_access)] <- 0

head(fp.mau1)


# 1월에 피쳐폰으로 이용했고 2월에도 피쳐폰으로 이용했는가

fp.mau2$is_fp <- 1

fp.mau1 <- merge(fp.mau1, fp.mau2[, c("user_id", "is_fp")],

by = "user_id",

all.x = T)

fp.mau1$is_fp[is.na(fp.mau1$is_fp)] <- 0

head(fp.mau1)


# 1월에는 피쳐폰으로 이용하다가 2월에는 스마트폰으로 이용했는가

sp.mau2$is_sp <- 1

fp.mau1 <- merge(fp.mau1, sp.mau2[, c("user_id", "is_sp")],

by = "user_id", all.x = T)

fp.mau1$is_sp[is.na(fp.mau1$is_sp)] <- 0

head(fp.mau1)


# 1월에는 피쳐폰으로 이용했는데 2월에는 이용하지 않았거나 혹은 스마트폰으로 이용한 유저

fp.mau1 <- fp.mau1[fp.mau1$is_access == 0 | fp.mau1$is_sp == 1, ]

head(fp.mau1)


# 날짜별 게임 이용상황 데이터를 정리하기

library(reshape2)

fp.dau1 <- dau[dau$device == "FP" & dau$region_month == "2013-01", ]

fp.dau1$is_access <- 1

fp.dau1.cast <- dcast(fp.dau1, user_id ~ region_day, value.var =

"is_access", function(x) as.character(length(x)))

names(fp.dau1.cast)[-1] <- paste0("X", 1:31, "day")

head(fp.dau1.cast)


# 2월에 스마트폰으로 이용한 유저 데이터를 결합하기

fp.dau1.cast <- merge(fp.dau1.cast, fp.mau1[, c("user_id", "is_sp")],

by = "user_id")

head(fp.dau1.cast)


table(fp.dau1.cast$is_sp)


# 로지스틱 회귀분석을 통한 모델 작성

fit.logit <- step(glm(is_sp ~ ., data = fp.dau1.cast[, -1],

family = binomial))

summary(fit.logit)


# 작성된 모델을 이용해 예측하기

# SP(스마트폰) 이전 확률

fp.dau1.cast$prob <- round(fitted(fit.logit), 2)

# SP(스마트폰)으로 이전할 지 예측

fp.dau1.cast$pred <- ifelse(fp.dau1.cast$prob > 0.5, 1, 0)

head(fp.dau1.cast)


# 예측과 실제

table(fp.dau1.cast[, c("is_sp", "pred")])


# 예측결과로부터 유저군을 추측하기

fp.dau1.cast1 <- fp.dau1.cast[fp.dau1.cast$is_sp == 1 & fp.dau1.cast$pred

== 1, ]

head(fp.dau1.cast1[order(fp.dau1.cast1$prob, decreasing = T), ])


fp.dau1.cast2 <- fp.dau1.cast[fp.dau1.cast$is_sp == 0 & fp.dau1.cast$pred

== 1, ]

head(fp.dau1.cast2[order(fp.dau1.cast2$prob, decreasing = T), ])


fp.dau1.cast3 <- fp.dau1.cast[fp.dau1.cast$is_sp == 0 & fp.dau1.cast$pred

== 0, ]

head(fp.dau1.cast3[order(fp.dau1.cast3$prob), ])



반응형

'R' 카테고리의 다른 글

[R 프로그래밍] 결정트리 분석  (0) 2017.02.09
[R 프로그래밍] 클러스터링  (0) 2017.02.09
[R 프로그래밍] 중회귀분석  (0) 2017.02.09
[데이터분석] 공부할 통계기법  (0) 2017.02.07
[R 프로그래밍] A/B테스트  (0) 2017.02.06

댓글