본문 바로가기
방법론PlayerPower v3

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승리 기여
TOP22.2%16.4%10.6%3.9%4.8%7.2%×0.856.8%3.9%9.7%14.5%×0.45
JG17.2%14.6%11.5%7.6%6.7%11.9%×0.855.7%3.8%6.7%14.3%×0.45
MID21.3%18.1%10.7%4.8%4.8%7.3%×0.856.8%3.9%7.8%14.5%×0.45
ADC19.3%20.5%10.6%2.9%2.9%7.2%×0.856.8%3.9%8.7%17.3%×0.45
SUP7.6%12.1%10.4%17.0%6.6%9.5%×0.856.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 · R9Team 비중R6 · R7 · R_winCross (R8)R8
TOP67.6%28.5%3.9%
JG64.2%32.0%3.8%
MID67.5%28.6%3.9%
ADC64.8%31.3%3.9%
SUP63.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_spring2024 LCK 스프링 역할별 앵커 핀 — 참조 포인트anchors/anchor_2024_lck_spring.json
anchor_intl_2011_2025MSI / 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가지 클러치 순간을 가중 합산합니다.

series_clutch×0.40

시리즈 클러치

Bo 시리즈 마지막 경기 승률 잔차. 5세트 또는 결정적 경기 집중력.

소스: r7_clutch_v2.py:31

deficit_recovery×0.25

골드 역전

GD@15 ≤ −2,000 상태에서 시작한 경기의 성과 z. 열세 구도 역전 능력.

소스: r7_clutch_v2.py:55

lane_loss_rec×0.20

라인 열세 복구

GD@15 ≤ −800인 경기의 후반 개인 성과. 라인 패배 이후의 기여 능력.

소스: r7_clutch_v2.py:80

high_stakes_win×0.15

빅매치 리프트

결승·국제 대회에서의 승률 − 정규시즌 승률. 큰 무대 압박 극복.

소스: 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 이상이면 머지가 거부됩니다.

V01

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

V02

팬 직관 체크 (fan_intuition_check.py)

팬 설문에서 '이 선수가 더 좋다'는 쌍별 판단과 모델 순위가 일치하는가. 목표: 일치율 ≥ 75%.

소스: analytics/statiz_lab/src/fan_intuition_check.py

V03

Award Bonus 편향 감사 (award_bonus_audit.py)

All-Pro 보너스가 없어도 precision@5 회귀가 +5~10pt 이내인가. +10pt 초과 시 보너스 의존도 검토.

소스: analytics/statiz_lab/src/award_bonus_audit.py

V04

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 — 전문가 픽 포함률

12/ 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가 실질적 정확성 지표.

리그별

LCK20슬라이스
prec 0.47 · rec 0.90
LCS20슬라이스
prec 0.28 · rec 0.73
LEC30슬라이스
prec 0.27 · rec 0.77
LPL30슬라이스
prec 0.40 · rec 0.91
약점 슬라이스 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에서 확인.