,Market Basket Analysis and Collaborative Filtering

Recommendation Engines

Market Basket Analysis

1

library(arules)
library(tidyverse)
retail_transactions <- read.transactions("retail_transactions_2.csv", sep = ",")

2

summary(retail_transactions)
transactions as itemMatrix in sparse format with
 10000 rows (elements/itemsets/transactions) and
 5471 columns (items) and a density of 0.002797642 

most frequent items:
WHITE HANGING HEART T-LIGHT HOLDER           REGENCY CAKESTAND 3 TIER 
                               823                                777 
           JUMBO BAG RED RETROSPOT                      PARTY BUNTING 
                               644                                577 
     ASSORTED COLOUR BIRD ORNAMENT                            (Other) 
                               558                             149680 

element (itemset/transaction) length distribution:
sizes
   1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16 
1660  727  492  408  396  330  290  307  281  258  279  262  227  239  262  246 
  17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32 
 201  197  219  194  164  148  138  128  109  110   95   90  109   86   76   66 
  33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48 
  56   56   59   44   41   46   57   44   33   41   39   31   31   27   29   25 
  49   50   51   52   53   54   55   56   57   58   59   60   61   62   63   64 
  27   24   29   19   23   27   24   16   21   19   19   15   17    7   11   13 
  65   66   67   68   69   70   71   72   73   74   75   76   77   78   79   80 
   7   16   16   13    4   10    9    6    7    6    5   10    8    1    2    4 
  81   82   83   84   85   86   87   88   89   90   91   92   93   94   95   97 
   8    4    3    5    5    6    6    5    1    2    3    7    4    2    2    3 
  98   99  101  102  103  105  107  108  109  111  113  114  116  117  119  120 
   4    1    1    2    3    1    2    1    2    1    1    1    1    3    1    1 
 121  122  125  126  127  134  135  143  146  147  158  168  178  235  249  285 
   1    2    1    1    2    1    1    1    1    1    1    1    1    1    1    1 
 320  400 
   1    1 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00    3.00   10.00   15.31   21.00  400.00 

includes extended item information - examples:
                      labels
1                   1 HANGER
2     10 COLOUR SPACEBOY PEN
3 12 COLOURED PARTY BALLOONS

2A

10000 transactions are tracked in this dataset

2B

5741 Items are avaiable for purchase

2C

10000 transactions X 5471 Items = 54,710,000

2D

400

2E

The mean in 15.31

3

itemFrequencyPlot(retail_transactions, topN = 20, horiz = T)

4

retail_rules <- apriori(retail_transactions, parameter = list (support = 0.01, confidence = 0.5, minlen = 2))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen
        0.5    0.1    1 none FALSE            TRUE       5    0.01      2
 maxlen target  ext
     10  rules TRUE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 100 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[5471 item(s), 10000 transaction(s)] done [0.08s].
sorting and recoding items ... [405 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 done [0.00s].
writing ... [72 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].

4A

72 rules are discovered after applying the apriori function

4B

A support threshold of 0.01 means that an itemset must appear in at least 1% of all transactions for it to be considered. In other words, only item combinations that occur in at least 1% of the total transactions are taken into account.

4C

A confidence threshold of 0.5 means that when the antecedent (the “if” part of the rule) is present, there is at least a 50% chance that the consequent (the “then” part of the rule) will also be present. This indicates a moderate level of reliability in the association between the items.

5

summary(retail_rules)
set of 72 rules

rule length distribution (lhs + rhs):sizes
 2  3 
54 18 

   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   2.00    2.00    2.00    2.25    2.25    3.00 

summary of quality measures:
    support          confidence        coverage            lift       
 Min.   :0.01000   Min.   :0.5020   Min.   :0.01080   Min.   : 6.461  
 1st Qu.:0.01080   1st Qu.:0.5502   1st Qu.:0.01680   1st Qu.:14.406  
 Median :0.01200   Median :0.6226   Median :0.01970   Median :22.160  
 Mean   :0.01351   Mean   :0.6637   Mean   :0.02126   Mean   :27.032  
 3rd Qu.:0.01673   3rd Qu.:0.7307   3rd Qu.:0.02515   3rd Qu.:26.647  
 Max.   :0.02280   Max.   :1.0000   Max.   :0.03530   Max.   :92.593  
     count      
 Min.   :100.0  
 1st Qu.:108.0  
 Median :120.0  
 Mean   :135.1  
 3rd Qu.:167.2  
 Max.   :228.0  

mining info:
                data ntransactions support confidence
 retail_transactions         10000    0.01        0.5
                                                                                                call
 apriori(data = retail_transactions, parameter = list(support = 0.01, confidence = 0.5, minlen = 2))

5A

54 rules have 2 items and 18 rules have 3 items

5B

The minimum lift value is 6.461. The maximum lift value is 92.593

6

inspect(sort(retail_rules, by = "lift"))
     lhs                                      rhs                                   support confidence coverage      lift count
[1]  {SUGAR}                               => {SET 3 RETROSPOT TEA}                  0.0108  1.0000000   0.0108 92.592593   108
[2]  {SET 3 RETROSPOT TEA}                 => {SUGAR}                                0.0108  1.0000000   0.0108 92.592593   108
[3]  {COFFEE,                                                                                                                  
      SUGAR}                               => {SET 3 RETROSPOT TEA}                  0.0108  1.0000000   0.0108 92.592593   108
[4]  {COFFEE,                                                                                                                  
      SET 3 RETROSPOT TEA}                 => {SUGAR}                                0.0108  1.0000000   0.0108 92.592593   108
[5]  {SUGAR}                               => {COFFEE}                               0.0108  1.0000000   0.0108 64.102564   108
[6]  {COFFEE}                              => {SUGAR}                                0.0108  0.6923077   0.0156 64.102564   108
[7]  {SET 3 RETROSPOT TEA}                 => {COFFEE}                               0.0108  1.0000000   0.0108 64.102564   108
[8]  {COFFEE}                              => {SET 3 RETROSPOT TEA}                  0.0108  0.6923077   0.0156 64.102564   108
[9]  {SET 3 RETROSPOT TEA,                                                                                                     
      SUGAR}                               => {COFFEE}                               0.0108  1.0000000   0.0108 64.102564   108
[10] {PINK HAPPY BIRTHDAY BUNTING}         => {BLUE HAPPY BIRTHDAY BUNTING}          0.0104  0.7074830   0.0147 45.940454   104
[11] {BLUE HAPPY BIRTHDAY BUNTING}         => {PINK HAPPY BIRTHDAY BUNTING}          0.0104  0.6753247   0.0154 45.940454   104
[12] {WOODEN HEART CHRISTMAS SCANDINAVIAN} => {WOODEN STAR CHRISTMAS SCANDINAVIAN}   0.0139  0.7277487   0.0191 40.207110   139
[13] {WOODEN STAR CHRISTMAS SCANDINAVIAN}  => {WOODEN HEART CHRISTMAS SCANDINAVIAN}  0.0139  0.7679558   0.0181 40.207110   139
[14] {PINK REGENCY TEACUP AND SAUCER,                                                                                          
      ROSES REGENCY TEACUP AND SAUCER}     => {GREEN REGENCY TEACUP AND SAUCER}      0.0170  0.8854167   0.0192 29.912725   170
[15] {GREEN REGENCY TEACUP AND SAUCER,                                                                                         
      ROSES REGENCY TEACUP AND SAUCER}     => {PINK REGENCY TEACUP AND SAUCER}       0.0170  0.7456140   0.0228 29.705738   170
[16] {GREEN REGENCY TEACUP AND SAUCER,                                                                                         
      REGENCY CAKESTAND 3 TIER}            => {PINK REGENCY TEACUP AND SAUCER}       0.0108  0.7397260   0.0146 29.471156   108
[17] {PINK REGENCY TEACUP AND SAUCER,                                                                                          
      REGENCY CAKESTAND 3 TIER}            => {GREEN REGENCY TEACUP AND SAUCER}      0.0108  0.8571429   0.0126 28.957529   108
[18] {HAND WARMER SCOTTY DOG DESIGN}       => {HAND WARMER OWL DESIGN}               0.0106  0.6057143   0.0175 27.040816   106
[19] {GREEN REGENCY TEACUP AND SAUCER}     => {PINK REGENCY TEACUP AND SAUCER}       0.0197  0.6655405   0.0296 26.515559   197
[20] {PINK REGENCY TEACUP AND SAUCER}      => {GREEN REGENCY TEACUP AND SAUCER}      0.0197  0.7848606   0.0251 26.515559   197
[21] {DOLLY GIRL LUNCH BOX}                => {SPACEBOY LUNCH BOX}                   0.0140  0.6635071   0.0211 26.225577   140
[22] {SPACEBOY LUNCH BOX}                  => {DOLLY GIRL LUNCH BOX}                 0.0140  0.5533597   0.0253 26.225577   140
[23] {GARDENERS KNEELING PAD CUP OF TEA}   => {GARDENERS KNEELING PAD KEEP CALM}     0.0167  0.7260870   0.0230 25.931677   167
[24] {GARDENERS KNEELING PAD KEEP CALM}    => {GARDENERS KNEELING PAD CUP OF TEA}    0.0167  0.5964286   0.0280 25.931677   167
[25] {REGENCY CAKESTAND 3 TIER,                                                                                                
      ROSES REGENCY TEACUP AND SAUCER}     => {PINK REGENCY TEACUP AND SAUCER}       0.0107  0.6369048   0.0168 25.374692   107
[26] {GREEN REGENCY TEACUP AND SAUCER,                                                                                         
      PINK REGENCY TEACUP AND SAUCER}      => {ROSES REGENCY TEACUP AND SAUCER}      0.0170  0.8629442   0.0197 25.085586   170
[27] {PINK REGENCY TEACUP AND SAUCER,                                                                                          
      REGENCY CAKESTAND 3 TIER}            => {ROSES REGENCY TEACUP AND SAUCER}      0.0107  0.8492063   0.0126 24.686231   107
[28] {HAND WARMER BIRD DESIGN}             => {HAND WARMER OWL DESIGN}               0.0100  0.5494505   0.0182 24.529042   100
[29] {REGENCY CAKESTAND 3 TIER,                                                                                                
      ROSES REGENCY TEACUP AND SAUCER}     => {GREEN REGENCY TEACUP AND SAUCER}      0.0120  0.7142857   0.0168 24.131274   120
[30] {GREEN REGENCY TEACUP AND SAUCER,                                                                                         
      REGENCY CAKESTAND 3 TIER}            => {ROSES REGENCY TEACUP AND SAUCER}      0.0120  0.8219178   0.0146 23.892960   120
[31] {LARGE WHITE HEART OF WICKER}         => {SMALL WHITE HEART OF WICKER}          0.0110  0.5238095   0.0210 23.280423   110
[32] {JUMBO BAG PEARS}                     => {JUMBO BAG APPLES}                     0.0115  0.6318681   0.0182 22.977023   115
[33] {GREEN REGENCY TEACUP AND SAUCER}     => {ROSES REGENCY TEACUP AND SAUCER}      0.0228  0.7702703   0.0296 22.391578   228
[34] {ROSES REGENCY TEACUP AND SAUCER}     => {GREEN REGENCY TEACUP AND SAUCER}      0.0228  0.6627907   0.0344 22.391578   228
[35] {PINK REGENCY TEACUP AND SAUCER}      => {ROSES REGENCY TEACUP AND SAUCER}      0.0192  0.7649402   0.0251 22.236635   192
[36] {ROSES REGENCY TEACUP AND SAUCER}     => {PINK REGENCY TEACUP AND SAUCER}       0.0192  0.5581395   0.0344 22.236635   192
[37] {ROUND SNACK BOXES SET OF 4 FRUITS}   => {ROUND SNACK BOXES SET OF4 WOODLAND}   0.0102  0.5454545   0.0187 22.083180   102
[38] {RED KITCHEN SCALES}                  => {IVORY KITCHEN SCALES}                 0.0113  0.5566502   0.0203 21.492288   113
[39] {HOT WATER BOTTLE I AM SO POORLY}     => {CHOCOLATE HOT WATER BOTTLE}           0.0117  0.5879397   0.0199 20.923121   117
[40] {BAKING SET SPACEBOY DESIGN}          => {BAKING SET 9 PIECE RETROSPOT}         0.0109  0.6942675   0.0157 20.848874   109
[41] {STRAWBERRY CHARLOTTE BAG}            => {RED RETROSPOT CHARLOTTE BAG}          0.0103  0.5988372   0.0172 20.438130   103
[42] {CHARLOTTE BAG PINK POLKADOT}         => {RED RETROSPOT CHARLOTTE BAG}          0.0114  0.5876289   0.0194 20.055593   114
[43] {ALARM CLOCK BAKELIKE IVORY}          => {ALARM CLOCK BAKELIKE RED}             0.0130  0.6842105   0.0190 19.832189   130
[44] {ALARM CLOCK BAKELIKE IVORY}          => {ALARM CLOCK BAKELIKE GREEN}           0.0105  0.5526316   0.0190 18.861146   105
[45] {ALARM CLOCK BAKELIKE GREEN}          => {ALARM CLOCK BAKELIKE RED}             0.0184  0.6279863   0.0293 18.202503   184
[46] {ALARM CLOCK BAKELIKE RED}            => {ALARM CLOCK BAKELIKE GREEN}           0.0184  0.5333333   0.0345 18.202503   184
[47] {HOT WATER BOTTLE TEA AND SYMPATHY}   => {CHOCOLATE HOT WATER BOTTLE}           0.0104  0.5073171   0.0205 18.053988   104
[48] {ALARM CLOCK BAKELIKE PINK}           => {ALARM CLOCK BAKELIKE RED}             0.0148  0.6115702   0.0242 17.726674   148
[49] {ALARM CLOCK BAKELIKE PINK}           => {ALARM CLOCK BAKELIKE GREEN}           0.0123  0.5082645   0.0242 17.346910   123
[50] {LUNCH BAG VINTAGE LEAF DESIGN}       => {LUNCH BAG APPLE DESIGN}               0.0121  0.5377778   0.0225 16.247063   121
[51] {WOODEN FRAME ANTIQUE WHITE}          => {WOODEN PICTURE FRAME WHITE FINISH}    0.0175  0.5520505   0.0317 16.236779   175
[52] {WOODEN PICTURE FRAME WHITE FINISH}   => {WOODEN FRAME ANTIQUE WHITE}           0.0175  0.5147059   0.0340 16.236779   175
[53] {LUNCH BAG DOLLY GIRL DESIGN}         => {LUNCH BAG SPACEBOY DESIGN}            0.0122  0.5754717   0.0212 16.029852   122
[54] {LUNCH BAG  BLACK SKULL,                                                                                                  
      LUNCH BAG RED RETROSPOT}             => {LUNCH BAG PINK POLKADOT}              0.0101  0.5260417   0.0192 14.902030   101
[55] {LUNCH BAG PINK POLKADOT,                                                                                                 
      LUNCH BAG RED RETROSPOT}             => {LUNCH BAG  BLACK SKULL}               0.0101  0.5179487   0.0195 12.916427   101
[56] {LUNCH BAG  BLACK SKULL,                                                                                                  
      LUNCH BAG PINK POLKADOT}             => {LUNCH BAG RED RETROSPOT}              0.0101  0.6601307   0.0153 12.768486   101
[57] {SET OF TEA COFFEE SUGAR TINS PANTRY} => {SET OF 3 CAKE TINS PANTRY DESIGN}     0.0103  0.5852273   0.0176 11.276055   103
[58] {LUNCH BAG PINK POLKADOT}             => {LUNCH BAG RED RETROSPOT}              0.0195  0.5524079   0.0353 10.684873   195
[59] {LUNCH BAG WOODLAND}                  => {LUNCH BAG RED RETROSPOT}              0.0155  0.5115512   0.0303  9.894606   155
[60] {LUNCH BAG SUKI DESIGN}               => {LUNCH BAG RED RETROSPOT}              0.0172  0.5043988   0.0341  9.756264   172
[61] {JUMBO BAG STRAWBERRY}                => {JUMBO BAG RED RETROSPOT}              0.0171  0.6263736   0.0273  9.726299   171
[62] {JUMBO BAG PINK POLKADOT}             => {JUMBO BAG RED RETROSPOT}              0.0211  0.6187683   0.0341  9.608204   211
[63] {JUMBO  BAG BAROQUE BLACK WHITE}      => {JUMBO BAG RED RETROSPOT}              0.0141  0.5529412   0.0255  8.586043   141
[64] {JUMBO BAG WOODLAND ANIMALS}          => {JUMBO BAG RED RETROSPOT}              0.0109  0.5505051   0.0198  8.548215   109
[65] {JUMBO STORAGE BAG SUKI}              => {JUMBO BAG RED RETROSPOT}              0.0168  0.5472313   0.0307  8.497380   168
[66] {JUMBO BAG SPACEBOY DESIGN}           => {JUMBO BAG RED RETROSPOT}              0.0105  0.5440415   0.0193  8.447849   105
[67] {JUMBO BAG PINK VINTAGE PAISLEY}      => {JUMBO BAG RED RETROSPOT}              0.0125  0.5122951   0.0244  7.954893   125
[68] {RED HANGING HEART T-LIGHT HOLDER}    => {WHITE HANGING HEART T-LIGHT HOLDER}   0.0162  0.6303502   0.0257  7.659176   162
[69] {PINK REGENCY TEACUP AND SAUCER,                                                                                          
      ROSES REGENCY TEACUP AND SAUCER}     => {REGENCY CAKESTAND 3 TIER}             0.0107  0.5572917   0.0192  7.172351   107
[70] {GREEN REGENCY TEACUP AND SAUCER,                                                                                         
      PINK REGENCY TEACUP AND SAUCER}      => {REGENCY CAKESTAND 3 TIER}             0.0108  0.5482234   0.0197  7.055642   108
[71] {GREEN REGENCY TEACUP AND SAUCER,                                                                                         
      ROSES REGENCY TEACUP AND SAUCER}     => {REGENCY CAKESTAND 3 TIER}             0.0120  0.5263158   0.0228  6.773691   120
[72] {PINK REGENCY TEACUP AND SAUCER}      => {REGENCY CAKESTAND 3 TIER}             0.0126  0.5019920   0.0251  6.460644   126

6A

Customers that frequently purchase sugar also tend to purchase the 3 set teapot

6B

The confidence value is 1 which means that all purchases with sugar are correct and the support value is 0.0108 which means it only covers 1.08% of purchases tracked in the data set

7

greenteacup_rules <- subset(retail_rules, items %in% "GREEN REGENCY TEACUP AND SAUCER")
inspect(greenteacup_rules)
     lhs                                   rhs                               support confidence coverage      lift count
[1]  {PINK REGENCY TEACUP AND SAUCER}   => {GREEN REGENCY TEACUP AND SAUCER}  0.0197  0.7848606   0.0251 26.515559   197
[2]  {GREEN REGENCY TEACUP AND SAUCER}  => {PINK REGENCY TEACUP AND SAUCER}   0.0197  0.6655405   0.0296 26.515559   197
[3]  {GREEN REGENCY TEACUP AND SAUCER}  => {ROSES REGENCY TEACUP AND SAUCER}  0.0228  0.7702703   0.0296 22.391578   228
[4]  {ROSES REGENCY TEACUP AND SAUCER}  => {GREEN REGENCY TEACUP AND SAUCER}  0.0228  0.6627907   0.0344 22.391578   228
[5]  {GREEN REGENCY TEACUP AND SAUCER,                                                                                  
      PINK REGENCY TEACUP AND SAUCER}   => {ROSES REGENCY TEACUP AND SAUCER}  0.0170  0.8629442   0.0197 25.085586   170
[6]  {PINK REGENCY TEACUP AND SAUCER,                                                                                   
      ROSES REGENCY TEACUP AND SAUCER}  => {GREEN REGENCY TEACUP AND SAUCER}  0.0170  0.8854167   0.0192 29.912725   170
[7]  {GREEN REGENCY TEACUP AND SAUCER,                                                                                  
      ROSES REGENCY TEACUP AND SAUCER}  => {PINK REGENCY TEACUP AND SAUCER}   0.0170  0.7456140   0.0228 29.705738   170
[8]  {GREEN REGENCY TEACUP AND SAUCER,                                                                                  
      PINK REGENCY TEACUP AND SAUCER}   => {REGENCY CAKESTAND 3 TIER}         0.0108  0.5482234   0.0197  7.055642   108
[9]  {PINK REGENCY TEACUP AND SAUCER,                                                                                   
      REGENCY CAKESTAND 3 TIER}         => {GREEN REGENCY TEACUP AND SAUCER}  0.0108  0.8571429   0.0126 28.957529   108
[10] {GREEN REGENCY TEACUP AND SAUCER,                                                                                  
      REGENCY CAKESTAND 3 TIER}         => {PINK REGENCY TEACUP AND SAUCER}   0.0108  0.7397260   0.0146 29.471156   108
[11] {GREEN REGENCY TEACUP AND SAUCER,                                                                                  
      ROSES REGENCY TEACUP AND SAUCER}  => {REGENCY CAKESTAND 3 TIER}         0.0120  0.5263158   0.0228  6.773691   120
[12] {GREEN REGENCY TEACUP AND SAUCER,                                                                                  
      REGENCY CAKESTAND 3 TIER}         => {ROSES REGENCY TEACUP AND SAUCER}  0.0120  0.8219178   0.0146 23.892960   120
[13] {REGENCY CAKESTAND 3 TIER,                                                                                         
      ROSES REGENCY TEACUP AND SAUCER}  => {GREEN REGENCY TEACUP AND SAUCER}  0.0120  0.7142857   0.0168 24.131274   120

Collaborative Filtering

1

library(recommenderlab)
library(tidyverse)

2

steam_ratings <- read_csv("steam_ratings.csv")
steam_ratings <- as(steam_ratings, "matrix")
steam_ratings <- as(steam_ratings, "realRatingMatrix")

3

vector_ratings <- as.vector(steam_ratings@data)
table(vector_ratings)
vector_ratings
      0       1       2       3       4       5 
3236066    4773   12500   19762   10655    4724 

3 B

game_avg_ratings <- colMeans(steam_ratings, na.rm = TRUE)
hist(game_avg_ratings, 
     breaks = 20, 
     main = "Histogram of Average Game Ratings", 
     xlab = "Average Rating",
     col = "lightblue")

3C

user_game_counts <- rowCounts(steam_ratings)
hist(user_game_counts, 
     breaks = 20, 
     main = "Histogram of Number of Games Rated per User", 
     xlab = "Number of Ratings",
     col = "lightgreen")

4

4A

set.seed(101)

4B

eval_scheme <- evaluationScheme(data = steam_ratings, 
                               method = "split",  
                               train = 0.8,      
                               given = 6,        
                               goodRating = 3)  

4C

train_games <- getData(eval_scheme, "train")
known_games <- getData(eval_scheme, "known")
unknown_games <- getData(eval_scheme, "unknown")

5A

ubcf_model_1 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = "center", method = "Cosine"))

ubcf_model_2 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = "Z-score", method = "Cosine"))

ubcf_model_3 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = NULL, method = "Cosine"))


ubcf_model_4 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = "center", method = "Euclidean"))

ubcf_model_5 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = "Z-score", method = "Euclidean"))

ubcf_model_6 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = NULL, method = "Euclidean"))


ubcf_model_7 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = "center", method = "Pearson"))

ubcf_model_8 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = "Z-score", method = "Pearson"))

ubcf_model_9 <- Recommender(data = train_games,
                            method = "UBCF", 
                            parameter = list(normalize = NULL, method = "Pearson"))

5 B

ubcf_predict_1 <- predict(object = ubcf_model_1,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_1 <- calcPredictionAccuracy(x = ubcf_predict_1,
                                      data = unknown_games)
ubcf_eval_1
     RMSE       MSE       MAE 
1.1697655 1.3683514 0.9183398 
ubcf_predict_2 <- predict(object = ubcf_model_2,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_2 <- calcPredictionAccuracy(x = ubcf_predict_2,
                                      data = unknown_games)
ubcf_eval_2
    RMSE      MSE      MAE 
1.184555 1.403170 0.923375 
ubcf_predict_3 <- predict(object = ubcf_model_3,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_3 <- calcPredictionAccuracy(x = ubcf_predict_3,
                                      data = unknown_games)
ubcf_eval_3
     RMSE       MSE       MAE 
1.0793268 1.1649463 0.8189319 
ubcf_predict_4 <- predict(object = ubcf_model_4,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_4 <- calcPredictionAccuracy(x = ubcf_predict_4,
                                      data = unknown_games)
ubcf_eval_4
     RMSE       MSE       MAE 
1.1910345 1.4185633 0.9163087 
ubcf_predict_5 <- predict(object = ubcf_model_5,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_5 <- calcPredictionAccuracy(x = ubcf_predict_5,
                                      data = unknown_games)
ubcf_eval_5
     RMSE       MSE       MAE 
1.2103032 1.4648339 0.9309624 
ubcf_predict_6 <- predict(object = ubcf_model_6,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_6 <- calcPredictionAccuracy(x = ubcf_predict_6,
                                      data = unknown_games)
ubcf_eval_6
     RMSE       MSE       MAE 
1.0990975 1.2080152 0.8294308 
ubcf_predict_7 <- predict(object = ubcf_model_7,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_7 <- calcPredictionAccuracy(x = ubcf_predict_7,
                                      data = unknown_games)
ubcf_eval_7
     RMSE       MSE       MAE 
1.1212624 1.2572293 0.8702777 
ubcf_predict_8 <- predict(object = ubcf_model_8,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_8 <- calcPredictionAccuracy(x = ubcf_predict_8,
                                      data = unknown_games)
ubcf_eval_8
     RMSE       MSE       MAE 
1.1345807 1.2872733 0.8790968 
ubcf_predict_9 <- predict(object = ubcf_model_9,
                          newdata = known_games, 
                          type = "ratings")

ubcf_eval_9 <- calcPredictionAccuracy(x = ubcf_predict_9,
                                      data = unknown_games)
ubcf_eval_9
     RMSE       MSE       MAE 
1.1086429 1.2290892 0.8349371 

7

ubcf_model_5 has the highest MAE score of 0.9309624

ubcf_model_rec <- predict(object = ubcf_model_3,
                          newdata = known_games,
                          type = "topNList",
                          n = 3) 


rec_list <- as(ubcf_model_rec, "list")
rec_list[1:5]
$`0`
[1] "Bridge Constructor"          "Car Mechanic Simulator 2014"
[3] "Democracy 3"                

$`1`
[1] "8BitMMO"                        "Airline Tycoon 2"              
[3] "Alan Wake's American Nightmare"

$`2`
[1] "Cogs"              "FINAL FANTASY VII" "Frozen Hearth"    

$`3`
[1] "12 Labours of Hercules"                   
[2] "12 Labours of Hercules II The Cretan Bull"
[3] "Age of Empires Online"                    

$`4`
[1] "Airline Tycoon 2"    "BattleBlock Theater" "Bridge Constructor" 

8

Steam can utilise the output of the Collaborative Filtering model to offer personalised game recommendations to each user. By suggesting titles based on the preferences of similar users, Steam makes it easier for individuals to discover new games that align with their tastes, thereby enhancing user experience and boosting engagement. This targeted approach not only encourages users to spend more time on the platform but also drives higher conversion rates and increased sales through customised promotions and optimised storefront displays.