Weighted session-based k-NN - Intro#

Do you build a recommender system for your website? The K-nearest neighbors algorithm is a good choice if you are looking for a simple, fast, and explainable solution. Weighted-session-based k-nn recommendations are close to the state-of-the-art methods. We don’t need to tune multiple hyperparameters and build complex deep learning models to achieve a good result.

Example#

Input:

import numpy as np
from wsknn import fit
from wsknn.utils import load_gzipped_pickle

# Load data
ITEMS = 'demo-data/recsys-2015/parsed_items.pkl.gz'
SESSIONS = 'demo-data/recsys-2015/parsed_sessions.pkl.gz'

items = load_gzipped_pickle(ITEMS)
sessions = load_gzipped_pickle(SESSIONS)
imap = items['map']
smap = sessions['map']

# Train model
trained_model = fit(smap,
                    imap,
                    number_of_recommendations=5,
                    weighting_func='log',
                    return_events_from_session=False)

# Get sample session
test_session_key = np.random.choice(list(smap.keys()))
test_session = smap[test_session_key]
print(test_session)  # [products], [timestamps]
>>> [[214850771, 214677615, 214651777], [1407592501.048, 1407592529.941, 1407592552.98]]
recommendations = trained_model.recommend(test_session)
for rec in recommendations:
    print('Item:', rec[0], '| weight:', rec[1])
>>> Item: 214676306 | weight: 1.8718411072574241
>>> Item: 214850758 | weight: 1.2478940715049494
>>> Item: 214561775 | weight: 1.2478940715049494
>>> Item: 214821020 | weight: 1.2478940715049494
>>> Item: 214848322 | weight: 1.2478940715049494

Contents#

Citation#

Moliński, S., (2023). WSKNN - Weighted Session-based K-NN recommender system. Journal of Open Source Software, 8(90), 5639, https://doi.org/10.21105/joss.05639

Indices and tables#