# aimusiclist.com 순위 산정 방식 (v2.0, 2026-10-28)

> 공개용 사본. 악용을 막기 위해 일부 숫자 기준(차트 진입 최소 청취자 수, 이상 패턴 판정 기준, 나라·언어 차트 공개 기준, 펜로즈 바닥값)은 "기준이 있다"까지만 적는다.
> 쉬운 설명: `https://aimusiclist.com/charts/methodology` · AI용 요약: 규약집 14장 `https://aimusiclist.com/developers/aimusiclist-rulebook.md`

**v1.2 → v2.0 바뀐 점**
① 차트가 여러 개: Global·나라별·언어별·장르별·Rising 50 ② 글로벌 점수는 **펜로즈 제곱근 방식**(나라 활동 청취자 수의 제곱근으로 나눠 합산) ③ 재생 기록에 듣는 사람 나라(2글자)·재생 출처, 본국 고정 ④ 하루 기준 **UTC 00:00**(한국시간 09:00), 주간 대표 차트는 **금~목(UTC)** ⑤ 주간 차트에서 한 청취자·한 곡 최대 3일분 ⑥ 이메일 인증 회원만 가중치 1.0 ⑦ 최소 고유 청취자, 장기 체류 규칙 ⑧ 조작 검사 추가(청취자 다양성·나라 급증) ⑨ 곡 언어 오표기 처리 ⑩ 순위 변동 표시(▲▼–NEW RE) ⑪ 좋아요(로그인 없이, 순위 점수 미포함) ⑫ 장르 화면은 인기순(장르 Top 100)이 기본.
v1.2의 원칙(서로 다른 사람 수를 센다, 본인 재생도 1명, 소유자 곡 수 제한 없음, 동점 규칙, 보류·해제)은 그대로다.

## 0. 기본 원칙
- 반복 재생이 아니라 "서로 다른 사람이 몇 명 들었는지"를 센다. 아티스트 본인도 청취자 1명이다.
- 인구가 많은 나라나 우리사이트를 먼저 발견한 나라가 글로벌 차트를 독식하지 않게, 나라 크기를 제곱근으로 보정한다.
- 숫자는 모두 설정 파일에 두고 코드를 고치지 않고 조정한다. 메인 페이지는 순위를 읽지 않는다.

## 1. 집계 대상
- 우리사이트(aimusiclist.com)에서 재생된 기록만. 개인사이트에서 직접 재생한 기록은 넣지 않는다(로그인 공유 뒤에도 점수 미포함).
- aimusiclist 공개곡이고 사이트가 `active`인 곡만. 공개를 끄면 즉시 순위 화면에서 빠진다.
- 좋아요(♥)는 순위 점수에 넣지 않는다(로그인 없이 누를 수 있어 쉽게 부풀릴 수 있으므로). 표시만 한다.

## 2. 유효 재생
- 실제로 30초 이상(건너뛴 시간 제외). 서버 서명 시작표로 검증: ① 실제 흐른 시간 ≥ 들은 시간 ② 30초~곡 길이 ③ 지금 공개 상태.
- 같은 청취자(회원 / 비회원 기기)·같은 곡은 24시간 안에 1회만. 청취자 1명은 하루(UTC)에 최대 50곡까지 순위에 기여.
- 같은 IP에서 서로 다른 청취자가 같은 곡을 24시간 안에 5회를 넘게 재생하면 넘는 것은 "의심"으로 기록만(IP는 해시만).

## 3. 듣는 사람의 나라
- 재생 기록에 나라 코드(2글자)만 남긴다(Cloudflare가 알려 주는 값, Cloudflare를 거친 요청만 믿음). IP·위치 자체는 저장하지 않는다.
- 알 수 없음·Tor는 나라 차트에서 제외하고 글로벌에서는 묶음 하나로 계산, 가중치 0.5.
- **본국 고정**: 회원은 최근 28일 동안 가장 많이 재생한 나라, 비회원 기기는 처음 본 나라를 28일 고정. 한 청취자는 한 집계 기간에 한 나라에만 속한다(VPN으로 나라를 바꿔도 점수 나라는 그대로).

## 4. 점수 계산
| 경우 | 가중치 |
|---|---|
| 이메일 인증 회원 재생 | 1.0 |
| 미인증 회원·비회원 재생 | 0.5 |
| Tor·알 수 없는 나라 | ×0.5 |
| 가입 24시간 미만 계정 | ×0.5 |
| 회원 플레이리스트 담기(회원·곡당 평생 1회) | 2.0 |

- 한 사람의 영향력 상한: 주간 집계에서 한 청취자가 한 곡에 줄 수 있는 재생 점수는 최대 3일분.
- 나라 점수 `S(곡, c)` = 본국이 c인 청취자들의 점수 합. `N_c` = 그 기간 본국 c의 활동 청취자 수.
- **글로벌 점수(펜로즈)**: `Global(곡) = Σ_c S(곡, c) / √N_c` — 청취자가 아주 적은 나라들은 "기타 지역" 하나로 합친 뒤 계산(바닥값 있음).
- 나라별 차트 점수 = `S(곡, c)` 그대로. 언어별·장르별·Rising = 대상 곡만 고른 뒤 글로벌과 같은 식.
- 진입 조건: 그 차트 기간 서로 다른 청취자가 **최소 기준** 이상이어야 한다(숫자 비공개).

## 5. 차트 종류와 기간
| 차트 | 대상 곡 | 청취자 | 크기 | 공개 |
|---|---|---|---|---|
| Global | 전체 | 전 세계(펜로즈) | 100 | 항상 |
| 나라별 | 전체 | 본국 c | 100 | 그 나라 활동 청취자가 기준 이상일 때 |
| 언어별 | 주 언어 = L | 전 세계(펜로즈) | 100 | 그 언어 공개곡이 기준 이상일 때 |
| 장르별 | 메인 장르 = G | 전 세계(펜로즈) | 100 | 항상 |
| Rising | 처음 확인 28일 이내 | 전 세계(펜로즈) | 50 | 항상 |

- 기간: 주간(대표) = 금 00:00 ~ 목 24:00 UTC, 일간 = 하루(UTC), 최근 7일(보조). 계산: 매일 UTC 00:30(한국시간 09:30), 금요일 계산 때 지난 주간 차트 확정. 실시간 차트는 없다.
- 저장 120위(Rising 60위), 화면에는 공개곡·active 사이트만 100(50)개.
- 장기 체류(주간 Global·나라별·장르별): 진입 20주 뒤 50위 밖 / 26주 뒤 25위 밖 / 52주 뒤 10위 밖 / 78주 뒤 5위 밖이면 내린다.

## 6. 순위 변동 표시
- 같은 차트의 직전 기간(주간이면 지난주, 일간이면 전날)과 비교: `▲n` / `▼n` / `–` / `NEW`(처음 진입) / `RE`(빠졌다가 다시). 표시 순위는 화면에 보인 순위(공개곡·active만) 기준.

## 7. 공정성 규칙
- 한 아티스트·한 사이트의 곡 수 제한 없음. 동점: ① 서로 다른 청취자 수 ② 처음 확인한 시각이 이른 곡 ③ 곡 번호가 작은 곡.
- 이상 패턴은 그 기간 점수 반영을 **보류**하고 검토(기준 숫자 비공개): 적은 수의 IP에 몰린 재생, 신규 계정 과다, 청취자 다양성 부족(그 곡만 듣는 계정 무리), 관련 없는 한 나라에서의 급증. 관리자가 해제하면 그날부터 다시 계산.
- 점수 로그(곡·순위일·나라마다 규칙별 회수와 점수)를 남긴다. 누가 들었는지는 남기지 않는다.
- 투명성: 차트 곡마다 그 기간 청취자 수·청취 나라 수 공개. 방법이 바뀔 때마다 버전·날짜.

## 8. 노출 원칙
- 메인 페이지에 순위 없음. 장르 화면: [인기순 | 최신순], 인기순(장르 Top 100)이 기본. 위에 그 장르 NEW 진입 곡과 Rising 50 링크. 언어·세부 장르 필터는 Top 100 안에서 거르고 원래 순위 번호 유지.
- 처음 보이는 차트: 방문자 나라 차트가 공개돼 있으면 나라 차트, 아니면 Global.
- 재생 출처(차트·장르·검색·플레이리스트·앨범·아티스트·공유·기타)를 기록해, 순위 노출이 순위를 굳히는 정도를 측정한다(지금 가중치는 모두 같음).

## 9. 곡 언어 오표기
- 곡마다 "언어가 틀려요" 신고(로그인 불필요, IP당 하루 10건). 관리자가 고친 값이 우선. 가사가 있으면 글자 체계를 자동 대조해 크게 다르면 관리자가 확인. 반복해서 틀리는 사이트는 경고 후 언어별 차트에서 제외될 수 있다.

## 10. 좋아요 (♥)
- 로그인 없이 누구나, 기기당 한 곡 1회(다시 누르면 취소), 같은 IP에서 하루 200회까지. 순위 점수에는 넣지 않는다. 이상하게 몰린 증가는 관리자가 0으로 되돌릴 수 있다.

## 11. 데이터 보관
- 재생 기록(곡, 사이트, 청취자 구분 ID, 회원 여부, 인증 여부, 신규 계정 여부, 들은 초, 시각, IP 해시, 나라, 본국, 출처)은 40일 뒤 삭제. 차트와 점수 로그는 계속 보관.
