Problem Solving with Algorithms

반응형

Hello everyone,

We've taken into account your comments and critique. After multiple rounds of testing and debate, we've finalized the details for our new rating algorithm.
The calculations behind the new algorithm will be left unchanged from the previous discussion. As a reminder, they were listed here:

👉 New Rating Algorithm

Previously, we had discussed the possibility of having contest seasons, as well as how users would be penalized for having not participated in a contest (that they had registered for). We've taken into account your thoughts, and have decided that:

 

안녕하세요 여러분,

귀하의 의견과 비판을 고려했습니다. 여러 차례의 테스트와 토론을 거쳐 새로운 등급 알고리즘에 대한 세부 정보를 마무리했습니다.
새로운 알고리즘의 계산은 이전 논의에서 변경되지 않습니다. 다시 한 번 말씀 드리면 다음과 같습니다.

👉 새로운 등급 알고리즘

이전에 우리는 콘테스트 시즌이있을 가능성과 사용자가 콘테스트에 참가하지 않은 경우 (등록한) 불이익을받는 방법에 대해 논의했습니다. 귀하의 생각을 고려하여 다음과 같이 결정했습니다.

Contest Seasons

Contest Seasons will not be supported until further notice.

 

콘테스트 시즌

콘테스트 시즌은 추후 공지가있을 때까지 지원되지 않습니다.

Penalties for lack of participation

A user is considered to have not participated if they had both registered for the contest, but had not made any submissions. An issue with the previous ranking model was that users would be excessively penalized for having not participated in a contest, to the point of never being able to recover from the drop in their ranking.

We will not be making an explicit exception for users failing to participate in a contest. However, with our new rating algorithm, we will be able to avoid situations where users previously could not recover from the drop in their ratings. The geometric mean (m) of the expected ranking and actual ranking from the new algorithm ensures that participants will observe relatively small fluctuations in drops of their rating, compared to fluctuations in increases of their rating.

This means that if a user registered for, but had not participated in a contest, they will now be able to recover from the drop in rating in a short period of time to a level that is reflective of their contest proficiency.

Additionally, we noticed that with the existing algorithm, we would run into situations where there would be many participants who were unable to submit any solutions during the contest, but whose rankings would be drastically different from one another. Ratings calculated using these unfair rankings would be similarly unfair.

The new rating algorithm will change this phenomenon for the better. Participants who have the same contest scores and finish times will now share the same ranking.

As a reminder, you will not be penalized if you had not registered for some given contest.

 

참여 부족에 대한 벌칙

사용자는 둘 다 콘테스트에 등록했지만 제출하지 않은 경우 참가하지 않은 것으로 간주됩니다. 이전 랭킹 모델의 문제점은 컨테스트에 참여하지 않으면 사용자가 랭킹 하락에서 회복 할 수 없을 정도로 과도하게 불이익을받을 수 있다는 점이었습니다.

우리는 콘테스트에 참여하지 않은 사용자에 대해 명시적인 예외를 두지 않을 것입니다. 그러나 새로운 등급 알고리즘을 사용하면 이전에 사용자가 등급 하락에서 회복 할 수 없었던 상황을 피할 수 있습니다. 새로운 알고리즘의 예상 순위와 실제 순위의 기하학적 평균 (m)은 참가자가 평점 상승의 변동에 비해 평점 하락에서 상대적으로 작은 변동을 관찰 할 수 있도록합니다.

즉, 사용자가 콘테스트에 등록했지만 참가하지 않은 경우 이제 짧은 시간 내에 순위 하락에서 콘테스트 숙련도를 반영하는 수준으로 회복 할 수 있습니다.

또한 기존 알고리즘을 사용하면 대회 기간 동안 솔루션을 제출할 수 없지만 순위가 크게 다른 참가자가 많은 상황에 처하게되는 것을 발견했습니다. 이러한 불공정 한 순위를 사용하여 계산 된 등급도 마찬가지로 불공평합니다.

새로운 등급 알고리즘은이 현상을 더 좋게 바꿀 것입니다. 동일한 콘테스트 점수와 종료 시간을 가진 참가자는 이제 동일한 순위를 공유하게됩니다.

참고로, 특정 콘테스트에 등록하지 않은 경우 불이익을받지 않습니다.

Comments

We would love to hear about what you think about these two decisions. Please leave us a comment below. We will review them individually. ❤️

코멘트

이 두 가지 결정에 대해 어떻게 생각하는지 듣고 싶습니다. 아래에 의견을 남겨주세요. 개별적으로 검토하겠습니다. ❤️

 

 

출처: leetcode.com/discuss/general-discussion/518516/New-Rating-Algorithm-Details-Contest-Season-and-Absence-in-Participation


Update: More information about "Contest Season and Absence in Participation" here: 👉 Contest Season and Absence in Participation

Happy New Year everyone! 🎉

In the beginning of 2020, LeetCode contests are ready to begin afresh with a new contest rating algorithm! We've put in lots of thoughts behind this change, so in the sections below, we will highlight what drive this change of contest algorithm and how this change will affect our participants.

Please note that this new rating algorithm will NOT be implemented immediately. We are looking to hear some feedback from you before making any changes. To keep you on top of this change, there will be a seperate annoucement when the new rating algorithm is indeed implemented, so you will not be left in the dark.

Now, what's this new rating algorithm all about?

업데이트 : "콘테스트 시즌 및 참가 결석"에 대한 자세한 정보는 여기에서 : 👉 콘테스트 시즌 및 참가 결석

여러분 새해 복 많이 받으세요! 🎉

2020 년 초에 LeetCode 콘테스트는 새로운 콘테스트 등급 알고리즘으로 새롭게 시작할 준비가되었습니다! 이 변경 사항에 대해 많은 생각을했기 때문에 아래 섹션에서이 콘테스트 알고리즘 변경의 원인과이 변경 사항이 참가자에게 어떤 영향을 미치는지 강조 할 것입니다.

있습니다 새로운 평가 알고리즘은 즉시 구현되지 않습니다 . 변경하기 전에 여러분의 의견을 기다리고 있습니다. 이 변경 사항을 계속 파악하기 위해 새로운 등급 알고리즘이 실제로 구현 될 때 별도의 공지가있을 예정이므로 어둠 속에 두지 않을 것입니다.

자,이 새로운 등급 알고리즘은 무엇에 관한 것입니까?


 

What Do We Hope To Achieve With This New Rating Algorithm?

By replacing the current rating algorithm with the new rating algorithm, we hope to overcome the following 2 issues caused by our current contest rating algorithm and its setups:

 

이 새로운 등급 알고리즘으로 달성하고자하는 것은 무엇입니까?

현재 등급 알고리즘을 새로운 등급 알고리즘으로 대체함으로써 현재 컨테스트 등급 알고리즘 및 설정으로 인해 발생하는 다음 두 가지 문제를 극복하고자합니다.

  1. With the old/current rating algorithm, a user’s rating varies little compared to the relatively large number of contest this user has participated in.

    At the same time, we want to avoid inducing abnormally large rating fluctuation that does not truly reflect a participant's actual contest rankings, which has been a reported problem from our user. In any case, The new rating algorithm should produce rating variation that will best represent the changes in participants actual rankings over time during each contest, in more consistent and small variations.

이전 / 현재 등급 알고리즘을 사용하면이 사용자가 참여한 비교적 많은 수의 콘테스트에 비해 사용자의 등급이 거의 변하지 않습니다.

동시에, 우리는 사용자로부터보고 된 문제인 참가자의 실제 컨테스트 순위를 실제로 반영하지 않는 비정상적으로 큰 등급 변동을 유도하지 않으려 고합니다. 어쨌든 새로운 등급 알고리즘은 각 대회 기간 동안 참가자의 실제 순위 변화를보다 일관되고 작은 변화로 가장 잘 나타내는 등급 변화를 생성해야합니다.

 

 

2. With the old/current contest algorithm setup, if a user had signed up for a contest but was absent in participation for any reason, this user’s rating would be heavily and negatively affected, and the rating would never return to the same height again.

Here we define 'the absence of participation' as the situation when a user registered before contest, but did not make any submissions (including wrong ones). In the old rating algorithm, a user with an absence of participation is considered to be losing to all other participations in the same contest.

But we understand that sometimes life gets in the way of contests, so with the new rating algorithm set up, we want to treat this absence of participation differently than the other participations so its penalty will not be as severe and long-lasting as the one we have now.

 

이전 / 현재 컨테스트 알고리즘 설정에서 사용자가 컨테스트에 등록했지만 어떤 이유로 든 참여하지 않은 경우이 사용자의 평점은 심각하고 부정적인 영향을 받게되며 평점이 다시 같은 높이로 돌아 가지 않습니다.

여기서는 '참가 불가'를 사용자가 공모전에 등록하였으나 제출하지 않은 경우 (잘못된 제출 포함)를 의미합니다. 이전 등급 알고리즘에서는 참여가없는 사용자가 동일한 컨테스트의 다른 모든 참여에서 패배하는 것으로 간주됩니다.

그러나 우리는 때때로 인생이 경연을 방해한다는 것을 알고 있습니다. 따라서 새로운 등급 알고리즘을 설정하면이 참여 부재를 다른 참여와 다르게 취급하여 그 벌금이 하나만큼 심각하고 오래 지속되지 않도록합니다. 우리는 지금 있습니다.

 


 

Where Does Our New Rating Algorithm Come From - Introduction To Elo Rating Algorithm:

Elo rating algorithm is an algorithm used in calculating the relative skill level of players participating in 1 vs 1 competitions. Before a game, set the rating of user A to be R_A, and the rating of user B, R_B. The mean-winning percentage would be:

After the game, the new rating of user A would become:

Among which, S_A is user A’s actual rating, (win=1, draw=0.5, lost=0), K is a constant.

우리의 새로운 등급 알고리즘은 어디에서 왔습니까?-Elo 등급 알고리즘 소개 :

Elo 등급 알고리즘은 1 대 1 대회에 참가하는 플레이어의 상대적인 기술 수준을 계산하는 데 사용되는 알고리즘입니다. 게임을 시작하기 전에 사용자 A의 등급을 R_A로 설정하고 사용자 B, R_B의 등급을 설정하십시오. 평균 승률은 다음과 같습니다.

게임 후 사용자 A의 새 등급은 다음과 같습니다.

이 중 S_A는 사용자 A의 실제 평점, (win = 1, draw = 0.5, lost = 0), K는 상수입니다.


 

Introduction to LeetCode’s new rating algorithm

LeetCode의 새로운 등급 알고리즘 소개

 

LeetCode’s new rating algorithm takes reference from the Open Codeforces rating system (here: https://codeforces.com/blog/entry/20762).

Since Elo rating algorithm is mostly used for 1 vs. 1 competitions, we have to make some adaptations to this rating algorithm in order for it to work for our contests, which involve multiple participants. In LeetCode’s new rating algorithm, each contest participant will be playing against each of the other participants.

Participants with the relatively better rankings wins and the relatively worse rankings lose. For instance, if there were 4 participants attending a contest, a total of 6 matches would be played (P1 v.s. P2, P1 v.s. P3, P1 v.s. P4, P2 v.s. P3, P2 v.s. P4, P3 v.s. P4). There will be no draws for contests.

Here are more details. To determine the ratings of a participant, we first calculate every participant’s Expected Ranking (ERank) after a contest, which is equivalent to the sum of all other participants’ winning rate against this participant, or:

 

LeetCode의 새로운 등급 알고리즘은 Open Codeforces 등급 시스템 (여기 : https://codeforces.com/blog/entry/20762 )에서 참조 합니다.

Elo 등급 알고리즘은 주로 1 대 1 대회에 사용되기 때문에 여러 참가자가 참여하는 대회에서 작동하도록이 등급 알고리즘을 약간 조정해야합니다. LeetCode의 새로운 등급 알고리즘에서 각 컨테스트 참가자는 다른 참가자와 대결합니다.

상대적으로 순위가 높은 참가자가 승리하고 상대적으로 순위가 낮은 참가자가 패합니다. 예를 들어 4 명의 참가자가 대회에 참가했다면 총 6 경기가 진행됩니다 (P1 vs P2, P1 vs P3, P1 vs P4, P2 vs P3, P2 vs P4, P3 vs P4). 콘테스트에 대한 추첨은 없습니다.

자세한 내용은 다음과 같습니다. 참가자의 등급을 결정하기 위해 먼저 콘테스트 후 모든 참가자의 예상 순위 (ERank)를 계산합니다. 이는이 참가자에 대한 다른 모든 참가자의 승률 합계와 동일합니다.

Secondly, we calculate the geometric mean (m) of the expecting-ranking and actual-ranking:

둘째, 기대 순위와 실제 순위의 기하 평균 (m)을 계산합니다.

We can then come up with the Expected Rating (ER) of this participant like this:

그런 다음 다음과 같이이 참가자의 예상 등급 (ER)을 얻을 수 있습니다.

And by using binary search algorithm to come up with the ER, the variation of the ratings would be like this:

그리고 이진 검색 알고리즘을 사용하여 ER을 생성하면 등급의 변화는 다음과 같습니다.

From which,

어떤에서,

With k as the number of times this participant has participated in our contest, the function f has its initial as 0.5, and this initial will be reduced as the number of participated contest increases to 0.2222…, or 2/9.

Thus, the final rating from this new rating algorithm would be:

이 참가자가 우리 콘테스트에 참가한 횟수를 k로하여 함수 f의 이니셜은 0.5이고 참가 콘테스트 수가 0.2222… 또는 2/9로 증가하면이 이니셜은 감소합니다.

따라서이 새로운 등급 알고리즘의 최종 등급은 다음과 같습니다.

Additionally, the rating calculation here only applies to participants who have made submissions during the contest. For users who have absence of participation, contest ratings will be deduced by ways discussed in the Conclusions section of this post.

또한 여기에서의 등급 계산은 콘테스트 중에 제출 한 참가자에게만 적용됩니다. 참여하지 않은 사용자의 경우이 게시물의 결론 섹션에 설명 된 방식으로 컨테스트 등급이 추론됩니다.



LeetCode Global Rating Data

👉 Global Top 5000 Ratings List

🟢Global Top 10

The graphs below are taken from Contest 83 to 167, capturing the changes from ratings 1,500 and above. For each participant, shown on the graph on top is the rating from every contest, with the blue line of rating is generated from the new rating algorithm, and the orange line of rating is generated from the old rating algorithm. And on the graph below the ranking of that participant in each contest.

아래 그래프는 컨테스트 83에서 167까지의 그래프이며 1,500 이상의 등급에서 변경된 내용을 보여줍니다. 각 참가자에 대해 상단의 그래프는 모든 컨테스트의 등급이며, 파란색 등급은 새로운 등급 알고리즘에서 생성되고 주황색 등급의 등급은 이전 등급 알고리즘에서 생성됩니다. 그리고 각 콘테스트 참가자의 순위 아래 그래프에 있습니다.

 

 

 

 

 

 


 

Conclusions

From the graphs above, we have observed:

  • The new rating algorithm effectively reduces rapid rating convergence while steadly produce visible rating variations that truthfully represent changes in the contest rankings of participants over time.
  • The average contest ranking among these global top 10 participants generated by the new rating algorithm is noticeably higher than that from the current rating algorithm, which indicates that the new rating algorithm is better at reflecting participants contest ranking than the old one.
  • The new rating algorithm is time sensitive and puts more weights on the most recent contests, so participants who have better rankings from more recent contests have higher ratings on average.

결론

위의 그래프에서 우리는 다음을 관찰했습니다.

  • 새로운 등급 알고리즘은 신속한 등급 수렴을 효과적으로 줄이면서 시간이 지남에 따라 참가자의 컨테스트 순위 변화를 사실적으로 나타내는 시각적 등급 변화를 지속적으로 생성합니다.
  • 새로운 등급 알고리즘에 의해 생성 된 이러한 글로벌 상위 10 명의 참가자 중 평균 대회 순위는 현재 등급 알고리즘보다 현저하게 높으며, 이는 새로운 등급 알고리즘이 이전 등급보다 참가자 대회 순위를 반영하는 데 더 우수하다는 것을 나타냅니다.
  • 새로운 등급 알고리즘은 시간에 민감하며 가장 최근의 컨테스트에 더 많은 가중치를 부여하므로 최근 컨테스트에서 순위가 ​​더 높은 참가자는 평균적으로 더 높은 등급을받습니다.

 

FAQ

Q1: Will contest seasons share the same or different rating algorithms?
A1: All contest seasons will be sharing the same rating algorithm.

Q2: How do we determine everyone's rating in the beginning of the contest season?
A2: In the beginning of each contest season, k will be set to 0, which means everyone will start with a clean slate for contest history.

Q3: Why are we changing the rating algorithm?
A3: We are changing the rating algorithm due to 2 reasons:

  1. With the old rating algorithm, users' rating growth slows down as they partake in more and more contest;

  2. in the current rating rules, absence in participation is equivalent to losing to all other partcipants, causing the participant's rating to dip sharply. If this user happens to have participated in a large number of contest already (which we've mentioned in the beginning of this article), it's extremely difficult and time consume for this user's rating to climb back to the normal state.

Q4: How does the new rating algorithm and its setup solve the current contest concerns mentioned above?
A4: Without a sigma parameter and with a new variance, the new rating algorithm will overcome the issue of stagnant growth in ratings after an increasing number of contest participation. And as for those who have absence in participation, the solution/penalization setup is done seperately from the new rating algorithm.

Q5: If recent participations have bigger impact on one's ratings than participations from a more distant time, does it mean participations in the beginning of a contest season is less important than the ones later on?
A5: Yes, this is true if you participate in our contests often, because your contest ranking might increase throughout this period of time.

자주하는 질문

Q1 : 컨테스트 시즌은 동일하거나 다른 등급 알고리즘을 공유합니까?
A1 : 모든 컨테스트 시즌은 동일한 등급 알고리즘을 공유합니다.

Q2 : 콘테스트 시즌이 시작될 때 모든 사람의 등급을 어떻게 결정하나요?
A2 : 각 대회 시즌이 시작될 때 k는 0으로 설정됩니다. 즉, 모든 사람이 대회 기록을 위해 깨끗한 슬레이트로 시작합니다.

Q3 : 평가 알고리즘을 변경하는 이유는 무엇입니까?
A3 : 다음 두 가지 이유로 등급 알고리즘을 변경합니다.

  1. 이전 등급 알고리즘을 사용하면 사용자의 등급 증가는 점점 더 많은 경쟁에 참여함에 따라 느려집니다.

  2. 현재 등급 규칙에서 참여하지 않는 것은 다른 모든 참가자에게 패배하는 것과 동일하며 참가자의 등급이 급격히 떨어집니다. 이 사용자가 이미 많은 수의 콘테스트에 참가한 경우 (이 기사의 시작 부분에서 언급 했음)이 사용자의 등급이 정상 상태로 돌아가는 데 매우 어렵고 시간이 걸립니다.

Q4 : 새로운 등급 알고리즘과 설정은 위에서 언급 한 현재 컨테스트 문제를 어떻게 해결합니까?
A4 : 시그마 매개 변수가없고 새로운 분산이있는 새로운 등급 알고리즘은 컨테스트 참여 수가 증가한 후 등급이 정체되는 문제를 극복 할 것입니다. 그리고 참여하지 않은 사람은 새로운 등급 알고리즘과 별도로 해결 / 벌칙 설정이 이루어집니다.

Q5 : 최근 참여가 더 먼 시간의 참여보다 자신의 등급에 더 큰 영향을 미친다면, 대회 시즌 초에 참여하는 것이 나중에 참여하는 것보다 덜 중요하다는 의미인가요?
A5 : 예. 콘테스트에 자주 참가하면이 기간 동안 콘테스트 순위가 올라갈 수 있습니다.



What Do You Think About The Following?

  • Do you want to have contest seasons? By contest season, each contest season will use the same rating algorithm, with k=0, so participants start anew.

    • Yes
    • No
  • What do you think is the best "fresh-start" rating for each seaon?

    • Participation ratings will be put back to 0 in the beginning of each season, and ratings of each season will be kept seperately.
    • Your suggestion.
  • If you want to have contest seasons, which of the following options do you prefer?

    • Bi-anually/ twice a year
    • Annually
  • How will users were absent in participation be penalized? We offer 2 options here:

    • For participants who were absent in participation, their rating will drop by a set percentage. For example, let’s say the set percentage is 3%. If a participant had a contest rating of 2000 before a contest, his/her contest rating would be reduced to 2000*(1-0.03)=1940 at the end of this contest.
    • Every participant will be given 1 and 1 chance only of absence forgiveness per year/ per contest season, which enables them to maintain their ratings if they forget to participate or submit due to any reasons. The reduction of ratings from such absence will be strictly enforced in the following contests.

다음에 대해 어떻게 생각하십니까?

  • 대회 시즌을 원하십니까? 콘테스트 시즌별로 각 콘테스트 시즌은 k = 0 인 동일한 등급 알고리즘을 사용하므로 참가자는 새로 시작합니다.

    • 아니
  • 각 시즌에 대한 최고의 "새로 시작"등급이 무엇이라고 생각하십니까?

    • 각 시즌 초 참여 등급은 0으로 되돌려지며, 시즌 별 등급은 별도로 유지됩니다.
    • 당신의 제안.
  • 콘테스트 시즌을 원하는 경우 다음 중 선호하는 옵션은 무엇입니까?

    • 2 년에 한 번 / 년에 두 번
    • 매년
  • 참여하지 않은 사용자는 어떻게 처벌을 받습니까? 여기에 두 가지 옵션이 있습니다.

    • 참여하지 않은 참가자의 경우 등급이 일정 비율만큼 떨어집니다. 예를 들어 설정된 비율이 3 %라고 가정 해 보겠습니다. 참가자가 콘테스트 전에 콘테스트 등급이 2000 인 경우이 콘테스트가 끝날 때 콘테스트 등급이 2000 * (1-0.03) = 1940으로 감소됩니다.
    • 모든 참가자는 1 년에 1 회, 콘테스트 시즌마다 1 회 결석 사서 만 주어지며, 어떤 이유로 든 참가 또는 제출을 잊었을 때 등급을 유지할 수 있습니다. 이러한 결석으로 인한 등급 감축은 다음 대회에서 엄격하게 시행됩니다.


Share your experience from the previous contests and what you think about the changes in the rating algorithms in the comments below! If you have any questions or needs more clarifications on some parts of this post, tag us below and we'll clarify your doubts asap ❤️

 

아래 댓글에서 이전 콘테스트의 경험과 평가 알고리즘의 변경에 대해 어떻게 생각하는지 공유하세요! 이 게시물의 일부에 대해 질문이 있거나 추가 설명이 필요한 경우 아래에 태그를 지정해 주시면 최대한 빨리 귀하의 의심을 명확히하겠습니다 ❤️

 

 

 

 

출처: leetcode.com/discuss/general-discussion/468851/New-Contest-Rating-Algorithm-coming-soon

 

 

 

반응형
반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band