This commit is contained in:
2026-04-24 21:26:39 +09:00
parent cd38fd49e2
commit 0fe1e355a7
15 changed files with 204 additions and 11339 deletions

View File

@@ -1,36 +1,28 @@
# TJA 난이도 산정 핵심 요소 (Technical Factors)
'상수' 산출을 위해 채보에서 추출해야 하는 5개 핵심 차원과 세부 지표입니다.
학습 모델(DifficultyNet)에 입력되는 8가지 핵심 지표입니다. (spec.md 업데이트 반영)
## 1. 물리적 밀도 (Physical Density)
물리적인 타격 속도와 관련된 지표입니다.
- **Global NPS**: `총 노트 수 / 총 연주 시간`. 곡의 전반적인 속도 체급.
- **Peak NPS (Sliding Window)**: 1초~2초 단위 윈도우에서 추출한 최대 NPS. 순간 폭타의 한계치.
- **Density Variance**: NPS의 표준 편차. 곡이 얼마나 균일한지 또는 급격한지 측정.
## 1. 물리적 밀도
- **density_avg**: 평균 노트 밀도 (총 노트 수 / 곡 길이)
- **density_peak**: 1초당 최대 밀도 (가장 촘촘한 구간의 노트 수)
## 2. 지구력 요구량 (Stamina Requirement)
지치지 않고 집중력을 유지해야 하는 정도입니다.
- **Longest Stream Count**: 쉼표(예: 8분음표 이상의 간격) 없이 이어지는 최대 노트 개수.
- **Stream Density Ratio**: 전체 곡 시간 대비 스트림(연타) 구간이 차지하는 비중.
- **Rest Interval Analysis**: 회복 가능한 구간의 배치와 빈도.
## 2. BPM 및 속도 변화
- **bpm_avg**: 곡의 평균 BPM
- **bpm_var**: BPM 변화율 (BPM 변속의 다양성)
## 3. 배치 복잡도 (Pattern Complexity)
인지적 부하와 손 배치(Hand-switching)의 어려움입니다.
- **Color Transition Ratio**: `색상 전환(d↔k) 횟수 / 총 노트 수`. 전환이 많을수록 인지 부하 증가.
- **Hand-Switching Index**: 홀수(3, 5, 7) 및 짝수(2, 4) 연타의 혼합도. 기준 손이 강제로 바뀌는 빈도.
- **Complex Pattern Detection**: 비정형 패턴(예: ddkdk, kkkdk 등)의 출현 빈도.
## 3. 구조적 특징
- **note_count**: 총 노트 수
- **long_note_duration**: 전체 대비 긴 노트(지속형) 점유율
## 4. 리듬 복잡도 (Rhythmic Complexity)
정확도(98%) 달성을 방해하는 타이밍 요소입니다.
- **Quantization Diversity**: 사용된 음표 단위(1/16, 1/12, 1/24, 1/48 등)의 종류와 혼합 빈도.
- **Off-beat Ratio**: 정박(1/4, 1/8)을 벗어난 엇박 노지의 비율.
- **Rhythmic Entropy**: 노트 간 시간 간격의 불규칙성 정도.
## 4. 패턴 및 연타
- **complex_ratio**: 복합 패턴(큰 북/작은 북 혼합) 비율
- **roll_count**: 연타(Roll) 노트의 총 개수
## 5. 가독성 및 기믹 (Reading & Gimmicks)
시각적인 반응 속도와 암기 요소를 측정합니다.
- **Scroll Velocity (SV) Variance**: `#SCROLL` 변화의 진폭과 빈도.
- **BPM Fluctuation**: `#BPMCHANGE`를 통한 급격한 속도 변화 및 정지(#DELAY).
- **Visual Overlap**: 저속 구간에서의 노트 겹침이나 고속 구간의 반응 한계.
## 계산 로직
- **밀도 계열**: 노트 간 시간 간격(`delta`)의 역수(`1/delta`)로 순시 밀도를 계산하여 `avg`/`peak` 도출.
- **BPM 계열**: `#BPM``#STOP` 명령을 기반으로 시간 축 전개 후 평균 및 표준편차(`var`) 계산.
- **패턴 계열**: 슬라이딩 윈도우(4~8개 노트)에서 노트 타입 변화(`d↔k`) 횟수를 측정하여 비율 산정.
- **연타 계열**: `#ROLL` 명령 및 입력 밀집 구간 카운트.
## 상수 추정 가중치 (Proposed)
`Constant ∝ (Peak_NPS * 0.4) + (Complexity * 0.3) + (Stamina * 0.2) + (Reading * 0.1)`
## 중요 주의사항
- 모든 Factor는 모델 학습 전 `StandardScaler` 또는 `RobustScaler`를 통해 반드시 이상치를 처리해야 합니다.