Methodology

Transparent Scoring Logic

rift_index@2026.1

Rift Index의 모든 점수는 공개 가능한 계산식과 설명 가능한 입력값으로 산출됩니다. 어떤 지표도 블랙박스가 아닙니다.

계산 철학

Rift Index는 Raw → Expected → Residual → Value → Rating 파이프라인을 통해 선수·팀의 실력을 맥락 조정 후 잔차(초과 수행)로 측정합니다.

  1. Raw — 원시 경기 스탯 수집 (Oracle's Elixir)
  2. Expected — 패치/역할/상대강도/사이드 조건에서 기대되는 스탯값 산출
  3. Residual — Actual − Expected. 맥락을 제거한 "얼마나 잘했나"
  4. Value — 역할별 가중 합산으로 단일 지표화
  5. Rating — 시간 감쇠와 표본 가중으로 Elo/Power 점수 산출 → [1, 99] 공개 점수 변환

입력 피처 (컨텍스트 벡터 C)

기대치 모델의 입력으로 사용되는 컨텍스트 피처들입니다.

patch
현재 적용 패치 번호
role
라인 포지션 (TOP / JGL / MID / ADC / SUP)
champion_family
챔피언 패밀리 분류 (~35개 군)
matchup_family
상대 챔피언 패밀리
side
블루/레드 사이드
opponent_strength
상대 팀의 직전 30일 Team Elo (bootstrapped)
jungle_help_ratio
정글 CS 방문 비율 (자원 구조)
comp_archetype
드래프트에서 추론한 팀 아크타입
game_length_bucket
경기 길이 구간 (short/mid/long)
series_depth
Bo 시리즈 내 몇 번째 게임
fearless_depth
시리즈 내 사용된 챔프풀 깊이
lineup_stability
최근 5경기 동일 라인업 비율

Team Elo

팀 간 상대적 전투력을 나타내는 Elo 기반 레이팅. 리그 강도(LS)를 블렌딩하여 리그 간 비교를 가능하게 합니다.

TeamElo* = TeamElo + λ × LeagueStrength

P(A beats B) = sigmoid((Elo*_A - Elo*_B + DraftAdj + SideAdj) / τ)
P(B beats A) = 1 - P(A beats B)   ← 두 번 계산하지 않음 (부동소수점 오차 방지)

업데이트: TeamElo_new = TeamElo_old + K_stage × (S - P)

K_stage:
  Bo1 = 20  |  Bo3 = 16  |  Bo5 = 12  |  International = 25

신규 팀 초기값: 리그 평균 Elo

리그 강도(League Strength): 국제전(MSI/Worlds) 결과와 선수 이적 성과를 활용한 latent variable. 표본 < 5이면 global average로 shrinkage 처리.

Team Power

Team Elo에 더해 현재 활동성, 리그/대회 난도, 조직 연속성을 함께 반영하는 종합 팀 파워 점수.

TeamPower_raw =
  0.24 × z(TeamElo*)
+ 0.12 × z(DominanceResidual)
+ 0.08 × z(RecentForm)
+ 0.07 × z(SOS)
+ 0.07 × z(LineupSynergy)
+ 0.06 × z(DraftFlex)
+ 0.04 × z(CloseoutEfficiency)
+ 0.12 × LeagueCoefficient
+ 0.04 × TournamentCoefficient
+ 0.12 × ActivityStatus
+ 0.04 × OrgContinuity

PublicScore = clamp(0, 100, round_half_up(50 + 12 × raw_z))
DominanceResidual
GD, CSD 등 라인 지배력의 잔차 합산
SOS
SOS — 상대 팀 TeamElo* 가중 평균
LineupSynergy
현재 5인 조합의 역할별 호환성 점수
DraftFlex
다양한 픽/밴 전략 구사 능력
CloseoutEfficiency
앞선 상황에서 경기를 끝내는 효율
ActivityStatus
현재 시즌 활동 여부, 최근 경기 신선도, 현재 로스터 존재 여부
OrgContinuity
현재도 운영 중인 조직의 시즌 연속성. 해체·휴면 팀에는 보너스 없음

Player Elo (Latent Skill)

팀 승패와 무관하게 개인 기대치 초과 수행을 누적하는 latent skill 모델. 역할별로 독립 계산됩니다.

ObsResidual[i, g, role] = Σ_k  w(role, k) × z((m_k - E[m_k | C_g]) / σ_k)

Skill[i, role, t] = ρ_role × Skill[i, role, t-1] + η × ObsResidual + ξ

ρ_role = 0.85  (기억 감쇠)
η = 0.30       (학습률)

표본 조건: 역할 내 12게임 이상, 챔프 패밀리 3개 이상

표본 미달 선수는 Provisional 플래그. 점수는 표시되지만 신뢰도 Low. 역할 변경 시 이전 역할의 Skill은 독립적으로 보존됩니다.

Role Power

현재 시점의 선수 파워랭킹 점수. Player Elo 외에 최근성과 패치 적응력, 현재 활동 상태를 반영합니다.

RolePower_raw =
  0.40 × z(PlayerElo)
+ 0.14 × z(RecentForm)
+ 0.08 × z(PatchFit)
+ 0.05 × z(FearlessDepth)
+ 0.07 × z(Reliability)
+ 0.09 × LeagueCoefficient
+ 0.05 × TournamentCoefficient
+ 0.12 × ActivityStatus

PublicScore = clamp(0, 100, round_half_up(50 + 12 × raw_z))
RecentForm
최근 10경기 잔차 평균 z-score
Reliability
역할 유지율 × 라인업 안정성
ActivityStatus
현재 소속 여부, 최근 출전 시점, 최신 시즌 문맥 반영

Patch Fit

현재 패치에서의 성능이 이전 트레이딩 기준선 대비 얼마나 향상/저하됐는지 측정합니다.

PatchFit_raw = mean(Residuals on current_patch) - trailing_baseline_adjusted

현재 패치: dim_patch.is_current = TRUE
이번 패치 게임 < 3: PatchFit = NULL (Provisional)

Confidence Grade

점수의 신뢰 수준을 나타내는 등급. 표본 크기, 챔프풀 다양성, 리그 보정 강도 등을 종합합니다.

Confidence_raw =
  0.30 × SampleStrength
+ 0.15 × UniqChampBreadth
+ 0.15 × RoleStability
+ 0.15 × LeagueCalibStrength
+ 0.15 × LineupStability
+ 0.10 × RecencyBalance

등급:
  High   : raw ≥ 0.75  (teal)
  Medium : 0.45 ≤ raw < 0.75  (yellow)
  Low    : raw < 0.45  (amber)

표본 0: confidence_raw = 0.0 → Low

Provisional vs Low Confidence: Provisional은 최소 표본 미달(12게임), Low는 데이터가 있지만 불확실성이 높은 상태입니다.

Fearless Depth (beta)

피어리스 다전제에서 comfort 챔프가 제거된 후에도 성능을 유지하는 능력.

comfort_pool = 최근 60일 상위 5개 챔프 패밀리
effective_pool = comfort_pool 제외 후 남은 패밀리 집합

FearlessDepth = retained_performance(
  effective_pool,
  controlling_for: opponent_strength, draft_difficulty
)

피어리스 시리즈 게임 < 6: fearless_depth_score = NULL (not Provisional)
피어리스 미경험: NULL (단순 미해당, 에러 아님)

Known Limitations

  • 소규모 리그 데이터 부족: LCK/LPL 이외 리그는 League Strength 표본이 적어 교차 리그 비교 신뢰도가 낮습니다. Confidence Grade로 표시됩니다.
  • 시즌 초반 Provisional: 신규 선수·팀은 12게임 데이터 쌓이기 전까지 Provisional 플래그가 붙습니다.
  • 타임라인 이벤트 미반영 (Phase 2): 세부 in-game 이벤트(와드/오브젝트 참여 등)는 현재 Value Timeline 미구현으로 반영되지 않습니다.
  • 패치 전환기 불안정: 새 패치 출시 직후 3게임 미만 데이터에서 Patch Fit이 NULL 처리됩니다.
  • 공식 Riot 데이터 아님: 현재 Oracle's Elixir 기반 bootstrap. 공식 데이터 전환 시 model_version이 갱신됩니다.

FAQ

Q. Team Elo와 Team Power는 어떻게 다른가요?

Team Elo는 순수한 대전 결과 기반 레이팅으로, "이 팀이 다른 팀과 붙으면 얼마나 이길까?"를 측정합니다. Team Power는 Team Elo를 포함하여 지배력, 드래프트, 라인업 시너지 등다차원 성능을 종합한 공개 점수입니다. Team Elo가 높아도 라인업 불안정으로 Team Power가 낮을 수 있습니다.

Q. Player Elo는 팀 성적에 영향을 받지 않나요?

받지 않습니다. Player Elo는 팀 승패를 직접 입력으로 쓰지 않고, "해당 선수가 맥락(패치/역할/상대강도) 대비 얼마나 초과 수행했는가"의 잔차를 누적합니다. 팀이 져도 개인이 기대치를 상회하면 Elo가 상승합니다.

Q. 왜 [1, 99] 범위이고 0과 100이 없나요?

공개 점수를 절대 극값에 도달하지 않게 설계하여, 미래에 더 강한 선수·팀이 등장해도 스케일을 재조정하지 않아도 됩니다. 내부적으로는 z-score를 사용하므로 새로운 최강자가 이전 최강자의 점수를 초과할 수 있습니다.

Q. Provisional 선수를 왜 숨기지 않나요?

신인 선수를 가리면 발굴 가치가 없습니다. 대신 Provisional 배지를 최상단에 표시하여 불확실성을 명시적으로 전달합니다. 12게임 기준은 팀 Elo bootstrapping이 안정화되는 최소 표본입니다.

Q. Fearless Depth가 NULL인 선수는 점수에 불이익이 있나요?

없습니다. Fearless Depth가 NULL인 경우는 두 가지입니다: (1) 피어리스 시리즈 게임 < 6 — 측정 불충분, (2) 피어리스 미경험. Role Power 계산 시 NULL 컴포넌트는 해당 가중치를 다른 컴포넌트에 재배분하여 불이익이 없도록 처리합니다.

Q. 데이터는 얼마나 자주 업데이트되나요?

경기 종료 후 약 15분 내 raw 데이터가 수집되고, Elo·Power 점수는 배치 잡으로 30분 이내 재계산됩니다. 캐시 TTL은 5분입니다.

용어 사전

CSD
CS Difference — 라인전 CS 차이
GD
Gold Difference — 골드 차이
XPD
XP Difference — 경험치 차이
SOS
Strength of Schedule — 일정 강도 (상대팀 평균 Elo)
SV
State Value — 특정 게임 상태의 승리 확률 기여도
WPA
Win Probability Added — 이벤트별 승률 변화량
Bo3/Bo5
Best of 3/5 — 다전제 경기 형식
Fearless Draft
각 게임마다 이전 게임에서 쓴 챔피언을 다시 선택할 수 없는 드래프트 규칙
Provisional
최소 표본(12게임) 미달로 불확실성이 높은 점수 상태
Latent Skill
직접 관찰 불가능하지만 여러 지표에서 추론되는 내재적 실력
z-score
평균 0, 표준편차 1로 정규화한 값 — 역할/패치 간 비교를 가능하게 함

Current model version: rift_index@2026.1