Introduction
Online radio keeps track of everything you play. This information is used to make recommendations to you for additional music. This large dataset was mined with arules in R to recommend new music to this community of radio listeners which has ~300,000 records and ~15,000 users.
Results
Figure 1. The output of the apriori command, which filtered data for the rules under a support of 0.01, a confidence of 0.5, and max length of 3.
Figure 2. The output of the apriori, searching for only a subset of rules: (a) all rules with lift is greater than 5, (b) all rules where the confidence is greater than 0.6, (c) all rules with support > 0.02 and confidence greater than 0.6, (d) all the rules where Rihanna appears on the right-hand side, and (e) the top ten rules with the largest lift.
Figure 3. The output of the apriori command, which filtered data for the rules as aforementioned under a support of 0.001, a confidence of 0.5, and max length of 2.
Figure 4. The output of the apriori, searching for only a subset of rules: (a) all rules with lift is greater than 5, (b) all rules where the confidence is greater than 0.6, (c) all rules with support > 0.02 and confidence greater than 0.6, (d) all the rules where Rihanna appears on the right-hand side, and (e) the top ten rules with the largest lift.
Discussion
There are a total of 289,956 data points, with 15,001 unique users that are listening to 1,005 unique artists. From this dataset, there is a total of 48 rules under a support of 0.01, a confidence of 0.5, and a max length of 3. When inspecting the first five rules (Figure 1), the results show each rule, and its corresponding support, confidence and lift if it meets the restrictions placed above. Also, there is a total of 93 rules under a support of 0.001, the confidence of 0.5, and max length of 2. When inspecting the first five rules (Figure 2), the results show each rule, and its corresponding support, confidence and lift if it meets the restrictions placed above.
Apriori counts the transactions within the “playtrans” matrix. According to Hahsler et al. (n.d.), the most used constraints for apriori are known as support and confidence, where the lower the confidence or support values, the more rules the algorithm will generate. This relationship is illustrated between the two rule sets, where with higher support values, there were fewer rules generated. Essentially, support can be seen as the proportion (%) of transactions in the data set with that exact item, whereas confidence is the proportion (%) of transaction where the rule is correct (Hahsler et al., n.d.). The effects between just varying the support values can be seen in the number of subset rules for each rule set (Figure 2 & 4). When reducing the support levels, there was an increase in the number of rules with Rihanna on the right-hand side (Figure 2d & 4d), and this happened across inspecting all the subset rules, even though the support, confidence, and lift values are the same between the rule sets.
Finally, the greater the lift value, the stronger the association rule (Hahsler et al., n.d.). When relaxing the constraints, higher lift values could be observed (Figure 1-4). This happens due to showing more rules, as constraints are weakened, then lift values can increase. Analyzing the top 10 lift values between both rule sets (Figure 2e and 4e), the top value with stricter results doesn’t appear in the top 10 lift values for relaxed constraints. However, with stricter constraints (Figure 2e), users that listen to “the pussycat dolls” have a higher chance of listening to “rihanna”, than any other artist. Whereas with relaxed constraints (Figure 4e), users that listen to “madvillain” have a higher chance of listening to “mf doom”, than any other artist, and that is more likely than the “the pussycat doll”-“rihanna” rule. Similar associations can be made from the data found in the figures (1-4).
Code
setwd(“C:/Users/fj998d/Documents/R/dataSets”)
LastFM=read.csv(“lastfm.csv”, header = F, sep = “,”) ## (Celma, 2009)
#
##
###—————————————————————————————————————-
## Variables: UserID = V1; ArtistID = V2; ArtistName = V3; PlayCount = V4
###—————————————————————————————————————-
## Apriori info(Hahsler, Grun, Hornic, & Buchta, n.d.):
## Constraints for apriori are known as support and confidence, the lower the confidence or supprot the more rules.
## * Support is the proportion (%) of transactions in the data set with that exact item.
## * Confidence is the proportion (%) of transaction where the rule is correct.
## The greater the lift, the stronger the assocition rule, thus lift is a deviation measure of the total rule
## support from the support expected under independence.
## Other Contraints used
## * Max length defines the maximum size of mined frequent item rules.
###—————————————————————————————————————-
##
#
head(LastFM)
length(LastFM$V1)
summary(levels(LastFM$V1))
summary(levels(LastFM$V2))
## a-rules package for asociation rules
install.packages(“arules”)
library(arules)
## Computational enviroment for mining association rules and frequent item sets
## we need to manpulate the data a bit before using arules, we split the data in the vector
## x into groups defined in vector f. (Hahsler, Grun, Hornic, & Buchta, n.d.)
playlists = split(x=LastFM[,”V2″],f=LastFM$V1) # Convert the data to a matrix so that each fan is a row for artists across the clmns (R, n.d.c.)
playlists = lapply(playlists,unique) # Find unique attributes in playlist, and create a list of those in playlists (R, n.d.a.; R, n.d.b.)
playtrans = as(playlists,”transactions”) # Converts data and produce rule sets
## Create association rules with a support of 0.01 and confidence of 0.5, with a max length of 3
## which will show the support that listening to one artist gives to other artists; in other words,
## providing lift to an associated artist.
musicrules = apriori(playtrans, parameter=list(support=0.01, confidence=0.5, maxlen=3)) # filter the data for rules
musicrules
inspect(musicrules[1:5])
## Choose any subset
inspect(subset(musicrules, subset=lift>5)) # tell me all the rules with a lift > 5
inspect(subset(musicrules, subset=confidence>0.6)) # tell me all the rules with a confidence of 0.6 or greater
inspect(subset(musicrules, subset=support>0.02& confidence >0.6)) # tell me the rules within a particular CI
inspect(subset(musicrules, subset=rhs%in%”rihanna”)) # tell me all the rules with rihanna in the left hand side
inspect(head(musicrules, n=10, by=”lift”)) # tell me the top 10 rules with the largest lift
## Create association rules with a support of 0.001 and confidence of 0.1, with a max length of 2
artrules = apriori(playtrans, parameter=list(support=0.001, confidence=0.5, maxlen=2)) # filter the data for rules
artrules
inspect(artrules[1:5])
## Choose any subset
inspect(subset(artrules, subset=lift>5))
inspect(subset(artrules, subset=confidence>0.6))
inspect(subset(artrules, subset=support>0.02& confidence >0.6))
inspect(subset(artrules, subset=rhs%in%”rihanna”))
inspect(head(artrules, n=10, by=”lift”))
## Write down all the rules into a CSV file for co
write(musicrules, file=”musicRulesFromApriori.csv”, sep = “,”, col.names = NA)
write(artrules, file=”artistRulesFromApriori.csv”, sep = “,”, col.names = NA)
Reference
- Celma, O. (2009). Music recommendation datasets for research. Retrieved from http://www.dtic.upf.edu/~ocelma/MusicRecommendationDataset/lastfm-360K.html
- R (n.d.a.) Apply a function over a list or vector. Retrieved from https://stat.ethz.ch/R-manual/R-devel/library/base/html/lapply.html
- R (n.d.b.) Extract unique elements. Retrieved from https://stat.ethz.ch/R-manual/R-devel/library/base/html/unique.html
- R (n.d.c.) Divide into groups and reassemble. Retrieved from https://stat.ethz.ch/R-manual/R-devel/library/base/html/split.html
- Hahsler, M., Grun, B., Hornic, K., & Buchta, C. (n.d.) Introduction to arules — A computational enviromentmnt for mining association rules and frequent item sets. Retrieved from https://cran.r-project.org/web/packages/arules/vignettes/arules.pdf