# Decoding Silence: Harnessing Implicit Feedback in Recommender Systems for Enhanced Digital Experiences
# Introduction
In today's digital era, recommender systems are not just a technological advancement; they are ubiquitous companions in our online journey, profoundly influencing the way we discover and engage with content and products. From personalized content feeds on social media platforms to tailored product suggestions on e-commerce websites, these systems have become indispensable in filtering the overwhelming amount of information available online.
* For customers, they curate a personalized online experience, efficiently connecting them with items or services they are most likely to enjoy or find useful.
* For businesses, recommender systems are invaluable tools for driving engagement, increasing customer satisfaction, and boosting sales.
By effectively matching products and services to customer preferences, they facilitate a more efficient and value-driven marketplace, where businesses can strategically present their offerings to the right audience, enhancing both discovery and reach. Fundementally, these systems address the challeges of content discovery in a large corpora.
Profiling the users and products to find the relationships between them remains the crux of the problem being addressed.
Broadly, recommender systems fall under two categories:
* **Content-based recommender systems**: uses item features to recommend other items similar to what the user likes, based on their previous actions or explicit feedback [1](link:https://developers.google.com/machine-learning/recommendation/content-based/basics). The inter item-attribute similarity plays a key role in this approach and determines the items that re being recommended to the user.
* **Collaborative filtering systems**: analyzes relationships between users and interdependencies among products, in order to identify new user-item associations. This allows for serendipitous recommendations; that is, collaborative filtering models can recommend an item to user A based on the interests of a similar user B. Furthermore, the embeddings can be learned automatically, without relying on hand-engineering of features. [2](link:https://developers.google.com/machine-learning/recommendation/collaborative/basics)
**Collaborative filtering** is appealing as it is domain independent. It addresses aspects of data that is often elusive and very difficult to profile using content based strategies
## Collaborative Filtering
**Collaborative Filtering** methods rely on customer-item interactions to be able to model the relationship between the customer groups and the items groups. These interactions are classified broadly into implicit and explicit classes.
Most convinient is the high quality *explicit feedback* [3], which include explicit ratings of a particular product or content. However, explicit feedback is difficult to come by in a real world setting. This may reflect reluctance of users to rate products, or limitations of the system that is unable to collect explicit feedback.
**Implicit Feedback: The Unspoken Voice**
While much attention has been given to explicit feedback (like ratings and reviews), implicit feedback forms the silent majority of user data. This includes actions such as page views, purchase history, or time spent on a product. Unlike explicit feedback, implicit feedback is not a direct indication of preference, but rather inferred from user behavior. It's abundant and continuously generated but presents unique challenges in interpretation and utilization.
# Background & Theory
Consider a streaming service like Spotify. It uses similar techniques to understand both user preferences and song characteristics. If a user frequently listens to songs with certain features (like a specific genre or tempo), the system infers these preferences and recommends songs with similar features, even if the user has never heard them before. This method not only keeps recommendations fresh and diverse but also helps in uncovering latent patterns in user preferences.
![image.png](data:image/png;base64,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QEURSgIAAAAAAACoKEJJAAAAAAAAABVFKAkAAAAAAACgogglAQAAAAAAAFQUoSQAAAAAAACAiiKUBAAAAAAAAFBRhJIAAAAAAAAAKopQEgAAAAAAAEBFEUoCAAAAAAAAqChCSQAAAAAAAAAVRSgJAAAAAAAAoKIIJQEAAAAAAABUFKEkAAAAAAAAgIoilAQAAAAAAABQUYSSAAAAAAAAACqKUBIAAAAAAABARRFKAgAAAAAAAKgoQkkAAAAAAAAAFUUoCQAAAAAAAKCiCCUBAAAAAAAAVBShJAAAAAAAAICKIpQEAAAAAAAAUFGEkgAAAAAAAAAqilASAAAAAAAAQEURSgIAAAAAAACoKEJJAAAAAAAAABVFKAkAAAAAAACgogglAQAAAAAAAFQUoSQAAAAAAACAiiKUBAAAAAAAAFBRhJIAAAAAAAAAKopQEgAAAAAAAEBFEUoCAAAAAAAAqChCSQAAAAAAAAAVRSgJAAAAAAAAoKIIJQEAAAAAAABUFKEkAAAAAAAAgIoilAQAAAAAAABQUYSSAAAAAAAAACqKUBIAAAAAAABARRFKAgAAAAAAAKgoQkkAAAAAAAAAFUUoCQAAAAAAAKCiCCUBAAAAAAAAVBShJAAAAAAAAICK+v+qpbrRKJucjAAAAABJRU5ErkJggg==)
The matrix on the left with users represented by icons in the leftmost column and books represented across the top row. A check mark indicates that the corresponding user has interacted with (e.g., purchased or read) the corresponding book. This is typical of an "interaction matrix" in collaborative filtering where the interactions are implicit feedback such as views, clicks, or purchases. The matrix is sparse, meaning that not all users have interacted with all books—this sparsity is one of the challenges in building recommender systems.
On the right side, we see a heat map that represents **the result of a matrix factorization** process applied to the interaction matrix. This process decomposes the original interaction matrix into two lower-dimensional matrices whose product approximates the original matrix. The heat map represent the product of both, indicating the strength of the association between users and books that has been estimated.
The colors indicate the weight or strength of the preferences—darker blue might indicate a stronger positive interaction or preference, and darker yellow might indicate a less strong or negative interaction or preference. The numbers within the cells represent the weight values.
The transformation from a simple binary interaction matrix to a weighted preference matrix allows the recommender system to predict how a user might feel about an item (a book, in this case) that they haven't interacted with yet. These predictions can be used to recommend new books to users based on their past behavior and the behavior of other similar users.
The process simplifies the complex relationships between many users and many items into a more manageable form, making it possible to predict potential interests. In practice, this would enable the system to suggest books that users are likely to enjoy based on their interaction patterns, even if they have not explicitly rated them.
## Key Mathematical Concepts in Collaborative Filtering
1. **Matrix Factorization**:
- Imagine a large table (matrix) where each row represents a user, and each column represents an item (like a movie). The entries in this table are the user's ratings for these items. But, in the case of implicit feedback, these entries might be binary (1 for interaction, 0 for no interaction) or based on interaction strength (like time spent on a page).
- The goal of matrix factorization is to break down this large table into two smaller, more manageable tables (matrices) that, when multiplied, approximate the original one. These smaller matrices capture underlying patterns in user preferences and item characteristics.
- Example: If our big table is labeled A, we try to find two smaller tables, B and C, such that multiplying B and C gives us a table close to A.
Let's work through a simple example of matrix factorization with a small user-item matrix and explain the concepts and steps involved.
Suppose we have a matrix \( R \) representing the ratings that 5 users have given to 7 items (movies, for instance). Let's create some sample data for this matrix, with ratings from 1 to 5, where a 0 indicates that the user has not rated that item.
**Step 1: Create the User-Item Ratings Matrix \( R \)**
| | Item 1 | Item 2 | Item 3 | Item 4 | Item 5 | Item 6 | Item 7 |
|-------|--------|--------|--------|--------|--------|--------|--------|
| User 1| 5 | 3 | 0 | 0 | 2 | 0 | 1 |
| User 2| 4 | 0 | 0 | 2 | 1 | 3 | 0 |
| User 3| 1 | 1 | 2 | 2 | 0 | 4 | 5 |
| User 4| 0 | 0 | 0 | 5 | 0 | 4 | 4 |
| User 5| 0 | 3 | 4 | 0 | 0 | 1 | 0 |
**Step 2: Define the Number of Features \( f \)**
We decide how many features (latent factors) we want to identify. For simplicity, let's choose \( f = 2 \). These might represent, for instance, the action and romance content of a movie.
**Step 3: Initialize the User and Item Feature Matrices \( X \) and \( Y \)**
We create two matrices, \( X \) for user preferences and \( Y \) for item characteristics, with random values to start. Each row in \( X \) represents a user, and each row in \( Y \) represents an item.
For our example, the matrices could be initialized as follows (with random values):
- User feature matrix \( X \) (5 users × 2 features):
$
X = \begin{bmatrix}
0.1 & 0.3 \\
0.2 & 0.2 \\
0.5 & 0.1 \\
0.4 & 0.4 \\
0.3 & 0.3 \\
\end{bmatrix}
$
- Item feature matrix \( Y \) (7 items × 2 features):
$
Y = \begin{bmatrix}
0.3 & 0.1 \\
0.2 & 0.4 \\
0.5 & 0.2 \\
0.1 & 0.5 \\
0.4 & 0.1 \\
0.3 & 0.3 \\
0.2 & 0.2 \\
\end{bmatrix}
$
**Step 4: Perform Matrix Factorization**
The goal is to find the best \( X \) and \( Y \) such that \( X × Y^T \) is as close as possible to \( R \), particularly for the non-zero entries (known ratings).
This optimization is usually done using methods like
* gradient descent
* alternating least squares (ALS).
These methods iteratively adjust the values in \( X \) and \( Y \) to minimize the difference between \( R \) and \( X × Y^T \).
**Step 5: Predict Ratings**
After training (i.e., adjusting \( X \) and \( Y \)), we can predict the missing ratings by multiplying \( X \) by \( Y^T \). For example, the predicted rating for User 1 for Item 3, which was missing in the original matrix, would be the dot product of the first row of \( X \) and the third column of \( Y^T \).
**Mathematically:**
$\text{Predicted Rating}_{1,3} = X_{1, \cdot} \cdot Y_{3, \cdot}^T$
Where $X_{1, \cdot}$ is the first row of $X$ and $Y_{3, \cdot}^T$ is the third column of $Y^T$.
**Step 6: Calculate the Predicted Ratings Matrix**
We calculate the entire predicted ratings matrix $\hat{R} = X \times Y^T$. The values in $\hat{R}$ can be used to make recommendations.
"Keep in mind that the actual computations involved in collaborative filtering, particularly in the context of matrix factorization, are more complex than the simplified example provided. This complexity arises from several key aspects:
1. **Regularization**: Regularization is a technique used in machine learning to avoid overfitting, where a model performs well on training data but poorly on unseen (test) data. In matrix factorization for collaborative filtering, the goal is to find the feature matrices (like \( X \) and \( Y \) in our earlier example) that best explain the user-item interactions. However, without regularization, the model might fit the training data too closely, capturing noise and anomalies, which leads to poor performance on new, unseen data.
2. **Sophisticated Optimization Algorithms**: The process of finding the optimal feature matrices \( X \) and \( Y \) often involves complex optimization algorithms. One common method is Gradient Descent, where the model parameters are iteratively adjusted in the direction that reduces the error between the predicted and actual ratings. Another popular method is Alternating Least Squares (ALS), which optimizes one matrix while keeping the other fixed, and then alternates between the two. These methods are designed to efficiently navigate the high-dimensional space of possible feature values to find the combination that best approximates the original ratings matrix.
3. **Handling Sparse Data**: Especially with implicit feedback data, the user-item matrix is typically sparse, with many missing or undefined values. Optimization algorithms must be designed to specifically handle this sparsity, often by focusing only on the known values and ignoring the missing ones during the computation.
3. **Scalability Concerns**: In real-world applications, the size of the user-item matrix can be very large, with potentially millions of users and items. This scale necessitates optimization algorithms that are computationally efficient and can scale horizontally (across multiple machines) if necessary.
4. **Hyperparameter Tuning**: The performance of matrix factorization models is highly dependent on the choice of hyperparameters, such as the number of latent factors and the regularization strength. Finding the right set of hyperparameters usually requires techniques like cross-validation and grid search, which can be computationally intensive.
We can see the impact of these considerations in real-world applications. For instance, Amazon's recommendation system faces significant challenges due to the vast number of products and users, making scalability a critical concern. To address this, Amazon employs sophisticated algorithms capable of handling large-scale data efficiently, ensuring users receive timely and relevant recommendations.
While the steps outlined in the example provide a high-level understanding of the process, these additional complexities are crucial for implementing effective and robust collaborative filtering models in practice. Understanding and addressing these challenges is key for anyone looking to apply collaborative filtering techniques to real-world recommendation systems."
## Other Key Considerations in Collaborative Filtering
1. **Cold Start Problem**: New users or items that have little to no interaction data present a challenge. Strategies like hybrid models (combining collaborative filtering with content-based filtering) are often used.
2. **Diversity and Serendipity**: Recommending items that are not only accurate but also diverse and sometimes surprising, enhances user experience.
3. **Privacy and Ethical Considerations**: Ensuring the ethical use of user data and maintaining privacy is critical, especially with implicit data that users may not know is being collected.
By understanding these concepts and considerations, we lay a solid foundation for exploring collaborative filtering methods for implicit feedback. This understanding is vital for anyone venturing into the world of recommendation systems, bridging the gap between theoretical knowledge and practical application.
## Python Code
Installing necessary dependencies
```python
!pip install implicit "snowflake-connector-python[pandas]" -q/
```
Import necessary packages. We will be reading our transaction information from a table that is staged in Snowflake
```python
import os
import random
import implicit
import numpy as np
import pandas as pd
import snowflake.connector
import scipy.sparse as sparse
```
**Below is a sample snapshot of the data**
|index|user\_id|item\_id|item\_description|order\_frequency|item\_quantity|latest\_order\_dt|days\_since\_last\_order|
|---|---|---|---|---|---|---|---|
|0|BGA8773|LZGT0002|Dyna Dishwash Liquid - Lemon, 500 ml|3|"14\.0"|2023-12-12|7|
|1|BGD19928|TRLK0033|Silka Papaya Soap - Orange, 135 gm|2|"12\.0"|2023-12-11|8|
|2|BGA8127|DBRF0012|Pepsi Glass Bottle - Regular, 250 ml|50|"2472\.0"|2023-12-14|5|
|3|BGA9474|ESIN0006|Indomie Cup Noodles - Fried, 75 gm|4|"21\.0"|2023-01-27|326|
|4|BGA20066|TRLK0002|Pringles Chips - Hot & Spicy, 165 gm|10|"48\.0"|2023-11-28|21|
Scope of data to be considered as an input for the collaborative filteration process plays a key role.
### Getting the Data
```python
conn = snowflake.connector.connect(
user='XXXXXXX',
password='********',
account='ABC',
warehouse='BUYGRO_ANALYSIS',
database='BUYGRO',
role='BG_PROD_DEVOPS'
)
sql_text = '''
select *,
current_date() - latest_order_dt as days_since_last_order
from (
select distinct "SOURCE NO_" as user_id,
"ITEM NO_" as item_id,
max("DESCRIPTION") as item_description,
count(distinct "EXTERNAL DOCUMENT NO_") as order_frequency,
abs(sum("O INVOICED QUANTITY")) as item_quantity,
max("O POSTING DATE") as latest_order_dt
from BUYGRO.REFINED.ADJ_SALES_INVOICE
where "SOURCE NO_" in (select distinct ERP_OUTLER_ID from BUYGRO.REFINED.CUSTOMER_MASTER_ERP where "OutletChannel" = 'GROCERY')
and date("O POSTING DATE") >= dateadd(day, -92, current_date())
group by 1, 2
)
'''
cursor = conn.cursor()
cursor.execute(sql_text)
results = cursor.fetchall()
df = pd.DataFrame(results, columns=[desc[0].lower() for desc in cursor.description])
print(f"Shape of the loaded dataframe: {df.shape}")
# Exploration and corrective action
# Treating the excess decimal places
df['item_quantity'] = df['item_quantity'].astype(np.int64)
# Missing Values
print(f"Missing Values \n{df.isna().sum()}\n")
print(f"Variable 'item_quantity' range \nMin: {df['item_quantity'].min()}, Max: {df['item_quantity'].max()}\n")
```
```
Output:
Shape of the loaded dataframe: (81103, 7)
Missing Values
user_id 0
item_id 0
item_description 0
order_frequency 0
item_quantity 0
latest_order_dt 0
days_since_last_order 0
dtype: int64
Variable 'item_quantity' range
Min: 1, Max: 74664
```
For the purpose of this demonstration, we will be considering inclusion of an item in across thier orders in the last 365 days as the implicit feedback from the customer on the preference of the order.
```python
# Subsetting only relevants columns
grouped_df = df[['user_id', 'item_id', 'item_description', 'order_frequency']].copy()
#renaming columns
grouped_df.columns = ['user_id', 'item_code', 'description', 'order_frequency']
print(f"Shape of the subsetted df: {grouped_df.shape}")
```
Some preliminary stats of the
```python
print(f'Number of unique customers: {grouped_df.user_id.nunique()}')
print(f'Number of unique items: {grouped_df.item_code.nunique()}')
print(f'Average number of time an item has been included in the order: {int(grouped_df.order_frequency.mean())}')
print(f'Minimum number of times an item has been included in the order: {grouped_df.order_frequency.min()}')
print(f'Maximum number of times an item has been included in the order: {grouped_df.order_frequency.max()}')
```
```
Output:
Number of unique customers: 4040
Number of unique items: 1119
Average number of time an item has been included in the order: 1
Minimum number of times an item has been included in the order: 1
Maximum number of times an item has been included in the order: 137
```
Preparing the data into necessary data structures for the python package.
item_user_purchases is a scipy sparse matrix, with each row corresponding to a different item and each column corresponding to a different user. The non-zero entries in the item_user_purchases matrix contains the number of times the user has purchased the item. The item and users variables are array of string labels of each row and column in the item_user_purchases matrix
The implicit library is solely focused on implicit feedback recommenders systems - where we are given positive examples of what the user has interacted with, but aren’t given the corresponding negative examples of what users aren’t interested in. For this example we’re shown the number of times that the user has purchased an item in the dataset and can infer that a high play count indicates that the user prefers an item. However we can’t infer that just because the user hasn’t purchased an item before that means the user doesn’t prefer the item.
```python
def get_user_item_data(df: pd.DataFrame) -> tuple[list[str], list[str], sparse.csr_matrix]:
"""
Takes a dataframe with user_id, item_code, and order_frequency columns and returns:
1. A list of unique user_ids
2. A list of unique item_codes
3. A user-item sparse matrix where rows correspond to users, columns correspond to items,
and values are the order frequencies (with zero for no orders).
Parameters:
df (pd.DataFrame): The input dataframe with user_id, item_code, and order_frequency columns.
Returns:
Tuple[List[str], List[str], csr_matrix]: A tuple containing the list of user_ids, the list of item_codes,
and the user-item sparse matrix.
"""
# Ensure the dataframe has the correct structure
required_columns = {'user_id', 'item_code', 'order_frequency'}
if not required_columns.issubset(df.columns):
raise ValueError(f"DataFrame must contain the following columns: {required_columns}")
# Create a pivot table for the user-item matrix
item_user_matrix = df.pivot(index='item_code', columns='user_id', values='order_frequency').fillna(0)
# Get the list of unique user_ids and item_codes
item_codes = item_user_matrix.index.tolist()
user_ids = item_user_matrix.columns.tolist()
# Convert the user-item matrix to a scipy sparse matrix
item_user_sparse_matrix = sparse.csr_matrix(item_user_matrix.values)
return user_ids, item_codes, item_user_sparse_matrix
# Now we will call this function with the dataframe `df` to get the desired output.
users, items, item_user_purchases = get_user_item_data(grouped_df)
```
Validating if the new data structures created, makes sense
```python
print(f"Length of users: {len(users), type(users)}")
print(f"Length of items: {len(items), type(items)}")
print(f"Shape of user-item matrix: {item_user_purchases.shape}")
```
```
Output
Length of users: (4040, )
Length of items: (1119, )
Shape of user-item matrix: (1119, 4040)
```
### Training The Model
Implicit provides implemenations of serveral algoriths for implicit feedback recommender systems. For this example, we will be using the `AlternatingLeastSquares` model. This model aims to learn a binary target of whether each user has interacted with each item - but weights each binary interaction by a confidence valye of how confident we are in this user/item interaction.
The first step in using the model is to tranform the raw order inclusion counts from original dataet into values that can be used as confidences, We want to give repeated inlucsion more confidence in the model, but this thas to taper off as the number of repreated plays increased to reduce the impact a single super fan has on the model. To do this, we'll use [bm25](link:https://en.wikipedia.org/wiki/Okapi_BM25) weighting scheme
```python
# Set OPENBLAS_NUM_THREADS environment variable to 1 t is highly recommended to disable its internal threadpool by setting the environment variable 'OPENBLAS_NUM_THREADS=1' or by calling 'threadpoolctl.threadpool_limits(1, "blas")'.
# Having OpenBLAS use a threadpool can lead to severe performance issues here. check_blas_config()
os.environ['OPENBLAS_NUM_THREADS'] = '1'
# weight the matrix, both to reduce impact of users that have played the same artist thousands of times
# and to reduce the weight given to popular items
item_user_purchases = implicit.nearest_neighbours.bm25_weight(item_user_purchases, K1=100, B=0.8)
# get the transpose since the most of the functions in implicit expect (user, item) sparse matrices instead of (item, user)
user_purchases = item_user_purchases.T.tocsr()
model = implicit.als.AlternatingLeastSquares(factors=64, regularization=0.05, alpha=2.0)
model.fit(user_purchases)
```
### Predictions
**Recommendations**
```python
# Get recommendations for the a single user
userid = 700
ids, scores = model.recommend(userid, user_purchases[userid], N=20, filter_already_liked_items=False)
recomendations = pd.DataFrame({"artist": np.array(items)[ids], "score": scores, "already_liked": np.in1d(ids, user_purchases[userid].indices)})
recommendations = pd.merge(left=recomendations, right=grouped_df[['item_code','description']].drop_duplicates(), left_on="artist", right_on="item_code", how="left")
recommendations.sort_values(by="already_liked", ascending=False)
```
|index |artist|score |already_liked|item_code|description |
|------|--------|-------------|---------|-----------|-------------------------------------------------|
|0 |MMDR400 |0.808605 |True |MMDR400 |Tide Detergent Powder - Blue, 1.5 kg |
|8 |LBFC0009|0.569892 |True |LBFC0009 |Al Shifa Honey, 125 gm |
|18 |DBRF0026|0.402949 |True |DBRF0026 |Pepsi - Regular, 1.5 Litre |
|17 |MMDR504 |0.415031 |True |MMDR504 |Carex Condoms - Classic, 12 x 12 Count |
|14 |MMDR061 |0.445081 |True |MMDR061 |Sunny Cooking Oil, 750 ml |
|13 |DBRF0040|0.469853 |True |DBRF0040 |Pepsi - Regular, 250 ml |
|1 |TRLK0139|0.737460 |True |TRLK0139 |Ariel Detergent Powder - Blue, 1.5 kg |
|10 |MMDR142 |0.531649 |True |MMDR142 |Ariel Detergent Powder - Blue, 110 gm |
|7 |MMDR143 |0.576463 |True |MMDR143 |Ariel Detergent Powder - Blue, 260 gm |
|4 |TRLK0079|0.595986 |True |TRLK0079 |Clorox Bleach - Original, 950 ml |
|2 |MMDR140 |0.721860 |True |MMDR140 |Ariel Detergent Powder - Green, 1.5 kg |
|9 |MMDR286 |0.568197 |False |MMDR286 |Sunlite Cooking Oil, 750 ml |
|6 |MMDR350 |0.582275 |False |MMDR350 |Tide Detergent Powder - Original Scent, 110 gm |
|11 |MMDR531 |0.511827 |False |MMDR531 |Fairy Dish Washing Liquid Soap - Lemon, 600 ml |
|12 |MMDR146 |0.502521 |False |MMDR146 |Tide Detergent Powder - Original Scent, 260 gm |
|5 |MMDR141 |0.585269 |False |MMDR141 |Ariel Detergent Powder - Green, 260 gm |
|15 |MMDR157 |0.423936 |False |MMDR157 |Clorox Bleach - Original, 470 ml |
|16 |TRLK0118|0.419661 |False |TRLK0118 |Always Cool & Dry Pads - Maxi Thick Large, 1 P...|
|3 |MMDR144 |0.652953 |False |MMDR144 |Tide Detergent Powder - Green, 1.5 kg |
|19 |ARLA0004|0.402741 |False |ARLA0004 |Puck Sterilized Cream, 160 gm |
**Similar Items**
```python
# get related items for the beatles (itemid = 25512)
ids, scores= model.similar_items(99)
# display the results using pandas for nicer formatting
similar_items = pd.DataFrame({"items": np.array(items)[ids], "score": scores})
similar_items = pd.merge(left=similar_items, right=grouped_df[['item_code','description']].drop_duplicates(), left_on="items", right_on="item_code", how="left")
similar_items
```
|index|items|score |item_code|description |
|-----|--------|---------|-----------|--------|
|0 |AMPT0017|1.000000 |AMPT0017 |Nazra Pack White Carry Bag - Large, 20 Kg|
|1 |AMPT0016|0.833141 |AMPT0016 |Nazra Pack White Carry Bag - Small, 20 Kg|
|2 |AMPT0015|0.581976 |AMPT0015 |Nazra Pack White Carry Bag - Small, 14 Kg|
|3 |ALJA0015|0.549936 |ALJA0015 |Royal Pack Foam Bowl - 12 oz. White, 1000 Piec...|
|4 |LZGT0034|0.501570 |LZGT0034 |Dyna Face Mask 500ML (Cucumber)|
|5 |AMPT0009|0.479423 |AMPT0009 |Cosmoplast Clear Glass, 1000 Pieces|
|6 |MOHD0005|0.434378 |MOHD0005 |Durex Condom - Thin Feels , 3 Counts|
|7 |RAGF0002|0.408100 |RAGF0002 |Green Farm Sugar, 1.5 kg|
|8 |IFDR0035|0.398864 |IFDR0035 |Shurooq Sunflower Oil, 5 Litre|
|9 |LZGT0046|0.390694 |LZGT0046 |Dyna Hotoil Hairtreatment Cream 1 LTR -Garlic|
**Similar Users**
```python
# get related items for the beatles (itemid = 25512)
ids, scores= model.similar_users(420)
# display the results using pandas for nicer formatting
similar_items = pd.DataFrame({"Users": np.array(users)[ids], "score": scores})
similar_items
```
|index|Users|score |
|-----|--------|--------|
|0 |BGA14295|1.000000|
|1 |BGA13164|0.661142|
|2 |BGF18339|0.641019|
|3 |BGA10346|0.632408|
|4 |BGD7273 |0.628246|
|5 |BGA11834|0.626439|
|6 |BGA11817|0.625361|
|7 |BGS6950 |0.619094|
|8 |BGA15895|0.616034|
|9 |BGA20220912|0.614233|
Concluding our exploration of implicit recommender systems, it's evident that they are pivotal in shaping user experience in the digital age. As technology advances, these systems will likely become even more nuanced and sophisticated, capturing deeper insights into user behavior. The ongoing challenge will be balancing the accuracy of recommendations with ethical considerations of user privacy and data usage. For anyone venturing into the realm of recommendation systems, understanding and innovating in the field of implicit feedback will remain a key area of growth and opportunity.