Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[#49] 종합 점수 계산 알고리즘 구현 #97

Merged
merged 9 commits into from
May 23, 2024

Conversation

koomin1227
Copy link
Member

@koomin1227 koomin1227 commented May 22, 2024

이슈

체크리스트

  • 종합 점수 계산 알고리즘 구현
  • 깃허브 점수 계산 알고리즘 개선

고민한 내용

기본적으로 모든 영역의 점수를 100점 만점으로 환산 하였다.

학점 점수 계산 방법

  • 학점은 4.5이 만점이기 때문에 4.5을 100점으로 환산하여 점수를 산정했다.
  • 4.5 -> 100점
  • 3.0 -> (3.0 /4.5) * 100 -> 66.66666666...

알고리즘 점수 계산 방법

[solved.ac](http://solved.ac) 레이팅 점수를 100점으로 환산하여 계산한다. 주어진 티어 데이터와 상위 %를 기준으로 선형 보간법을 사용하여 각 레이팅 점수를 100점 만점으로 변환한다.

비선형 변환을 사용하는 이유

비선형 변환을 사용하는 이유는 레이팅 점수의 분포가 선형적이지 않기 때문이다. 높은 레이팅 점수 구간에서는 적은 차이로도 큰 변화가 발생하지만, 낮은 레이팅 점수 구간에서는 큰 차이가 나더라도 변화가 적다. 이러한 비선형성을 처리하기 위해 로그 변환과 같은 비선형 변환을 사용하면 데이터의 특성을 더 잘 반영할 수 있다.

데이터

레이팅 점수와 상위 % 데이터는 다음과 같다:

const ratings: number[] = [
    0, 30, 60, 90, 120, 150,
    200, 300, 400, 500, 650,
    800, 950, 1100, 1250, 1400,
    1600, 1750, 1900, 2000, 2100,
    2200, 2300, 2400, 2500, 2600,
    2700, 2800, 2850, 2900, 2950, 3000
];

const percentiles: number[] = [
    100.00, 100.00, 92.73, 87.89, 82.22, 77.32,
    70.19, 58.91, 50.90, 43.87, 36.36,
    30.36, 24.65, 19.65, 14.68, 10.32,
    5.76, 3.32, 1.95, 1.45, 1.13,
    0.86, 0.58, 0.39, 0.29, 0.20,
    0.13, 0.068, 0.044, 0.031, 0.024, 0.019
];

환산 방법

1. 상위 % 계산

주어진 레이팅 점수에 대해 상위 %를 추정한다. 주어진 레이팅 점수가 특정 범위 내에 있을 때, 두 인접한 점수 사이에서 선형 보간법을 사용하여 상위 %를 계산한다.

2. 점수 변환

계산된 상위 %를 사용하여 100점 만점으로 변환한다. 변환 공식은 다음과 같다:

\text{환산 점수} = 100 - \text{상위 %}

선형 보간법

선형 보간법은 주어진 두 점 사이에서 비례 관계를 이용하여 값을 추정하는 방법이다. 다음 수식을 사용한다:

percentile=y0+((rating−x0)×(y1−y0)(x1−x0))percentile=y0+((x1−x0)(rating−x0)×(y1−y0))

여기서:

  • x0와 x1은 인접한 두 레이팅 점수이다.
  • y0와 y1은 해당 레이팅 점수에 대응하는 상위 %이다.

깃허브 점수 계산 방법

종합 점수 계산 방법

  • 종합 점수는 가중 평균을 사용하였다.
  • 가중치는 다음과 같다.
    • 깃허브 : 4
    • 알고리즘 : 4
    • 학점 : 1
  • 학점은 중요하지 않다고 생각해서 가중치를 낮추었다.
  • 깃허브와 알고리즘 둘다 중요하기 때문에 높은 가중치를 주었다.
  • 계산 방식은 다음과 같다.
const totalPoint =
            (githubPoint * GITHUB_WEIGHT +
                algorithmPoint * ALGORITHM_WEIGHT +
                gradePoint * GRADE_WEIGHT) /
            TOTAL_WEIGHT

@koomin1227 koomin1227 requested a review from namewhat99 May 22, 2024 15:36
Copy link
Contributor

@namewhat99 namewhat99 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

화긴했습니다~ 수고수고

@namewhat99 namewhat99 merged commit bcf5324 into develop May 23, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants