more tests / examples for recommender

This commit is contained in:
Dylan Knutson
2023-03-31 11:34:28 +09:00
parent f808c736cd
commit 564e6e8860

View File

@@ -1,7 +1,7 @@
require "rails_helper"
describe Domain::Fa::UserFactor do
it "works" do
it "provides an example of how to use disco / neighbor" do
# a few clusters of users, followed by a few others
cluster1 = 10.times.map do |i|
SpecUtil.create_domain_fa_user(name: "cluster-1-#{i}")
@@ -11,10 +11,10 @@ describe Domain::Fa::UserFactor do
SpecUtil.create_domain_fa_user(name: "cluster-2-#{i}")
end
cluster1_ids = cluster1.map(&:name)
cluster2_ids = cluster2.map(&:name)
cluster1_ids = Set.new cluster1.map(&:name)
cluster2_ids = Set.new cluster2.map(&:name)
follower1, follower2, follower3 = 3.times.map do |i|
follower1, follower2, follower3, follower4 = 4.times.map do |i|
SpecUtil.create_domain_fa_user(name: "follower-#{i + 1}")
end
@@ -33,6 +33,11 @@ describe Domain::Fa::UserFactor do
Domain::Fa::Follow.create!(follower: follower3, followed: user)
end
# follower4 follows a few in cluster1
cluster1[0...2].each do |user|
Domain::Fa::Follow.create!(follower: follower4, followed: user)
end
# calculate the recommender
recommender = Disco::Recommender.new(
factors: Domain::Fa::UserFactor.neighbor_attributes[:factors][:dimensions],
@@ -49,13 +54,19 @@ describe Domain::Fa::UserFactor do
# cluster1 should all be similar to each other
cluster1.each do |user|
ids = Set.new(recommender.similar_items(user.name, count: 9))
expected = Set.new(cluster1_ids)
actual = Set.new(ids.map do |id|
id[:item_id]
similar_items = Set.new(recommender.similar_items(user.name, count: 9))
similar_item_ids = Set.new(similar_items.map do |item|
item[:item_id]
end)
assert expected.superset?(actual), ids
assert cluster1_ids.superset?(similar_item_ids), similar_items
end
# follower4's follow recommendations should be other users in cluster1
follower4_recs = Set.new(recommender.user_recs(follower4.name))
follower4_rec_ids = Set.new(follower4_recs.map do |item|
item[:item_id]
end)
assert cluster1_ids.superset?(follower4_rec_ids), follower4_recs
end
end