Dataset `update_interactions` method

Open
#240 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
25/100
Issue type
Feature
Clarity
Needs clarification
Activity status
Stale
Tech stack
pandas, python

Research direction

Read the discussion in issue #176 and review the Dataset implementation to understand how interactions, user and item ID maps, and feature rows are represented. Decide the intended API and whether to implement add or replace; the issue leaves both the method name and first release scope open. Done means interaction updates preserve the required ID map and feature row ordering, with behavior for duplicate pairs defined.

Written by the indexing model from the issue text.

Description

enhancement
Feature Description

Draft functionality (to be discussed):

update_interactions method of the Dataset accepts:

  • interactions_df : pd.DataFrame
  • method: tp.Literal["add", "replace"]

The main goal is to get old dataset id maps, extend them to new users and items. Then convert new interactions to internal ids and append those new interactions to the old ones.

We have one very important thing to remember: dataset id_map always has hot users (who have interactions) before warm users (who don't have interactions but have features). New hot users should start from the last id that was relevant for the old hot users.
But previously these id belonged to warm users. So warm users will have their ids changed. So user_features array should also be changed. Row numbers in user_features correspond to internal user ids.
Same for items.

In the first PR we can implement just one of the methods.
"add" method should just append new interactions to the old ones. (duplicate user-item pairs will have multiple entries, this will result in their weights summed in user-item matrix)
"replace" method should remove old interactions.

Why this feature?

This allows for incremental training for models that support fit_partial.

Additional context

Discussed here: https://github.com/MobileTeleSystems/RecTools/issues/176

Updating user and item features should be done in next PRs.

Maybe we should call this method update_data or smth like that to create only one method for interactions and features with optional arguments.

To be discussed

Dominant language
Python
Stars
457
Forks
55
PR merge metrics
No merged PRs in 30d

Getting set up

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from MTSWebServices/RecTools

All issues in MTSWebServices/RecTools

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.