정확도

마지막 갱신 2026-10-17

climbpose가 보여 주는 것과 보여 주지 않는 것, 그리고 그렇게 정한 근거가 된 측정값을 공개합니다. 수치는 모두 저장소의 평가 명령이 만든 결과 파일에서 가져왔고, 표본 수(n)와 측정일, 출처 파일을 함께 적습니다.

① 레벨은 완등 기록으로 계산합니다

실력은 영상이 아니라 직접 남긴 완등 기록으로 보여 줍니다. 아래 규칙은 결과를 보기 전에 정해 두었고, 서버가 같은 코드로 계산합니다.

  • 기간(적응 윈도): 최근 8주 기록을 봅니다. 그 안의 완등이 5개보다 적으면 12주 → 26주 → 52주 순서로 넓혀, 처음으로 5개를 채우는 기간을 씁니다. 넓혔으면 넓힌 사실과 쓴 기간을 함께 표시합니다. 최근 8주에 기록이 하나도 없으면 마지막 기록일을 기준으로 삼습니다.
  • 레벨: 그 등급 이상 완등이 3개 이상이고, 그 등급 이상 문제의 완등률이 50% 이상인 가장 높은 등급입니다. 기간 안에 실패 기록이 하나도 없으면 완등률 조건은 쓰지 않고 ‘시도 기록 없음’으로 표시합니다.
  • 미정: 기간을 넓혀도 완등이 5개보다 적으면 레벨은 ‘미정’입니다.
  • 한계와 플래시: 한계는 기간 안의 최고 완등 등급입니다. 플래시 레벨은 그 등급 이상 플래시가 2개 이상인 가장 높은 등급입니다. 플래시 여부를 적지 않은 완등은 플래시율 계산에서 빼고, 0%로 단정하지 않습니다.
  • 같은 문제: 같은 문제를 여러 날에 걸쳐 기록하면 한 문제로 묶어 셉니다.
  • 암장 색 등급(색 서열 레벨): V 등급과 따로, 암장마다 그 암장의 색 순서를 등급으로 삼아 같은 규칙으로 레벨을 냅니다. 서로 다른 암장의 색 레벨은 비교하지 않습니다.
  • 추이: 최근 24주를 4주 단위로 나눠 구간마다 같은 규칙을 적용합니다.

실제 사용자 기록으로는 아직 검증 전입니다. 규칙은 유튜브 업로드로 재구성한 기록으로만 점검했고, 그 점검은 아직 저장소의 평가 명령으로 재현되지 않아 수치를 싣지 않습니다. 재구성 기록에는 실패와 플래시 기록이 없어서 완등률 규칙과 플래시 규칙은 검증되지 않았습니다.

규칙 출처: src/climbpose/level.py의 사전 등록 상수

② 영상으로 V등급을 추정해 보여주지 않습니다

자세 영상으로 V등급을 추정하는 모델을 만들어, 학습에 쓰지 않은 새 채널의 영상으로 시험했습니다. 계산 전에 정한 기준을 넘지 못해서 어떤 형태로도 보여 주지 않습니다. 실력은 ①의 완등 기록 레벨로만 보여 줍니다.

사전 기준

계산 전인 2026-10-16 17:55 KST에 정했습니다. 등급을 범위로 보여 주려면 세 조건을 모두 넘어야 합니다: ρ≥0.5 ∧ MAE≤1.5 ∧ ±2V≥0.70. 대략적으로라도 보여 주려면 ρ≥0.35여야 하고, 그 미만이면 보여 주지 않습니다. ρ는 추정 등급과 실제 등급의 순위 상관, MAE는 평균 오차(등급), ±2V는 오차가 2등급 이내인 비율입니다.

결과: 기준 미달

새 채널 107곳의 영상 235개. 괄호는 채널 단위 부트스트랩 95% 신뢰구간
지표모델기준선: 항상 V6
순위 상관 ρ0.13 [−0.03, 0.28]-
평균 오차(MAE)2.86등급 [2.48, 3.29]2.83등급
±2V 안 비율43.4% [36%, 51%]51.9%
  • 판정은 ‘비노출’(hidden)입니다. 세 조건을 하나도 넘지 못했고, 모든 영상을 V6로 답하는 기준선보다도 낫지 않았습니다.
  • 등반이 아닌 영상 9개를 빼고 다시 계산해도 ρ 0.15(n=226)로 판정은 같습니다.
  • 학습에 쓴 채널과 겹치는 영상만 보면 ρ 0.49(n=97)입니다. 모델이 등급보다 채널 특유의 촬영·라벨 습관을 일부 배웠을 가능성이 있습니다.
  • 한계: 정답 등급은 채널의 다른 영상 제목 등에서 자동으로 읽은 최대 등급이고, 사람이 검수하지 않았습니다. 그래서 모델 탓과 라벨 탓을 나누지 못했습니다.

출처: eval/results/oos_grade.json (2026-10-16 측정)

③ 보여 주는 것과 그 정확도

영상 결과 화면에는 스켈레톤 오버레이, 손발 접촉 타임라인, 카메라 측면 여부, 그리고 측정할 수 없을 때의 안내만 나옵니다. 모두 자동 추정이라 틀릴 수 있습니다. 사용자가 휴대폰으로 찍은 조건에서는 아직 검증 전입니다. 아래 수치는 공개 영상과 개발 중에 모은 영상에서 잰 것입니다.

스켈레톤 오버레이와 등반자 추적

영상마다 등반자 한 사람을 골라 관절을 추적하고 그 위에 스켈레톤을 그립니다. 공개 등반 영상 340개에 자동 점검(등반자가 보이는 프레임 비율, 추적 끊김, 매트 위 비율, 비슷한 후보가 여럿인지)을 돌린 결과입니다.

  • 통과 290/340 (85.3%)
  • 경고 33/340 (9.7%)
  • 실패 17/340 (5.0%)

‘통과’는 자동 지표에 걸리지 않았다는 뜻이지 추적이 맞았다는 뜻이 아닙니다. 프레임을 직접 보고 확인한 결과는 파일로 남지 않아 싣지 않습니다. 사람이 많은 곳이나 어두운 벽에서는 다른 사람을 따라가거나 등반자를 놓칠 수 있습니다.

출처: eval/results/tracking_qa.json (2026-10-16 측정)

손발 접촉 타임라인

손이나 발이 홀드에 닿는 순간(붙음)과 떨어지는 순간(떨어짐)을 자동으로 추정해 타임라인에 표시합니다. 프레임을 보고 붙인 라벨과 비교해, 같은 손발·같은 종류의 순간이 허용 시간(±0.17초, ±0.5초) 안에 있으면 맞은 것으로 셉니다. 정밀도는 검출한 순간 중 라벨과 맞은 비율, 재현율은 라벨 중 검출한 비율입니다. 라벨에서 불확실로 표시한 순간은 뺍니다. 라벨은 모두 개발 중에 AI 에이전트가 원본 프레임을 보고 붙였습니다.

정밀도 · 재현율(괄호는 검출 수 · 라벨 수)
영상구분영상 수±0.17초±0.5초
고정 카메라 암장 영상독립적으로 두 번 붙인 라벨을 대조한 합의 라벨. 검출기 기본값을 이 영상에 맞췄습니다.in-sample290.9%(55) · 78.1%(64)94.4%(54) · 79.7%(64)
멀리서 찍은 고정 카메라 영상(발만 라벨)손은 라벨할 수 없어 발만 라벨했습니다. 검출기를 맞출 때 제약으로 썼습니다.in-sample212.5%(64) · 80.0%(10)16.1%(56) · 90.0%(10)
측면에서 찍은 코칭 영상검출기를 고정한 뒤 라벨을 붙였고, 결과를 보고 검출기를 바꾸지 않았습니다.hold-out150.0%(4) · 40.0%(5)75.0%(4) · 60.0%(5)
대회 중계 영상(카메라 이동·확대)검출기를 고정한 뒤 라벨을 붙였고, 결과를 보고 검출기를 바꾸지 않았습니다.hold-out214.8%(88) · 48.1%(27)22.1%(77) · 63.0%(27)
  • 사전 기준 미달: 접촉 평가의 사전 기준은 ±0.5초에서 정밀도와 재현율이 모두 80% 이상인 것입니다. 위 표의 어느 영상 묶음도 이 기준을 넘지 못했습니다. 그래서 타임라인은 자동 추정이라 오차가 있을 수 있다는 안내와 함께 표시합니다.
  • in-sample은 검출기를 맞추는 데 쓴 영상이라 일반화된 정확도가 아닙니다. hold-out은 검출기를 고정한 뒤 라벨을 붙인 영상인데, 3개뿐이고 결과가 in-sample보다 낮습니다.
  • 사용자 촬영 조건 검증 전: 휴대폰을 고정해 찍은 사용자 영상에는 아직 라벨이 없어 이 조건의 정확도를 재지 못했습니다. 그래서 결과 화면에 자동 추정이라 오차가 있을 수 있다는 안내를 함께 표시합니다.

출처: eval/results/contact_eval.json (2026-10-16 측정)

카메라 측면 여부

결과 화면은 카메라가 등반자를 옆에서 찍었는지를 ‘측면’, ‘측면 아님’, ‘불확실’ 중 하나로 보여 줍니다. 이 판정의 정확도를 잰 결과는 아직 저장소 평가 결과에 없어 수치를 싣지 않습니다. 판정 기준은 적은 수의 영상으로 정했고, 정면과 사선은 구분하지 못합니다. 그래서 확신이 낮으면 ‘불확실’로 표시합니다.

측정할 수 없는 영상

전에는 시작 장면에서 매트를 떠나는 순간을 찾지 못하면, 이유를 알리지 않은 채 자세 항목이 모두 비었습니다. 지금은 그럴 때 영상 전체를 한 시도로 다시 분석하고, 그래도 측정할 수 없으면 사유를 함께 알려 줍니다. 같은 공개 영상 340개를 저장된 관절 데이터로 다시 계산했습니다.

수정 전과 후
항목수정 전수정 후
시작을 찾지 못한 영상(시도 0개)59/340 (17.4%)59/340 (17.4%), 그중 59개를 영상 전체로 다시 분석
자세 항목을 하나도 재지 못한 영상152/340 (44.7%)135/340 (39.7%)
그중 사유를 알리지 않은 영상1520
수정 후 사유별 영상 수
사유영상
시도를 찾지 못함0/340 (0.0%)
등반 장면이 너무 짧음4/340 (1.2%)
등반 모습을 확인하지 못함18/340 (5.3%)
또렷한 장면 부족(자세 측정 생략)238/340 (70.0%)
비교 기준 자료 없음0/340 (0.0%)
사유 없음(측정함)80/340 (23.5%)

‘또렷한 장면 부족’은 자세 측정을 생략한다는 뜻이고, 스켈레톤과 타임라인은 그대로 보여 줍니다. 이 영상들은 업로드 원본이 아니라 등반 구간만 잘라 낸 공개 영상이라, 실제 업로드에서의 비율은 다를 수 있습니다.

출처: eval/results/unmeasurable_before.json (2026-10-16 측정), eval/results/unmeasurable_after_fix.json (2026-10-17 측정)

등반 게이트: 등반이 아닌 영상 거르기

등반이 아닌 영상, 너무 짧은 영상, 등반자 대신 다른 사람을 따라간 영상에는 스켈레톤과 타임라인을 그리지 않습니다. 이 게이트의 첫 기준(v1)은 평가 영상을 돌리기 전에 임계와 출시 기준을 등록했습니다. v1이 주 평가 영상에서 미달하자, 그 결과를 보고 주 평가 영상으로 게이트를 조정한 현재 게이트(v2)를 새 기준으로 등록했습니다. v2는 독립 평가 영상으로 판정하기 전에 등록했고, 그 뒤로 임계를 고치지 않았습니다. 독립 평가 영상은 게이트를 정할 때 쓰지 않은 영상 중 등반 영상으로 골라 둔 것입니다.

현재 게이트(v2) 판정
기준범위결과사전 기준판정
(a) 자세 항목을 하나도 못 쟀는데 사유가 없는 결과주 평가 영상 340개0/340 (0.0%)≤ 0개통과
(a) 자세 항목을 하나도 못 쟀는데 사유가 없는 결과독립 평가 영상 346개0/346 (0.0%)≤ 0개통과
(b) 등반이 아닌 영상을 막은 수등반이 아닌 영상(라벨 9개, 게이트 조정에 쓴 주 평가 영상)9/9 (100.0%)비율 ≥ 0.85통과
(c) 시도 검출이 0개인 등반 영상을 잘못 막은 수독립 평가 영상8/61 (13.1%)비율 ≤ 0.2통과
(d) 시도가 검출된 등반 영상을 '등반 아님'으로 바꾼 수독립 평가 영상4/285 (1.4%)비율 ≤ 0.02통과
(c) 시도 검출이 0개인 등반 영상을 잘못 막은 수주 평가 영상(게이트 조정에 사용)13/52 (25.0%)비율 ≤ 0.2참고치
(d) 시도가 검출된 등반 영상을 '등반 아님'으로 바꾼 수주 평가 영상(게이트 조정에 사용)0/279 (0.0%)비율 ≤ 0.02참고치

v2에 등록한 판정 대상 다섯 개는 모두 기준을 넘었습니다. 다만 (b)는 게이트를 조정할 때 쓴 주 평가 영상의 라벨 9개로 판정하고, v2에서 하한을 1.0에서 0.85로 낮췄습니다. 주 평가 영상의 (c)·(d)도 게이트를 정할 때 쓴 데이터라 참고치이고, (c)는 그 영상들에서 상한을 넘습니다. 출시 기준으로 v1과 v2 중 무엇을 쓸지는 아직 정하지 않았습니다.

첫 기준(v1)으로 판정: 주 평가 영상에서 네 기준 모두 판정
기준범위결과사전 기준판정
(a) 자세 항목을 하나도 못 쟀는데 사유가 없는 결과주 평가 영상 340개0/340 (0.0%)≤ 0개통과
(b) 등반이 아닌 영상을 막은 수등반이 아닌 영상(라벨)9/9 (100.0%)비율 ≥ 1.0통과
(c) 시도 검출이 0개인 등반 영상을 잘못 막은 수주 평가 영상 340개13/52 (25.0%)비율 ≤ 0.2미달
(d) 시도가 검출된 등반 영상을 '등반 아님'으로 바꾼 수주 평가 영상 340개0/279 (0.0%)비율 ≤ 0.02통과

첫 기준(v1)은 네 기준을 모두 주 평가 영상에서 판정합니다. 이 방식으로는 지금 게이트도 (c)가 상한을 넘어 미달입니다. v1을 바꾼 경위는 아래 변경 이력에 있습니다.

출처: eval/results/climb_gate_v2_corpus_r5.json (2026-10-17 측정), eval/results/climb_gate_v2_independent.json (2026-10-17 측정), eval/results/unmeasurable_after_fix.json (2026-10-17 측정)

④ 보여 주지 않는 것

종합 점수

자세 항목 점수를 합친 종합 점수와 등급은 보여 주지 않습니다. 개발 중 평가에서 종합 점수가 실력과 반대로 움직였고, 그 평가는 아직 저장소의 평가 명령으로 재현되지 않아 수치를 싣지 않습니다.

자세 항목(C1~C8, W1~W2)

관절 위치로 계산하는 자세 항목 10개(C1, C2, C3, C4, C5, C6, C7, C8, W1, W2)는 지금 모두 숨깁니다. 다시 보여 주려면 항목마다 아래 조건을 모두 통과해야 합니다. 지금 통과한 항목은 없고, 공개하는 항목 목록은 비어 있습니다. 무작위 큐 눈 검사는 아직 어느 항목도 하지 않았습니다.

  1. 무작위로 뽑은 큐 30개를 눈으로 영상과 맞춰 보았을 때 80% 이상 맞을 것
  2. split-half 판정 일치가 0.8 이상일 것
  3. 하강 구간과 매트 위(지상) 구간을 빼고 계산할 것
항목별 숨긴 이유
항목숙련도 ρ(n)split-half 판정 일치(n)비교 기준 표본(클립)숨긴 이유
C1 팔 신전−0.01(314)0.63(253)84(8)숙련도와의 상관이 0에 가깝습니다.
C2 무게중심 수평 정렬−0.27(236)0.61(229)65(6)잘하는 등반자일수록 점수가 낮게 나와(음의 상관) 방향이 맞지 않습니다.
C3 손발 하중 분배0.35(250)0.72(224)47(7)숙련도와 양의 상관이 있지만, 이름과 달리 체중 분배보다 손 높이를 재고 있습니다.손 높이와의 순위 상관(구성 수): 0.80(3292)
C4 접촉 전환 순서--16(2)부족비교 기준 자료가 부족해 판정할 수 없습니다.
C5 궤적 매끄러움−0.12(246)0.62(259)46(6)숙련도와의 상관이 음수이고, 매끄러움보다 이동 속도를 재고 있습니다.이동 속도 최고치와의 순위 상관(전환 수): 0.80(3965)
C6 지지 유지0.03(173)0.53(127)38(4)같은 영상을 반으로 나눈 두 쪽의 판정이 절반 정도만 같아 재현되지 않습니다.
C7 바도어 억제--3(2)부족비교 기준 자료가 부족해 판정할 수 없습니다.
C8 전환 소요 시간0.02(317)0.90(372)58(8)판정 일치는 높지만 숙련도와의 상관이 0에 가깝습니다.
W1 엉덩이-벽 거리--1(1)부족측면 영상에서만 잴 수 있고, 비교 기준 자료가 부족합니다.
W2 무게중심 깊이 정렬--1(1)부족측면 영상에서만 잴 수 있고, 비교 기준 자료가 부족합니다.
  • 숙련도 ρ: 항목 점수와 등반자 최고 등급의 순위 상관입니다(학습에 쓰지 않은 평가 영상, 서버의 시도 검출 방식). 최고 등급은 채널 단위로 자동으로 읽은 대리 라벨이라 잡음이 섞여 있습니다.
  • split-half 판정 일치: 한 영상의 측정 구간을 무작위로 반씩 나눠 두 쪽의 판정이 같은 비율입니다(무작위 분할 여러 번의 평균). 높을수록 같은 영상 안에서 판정이 재현됩니다.
  • 비교 기준 표본: 판정 기준으로 쓰는 상급 등반자 영상에서 모은 표본 수와 클립 수입니다. ‘부족’이면 판정 기준으로 쓰지 않습니다.
  • -는 비교 기준 자료가 부족해 계산하지 않은 칸입니다.

출처: eval/results/feedback_validity.json (2026-10-16 측정)

자세 추천

등급에 맞춘 자세 추천은 연결하지 않았습니다. 개발 중 검증에서 추천 수가 실력과 반대로 움직였고, 추천이 가리킨 순간을 영상과 맞춰 보았을 때 대부분 맞지 않았습니다. 이 검증은 아직 저장소의 평가 명령으로 재현되지 않아 수치를 싣지 않습니다.

동작 인식

다이노, 힐훅 같은 동작을 영상에서 자동으로 알아내 보여 주지 않습니다. 계산 전에 정한 기준을 통과한 동작이 아직 없습니다. 이 평가도 저장소의 평가 명령으로 재현되지 않아 수치를 싣지 않습니다.

⑤ 갱신 원칙과 변경 이력

  • 이 페이지의 수치는 저장소의 평가 명령이 만든 결과 파일(eval/results)에서만 가져옵니다. 설계 문서나 메모에 적힌 수치는 쓰지 않습니다.
  • 같은 명령을 다시 돌리면 허용오차 안에서 같은 값이 나와야 합니다. 개수는 정확히 같아야 하고, 비율은 ±0.01, 순위 상관은 ±0.01, 신뢰구간 경계는 ±0.02, 평균 오차는 ±0.05등급까지 허용합니다.
  • 판정 기준은 결과를 보기 전에 등록하고, 결과를 보고 고치지 않습니다. 바꿀 때는 새 버전으로 다시 등록하고 그 사실을 아래 이력에 적습니다.
  • 재현하지 못한 수치는 싣지 않습니다.
  • 수치가 바뀌면 이전 값과 바뀐 이유를 아래 이력에 남깁니다.

변경 이력

  • 첫 공개. 측정 불가 처리 수정 후 수치(unmeasurable_after_fix.json)와 등반 게이트 v2 판정을 함께 실었습니다.
  • 등반 게이트 기준을 v1에서 v2로 바꿨습니다. v1은 실제 등반을 '등반 아님'으로 너무 많이 걸러 사전 기준에 미달했습니다. v1 임계는 고치지 않고, v1 결과를 본 뒤 주 평가 영상으로 조정한 v2를 새로 등록했습니다. v2는 등반 증거(손이 머리 위, 클립 전체 상승)를 더했고, 출시 기준 (b)의 하한을 1.0에서 0.85로 낮췄으며, (c)·(d)를 판정하는 영상을 주 평가 영상에서 독립 평가 영상으로 옮겼습니다. v2는 독립 평가 영상으로 판정하기 전에 등록했습니다. 출시 기준으로 v1과 v2 중 무엇을 쓸지는 아직 정하지 않았습니다.

출처 파일

파일측정일다시 만드는 명령(저장소 루트)
eval/results/oos_grade.json2026-10-16uv run --offline python eval/oos_grade.py --out eval/results/oos_grade.json
eval/results/tracking_qa.json2026-10-16uv run --offline python eval/tracking_qa.py --out eval/results/tracking_qa.json
eval/results/contact_eval.json2026-10-16uv run --offline python eval/contact_eval.py --out eval/results/contact_eval.json
eval/results/feedback_validity.json2026-10-16uv run --offline python eval/feedback_validity.py --out eval/results/feedback_validity.json
eval/results/unmeasurable_before.json2026-10-16uv run --offline python eval/unmeasurable_rate.py --mode detect --out eval/results/unmeasurable_before.json
eval/results/unmeasurable_after_fix.json2026-10-17uv run --offline python eval/unmeasurable_rate.py --mode auto --check eval/criteria/climb_gate_v1.json --out eval/results/unmeasurable_after_fix.json
eval/results/climb_gate_v2_corpus_r5.json2026-10-17uv run --offline python eval/unmeasurable_rate.py --mode auto --check eval/criteria/climb_gate_v2.json --corpus corpus_r5 --out eval/results/climb_gate_v2_corpus_r5.json
eval/results/climb_gate_v2_independent.json2026-10-17uv run --offline python eval/unmeasurable_rate.py --mode auto --check eval/criteria/climb_gate_v2.json --corpus corpus --corpus corpus_holdout --corpus corpus_r3 --corpus corpus_r4 --out eval/results/climb_gate_v2_independent.json

재현하지 못한 수치와 아직 재지 못한 것은 각 결과 파일의 not_reproduced에 이유와 함께 남아 있습니다. 예를 들어 사용자 폰 촬영 조건의 접촉 hold-out은 아직 없습니다(contact_eval.json).