Rating System with Elo, better alternatives?How to implement this recommendation algorithm?PHP Facemash ELO Rating Class/FunctionHelp on Elo System specifics for large group competitionsWhat's a good algorithm to calculate puzzle game time(s)?Best practices for overall rating calculationImplementation of ELO algorithm for ratingElo rating system without order of game playedELO rating - mysql designElo rating system looking for good resource

What European countries have secret voting within the Legislature?

Quantum jump/leap, exist or not, and instantaneous or not (for electrons)?

Word ending in "-ine" for rat-like

pgfmath does not work

Ways to get SMD resistors from a strip

What game is this character in the Pixels movie from?

How to stop the sales department from selling functionalities that don't exist

Bin Packing with Relational Penalization

Who voices the character "Finger" in The Fifth Element?

Sharing referee/AE report online to point out a grievous error in refereeing

How did they film the Invisible Man being invisible, in 1933?

Security Patch SUPEE-11155 - Possible issues?

When casting a spell with a long casting time, what happens if you don't spend your action on a turn to continue casting?

Why did the Apple //e make a hideous noise if you inserted the disk upside down?

Sentence editor

When was this photo of Mission Dolores *actually* taken?

Why wasn't EBCDIC designed with contiguous alphanumeric characters?

If I were to build a J3 cub twice the size of the original using the same CG would it fly?

if a USA citizen marries a foreign citizen who has kid from previous marriage

List Manipulation : a,b,c,d,e,f,g,h into a,b,c,d,e,f,g,h

Copy group of files (Filename*) to backup (Filename*.bak)

Fully submerged water bath for stove top baking?

Color Specified Vertices in LayeredGraphPlot

Could you fall off a planet if it was being accelerated by engines?



Rating System with Elo, better alternatives?


How to implement this recommendation algorithm?PHP Facemash ELO Rating Class/FunctionHelp on Elo System specifics for large group competitionsWhat's a good algorithm to calculate puzzle game time(s)?Best practices for overall rating calculationImplementation of ELO algorithm for ratingElo rating system without order of game playedELO rating - mysql designElo rating system looking for good resource






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








1















I'm working on a rating algorithm. I have a set of exercises. They are all categorized in levels (1 = easiest, 5 = hardest).



Users get shown two exercises and should decide which one is harder or if both are equal. Based on user ratings, the levels should get adjusted.



What I've done:
I experimented with the Elo rating.



My Questions:
Are there any better algorithms for doing this use case? (found nothing so far)



Thanks in advance and cheers.
Toby










share|improve this question
























  • This looks fun, but open-ended. I would suggest an Elo rating where you cycle through the comparisons multiple times, each time making the Elo adjustment smaller. That removes the effects of the order of the vote.

    – btilly
    Mar 25 at 15:15

















1















I'm working on a rating algorithm. I have a set of exercises. They are all categorized in levels (1 = easiest, 5 = hardest).



Users get shown two exercises and should decide which one is harder or if both are equal. Based on user ratings, the levels should get adjusted.



What I've done:
I experimented with the Elo rating.



My Questions:
Are there any better algorithms for doing this use case? (found nothing so far)



Thanks in advance and cheers.
Toby










share|improve this question
























  • This looks fun, but open-ended. I would suggest an Elo rating where you cycle through the comparisons multiple times, each time making the Elo adjustment smaller. That removes the effects of the order of the vote.

    – btilly
    Mar 25 at 15:15













1












1








1








I'm working on a rating algorithm. I have a set of exercises. They are all categorized in levels (1 = easiest, 5 = hardest).



Users get shown two exercises and should decide which one is harder or if both are equal. Based on user ratings, the levels should get adjusted.



What I've done:
I experimented with the Elo rating.



My Questions:
Are there any better algorithms for doing this use case? (found nothing so far)



Thanks in advance and cheers.
Toby










share|improve this question
















I'm working on a rating algorithm. I have a set of exercises. They are all categorized in levels (1 = easiest, 5 = hardest).



Users get shown two exercises and should decide which one is harder or if both are equal. Based on user ratings, the levels should get adjusted.



What I've done:
I experimented with the Elo rating.



My Questions:
Are there any better algorithms for doing this use case? (found nothing so far)



Thanks in advance and cheers.
Toby







algorithm rating






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Mar 25 at 15:07







toby

















asked Mar 25 at 14:51









tobytoby

83 bronze badges




83 bronze badges












  • This looks fun, but open-ended. I would suggest an Elo rating where you cycle through the comparisons multiple times, each time making the Elo adjustment smaller. That removes the effects of the order of the vote.

    – btilly
    Mar 25 at 15:15

















  • This looks fun, but open-ended. I would suggest an Elo rating where you cycle through the comparisons multiple times, each time making the Elo adjustment smaller. That removes the effects of the order of the vote.

    – btilly
    Mar 25 at 15:15
















This looks fun, but open-ended. I would suggest an Elo rating where you cycle through the comparisons multiple times, each time making the Elo adjustment smaller. That removes the effects of the order of the vote.

– btilly
Mar 25 at 15:15





This looks fun, but open-ended. I would suggest an Elo rating where you cycle through the comparisons multiple times, each time making the Elo adjustment smaller. That removes the effects of the order of the vote.

– btilly
Mar 25 at 15:15












1 Answer
1






active

oldest

votes


















0














I would try to solve the problem in a simple yet (I hope) effective way.



First, you only update an exercise rating when the vote is different that what the system actually expects. From now on, I will only considers the cases where the user output differs from what the system actually expects.



Second, I would give more weight to the votes where the two levels have a big difference. A wrong expectation on two esercises with rating 2 and 3 should have less impact than a wrong expectation on two exercises with rating 1 and 5.



That said, my algorithm would be along the lines of:



1- A constant percentage is set, let's call it increment. It establishes the percentage of impact that a vote has, and can be modified along the way based on the number of users.



2- For an "unexpected" vote, I would calculate the difference between the original levels (minimum of 1).



diff = max(1, abs(ex1.level - ex2.level))


3- I would update each exercise rating by a percentage, based on the multiplication of increment and diff.



if (ex1 level expected bigger)
ex1.rating = ex1.rating + diff*increment;
else
ex1.rating = ex1.rating - diff*increment;


Rating would be a float, and level would be the rounding of rating:



ex1.level = round(ex1.rating)


Example:



let's set increment = 0.1. exA, with a rating of 2.0 and level 2 is compared with exB, rating of 3.0 and level 3.



The first user selects exB as the hardest. Nothing changes, because it is the result expected by the system.



The second user selects exA. It is not the expected result. The difference between the two exercises is 1, so the rating is modified by a factor 1*0.1 = 0.1,
resulting in a exA.rating = 2.1 for exB.rating = 2.9






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55340554%2frating-system-with-elo-better-alternatives%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    I would try to solve the problem in a simple yet (I hope) effective way.



    First, you only update an exercise rating when the vote is different that what the system actually expects. From now on, I will only considers the cases where the user output differs from what the system actually expects.



    Second, I would give more weight to the votes where the two levels have a big difference. A wrong expectation on two esercises with rating 2 and 3 should have less impact than a wrong expectation on two exercises with rating 1 and 5.



    That said, my algorithm would be along the lines of:



    1- A constant percentage is set, let's call it increment. It establishes the percentage of impact that a vote has, and can be modified along the way based on the number of users.



    2- For an "unexpected" vote, I would calculate the difference between the original levels (minimum of 1).



    diff = max(1, abs(ex1.level - ex2.level))


    3- I would update each exercise rating by a percentage, based on the multiplication of increment and diff.



    if (ex1 level expected bigger)
    ex1.rating = ex1.rating + diff*increment;
    else
    ex1.rating = ex1.rating - diff*increment;


    Rating would be a float, and level would be the rounding of rating:



    ex1.level = round(ex1.rating)


    Example:



    let's set increment = 0.1. exA, with a rating of 2.0 and level 2 is compared with exB, rating of 3.0 and level 3.



    The first user selects exB as the hardest. Nothing changes, because it is the result expected by the system.



    The second user selects exA. It is not the expected result. The difference between the two exercises is 1, so the rating is modified by a factor 1*0.1 = 0.1,
    resulting in a exA.rating = 2.1 for exB.rating = 2.9






    share|improve this answer



























      0














      I would try to solve the problem in a simple yet (I hope) effective way.



      First, you only update an exercise rating when the vote is different that what the system actually expects. From now on, I will only considers the cases where the user output differs from what the system actually expects.



      Second, I would give more weight to the votes where the two levels have a big difference. A wrong expectation on two esercises with rating 2 and 3 should have less impact than a wrong expectation on two exercises with rating 1 and 5.



      That said, my algorithm would be along the lines of:



      1- A constant percentage is set, let's call it increment. It establishes the percentage of impact that a vote has, and can be modified along the way based on the number of users.



      2- For an "unexpected" vote, I would calculate the difference between the original levels (minimum of 1).



      diff = max(1, abs(ex1.level - ex2.level))


      3- I would update each exercise rating by a percentage, based on the multiplication of increment and diff.



      if (ex1 level expected bigger)
      ex1.rating = ex1.rating + diff*increment;
      else
      ex1.rating = ex1.rating - diff*increment;


      Rating would be a float, and level would be the rounding of rating:



      ex1.level = round(ex1.rating)


      Example:



      let's set increment = 0.1. exA, with a rating of 2.0 and level 2 is compared with exB, rating of 3.0 and level 3.



      The first user selects exB as the hardest. Nothing changes, because it is the result expected by the system.



      The second user selects exA. It is not the expected result. The difference between the two exercises is 1, so the rating is modified by a factor 1*0.1 = 0.1,
      resulting in a exA.rating = 2.1 for exB.rating = 2.9






      share|improve this answer

























        0












        0








        0







        I would try to solve the problem in a simple yet (I hope) effective way.



        First, you only update an exercise rating when the vote is different that what the system actually expects. From now on, I will only considers the cases where the user output differs from what the system actually expects.



        Second, I would give more weight to the votes where the two levels have a big difference. A wrong expectation on two esercises with rating 2 and 3 should have less impact than a wrong expectation on two exercises with rating 1 and 5.



        That said, my algorithm would be along the lines of:



        1- A constant percentage is set, let's call it increment. It establishes the percentage of impact that a vote has, and can be modified along the way based on the number of users.



        2- For an "unexpected" vote, I would calculate the difference between the original levels (minimum of 1).



        diff = max(1, abs(ex1.level - ex2.level))


        3- I would update each exercise rating by a percentage, based on the multiplication of increment and diff.



        if (ex1 level expected bigger)
        ex1.rating = ex1.rating + diff*increment;
        else
        ex1.rating = ex1.rating - diff*increment;


        Rating would be a float, and level would be the rounding of rating:



        ex1.level = round(ex1.rating)


        Example:



        let's set increment = 0.1. exA, with a rating of 2.0 and level 2 is compared with exB, rating of 3.0 and level 3.



        The first user selects exB as the hardest. Nothing changes, because it is the result expected by the system.



        The second user selects exA. It is not the expected result. The difference between the two exercises is 1, so the rating is modified by a factor 1*0.1 = 0.1,
        resulting in a exA.rating = 2.1 for exB.rating = 2.9






        share|improve this answer













        I would try to solve the problem in a simple yet (I hope) effective way.



        First, you only update an exercise rating when the vote is different that what the system actually expects. From now on, I will only considers the cases where the user output differs from what the system actually expects.



        Second, I would give more weight to the votes where the two levels have a big difference. A wrong expectation on two esercises with rating 2 and 3 should have less impact than a wrong expectation on two exercises with rating 1 and 5.



        That said, my algorithm would be along the lines of:



        1- A constant percentage is set, let's call it increment. It establishes the percentage of impact that a vote has, and can be modified along the way based on the number of users.



        2- For an "unexpected" vote, I would calculate the difference between the original levels (minimum of 1).



        diff = max(1, abs(ex1.level - ex2.level))


        3- I would update each exercise rating by a percentage, based on the multiplication of increment and diff.



        if (ex1 level expected bigger)
        ex1.rating = ex1.rating + diff*increment;
        else
        ex1.rating = ex1.rating - diff*increment;


        Rating would be a float, and level would be the rounding of rating:



        ex1.level = round(ex1.rating)


        Example:



        let's set increment = 0.1. exA, with a rating of 2.0 and level 2 is compared with exB, rating of 3.0 and level 3.



        The first user selects exB as the hardest. Nothing changes, because it is the result expected by the system.



        The second user selects exA. It is not the expected result. The difference between the two exercises is 1, so the rating is modified by a factor 1*0.1 = 0.1,
        resulting in a exA.rating = 2.1 for exB.rating = 2.9







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Mar 25 at 15:13









        gbalduzzigbalduzzi

        2,7018 silver badges26 bronze badges




        2,7018 silver badges26 bronze badges


















            Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.







            Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.



















            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55340554%2frating-system-with-elo-better-alternatives%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Kamusi Yaliyomo Aina za kamusi | Muundo wa kamusi | Faida za kamusi | Dhima ya picha katika kamusi | Marejeo | Tazama pia | Viungo vya nje | UrambazajiKuhusu kamusiGo-SwahiliWiki-KamusiKamusi ya Kiswahili na Kiingerezakuihariri na kuongeza habari

            Swift 4 - func physicsWorld not invoked on collision? The Next CEO of Stack OverflowHow to call Objective-C code from Swift#ifdef replacement in the Swift language@selector() in Swift?#pragma mark in Swift?Swift for loop: for index, element in array?dispatch_after - GCD in Swift?Swift Beta performance: sorting arraysSplit a String into an array in Swift?The use of Swift 3 @objc inference in Swift 4 mode is deprecated?How to optimize UITableViewCell, because my UITableView lags

            Access current req object everywhere in Node.js ExpressWhy are global variables considered bad practice? (node.js)Using req & res across functionsHow do I get the path to the current script with Node.js?What is Node.js' Connect, Express and “middleware”?Node.js w/ express error handling in callbackHow to access the GET parameters after “?” in Express?Modify Node.js req object parametersAccess “app” variable inside of ExpressJS/ConnectJS middleware?Node.js Express app - request objectAngular Http Module considered middleware?Session variables in ExpressJSAdd properties to the req object in expressjs with Typescript