Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add TimeBoundedPopScore for time-bounded popularity #493

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

ZiyaoWei
Copy link
Contributor

Implements #359.

def fit(self, data: Dataset, **kwargs):
_logger.info("counting time-bounded item popularity")

log = data.interaction_log("numpy")
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was thinking about adding a function to time bound a DataSet, but realized that might be too much since we are just going to use the counts - I assume that would still be useful for some things (validation set?) but doing the calculation here seems cheaper. LMK if this seems right!

def test_time_bounded_pop_score_rank():
algo = basic.TimeBoundedPopScore(2 * day, "rank")
algo.fit(simple_ds)
assert algo.item_scores_.equals(pd.Series([1.5, 3.0, 1.5], index=[1, 2, 3]))
Copy link
Contributor Author

@ZiyaoWei ZiyaoWei Oct 18, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These tests here seems very low level but I think it is OK since the internals are important and are likely to be stable over time?

Copy link

The LensKit 🤖 has run the tests on your PR.

✅ Tests covered 95.83% of diff.

✅ Coverage increased 0.01% from 92.47% to 92.48%.

origin/main...HEAD, staged and unstaged changes
  • lenskit/lenskit/algorithms/basic.py (95.8%): Missing lines 133

Summary

  • Total: 24 lines
  • Missing: 1 line
  • Coverage: 95%
Source Coverage Report
Name Stmts Miss Cover
lenskit/lenskit/util/envcheck.py 57 44 23%
lenskit/lenskit/data/fetch.py 38 28 26%
lenskit/lenskit/data/types.py 38 13 66%
lenskit/lenskit/util/__init__.py 72 19 74%
lenskit/lenskit/splitting/split.py 25 6 76%
lenskit/lenskit/topn.py 109 25 77%
lenskit/lenskit/data/movielens.py 97 18 81%
lenskit/lenskit/util/test.py 104 19 82%
lenskit/lenskit/pipeline/state.py 44 8 82%
lenskit/lenskit/parallel/config.py 65 11 83%
lenskit/lenskit/parallel/pool.py 54 9 83%
lenskit/lenskit/algorithms/svd.py 75 12 84%
lenskit/lenskit/basic/composite.py 20 3 85%
lenskit/lenskit/algorithms/ranking.py 75 11 85%
lenskit/lenskit/algorithms/__init__.py 67 8 88%
lenskit/lenskit/util/random.py 34 4 88%
lenskit-implicit/lenskit/implicit.py 94 10 89%
lenskit/lenskit/batch/_recommend.py 46 4 91%
lenskit/lenskit/data/items.py 204 17 92%
lenskit/lenskit/data/vocab.py 84 7 92%
lenskit/lenskit/splitting/holdout.py 56 4 93%
lenskit/lenskit/parallel/worker.py 43 3 93%
lenskit/lenskit/batch/_predict.py 30 2 93%
lenskit/lenskit/math/sparse.py 60 4 93%
lenskit/lenskit/parallel/invoker.py 31 2 94%
lenskit/lenskit/algorithms/knn/user.py 177 11 94%
lenskit/lenskit/basic/popularity.py 34 2 94%
lenskit/lenskit/pipeline/components.py 51 3 94%
lenskit/lenskit/pipeline/types.py 86 5 94%
lenskit/lenskit/algorithms/knn/item.py 302 17 94%
lenskit/lenskit/data/dataset.py 131 7 95%
lenskit/lenskit/data/mtarray.py 57 3 95%
lenskit/lenskit/data/matrix.py 233 12 95%
lenskit/lenskit/parallel/chunking.py 20 1 95%
lenskit/lenskit/basic/bias.py 93 4 96%
lenskit-funksvd/lenskit/funksvd.py 187 8 96%
lenskit/lenskit/basic/topn.py 26 1 96%
lenskit/lenskit/pipeline/__init__.py 291 11 96%
lenskit/lenskit/data/lazy.py 34 1 97%
lenskit/lenskit/algorithms/basic.py 181 5 97%
lenskit/lenskit/algorithms/als/explicit.py 121 3 98%
lenskit/lenskit/algorithms/bias.py 150 3 98%
lenskit/lenskit/parallel/serialize.py 51 1 98%
lenskit/lenskit/algorithms/als/common.py 128 2 98%
lenskit/lenskit/crossfold.py 136 2 99%
lenskit/lenskit/pipeline/config.py 83 1 99%
lenskit/lenskit/pipeline/runner.py 98 1 99%
lenskit/lenskit/algorithms/als/implicit.py 112 1 99%
lenskit/lenskit/metrics/topn.py 212 1 99%
lenskit-hpf/lenskit/hpf.py 24 0 100%
lenskit/lenskit/algorithms/als/__init__.py 3 0 100%
lenskit/lenskit/algorithms/knn/__init__.py 3 0 100%
lenskit/lenskit/algorithms/mf_common.py 61 0 100%
lenskit/lenskit/basic/__init__.py 6 0 100%
lenskit/lenskit/basic/candidates.py 25 0 100%
lenskit/lenskit/basic/history.py 60 0 100%
lenskit/lenskit/basic/random.py 25 0 100%
lenskit/lenskit/batch/__init__.py 2 0 100%
lenskit/lenskit/data/__init__.py 10 0 100%
lenskit/lenskit/data/checks.py 37 0 100%
lenskit/lenskit/data/convert.py 50 0 100%
lenskit/lenskit/data/query.py 27 0 100%
lenskit/lenskit/data/tables.py 25 0 100%
lenskit/lenskit/diagnostics.py 4 0 100%
lenskit/lenskit/math/__init__.py 0 0 100%
lenskit/lenskit/math/solve.py 6 0 100%
lenskit/lenskit/metrics/__init__.py 0 0 100%
lenskit/lenskit/metrics/predict.py 32 0 100%
lenskit/lenskit/parallel/__init__.py 4 0 100%
lenskit/lenskit/parallel/sequential.py 22 0 100%
lenskit/lenskit/pipeline/common.py 18 0 100%
lenskit/lenskit/pipeline/nodes.py 47 0 100%
lenskit/lenskit/splitting/__init__.py 4 0 100%
lenskit/lenskit/splitting/records.py 57 0 100%
lenskit/lenskit/splitting/users.py 61 0 100%
lenskit/lenskit/types.py 5 0 100%
lenskit/lenskit/util/logging.py 19 0 100%
lenskit/lenskit/util/timing.py 28 0 100%
TOTAL 5281 397 92%

@mdekstrand mdekstrand self-assigned this Oct 26, 2024
@mdekstrand mdekstrand added the algorithms LensKit algorithm implementations label Oct 26, 2024
@mdekstrand mdekstrand added this to the 2024.1 milestone Oct 26, 2024
@mdekstrand mdekstrand added the enhancement New feature or request label Oct 26, 2024
@mdekstrand mdekstrand linked an issue Oct 26, 2024 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
algorithms LensKit algorithm implementations enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Support time-bounded popularity
2 participants