PlayerPower 방법론 v3
player_power@2026.4 — 측정 축·보정 공식·era 앵커·R7 클러치 v2·R8 안정성 v2·표본 게이트·백테스트 검증. 점수 뒤에 숨은 모든 계산을 공개합니다.
§ 1 — 무엇을 측정하나
PlayerPower는 10개 축(R1~R9 + R_win)을 역할별 가중치로 합산한 0~99 점수입니다. v2026.4부터 단일 점수 외에 IndividualSkill (개인 기량 전용 축 합산)과 TeamSynergy (팀 의존 축 합산) 두 트랙을 추가로 제공합니다. 세 숫자를 함께 읽으면 “약팀 에이스”와 “강팀 평균” 패턴을 구분할 수 있습니다.
| 역할 | R1라이닝 | R2한타 | R3메카닉 | R4시야 | R5적극성 | R6오브젝트 | R7클러치 | R8안정성 | R9역할 특화 | R_win승리 기여 |
|---|---|---|---|---|---|---|---|---|---|---|
| TOP | 22.2% | 16.4% | 10.6% | 3.9% | 4.8% | 7.2%×0.85 | 6.8% | 3.9% | 9.7% | 14.5%×0.45 |
| JG | 17.2% | 14.6% | 11.5% | 7.6% | 6.7% | 11.9%×0.85 | 5.7% | 3.8% | 6.7% | 14.3%×0.45 |
| MID | 21.3% | 18.1% | 10.7% | 4.8% | 4.8% | 7.3%×0.85 | 6.8% | 3.9% | 7.8% | 14.5%×0.45 |
| ADC | 19.3% | 20.5% | 10.6% | 2.9% | 2.9% | 7.2%×0.85 | 6.8% | 3.9% | 8.7% | 17.3%×0.45 |
| SUP | 7.6% | 12.1% | 10.4% | 17.0% | 6.6% | 9.5%×0.85 | 6.6% | 3.8% | 9.5% | 17.0%×0.45 |
색상: 밝을수록 가중치 높음. 셀 위에 마우스를 올리면 역할별 reasoning이 표시됩니다. 소스: player_power.py:98 ROLE_COMPOSITE. ×0.45 / ×0.85 = 팀 의존 감산 계수 (player_power.py:137).
Individual / Team / Cross 비중 (role별)
| 역할 | Individual 비중R1 · R2 · R3 · R4 · R5 · R9 | Team 비중R6 · R7 · R_win | Cross (R8)R8 |
|---|---|---|---|
| TOP | 67.6% | 28.5% | 3.9% |
| JG | 64.2% | 32.0% | 3.8% |
| MID | 67.5% | 28.6% | 3.9% |
| ADC | 64.8% | 31.3% | 3.9% |
| SUP | 63.1% | 33.1% | 3.8% |
하위권 팀 미드 — PP 72 / IS 84 / TS 68
R1 +1.9σ, R3 +1.4σ / R_win −0.8σ, R7 −0.3σ. IS−TS=16 ≥ 12 → 약팀 에이스 플래그.
Carry on a weak team: IS captures individual excellence PP alone suppresses.
우승권 팀 SUP — PP 78 / IS 71 / TS 85
R_win +1.6σ, R7 +1.1σ / R1 +0.2σ, R3 +0.4σ. TS−IS=14 → 팀 환경 의존이 PP를 올리는 구조.
TS correctly captures team synergy; IS reflects the realistic individual baseline.
is_carry_lopsided = (individual_skill − team_synergy) ≥ 12 composite_check = 0.6 × IS + 0.4 × TS → |composite_check − PP| ≤ 2
소스: DESIGN_SPLIT.md § 2–3 (freeze 2026-05-06), player_power.py:140 ROLE_INDIVIDUAL / ROLE_TEAM_SYNERGY.
§ 2 — 어떻게 보정하나
관측 지표를 그대로 쓰면 강팀·OP 챔프·소표본 핫스트릭이 점수를 왜곡합니다. 네 단계 보정이 이 왜곡을 순서대로 제거합니다: 잔차(리그 기대값 제거) → 챔피언 보정(OP 픽 효과 제거) → 수축(소표본 과대추정 감소) → SoS(상대 강도 반영).
-- 1. 잔차: 리그·메타 기대값 제거 raw_z[axis] = (observed_metric − league_mean) / league_std residual_z = raw_z − champion_strength_z × β (β=0.15 기본값) -- 2. 수축: 소표본 당기기 shrunk_z = residual_z × n / (n + SHRINK_K) (SHRINK_K=15) -- 3. 합산: 역할 가중치 적용 PlayerPower_z = Σ( ROLE_COMPOSITE[role][axis] × team_mul[axis] × shrunk_z[axis] ) -- 4. SoS: 상대 강도 보정 후 0~99 스케일 sos_bonus = clip(mean(opp_team_elo) − avg_elo, −1.5σ, +1.5σ) × SOS_COEFF PlayerPower (0–99) = Φ(PlayerPower_z + sos_bonus) × 99
잔차 — 약팀 에이스 보호
강팀 환경 없이 기록한 성과를 과소평가하지 않습니다. 역할·리그·메타 기대값을 빼고 초과분만 반영합니다.
소스: player_power.py:350 _compute_residuals()
챔피언 보정 — OP 픽 효과 제거
이 패치 OP 챔프 덕분에 오른 raw 지표 중 β=0.15 비율을 빼고, 약픽 사용 시에는 반대로 올려 개인 실력 신호를 정제합니다.
소스: player_power.py:78 champion_beta, ratings_player.py:46 load_champion_betas()
수축 추정 — 소표본 과대 방지
n=5 경기 → 신뢰도 25%, n=30 → 67%. 신인 5전 전승이 98점이 되는 것을 막습니다.
소스: player_power.py:64 SHRINK_K=15
SoS — 상대 강도 반영
강팀 상대 지표에 보너스, 약팀 상대에는 페널티. 팀 시너지 트랙은 SoS 계수가 0.40 (composite 0.25보다 높음).
소스: player_power.py:137 SOS_COEFF=0.25, player_power.py:139 SOS_COEFF_TEAM_SYNERGY=0.40
§ 3 — 어떤 앵커에 비교하나
“88점이 페이커급인가, 정규 주전 평균인가?”라는 질문에 답하기 위해 역사적으로 합의된 최고 선수들의 점수를 era anchor로 고정합니다. 앵커는 리그·시즌·역할별로 고정되며, 현재 점수를 앵커 대비 상대 위치로 해석할 수 있게 합니다.
앵커는 두 종류입니다: (1) All-Pro 투표 합의 기반 역할별 최고 선수 시즌 점수, (2) MSI/Worlds 우승·4강 팀 선수의 국제 대회 점수. 두 앵커가 일치하면 cross-region 타당성이 확보됩니다.
| 앵커 유형 | 설명 | 소스 |
|---|---|---|
| era_anchor | 리그별 시즌 최고 선수 점수 — All-Pro 1st team 수상자 | anchors/era_anchors.csv |
| anchor_2024_lck_spring | 2024 LCK 스프링 역할별 앵커 핀 — 참조 포인트 | anchors/anchor_2024_lck_spring.json |
| anchor_intl_2011_2025 | MSI / Worlds 2011~2025 우승·4강 앵커 | anchors/anchor_intl_2011_2025.json |
앵커는 변경 불가(governance — CODEOWNERS 2명 승인 필요)입니다. 앵커 핀이 없는 선수에게는 절대 위상 표기 대신 역할 내 백분위가 표시됩니다.
소스: analytics/statiz_lab/anchors/era_anchors.csv, analytics/statiz_lab/src/era_anchor_check.py.
§ 4 — 클러치란 (R7 Clutch v2)
v2026.3까지의 R7은 “30분 이상 긴 게임에서의 성과”로 정의했습니다. 긴 게임 = 클러치라는 가정이 약하다는 피드백을 반영해, v2026.4에서는 팬이 직관적으로 떠올리는 4가지 클러치 순간을 가중 합산합니다.
시리즈 클러치
Bo 시리즈 마지막 경기 승률 잔차. 5세트 또는 결정적 경기 집중력.
소스: r7_clutch_v2.py:31
골드 역전
GD@15 ≤ −2,000 상태에서 시작한 경기의 성과 z. 열세 구도 역전 능력.
소스: r7_clutch_v2.py:55
라인 열세 복구
GD@15 ≤ −800인 경기의 후반 개인 성과. 라인 패배 이후의 기여 능력.
소스: r7_clutch_v2.py:80
빅매치 리프트
결승·국제 대회에서의 승률 − 정규시즌 승률. 큰 무대 압박 극복.
소스: r7_clutch_v2.py:110
R7_v2 = 0.40 × series_clutch_z
+ 0.25 × deficit_recovery_z
+ 0.20 × lane_loss_rec_z
+ 0.15 × high_stakes_win_z
컴포넌트가 없으면 (국내전 전용 선수 등) 사용 가능 컴포넌트만으로 재정규화.
n < 3 경기: 해당 컴포넌트 "표본 부족" 표기.소스: rift_engine/scoring/r7_clutch_v2.py:31 R7_WEIGHTS, player_power.py:1086 R7 integration. 시각화: 클러치 모멘트 쇼케이스 →
§ 5 — 안정성이란 (R8 Consistency v2)
v2026.3의 R8은 한 스플릿 내 per-game 변동성(downside std)만 반영했습니다. v2026.4에서는 스플릿 간 안정성을 추가해 “메타가 바뀌어도 꾸준한 선수”와 “한 시즌 핫스트릭 선수”를 구분합니다.
R8_v2 = 0.70 × downside_std_z + 0.30 × cross_split_consistency_z downside_std_z : 하위 방향 per-game 변동성 (같을수록 안정) cross_split_consistency : std(pp_z) over prior 2 splits (작을수록 안정) 루키 (prior split 0~1개) → downside_std_z 만 사용 (weight 1.0) cross_split n_prior_splits < 2 → "표본 부족" 표기
downside_std — per-game 하방 변동성
데스 폭주, 라인 붕괴 등 나쁜 경기의 편차를 측정합니다. 편차가 클수록 팀의 계획 가능성이 낮아집니다.
소스: r8_consistency_v2.py:_compute_downside_std()
cross_split — 스플릿 간 pp_z 분산
직전 2 스플릿의 pp_z를 비교합니다. 메타 변화·로스터 변경에도 일관성을 유지하는 선수가 높은 점수를 받습니다.
소스: r8_consistency_v2.py:_compute_cross_split_volatility()
소스: rift_engine/scoring/r8_consistency_v2.py, player_power.py — R8_V2_WEIGHTS.
§ 6 — 표본이 충분한가
20경기(PROVISIONAL_GAMES = 20)는 신뢰도 있는 점수를 위한 최소 임계값입니다. 미달 선수는 “표본 부족 — 추정치” 배지를 달고, 랭킹에서 시각적으로 구분됩니다. 국제 대회(MSI/Worlds)는 포맷 특성상 5경기로 완화됩니다.
이전 임계값(12경기)은 신인의 5~12경기 핫스트릭이 상위권에 노출되는 문제를 만들었습니다. 20경기로 상향해 충분히 검증된 선수만 공개 점수를 갖도록 했습니다. 수축 추정(SHRINK_K=15)과 함께 작동해 소표본 편향을 이중으로 방어합니다.
shrunk_z = raw_z × n / (n + SHRINK_K) -- SHRINK_K = 15 n=5 → 신뢰도 25% | n=12 → 44% | n=20 → 57% | n=30 → 67% | n=∞ → 100% PROVISIONAL_GAMES = 20 (player_power.py:82) INTL_PROVISIONAL = 5 (player_power.py:83)
소스: player_power.py:64 SHRINK_K, player_power.py:82 PROVISIONAL_GAMES.
§ 7 — 모델은 어떻게 검증되나
PlayerPower의 타당성은 4가지 백테스트(V01~V04)로 정기 측정됩니다. 이 중 V01(All-Pro 합의 일치율)이 핵심 게이트이며, PR 머지 전 precision@5 회귀 −2pt 이상이면 머지가 거부됩니다.
All-Pro 합의 일치 (all_pro_agreement.py)
역할별 top-5 모델 예측이 All-Pro 수상자와 얼마나 겹치는가. precision@5, recall@15, NDCG@10. 목표: precision ≥ 0.60, recall ≥ 0.70.
소스: analytics/statiz_lab/src/all_pro_agreement.py
팬 직관 체크 (fan_intuition_check.py)
팬 설문에서 '이 선수가 더 좋다'는 쌍별 판단과 모델 순위가 일치하는가. 목표: 일치율 ≥ 75%.
소스: analytics/statiz_lab/src/fan_intuition_check.py
Award Bonus 편향 감사 (award_bonus_audit.py)
All-Pro 보너스가 없어도 precision@5 회귀가 +5~10pt 이내인가. +10pt 초과 시 보너스 의존도 검토.
소스: analytics/statiz_lab/src/award_bonus_audit.py
Score Drift 방어 (check_score_drift.py)
모델 버전 bump 없이 과거 split 점수가 바뀌면 CI가 fail. top-100 PlayerPower 해시로 드리프트를 감지.
소스: scripts/check_score_drift.py
모델 버전: player_power@2026.4. 백테스트 리포트는 analytics/statiz_lab/outputs/에 날짜별 저장됩니다.
V01 최근 실행 결과 — player_power@2026.1
all_pro_agreement_2026-05-07.md전문가 합의(All-Pro 투표) 대비 모델 순위가 얼마나 일치하는가.480건 수상자, 20개 리그-스플릿.결과를 좋든 나쁘든 그대로 공개합니다.
recall@15 — 전문가 픽 포함률
All-Pro 15명 중 평균 약 12명을 모델이 top-15 내에 포함 (83%). 목표 ≥ 70% · 통과
precision@5
0.352
목표 ≥ 0.60 · 미달
NDCG@10
0.602
목표 ≥ 0.65 · 미달
읽는 법: 모델은 좋은 선수를 *찾는* 데 강함 (recall 0.83). top-5 *순서*에서 전문가와 어긋남 (precision 0.35) — 하지만 이 격차의 일부는 모델이 못 보는 것에서 옴.
precision@5 천장: All-Pro 투표엔 narrative, clutch 평판, locker-room 영향 등 경기 데이터에 안 잡히는 요인이 들어감. 단일 모델 vs 전문가 합의의 precision@5는 ~0.40 근방이 데이터 한계로 추정됨 (Ablation 4종 + V01 v2026.4 재실행으로 확인). 즉 precision@5 0.6 도달은 데이터 천장 때문에 거의 불가능이며, recall@15가 실질적 정확성 지표.
리그별
약점 슬라이스 36개 (precision@5 < 0.40)
- LCS 2023 summer TOP — prec 0.00 / rec 0.67 · 누락: alphari
- LCS 2023 summer MID — prec 0.00 / rec 0.33 · 누락: ablazeolive, bjergsen
- LCS 2024 spring MID — prec 0.00 / rec 0.33 · 누락: ablazeolive, bjergsen
- LCS 2024 summer MID — prec 0.00 / rec 0.33 · 누락: ablazeolive, bjergsen
- LEC 2023 spring ADC — prec 0.00 / rec 0.33 · 누락: flakked, upset
- LEC 2024 spring ADC — prec 0.00 / rec 1.00
- LCK 2024 summer ADC — prec 0.20 / rec 0.67 · 누락: ruler
- LCS 2023 spring MID — prec 0.20 / rec 1.00
- LCS 2023 spring ADC — prec 0.20 / rec 1.00
- LCS 2023 spring SUP — prec 0.20 / rec 0.67 · 누락: isles
나머지는 all_pro_agreement_2026-05-07.md에서 확인.