No-choice Probability curves under the Multinomoal Logit Model

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)

Exploratory data Analysis

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]

Create a ranked list of Movies for each user

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="")