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

            How to preserve electronics (computers, tablets and phones) for hundreds of years Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 23:30 UTC (7:30pm US/Eastern) The network's official Twitter account is up and running again. What content…How might modern humans leave a message for 50,000 years?How would an aquatic race develop computers?How do we make computers care for human life?Keeping supplies for 1000 yearsWhat will cell phones become in 100 years?What body armor protects against a laser?Could a society attain 1800s technology if limited to using copper and bronze?Electricity power (magic) and electronicsScavenging metal resources in post-apocalypse after 100 yearsWhy would precursors create devices that can survive and still work after hundreds of years?

            155 수학 과학 기타 둘러보기 메뉴eh추가해eh문서를 완성해

            Convert JSON to MapSimplest way to convert a string representing JSON array into Java array List of key value pairsHow to take String JSON values into HashMapConvert a JSON String to a HashMapCreating BSON object from JSON stringJSONObject - How to get a value ?Better Map ConstructorReading JSON from Url javaUpdate columns if input values are not null otherwise ignore and keep the existing values of column in databaseHow to store object represented as Json string into Couchbase Lite?Go JSON into MapHow do I efficiently iterate over each entry in a Java Map?Sort a Map<Key, Value> by valuesHow to round a number to n decimal places in JavaCan comments be used in JSON?How do I read / convert an InputStream into a String in Java?How can I pretty-print JSON in a shell script?What is the correct JSON content type?How can I deserialize JSON to a simple Dictionary<string,string> in ASP.NET?Why does Google prepend while(1); to their JSON responses?Parse JSON in JavaScript?