Giter Club home page Giter Club logo

acf's Introduction

Acf

A lightweight recommender engine for implicit feedback datasets

PyPI Test Publish

The package implements an algorithm described in Collaborative Filtering for Implicit Feedback Datasets paper. The algorithm is based on the following ideas:

  • using collaborative filtering with latent factors
  • transforming feedback observations into binary preferences with associated confidence levels
  • using alternating least sqaures to compute the matrix factorization

Install

The package requires Python 3.7 or newer, the only dependencies are numpy and pandas. To install it, run

pip install acf

Usage

The following example shows how to train a model and compute predictions.

import acf
import pandas as pd

# assuming the data are in the following format:
# | user_id | item_id | feedback |
# |---------|---------|----------|
# | 2491    | 129     | 2        |

interactions = pd.read_csv('interactions.csv')

engine = acf.Engine(reg_lambda=1, alpha=35, n_factors=2, random_state=0)

engine.fit(interactions,
           user_column='user_id',
           item_column='item_id',
           feedback_column='feedback',
           n_iter=20,
           n_jobs=4)

# get the best 20 recommendations
prediction = engine.predict(user=2491, top_n=20)

# to print training loss value at every iteration
print(engine.loss)

Model Evaluation

For performance evaluation, the package offers metrics.mean_rank function that implements "mean rank" metric as defined by equation 8 in the paper.

The metric is a weighted mean of percentile-ranked recommendations (rank_ui = 0 says that item i is the first to be recommended for user u and item j with rank_uj = 1 is the last to be recommended) where the weights are the actual feedback values from R user-item matrix.

interactions_test = pd.read_csv('intercations_test.csv')

print(acf.metrics.mean_rank(interactions=interactions_test,
                            user_column='user_id',
                            item_column='item_id'
                            feedback_column='feedback',
                            engine=engine))

Model Persistence

Trained model can be serialized and stored using joblib or pickle.

To store a model:

with open('engine.joblib', 'wb') as f:
    joblib.dump(engine, f)

To load a model:

with open('engine.joblib', 'rb') as f:
    engine = joblib.load(f)

Public API

acf.Engine

acf.core.computation.Engine(reg_lambda=0.1, alpha=40,
                            n_factors=10, random_state=None):

Class exposing the recommender.

  • reg_lambda: regularization strength
  • alpha: gain parameter in feedback-confidence transformation c_ui = 1 + alpha * r_ui
  • n_factors: number of latent factors
  • random_state: initial RNG state

Properties:

  • user_factors: user factor matrix
  • item_factors: item factor matrix
  • loss: training loss history

Methods:

Engine.fit(interactions, user_column, item_column,
           feedback_column, n_iter=20, n_jobs=1)

Trains the model.

  • interactions: dataframe containing user-item feedbacks
  • user_column: name of the column containing user ids
  • item_column: name of the column containing item ids
  • feedback_column: name of the column containing feedback values
  • n_iter: number of alternating least squares iteration
  • n_jobs: number of parallel jobs
Engine.predict(user, top_n=None)

Predicts the recommendation.

  • user: user identification for whom the prediction is computed
  • top_n: if not None, only the besr n items are included in the result

Returns: predicted recommendation score for each item as pandas.Series

acf.metrics.mean_rank

acf.core.metrics.mean_rank(interactions, user_column, item_column,
                           feedback_column, engine)

Computes mean rank evaluation.

  • interactions: dataframe containing user-item feedbacks
  • user_column: name of the column containing user ids
  • item_column: name of the column containing item ids
  • feedback_column: name of the column containing feedback values
  • engine: trained acf.Engine instance

Returns: computed value

Tests

Tests can be executed by pytest as

python -m pytest acf/tests

acf's People

Contributors

jancervenka avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Forkers

xuey99

acf's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.