Este tipo de sistema depende de las calificaciones que da la gente a un objeto. Entre más esparcidad (más NA’s, más espacios vacios) menos eficiente se vuelve el sistema

Vamos a inventar datos de usuarios y convertirlos en una matriz

##               KP1 Enredados UP Cars1 Ts3 Shrek2 Monja
## Cecilia Rivas   3         4  5     4   4      3     3
## Luis Alfredo    5         3  5     5   3      5     3
## Daniel Najera   4         3  5     5   5      5     1
## Luis Mendoza    5         3  4     5   4      5    NA

Ahora hacemos el proceso de matrices

##               cosine_similarity
## Cecilia Rivas         0.9099072
## Luis Alfredo          0.9557122
## Daniel Najera         0.9843118

Usamos la función creada con anterioridad para predecir “You” en base a los 3 usuarios para 3 películas

## # A tibble: 7 × 2
##   movie     predicted_rating
##   <chr>                <dbl>
## 1 KP1                   4.02
## 2 Enredados             3.32
## 3 UP                    5   
## 4 Cars1                 4.68
## 5 Ts3                   4.01
## 6 Shrek2                4.36
## 7 Monja                 2.31

UP es la película con calificación más alta por lo tanto en el sistema de recomendación sería la primera en aparecer

LS0tDQp0aXRsZTogIlNpc3RlbWEgZGUgcmVjb21lbmRhY2nDs24gY29sYWJvcmF0aXZvIC0gTHVpcyBNZW5kb3phIEEwMDgyOTA5OSB5IENlY2lsaWEgUml2YXMgQTAxMjg0ODc0Ig0KZGF0ZTogIjIwMjMtMDQtMjEiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHRoZW1lOiBzYW5kc3RvbmUNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFKQ0KYGBgDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkgICANCmxpYnJhcnkocmVjb21tZW5kZXJsYWIpDQpgYGANCg0KRXN0ZSB0aXBvIGRlIHNpc3RlbWEgZGVwZW5kZSBkZSBsYXMgY2FsaWZpY2FjaW9uZXMgcXVlIGRhIGxhIGdlbnRlIGEgdW4gb2JqZXRvLg0KRW50cmUgbcOhcyBlc3BhcmNpZGFkIChtw6FzIE5BJ3MsIG3DoXMgZXNwYWNpb3MgdmFjaW9zKSBtZW5vcyBlZmljaWVudGUgc2UgdnVlbHZlIGVsIHNpc3RlbWENCg0KVmFtb3MgYSBpbnZlbnRhciBkYXRvcyBkZSB1c3VhcmlvcyB5IGNvbnZlcnRpcmxvcyBlbiB1bmEgbWF0cml6DQpgYGB7cn0NCm1vdmllX3JhdGluZ3MgPC0gZGF0YS5mcmFtZSgNCiAgS1AxID0gYygzLCA1LCA0LCA1KSwgDQogIEVucmVkYWRvcyA9IGMoNCwgMywgMywgMyksDQogIFVQID0gYyg1LCA1LCA1LCA0KSwNCiAgQ2FyczEgPSBjKDQsIDUsIDUsIDUpLA0KICBUczMgPSBjKDQsIDMsIDUsIDQpLA0KICBTaHJlazIgPSBjKDMsIDUsIDUsIDUpLA0KICBNb25qYSA9IGMoMywgMywgMSwgTkEpDQopDQpyb3duYW1lcyhtb3ZpZV9yYXRpbmdzKSA8LSBjKCdDZWNpbGlhIFJpdmFzJywgJ0x1aXMgQWxmcmVkbycsICdEYW5pZWwgTmFqZXJhJywgJ0x1aXMgTWVuZG96YScpDQptb3ZpZV9yYXRpbmdzDQpgYGANCg0KQWhvcmEgaGFjZW1vcyBlbCBwcm9jZXNvIGRlIG1hdHJpY2VzDQpgYGB7cn0NCmNvc2luZV9zaW1pbGFyaXR5IDwtIGZ1bmN0aW9uKHZlY18xLCB2ZWNfMikgew0KICB2ZWNfbGVuIDwtIGxlbmd0aCh2ZWNfMSkNCiAgDQogICMgTkEgdmFsdWVzIGFyZSByZXBsYWNlZCB3aXRoIDANCiAgdmVjXzFbaXMubmEodmVjXzEpXSA8LSAwDQogIHZlY18yW2lzLm5hKHZlY18yKV0gPC0gMA0KICANCiAgIyBDb21wdXRpbmcgdGhlIGRlbm9taW5hdG9yDQogIHZlY18xX2Rlbm9tIDwtIHNxcnQoc3VtKHZlY18xXjIpKQ0KICB2ZWNfMl9kZW5vbSA8LSBzcXJ0KHN1bSh2ZWNfMl4yKSkNCiAgZGVub21pbmF0b3IgPC0gdmVjXzFfZGVub20gKiB2ZWNfMl9kZW5vbQ0KICANCiAgIyBDb21wdXRpbmcgdGhlIG51bWVyYXRvcg0KICB0aWIgPSB0aWJibGUodmVjXzEgPSB2ZWNfMSwgdmVjXzIgPSB2ZWNfMikNCiAgdGliIDwtIHRpYiAlPiUgbXV0YXRlKHByb2R1Y3RzID0gdmVjXzEgKiB2ZWNfMikNCiAgbnVtZXJhdG9yIDwtIHN1bSh0aWIkcHJvZHVjdHMpDQogIA0KICAjIFJldHVybiB0aGUgY29zaW5lIHNpbWlsYXJpdHkNCiAgcmV0dXJuIChudW1lcmF0b3IgLyBkZW5vbWluYXRvcikNCn0NCmBgYA0KDQoNCmBgYHtyfQ0KIyBPYnRlbmVtb3MgbG9zIHZlY3RvcmVzIGRlIGNhZGEgcGVyc29uYQ0KTHVpc19NZW5kb3phIDwtIGFzLm51bWVyaWMoYXMudmVjdG9yKG1vdmllX3JhdGluZ3NbJ0x1aXMgTWVuZG96YScsXSkpDQpDZWNpbGlhX1JpdmFzIDwtIGFzLm51bWVyaWMoYXMudmVjdG9yKG1vdmllX3JhdGluZ3NbJ0NlY2lsaWEgUml2YXMnLF0pKQ0KTHVpc19BbGZyZWRvIDwtIGFzLm51bWVyaWMoYXMudmVjdG9yKG1vdmllX3JhdGluZ3NbJ0x1aXMgQWxmcmVkbycsXSkpDQpEYW5pZWxfTmFqZXJhIDwtIGFzLm51bWVyaWMoYXMudmVjdG9yKG1vdmllX3JhdGluZ3NbJ0RhbmllbCBOYWplcmEnLF0pKQ0KDQoNCiMgT2J0ZW5lbW9zICJkaXN0YW5jaWEiIHVzYW5kbyBzaW1pbGl0dWQgcG9yIGNvbnNlbm8NCnNpbWlsYXJpdGllcyA8LSBkYXRhLmZyYW1lKA0KICBjb3NpbmVfc2ltaWxhcml0eSA9IGMoY29zaW5lX3NpbWlsYXJpdHkoTHVpc19NZW5kb3phLCBDZWNpbGlhX1JpdmFzKSwgY29zaW5lX3NpbWlsYXJpdHkoTHVpc19NZW5kb3phLCBMdWlzX0FsZnJlZG8pLCBjb3NpbmVfc2ltaWxhcml0eShMdWlzX01lbmRvemEsIERhbmllbF9OYWplcmEpKQ0KKQ0Kcm93bmFtZXMoc2ltaWxhcml0aWVzKSA8LSBjKCdDZWNpbGlhIFJpdmFzJywgJ0x1aXMgQWxmcmVkbycsICdEYW5pZWwgTmFqZXJhJykNCnNpbWlsYXJpdGllcw0KYGBgDQoNCmBgYHtyfQ0KIyBDcmVhbW9zIHVuYSBmdW5jacOzbiBwYXJhIG9idGVuZXIgdW4gcHJvbWVkaW8gcG9uZGVyYWRvIGVuIGJhc2UgYSBsb3MgYW1pZ29zDQptb3ZpZV9yYXRpbmdfd2VpZ2h0ZWRfYXZlcmFnZSA8LSBmdW5jdGlvbihtb3ZpZSwgZnJpZW5kcykgew0KICBkZW5vbWluYXRvciA8LSAwDQogIG51bWVyYXRvciA8LSAwDQogIGZvciAoZnJpZW5kIGluIGZyaWVuZHMpIHsNCiAgICBmcmllbmRfc2ltaWxhcml0eSA8LSBzaW1pbGFyaXRpZXNbZnJpZW5kLF1bMV0NCiAgICBmcmllbmRfcmF0aW5nIDwtIG1vdmllX3JhdGluZ3NbZnJpZW5kLCBtb3ZpZV1bMV0NCiAgICANCiAgICAjIFRvbWFyZW1vcyBlbCBwcm9tZWRpbyBwb25kZXJhZG8gZW4gY3VlbnRhIHNvbG8gcGFyYSBwZWzDrWN1bGFzIGNvbiBjYWxpZmljYWNpw7NuDQogICAgaWYgKGlzLm5hKGZyaWVuZF9yYXRpbmcpKSBuZXh0DQogICAgDQogICAgZGVub21pbmF0b3IgPC0gZGVub21pbmF0b3IgKyBmcmllbmRfc2ltaWxhcml0eQ0KICAgIG51bWVyYXRvciA8LSBudW1lcmF0b3IgKyAoZnJpZW5kX3NpbWlsYXJpdHkgKiBmcmllbmRfcmF0aW5nKQ0KICB9DQogIA0KICByZXR1cm4gKG51bWVyYXRvciAvIGRlbm9taW5hdG9yKQ0KfQ0KYGBgDQoNCg0KVXNhbW9zIGxhIGZ1bmNpw7NuIGNyZWFkYSBjb24gYW50ZXJpb3JpZGFkIHBhcmEgcHJlZGVjaXIgIllvdSIgZW4gYmFzZSBhIGxvcyAzIHVzdWFyaW9zIHBhcmEgMyBwZWzDrWN1bGFzDQpgYGB7cn0NCmZyaWVuZF9uYW1lcyA8LSBjKCdDZWNpbGlhIFJpdmFzJywgJ0x1aXMgQWxmcmVkbycsICdEYW5pZWwgTmFqZXJhJykNCm5ld19tb3ZpZXMgPC0gYygnS1AxJywgJ0VucmVkYWRvcycsICdVUCcsICdDYXJzMScsICdUczMnLCAnU2hyZWsyJywgJ01vbmphJykNCm5ld19tb3ZpZV9wcmVkaWN0ZWRfcmF0aW5ncyA8LSB0aWJibGUoKQ0KZm9yIChuIGluIG5ld19tb3ZpZXMpIHsNCiAgcHJlZGljdGVkX3JhdGluZyA8LSBtb3ZpZV9yYXRpbmdfd2VpZ2h0ZWRfYXZlcmFnZShuLCBmcmllbmRfbmFtZXMpDQogIHByZWRpY3Rpb25fdGliYmxlIDwtIHRpYmJsZShtb3ZpZSA9IG4sIHByZWRpY3RlZF9yYXRpbmcgPSBwcmVkaWN0ZWRfcmF0aW5nKQ0KICBuZXdfbW92aWVfcHJlZGljdGVkX3JhdGluZ3MgPC0gYmluZF9yb3dzKG5ld19tb3ZpZV9wcmVkaWN0ZWRfcmF0aW5ncywgcHJlZGljdGlvbl90aWJibGUpDQp9DQpuZXdfbW92aWVfcHJlZGljdGVkX3JhdGluZ3MNCmBgYA0KVVAgZXMgbGEgcGVsw61jdWxhIGNvbiBjYWxpZmljYWNpw7NuIG3DoXMgYWx0YSBwb3IgbG8gdGFudG8gZW4gZWwgc2lzdGVtYSBkZSByZWNvbWVuZGFjacOzbiBzZXLDrWEgbGEgcHJpbWVyYSBlbiBhcGFyZWNlcg0KDQoNCg0K