Skip to content

Feedback on trust graph calculations #1979

Open
@ed-kung

Description

@ed-kung

After having done a deep dive on SN's Web of Trust Algorithm, I have some feedback. Please don't view this as criticism: I think the current algorithm does what it's supposed to do and is directionally correct. These thoughts are shared in the spirit of discussing how the existing algorithm can be improved to make it more robust. It's also possible I made some mistakes so let me know if you see anything you disagree with or that I got wrong!

These comments all apply to the calculation of the trust graph, because everything else is a fairly straightforward application of the TrustRank algorithm.

1. The current system is gameable.

Image

I didn't mention this in my SN post, but the current system is actually pretty gameable. That's because other users' trust of me is calculated based on how much they zap posts that I zapped first.

But the issue is that the before/after calculation is based on the timestamp of the first zap. I can easily game the system by zapping 1 sat on an item early, waiting to see if it becomes popular, and if it does, zap it a lot more. The timestamp associated with my action on the item will be very early, leading all the trust from other peoples' zaps to accumulate to myself.

2. Using the ratio of zap amounts leads to unintended scaling behavior.

Image

Imagine three users, A, B, and C. They all agree with each other 100% of the time. However, users A and B always zap 21 sats, but user C always zaps 42 sats. Based on how "before" and "after" are calculated, the trust between C and the other users will be one half of the trust between A and B.

I understand the intent behind using the ratio of the zap amounts, but it seems like a person's baseline zapping behavior should be taken into consideration. I'm not sure what the solution is, but I think specifying an underlying behavioral model would help (see below).

3. It's unclear how to interpret the confidence interval calculation.

Image

I understand the intent behind using the binomial proportion confidence interval, but I don't think it's well specified. The issue here is that the binomial model assumes an integer number of successes and trials, both of which should be non-negative.

But before - disagree can be negative, and b_total - after may not be an integer. The calculation still works and is directionally correct, but it's hard to interpret what the resulting number actually means and whether or not it's well scaled.

4. For users with long histories, it'll be hard to overcome historical behavior.

I believe a user's entire history of zaps is currently used to calculate trust graph. This makes it hard to overcome a long history of zapping behavior. It might make more sense to take the last $$N$$ item actions in a territory for each user when calculating the trust graph.

5. It's unclear what the underlying behavioral model is.

I think a lot of these problems can be solved by explicitly writing down an underlying behavioral model. It wouldn't have to be super realistic, it would just have to capture some basic features of user behavior. I'm not entirely sure what the model would look like, but I think it would involve at least the following ideas:

  • An underlying similarity parameter $$\theta_{ij}$$ between users $$i$$ and $$j$$ that we're trying to learn about.
  • A parameter describing the probability that user $$i$$ becomes aware of an item $$k$$.
  • Conditional on two users $$i$$ and $$j$$ both being aware of an item, the conditional probability that they both zap/downzap/disagree on item $$k$$, as a function of their similarity parameter, with some adjustment based on their usual zapping amounts.
  • Given the above, there should be a mapping from $$i$$ and $$j$$'s zapping behavior to an estimate of $$\theta_{ij}$$, and we should be able to calculate a confidence interval for it.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions