Using a full utility matrix for movie lens data, we predict an optimal assortment for all 671 users when the customer selects under the Multinomial Logit model.
DataMNL<-read.csv("/Users/uzma/Downloads/ml-latest-small/MyData.csv",header=TRUE)
To understand the existing data we analyze it using some basic exploratory functions in R.
dim(DataMNL)
## [1] 671 9066
#summary(DataMNL)
str(DataMNL)
## 'data.frame': 671 obs. of 9066 variables:
## $ X1 : num 2.59 3.73 3.35 4.35 3.91 ...
## $ X2 : num 2.48 3.51 3.57 4.35 3.91 ...
## $ X3 : num 2.55 3.49 3.57 4.35 4 ...
## $ X4 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X5 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X6 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X7 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X8 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X9 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X10 : num 2.55 4 3.46 4 3.91 ...
## $ X11 : num 2.54 3.49 3.49 4.42 3.91 ...
## $ X12 : num 2.55 3.59 3.57 4.35 3.91 ...
## $ X13 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X14 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X15 : num 2.55 3.59 3.57 4.35 3.91 ...
## $ X16 : num 2.55 3.49 3.57 4.35 3.93 ...
## $ X17 : num 2.55 5 3.57 4.3 3.91 ...
## $ X18 : num 2.55 3.49 3.57 4.35 3.83 ...
## $ X19 : num 2.55 3.1 3.57 4.26 3.91 ...
## $ X20 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X21 : num 2.55 3.49 3.67 4.35 3.83 ...
## $ X22 : num 2.55 3.67 3.57 4.35 3.91 ...
## $ X23 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X24 : num 2.56 3.45 3.57 4.35 3.91 ...
## $ X25 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X26 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X27 : num 2.55 3.37 3.57 4.35 3.91 ...
## $ X28 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X29 : num 2.55 3.59 3.57 4.34 3.91 ...
## $ X30 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X31 : num 2.5 3.7 3.57 4.35 3.91 ...
## $ X32 : num 2.45 3.49 3.49 4.35 3.91 ...
## $ X34 : num 2.55 3.37 3.56 5 3.91 ...
## $ X35 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X36 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X37 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X38 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X39 : num 2.55 5 3.57 4.38 4 ...
## $ X40 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X41 : num 2.55 3.49 3.67 4.35 3.91 ...
## $ X42 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X43 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X44 : num 2.55 3.39 3.57 4.35 3.91 ...
## $ X45 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X46 : num 2.44 3.49 3.57 4.35 3.91 ...
## $ X47 : num 2.55 4 3.67 4.35 3.91 ...
## $ X48 : num 2.55 3.37 3.57 4.35 3.91 ...
## $ X49 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X50 : num 2.55 4 3.67 4.35 3.97 ...
## $ X52 : num 2.55 3 3.57 4.35 3.91 ...
## $ X53 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X54 : num 2.55 3.37 3.57 4.35 3.91 ...
## $ X55 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X57 : num 2.55 3.45 3.57 4.35 3.91 ...
## $ X58 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X59 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X60 : num 2.55 3.49 3 4.35 3.91 ...
## $ X61 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X62 : num 2.55 3 3.57 4.35 3.91 ...
## $ X63 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X64 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X65 : num 2.55 3.31 3.57 4.35 3.91 ...
## $ X66 : num 2.55 3.31 3.57 4.35 3.91 ...
## $ X68 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X69 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X70 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X71 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X72 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X73 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X74 : num 2.55 3.52 3.57 4.35 3.91 ...
## $ X76 : num 2.55 3.45 3.57 4.35 3.91 ...
## $ X77 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X78 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X79 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X80 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X81 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X82 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X83 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X84 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X85 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X86 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X87 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X88 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X89 : num 2.55 3.37 3.57 4.35 3.91 ...
## $ X92 : num 2.55 3.45 3.57 4.35 3.91 ...
## $ X93 : num 2.55 3.59 3.57 4.35 3.91 ...
## $ X94 : num 2.55 3.37 3.57 4.35 3.91 ...
## $ X95 : num 2.55 3.67 3.57 4.3 3.91 ...
## $ X96 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X97 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X98 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X99 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X100 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X101 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X102 : num 2.55 3.37 3.57 4.35 3.91 ...
## $ X103 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X104 : num 2.55 3.37 3.57 4.35 4 ...
## $ X105 : num 2.55 3.49 3.57 4.35 3.91 ...
## $ X107 : num 2.55 3.49 3.57 4.35 3.91 ...
## [list output truncated]
For all 671 users we create a ranked list from highest to lowest utility.
#Number of users
m<-nrow(DataMNL)
#Number of movies
n<-ncol(DataMNL)
#Declare a ranked matrix
rankedreputil<-matrix(,m,n)
MNL<-matrix(,m,n)
Vl<-matrix(,m,n)
tempvect<-DataMNL
V0<-rep.int(1,n)
##Create a ranked matrix
rankedreputil<-t(apply(tempvect,1,sort,decreasing = TRUE))
# Find No-choice for MNL
# Here we find the no-choice curve for the existing MNL model
Vl<-exp(rankedreputil)
j<-1
while(j<=m){
for (i in 1:n)
{
#f<-sum(Vl[1:j,i])
MNL[j,i]<-V0[i]/(V0[i]+sum(Vl[j,1:i]))
}
j<-j+1
}
plot(MNL[671,])
#write.csv(MNL, file = "/Users/uzma/Downloads/ml-latest-small/MyMNL.csv", na="")