I am trying to create a decent Point System

We encourage users to post events happening in the community to the community events group on https://www.drupal.org.
schnizZzla's picture

While I'm working hard on a new drupal website, I'm also thinking hard about the User and Content Points System I am trying to create for this website. Actually I had the idea of such a system before I started with drupal. But right now I'm very happy because of drupal's great module support, it seems to me that I'm going to work on only two additional modules and here we go:

Point System, concept first draft

I'm trying to explain the concept using the numbers in the chart:

  • 1 - We have users (members) that influence the system.
  • 2 - We have content, submitted by our users that infuences the system.
  • 3 - Users can trigger different kind of events. These events make an impact on the content and are also used by the userpoints module to calculate user points. It is important to me, only to use events that can be tracked retroactive.
  • 4 - Userpoints are calculated by the Userpoints module by counting the user's gained points for different events. Users are gaining points but are also loosing them, when the event is undone. That's why events have to be retroactive.
  • 5 - Content consists of different kind of attributes that are stored and updated depending on the user impact.
  • 6 - Content points are calculated by a new Content Points module: This module is going to introduce a new db table to store content points and will display it on all nodes that are configured for it. A special function will be used to calculate dynamic points for content. This should be the most flexible part of the module. Website owners should be able to customize this function like some blackbox. They don't need to know what the math is exactly doing. They need to be able to adjust the weight that is given to different attributes of the content by this blackbox. What's special about it: After calculating the point values for different attributes and adding/multiplying them "somehow" together this value will be divided by the age of the content. This will make points for content very dynamic. If user impact reduces due to the "freshness" (age) of content, points are going to drop very fast. Imagine how easy you can make dynamic TOP 10 Views sorted by content points now! For different Content Types we are also able to use different attributes e.g. play count for audio nodes. Our blackbox handles this by some internal "subfunctions" for different content types. Introducing a new hook for this should be a sufficient solution.
  • 7 - Now that we have dynamic content points, we are going to use an excellent new extension module to the userpoints module, that allows us to sum up all points of the content one user has submitted and add an adjustable percentage of these content points to the user's points. Now user points are going to reflect the whole "value" of the user to the community in our system. Once we only rewarded the quantity of submissions when we gave user points. Now we are rewarding the QUALITY of the content, too!

needed modules:
- userpoints

needed new modules:
- content points
- userpoints extension module for content points

useful modules
- rating modules (up/down, jrating..)
- actions

OK, I hope you will understand the main concept and give me some feedback. Maybe some of you guys are using a similar system on your websites already?

AttachmentSize
points_concept_draft.gif21.87 KB

Comments

this looks awesome

greggles's picture

Userpoints and "page views" are first level reports about quality. This idea takes it to a whole new level and looks great to me.

What about using a "karma" like system. Where votes by users with higher points are worth more? That idea, combined with yours, I think would be a huge boon to community/multi-editor sites.

--
Knaddisons Denver Life | mmm Free Range Burritos

schnizZzla, great

simplymenotu's picture

schnizZzla, great things!

greggles wrote :

What about using a "karma" like system. Where votes by users with higher points are worth more?

I've used "karma" (rep points) on another site/system. The problem is, depending on the scale, new users take forever to get enough "karma" to make a difference in promoted content. Something to keep in mind.

-s

Hey schnizZzla, I really

patchak's picture

Hey schnizZzla,

I really like your idea here...But I think that at some point the CRE module (content recommandation module) kinda does something that is 'related' to want you want to do here...

That module uses the voting patterns of users to suggest content that are related throu others users...

I think that your idea could and the CRE module could be used together to create somethng that would give a one to one relationship between all users! I mean I like the idea of karma, but I think that when a user has a lot of votes, it does not mean that I'll like his content... system that rely on karma tend to create a 'unique' views that reflects the opinions of the 'majority' of users, but do not really allow for user to user karma...

Maybe I'm wrong, but the CRE package already offer some user to user interaction by checking vote patterns on nodes, etc.. I also think you can easily plug in module to vote on 'users' for example...

Just throwing some ideas here about the use of that kind of system...

later,
patchak

"Maybe I'm wrong, but the

schnizZzla's picture

"Maybe I'm wrong, but the CRE package already offer some user to user interaction by checking vote patterns on nodes, etc.. I also think you can easily plug in module to vote on 'users' for example..."

No you are right, CRE was on my module list from the start, but I just didn't have the time to test it yet. As you said, Points and Karma will create "unique" views. That's what I want for my frontpage. Then I want the "My Area" of the website to present a good view for all contend related to my personal nodes and comments. First I want to be able to see what's going on in general and then check what's up with MY content. Or maybe the other way round. But seperately.

I want to throw in that many things depend on a basic decision: How much "overhead information" do I want to create?

Turning on stats module, keeping all logs and extending it to track even more information would be possible to keep all the retroactivity I need. But actually I don't want the point system to make my website a slow turtle keeping ALL hit stats from zero hour. With the time factor all content points need to be recalculated regularly. I need the cron maybe twice an hour to reupdate all Points. Individual nodes can be updated at edit times, too. But all content that is "inactive" loses points over the time, that's why a cron is needed.

Another thing I want to test for personal views:
Content recommendation using favourites and buddylists: Considering who favourited a node, showing me views of interesting favourite nodes of my buddies. OK, I didn't invent the wheel with that, but it's simple and useful. Can be combined with content points, too.

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

Hi schnizZzla, I just posted

patchak's picture

Hi schnizZzla,

I just posted a message here on the CRE group: http://groups.drupal.org/node/3445 about maybe adding some custom CRE modules that would use the module's API to establish more profound relations between users and taxonomy and also other users... (not only who voted what, but who created what and with which taxonomy terms, etc).

I think that plugging in with the CRE would be a really good start to build solid 'soft personnalisation' of a site, since every time you vote on a node, it would give a +1 not only to the node itself, but to the author, and also to the terms used on that node...

I understant that this is not exactly what you wish to accomplish with your points idea, but my guess is that this way of doing things (integrating with CRE) would get at least a good chunk of the work done...

My opinion in this subject, is that general public 'karma' is going to be less and less important as users of big sites want user to user karma and user to user personnalisation and not a general filtering 'a la digg'..

Next information management sites should let users create completely unique views just by recording and analysing each vote in relations with other users and taxonomy terms, so that we come out of the 'dictature of the masses' to a more subtle and user centric information filtering system...

I was just thinking that if you go ahead with your points system, I wonder where you could integrate these new features so that we could build/creaste the ultimate information recommandation system for drupal...

ideas, comments??

Patchak

Thank you for this fast

schnizZzla's picture

Thank you for this fast feedback first!

"What about using a 'karma' like system."

I don't know how "karma" works exactly, in fact I'm relative new to this "points topic", that's why I need your feedback. Because I'm thinking about how to implenent this system with drupal since two weeks. I just need to know that this isn't the wrong way and of course when my work is done I want to give some module back to the community that made my great website possible ;-)

Back to "karma", I need to know how it works, I don't have any experience with it yet. For me the most interesting part will be improving the formula to calculate content points and the formula for how this affects user points. I'm going to tweak it as long until newer content is able to top older content in a very short time. This just by being quality content that has attracted few users but very fast. Like looking for a potential wildfire, finding it and adding fuel to the fire.

Another important thing to me is, that I am able to explain to the community which aspects (content attributes, user events) control the dynamic scores for content and user, but I don't have and don't want to explain the blackboxes formula, because of cheaters. That's why - just an idea - if I really go crazy - maybe too crazy - I'm going to make it the Google way. User Trust: You could calculate some value for this, maybe based on a analysis of how the user has gained his points or just a proportianal value to the user's points, but this trust could influence the weight of the content's attributes when calculating the content. I could also give the editors and moderators impact on content more weigth. Whatever. Just to show that this is very extensible.

You can't prove it won't happen!

Free Music? --> BerlinerStrassen.com - Support Your Local Heroes

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

Rating Users / PM / Feedback

simplymenotu's picture

A feature I've seen is when someone rates a user or their post you can send
along a private message as feedback.

It's useful for a community to help each other grow.

EDIT: What about some Views integration?

-s

Thinking things through, I'm

schnizZzla's picture

Thinking things through, I'm seeing that module 7 alone does not make much sense. This code should be the UP integration part of CP.

What about some Views integration?

Of course! If I wasn't clear about that: Views support! I want to use CP easily with Views.

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

more on karma

greggles's picture

Basically then if I have good content and get lots of userpoints based on that and other users like my content then when I vote on a piece of content my vote counts more.

So, as a new user I vote on something and my vote counts for "1" unit.

Later I become the user with the highest points because my content is great and I've added a lot of quality content. Now when I vote on something my vote counts for "2" units.

Does that explain it?

--
Knaddisons Denver Life | mmm Free Range Burritos

"Later I become the user

schnizZzla's picture

"Later I become the user with the highest points because my content is great and I've added a lot of quality content. Now when I vote on something my vote counts for "2" units."

Ah, so that is like what I meant with "user trust". I understand.

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

Walt Esquivel's picture

Hi schnizZzla,

What software did you use to create your image?

Good work and thanks in advance.

Walt Esquivel, MBA; MA; President, Wellness Corps; Captain, USMC (Veteran)
$50 Hosting Discount Helps Projects Needing Financing

Walt Esquivel, MBA; MA; President, Wellness Corps; Captain, USMC (Veteran)
$50 Hosting Discount Helps Projects Needing Financing

Drumm's karma module

Boris Mann's picture

Drumm has been hiding a very interesting karma module in CVS for some time (http://cvs.drupal.org/viewcvs/drupal/contributions/modules/karma/). It's just for comments, but sounds great. I believe there are plans to do more with this very soon from overhearing some stuff at OSCMS.

Should definitely check it out. The README (http://cvs.drupal.org/viewcvs/drupal/contributions/modules/karma/README....) gives a good overview.

And welcome to the front page :P

"Drumm has been hiding a

schnizZzla's picture

"Drumm has been hiding a very interesting karma module"

Ah, that's why i didn't find anything on the module pages. I only came across slashdot's karma. I'm going to check it out. Hope it's compatible with 5.x

"What software did you use to create your image?"

I don't recommend doing charts in photoshop ;-) It didn't took me an hour, but almost.
BTW, this is one of three applications I can't live without: browser, texteditor and photoshop :-)

But with all your feedback, it was worth the 2 hours I spend yesterday on this topic!

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

Some summerization

schnizZzla's picture

The Point/Score System is going to show, how "valuable" content and users are measured by the general opinion of the community.
It won't give old content that received more hits, votes etc. considerably more points. I'm going to take in the time and calculate hits per time, votes per time etc. first. By doing this with Userpoints too, I hope new content and new users are going to be able to compete with old content and old users, because QUALITY counts. If this won't be sufficient, I want to boost the points by multiplying points with the boost factor. This means, that for age 0 boost is MAX and for age X boost is 0 by using a gaussian, linear or other boost function pointboost(time).

Maybe not only my opinion:
If I have a topical website like the free arts and music project, I'm going to use this system on, what's the point: If I am not interested in the genereal recommandation that is represented by points, because I always like content that others do NOT like. Why do I visit a topical website with people meeting there because they like something and I want to see actually something on this website most people do NOT like? Then I need to look for content without points or for another website ;-) Isn't this what communitiy websites are about? People that are interested in basically the same thing meet on a website?

I need a good general view first which I wasn't able to accomplish by existing views filters. The "personalized stuff" comes somewhere else and CAN use points but DOESN'T NEED to. It could be a complete different calculation. I think we need to seperate this topic from personlized content recommendation. It very depends on the dimension of the project. If you receive TONS of content a day, of course you need views with good personalized filters.

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

Nmoderation module

delf's picture

Check out nmoderation module: http://cvs.drupal.org/viewcvs/drupal/contributions/modules/nmoderation/
It allows node moderation similar to slashdot. I will try to combine it with the following collapsible comment system: http://uz.dreamhosters.com/drupal5/?q=node/1

Using nodecomment module you can have this system work for both nodes and comments.

This will be a very basic Slashdot clone with Drupal.

Delf.

@delf thank you for your

schnizZzla's picture

@delf
thank you for your useful advice. Right now, there are too many questions coming to my mind about this module. I will consider testing it soon. As i see the d5 branch is still in development, right?

schnizZzla


BerlinerStrassen.com
- Support Your Local Heroes!

Userpoints

kbahey's picture

Hi

The Userpoints 2.x API should be very flexible and allow many modules with varying functions to query userpoints as well as add/subtract from it as well. This is why I wrote 2.x in the first place.

The API should be clear enough, but if you need help with it, send me a note.

Drupal development and consulting 2bits.com
Personal Baheyeldin

Drupal performance tuning, development, customization and consulting: 2bits.com, Inc..
Personal blog: Baheyeldin.com.

organic groups

moshe weitzman's picture

nice diagram :)

i too have been thinking about a user quality system. i want to use it on this site and potentially most places where organic groups module is used.

organic groups (the main module on this groups.drupal.org site) has the featre/bug where all users are authenticated before posting to a group. this is in contrast to mailing list groups like yahoo groups where they just trust the From: header.

so, i want to leverage that benefit for user ratings in some way so that we can feature the best posters, and hide the worst. i think this will make mailing lists/grops finally tolerable again.

i'm not sure yet how to implement this. just want everyone to know that this site will use it if you build it :)

killfile - aka content blocker

greggles's picture

One interesting module along this vein is the content blocker. If you are familiar with killfiles from nntp world, that's basically the intent of it (afaict).

http://drupal.org/project/contentblocker

If contentblocker gets used on a site it could also be figured into a karma system (or vice versa). e.g. if you get blocked by a user that decrements your karma - or you could set contentblocker to only show posts by users with a karma greater than a certain number.

--
Knaddisons Denver Life | mmm Free Range Burritos

Community

Group organizers

Group categories

Community Group Freetags

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: