more tests / examples for recommender
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user