Tuesday, November 18, 2008

Rating Lenders in a Mutual Trust System

I am creating a book sharing system. A problem I am facing is how would I reward my lenders. This is a mutual trust system, where the system does not have any direct way of verifying whether the lends were genuine. For example, I can create 10 fake accounts, lend books to those accounts, and increase my rating to get rewards.

It struck me that this is a generic problem, and must be faced by all systems which are trust based.

Is it possible to write an algorithm to rate the lenders in such a way that it catches/penalizes the malicious/fake lenders, or may be just make the fake lending expensive enough?
For example, suppose I reward my best lender over a month with a 200Rs crossword voucher, and if I feel that I can spend 200Rs on a person who spends 10 hours on my website distributed over 10 days within a month (as that might increase my advertising revenue), I just need to make the fake lending that much expensive.

So, how do we define "good" lends? What are the factors that define a genuine lend?

Requirements:
1. These factors should be implicit/natural for genuine lends but take extra cost for fake ones.
2. These factors should reinforce healthy lending trends into the system.

Here is a list of such factors I can think of:

1. The simplest one - number of lends
Factor: "number of total lends made"
Cost for fake lender: Time to put requests and approvals.
Healthy trend: Rewards lenders who lend more.

2. Lends to different unique borrowers
Factor: "number of borrower with a unique mail id lender lends to"
(Any lends to a user with same mail id as lender not counted)
Cost for fake lender: Time to create unique mail id's + time to create accounts with those mail id's.
Healthy trend: Reward lenders who lend to various people, instead of a fixed closed group.

3. Number of different items lent
Factor: "number of unique items lent by the lender"
Cost for fake lender: Time to add different items in collection.
Healthy trend: Reward people who increase number of unique items available in the system.

4. How distributed lends are over time.
Factor: "number of unique days" on which lends were made.
Cost for fake lender: Time for logging into website on different days.
Healthy trend: Reward people for being prompt with approvals (if people check their inbox every day their approvals will be distributed, if they check for example once a week, they will be clustered).

5. Last but the best, "lend rating" of borrowers.
Factor: "sum of ratings of all borrower's with unique email id's"
Cost for fake lender: All the above costs added for all the fake borrower accounts!
Healthy trend: Encourages people to lend to good lenders. So, lenders get rewarded for doing genuine lending.

So, a simplistic formula taking in all the above factors goes something like:
lender's rating = "number of lends" * "number of unique borrower mail-id's" * "number of unique items lent" * "number of unique days on which lends were made" * "sum of ratings of borrowers with unique mail-id's"

As, you can see, this formula is recursive. If we are calculating the rating for all the users on our system, we start with a rating of 1 everybody, and do a first pass of rating calculation. Then we do a second pass to get final ratings.

Would love to hear more thoughts on this... so do share!

3 comments:

Beyond bounds said...

Finally some food for thought after a long time of ridiculous office work :)

Here is an alternate way in which you could rate lenders rewarding genuine users and penalizing fakes

This draws from the way loans at a macro level work. Each user is assigned "credits". These credits reflect the user's impact on the site's traffic.

1. Every users for the first time is assigned default "credits"

2. Every item lent could be assigned a value. The value could factor in the real cost of the item. You could also boost items that are rare but not very rare(to deal with fakes :) )

3. For every transaction if L is the lender and B is the borrower the credits are adjusted by formulae that do the following in essence

credits(L) += [w1*value + w2*credits(B)]
credits(B) -= [w3*value + w4*credits(A)]


You may disallow transactions if the borrower has below a threshold of credits

The idea here is that L gets more gain out of lending to a "rich" user ( risk is less right:) ) and is penalized for being stupid enough to lend to a "poor" user.


The reverse is true for a borrower. If if borrows from a rich user he pays more.


4. The system levies penalty on being idle. So users who are inactive lose credits according to a time decay function

5. Users are penalized for defaulting on return of borrowed items.

Now the most important questions does this credit mechanism

1. Create Healthy trends?
Here the users that loan items to richer users get rewarded.

Users that lend a lot of items get rewarded.

In fixed groups the credits flow in a circle so fixed groups get penalized on an average.

The value of item factor rewards users for bringing in costlier / rarer items


2. Raise the bar for fake users ?

Fake users will rely on creating cliques of users. Inside these cliques credits will flow in circles.

And to gain, the clique will have a small number of lenders. After a particular number of transactions the credits of these fake lenders will grow at a very slow rate.

Also users who are constantly active get rewarded and the opposite for idle users.

My favourite part, advantages of this system(if it works)
1. maintains very little information per user
2. the order of credit calculations of O(1). its independent of the number of users in the system which is a big thing.

Unknown said...

Interesting...
Although, I am not sure if the system you proposed is resilient enough to fake lenders, I do think that it is a good "points" system.
I have a reservation about "value" to be decided by the cost of the item. I have had several discussion on it. The thing is "a book is worth how much the reader values it". A rare book might be worth more than its true cost. Secondly, there is not a common ground of valuation. You can not know whether the book is brand new book bought for it's MRP from crossword, or bought from a second-hand book lane for 40 bucks. So, in summary, I would not like to get into the value of items. And, just keep a lend as on lend.
Even if we do want to keep a "value", it should be decided by the lender. The borrower has an option always to take it at that value or not.

Beyond bounds said...

Hmmmm... Ya sure I have no solid proof that this system will work. It just a conjecture based on what I think fake users would try to do. But again I think if fake users rely on creating cliques then after a particular point to gain significant credits / points :) would be very difficult.

Also the value could be any measure. You could define it the way you like. I actually had in mind a measure that was based on demand and supply. something close to popularity, something like value = demand / supply, of course this factor in the absolute value of demand as well.