New User of the Month Algorithm Questions

Hello,
I was a new user on a Discourse forum with 930+ likes at the end of my first month. The holders of new user of the month were two people, one with about 40 likes and the other with 60 likes. I’ve looked at the code provided in an earlier post on this site, and it should not have been possible for this situation to develop the way it did. Looking at just my top likes, I did the math using the values assigned to a like from each trust level and came out with some number like 360 for just my top likes. Then, doing the math for the user with 60 likes, I multiplied that number by three- even if he had been liked by an admin all sixty times, he still would not have been close to 360. What happened here? We both joined within days of each other in the middle of November… what am I not considering? I don’t mean to sound bitter, but it was pretty dissapointing/confusing. So far, no one has been able to give me an answer other than “New user of the month is a scam”. So any information would be helpful, but keep in mind I’ve already seen the code. Thanks!

1 Like

I looked at the code. Not only are likes weighted according to seniority, but also the total is divided according to how many distinct accounts liked your posts. It’s a measure of broad popularity, I suppose.

Edit: oops, maybe it’s divided by post number not accounts - see downthread.

2 Likes

I accounted for that as well, though.
It’s really weird, it seems.

So different acounts? Huh. That makes sense… I can’t get the data for that but I still think it’s weird.

Thanks for the help, though!

Have you looked over Dataexplorer? It is built into core and there maybe a script already for the query.

As for modifying new user of the month not sure what options. You can however in site settings I believe modify weights per TL

No, I haven’t. Might try it.
Thanks!

1 Like

This may help to locate custom ones ppl have shared.

2 Likes

Only admins of a forum can use Date Explorer, so you cannot use it to get data as a user.

You wrote a lot about the total like counts, but you did not mention the post counts. The score calculated from the likes, weighted by the trust level of the user, is divided by the total number of posts you posted:

So maybe you received more likes but also posted more often than the users who received the badge.

6 Likes

That explains a lot. Thank!
(but it doesn’t make a lot of sense. Posting more should be considered contributing to the community and should not detriment the score, in my opinion.)

What contributes the most to a community? Many posts with few likes due to their lack of appeal, or a handful of posts that capture users’ interest with many likes?

(I’m aware that the use of likes differs from one community to another, some communities typical users don’t see the value of liking a post, or it’s not in their habit, etc…)

1 Like

I agree, mostly I see your point, but I think it’s a different scenario on my forum.
Most posts rarely get more then one or two likes, and new user of the month doesn’t factor in solutions, which I think could be nice (but I’m not sure whether or not it’s a plugin) or maybe even make the badge not automatic, so moderators or admins have to choose. That would make the badge more tailored for each forum.
I would say, do you think that having 1.1K likes with 700ish posts and 60ish solutions in two weeks is considered helpful on a forum or having 60ish likes and 40ish posts (in roughly the same amount of time) is considered more “new user of the month” material?
Happy holidays, by the way!

1 Like

This is a very good point and I agree with you that the current algorithm might be too simplistic. I think a good first step would be to make the post factor nonlinear like

SUM(...) / SQRT(5 + COUNT(DISTINCT p.id))::float AS score

or maybe even

LN(1 + SUM(CASE ... END)) / (5 + COUNT(DISTINCT p.id))::float AS score

3 Likes

One approach to favour more-liked posts is to take the sum of the squares of the likes, and then divide by number of posts.

I do wonder if my mistaken take might have value: to take into account the number of distinct liking accounts. It might for example help against cliques or voting rings.

In passing, I note my forum only elected 13 winners of a possible 24 new user of the month badges in the past 12 months.

2 Likes

Yeah, I agree. That might be a good idea.

Mind explaining that in English? I could barely understand the new user of the month code haha.

Would someone with a higher trust level mind editing the title to “New User of the Month Algorithm Questions” or something similar? It’s not a bug, evidently. Just a little peculiar.
Thanks @Moin!

2 Likes

The “problem” is that the score is (basically)

\text{Score} = \frac{\text{# Likes}}{\text{# Posts}}

That’s something that is probably not the desired situation, as you already noted. If their average number of likes is the same, a large amount of posts should be rated higher than a low amount of posts, .

So in order to “fix” this problem, we should change the function: the denominator of the fraction should increase less if the number of posts gets bigger. We can fix this by applying a function to it. The usual candidates are SQRT and LN since they are increasing but less-than-linear:

So by changing the divisor to something that gets large less quick if the amount of posts gets bigger, the score gets higher (after all, dividing by something smaller gives a larger result). Changing the formula to apply SQRT or LN to the divisor gives the desired result ("A large amount of posts should be rated higher than a low amount of posts, if their average number of likes is the same. ")

The second formula tries to avoid the opposite undesired effect: a small number of highly-liked posts should not be able to dominate the score either.

3 Likes

If you are an admin you can goto site settings and change the weight factors to flatten them out

Ie like weight changes per Trust level and even for staff. You can change the weight so no matter tl or if staff. Likes will be weighed equally instead of increasing by position.

I’m not an admin, but thanks anyway.
You learn something new every day, it seems :grinning:

Thanks for explaining that! That’s a neat solution. I wish that was a thing for my forum now…

1 Like

That is not really true in most cases. In this logic, what will signal if your posts are really useful are exactly the number of likes. If you post a lot, but can’t maintain a high ratio of like / post that shows that you are being chatty, and possible asking questions that you could have searched for.

For example, your questions are already discussed at

1 Like

Alright. I apologize for posting with this question, however I do disagree. Different forums utilize likes differently, and I think the solution @RGJ posted would be helpful in mine. Not all forums are inclined to like every single post, because we are oftentimes only inclined to like something when it lifts us up and agrees with something we’ve said. Being right often isn’t enough to justify a like from most users. I will look at your link, but I did not see it before. I don’t think it was necessary to post with the same opinion as earlier in the discussion which I already replied to. Can we agree to disagree?

Think about it, though. If you’re genuinely helpful, then the more you post the better. That’s what I think the badge should be about.
In the post you linked, you may have been right about the data, but being active in a community isn’t all about numbers. Earlier I said that if I had only posted the right thing once on the right topic then went totally inactive, I could have won the badge. That’s a loophole that’s not okay.