[R] Help RFM analysis in R (i want a code where i can define my own breaks instead of system defined breaks used in auto_RFM package)

Jim Lemon drjimlemon at gmail.com
Mon Oct 9 22:57:20 CEST 2017


I seriously doubt that you are running the code I sent. What you have
probably done is to run your data, which has a different date format,
without changing the breaks or the date format arguments. As you
haven't provided any example that shows what you are doing, I can't
guess what the problem is.

Jim


On Mon, Oct 9, 2017 at 9:40 PM, Hemant Sain <hemantsain55 at gmail.com> wrote:
> I'm getting all the rows as NA in  Cscore and almost most of the observation
> in R and F and M are also NA.
> what can be the reason for this. also suggest me the appropriate solution.
>
> On 9 October 2017 at 15:51, Jim Lemon <drjimlemon at gmail.com> wrote:
>>
>> Hi Hemant,
>> Here is an example that might answer your questions. Please don't run
>> previous code as it might not work.
>>
>> I define the break values as arguments to the function
>> (rbreaks,fbreaks,mbreaks) If you want the breaks to work, make sure that
>> they cover the range of the input values, otherwise you get NAs.
>>
>> # expects a three (or more) column data frame where
>> # column 1 is customer ID, column 2 is amount of purchase
>> # and column 3 is date of purchase
>> qdrfm<-function(x,rbreaks=3,fbreaks=3,mbreaks=3,date.format="%Y-%m-%d",
>>  weights=c(1,1,1),finish=NA) {
>>
>>  # if no finish date is specified, use current date
>>  if(is.na(finish)) finish<-as.Date(date(), "%a %b %d %H:%M:%S %Y")
>>  x$rscore<-as.numeric(finish-as.Date(x[,3],date.format))
>>  x$rscore<-as.numeric(cut(x$rscore,breaks=rbreaks,labels=FALSE))
>>  custIDs<-unique(x[,1])
>>  ncust<-length(custIDs)
>>  rfmout<-data.frame(custID=custIDs,rscore=rep(0,ncust),
>>   fscore=rep(0,ncust),mscore=rep(0,ncust))
>>  rfmout$rscore<-cut(by(x$rscore,x[,1],min),breaks=rbreaks,labels=FALSE)
>>  rfmout$fscore<-cut(table(x[,1]),breaks=fbreaks,labels=FALSE)
>>  rfmout$mscore<-cut(by(x[,2],x[,1],sum),breaks=mbreaks,labels=FALSE)
>>  rfmout$cscore<-(weights[1]*rfmout$rscore+
>>   weights[2]*rfmout$fscore+
>>   weights[3]*rfmout$mscore)/sum(weights)
>>  return(rfmout[order(rfmout$cscore),])
>> }
>>
>> set.seed(12345)
>> x2<-data.frame(ID=sample(1:50,250,TRUE),
>>  purchase=round(runif(250,5,100),2),
>>  date=paste(rep(2016,250),sample(1:12,250,TRUE),
>>   sample(1:28,250,TRUE),sep="-"))
>>
>> # example 1
>> qdrfm(x2)
>>
>> # example 2
>> qdrfm(x2,rbreaks=c(0,200,400),fbreaks=c(0,5,10),mbreaks=c(0,350,700),
>>  finish=as.Date("2017-01-01"))
>>
>> Jim
>>
>
>
>
> --
> hemantsain.com



More information about the R-help mailing list