Compute "affinity" and give suggestions of people to follow

Description of your request or bug report:

Basically, the same functionality as “相性” on Bookmeter.

  • Compute a distance between the library of other users and one’s own library (potentially using star scores given to the books, the average level of books, or the type of books being typically read)
  • Show the top 10 matches, with the +follow button and their favorite books (or their latest books, like Bookmeter

Screenshot for reference:

Trello link:

STATUS: APPROVED

There’s a potential complication here, which is that the majority of users (including me honestly) aren’t able to read what we actually like the most yet. None of us are selecting things like10分で読める〇〇 2年生 because we love it, and the minute our Japanese level permits we throw it aside and grab whatever looks least boring among the choices for the new level, and do it again 3 months later. I’ve only just started to get to the stage where I feel like I can afford to have my own personal interest be a significant factor in my decisions. My Bookmeter history is so weird (by Japanese standards) that my closest affinity match is 44% — and until last month, when I read 3 more volumes of my favorite manga, I wasn’t getting anything higher than 25% matches.

I don’t know how to get around this. Current users who are now at beginner level, if they don’t give up and keep reading, will in a year or two have a huge reading history of material that doesn’t say anything about them.

Maybe for beginners, their “wishlist” selections could be used to help them indicate their preferences/interests? I do agree that it would be really nice to have a way to find other users with similar tastes. Even if they’re more advanced, maybe there’s something in their reading history closer to your level that you might prefer to read instead of whatever the generic community recommendation is. I just think it’s harder to figure this out for language students than native speakers.

3 Likes

I think this specific case is fine, since you will be reading easy material that you find bearable and get matched with other people also reading easy things they find bearable, so the other things they read is of potential interest to you (as a learning tool).

With respect to history, I agree there’s an issue here. As an additional example (further complication?), when I got to the level where I could read manga in Japanese, I was so thrilled by that fact that I was reading whatever. I would absolutely not read such books nowadays :sweat_smile:
I think that can be avoided by only considering, say, the last 50 or 100 books added. Anyone below that count is either only adding the things they read since they joined (so then no problem) or is still new to reading Japanese (and will thus be matched with similar profiles, which is the goal). At the same time, it gives enough of a sample that you will not avoid people out of the stochastic effect of what you read left.
For instance, if I read 本好き (29 vol), 伯爵と妖精 (32 vol), and something else, if we take a history that is too small, I won’t be able to get people who enjoyed those exact series, but in a different order :thinking:

There’s also the option of using the star ratings you gave to books, so that there’s more weight given to books that you like the most (and it becomes an incentive to make those ratings too, otherwise the matching doesn’t work well).

Edit:

Conversely, someone more advanced can find stuff that they’d enjoy reading in someone else’s wishlist, even if they are less advanced (I know I did)
So wether we get matched against people around our own level (just the read history) or someone with similar tastes (from the wishlist for instance), I feel like it would work out. We could even get a mix of both! (Part of the affinity score from one, part from the other)

Edit2:
I think we should take the last N books rated 5*, if not enough take the latest 4* books as well, and so on. That way, if I’ve been reading a lot of stuff I don’t enjoy recently, it won’t affect my affinity matches.

2 Likes

Maybe there could be a checkbox “use this book for affinity recommendations “

2 Likes

I was thinking the same thing. Amazon has some kind of “tune my recommendations” page (don’t remember what it’s called) where you can exclude past purchases from future recommendations. I imagine it could work similarly here.

Other than that, I do think looking at the user’s rating could help as well. Two users shouldn’t necessarily have high affinity just because they read the same books, since one user may have loved the books and the other user may have hated them (especially possible for early readers, as already mentioned, since people may read what is possible rather than what they enjoy).

I like @Naphthalene’s idea of grabbing the top/latest N books, from high to low stars, but I would probably go further than that by weighting them. Treat 5 stars as 100% weighting, 4 stars as 80%, 3 stars as 60%. For 2 and 1 stars, I’d probably automatically exclude them (0% weighting), but simply continuing to 40% and 20% weighting could be reasonable as well if the user can manually exclude them via an “exclude from affinity recommendations” checkbox, as already suggested. (But personally I’d exclude everything I gave 1-2 stars anyway). I think the weighting can be combined well with an exclude option because excluded = 0% weighting.

3 Likes

Weighting is a nice idea! However, instead of just having the dependence on your star rating, your remark

made me think we could use the distance between the rating the two users gave (if they both gave a rating, otherwise your suggestion or 50% or something if no rating on this side)
So something like 1 - abs(my_rating - their_rating)/4
If I give 5* and you 1*, then it doesn’t count at all. Conversely, it has maximum weight if we both agree.

2 Likes

Yes, good point. If you both don’t like the same book that’s a good sign for affinity.

3 Likes

This ticket is approved!

I like everyone’s idea here around tuning your affinities. Not sure exactly how I’d roll it out when the time comes, but I like the idea of being able to exclude books. If people need to exclude books in bulk, then that make things harder from a UI perspective… but yes, agree with the idea.

2 Likes