I'm using a Cox proportional Hazards regression (R survival package) to model Credit card activation propension, ie, which people are more likely to make their first buy? To give more context: Defining target variable - Credit Card industry.
So I have:
birth: Credit card creation
death: Date of first buy
event: people use their card for the first time
Here's the model summary:
## Call:
## coxph(formula = Surv(TIME, EVENT) ~ IDADE_EMPRESA + ZERO_RATIO +
## AVG_VENDAS + UF_CE + UF_ES + UF_DF + VL_LIMITE_COMPRA_ORIGINAL +
## VL_LIMITE_PARCEIRO + SD_VENDAS, data = x)
##
## n= 32548, number of events= 1999
## Concordance= 0.716 (se = 0.007 )
## Rsquare= 0.038 (max possible= 0.706 )
## Likelihood ratio test= 1252 on 9 df, p=0
## Wald test = 1326 on 9 df, p=0
## Score (logrank) test = 1318 on 9 df, p=0
What I have done so far: used 9 months of data to fit the model and 3 remaining months as a holdout validation set. Now, I'm not sure how to use the validation set, what I would like to do is the following:
- Rank the clients who are more likely to buy within 30,60,90 days (ie, I don't want the the Survival estimation T > 30,60,90), then estimate AUC or Concordance index for each time period.
Is that even possible? What are the alternatives for reporting accuracy? I have checked http://dni-institute.in/blogs/cox-regression-interpret-result-and-predict/, but it seems they are doing the opposite of what I need.
NOTE: Survival analysis is new to me, but I'm well familiar with general ML concepts like Cross Validation, Overfitting and so on. Thanks!
EDIT1: I've found the survAUC package, but I'm not sure if i understood the parameters:
train = get.data(is.train=TRUE)
test = get.data(is.train=FALSE)
fit = fit.surv() # get coxph model
surv.train = Surv(train$TIME, train$EVENT)
surv.test = Surv(test$TIME, test$EVENT)
lp = predict(fit, test)
# returns 0.7270601 0.7272526 0.7274083
AUC.cd(surv.train, surv.test, predict(fit), predict(fit, test), c(30, 60, 90))
EDIT2: Another option, survConcordance in the survival package:
fit = fit.surv()
test = get.data(is.train=FALSE)
surv.test = Surv(test$TIME, test$EVENT)
survConcordance(surv.test ~ predict(fit, test), data = test)
# Outputs
n= 428
Concordance= 0.7799616 se= 0.03275571
concordant discordant tied.risk tied.time std(c-d)
23533.00 6639.00 0.00 144.00 1976.61
I'm really not sure about what these lines above are doing, I appreciate any help on this!