브라이어 점수와 로그 손실: 같은 예측도 숫자가 다른 이유
이 페이지의 내용
확률 예측을 평가한 표에서 브라이어 점수는 0.37, 로그 손실은 1.73으로 나왔다고 해 보겠습니다. 작은 숫자가 좋다는 설명만 보고 브라이어 쪽 결과가 더 좋다고 판단할 수 있을까요? 두 지표는 척도가 달라서, 그 숫자끼리 우열을 비교할 수 없습니다.
브라이어 점수는 확률과 결과의 제곱오차를 계산합니다. 로그 손실은 실제로 일어난 결과에 부여했던 확률의 음의 로그를 계산합니다. 특히 거의 불가능하다고 예측한 결과가 일어났을 때 차이가 커집니다. 이 글의 이진 브라이어 손실에는 유한한 상한이 있지만, 클리핑하지 않은 로그 손실에는 상한이 없습니다.
평가의 주지표는 결과를 보기 전에 정하세요. 둘을 함께 보고할 수는 있지만, 브라이어의 계산 범위, 로그의 밑, 평균 방식, 클리핑을 먼저 맞춰야 같은 예측을 공정하게 비교할 수 있습니다.
먼저 손실의 방향과 계산 범위를 맞춥니다
이 글에서는 손실이 작을수록 좋은 규약을 씁니다. 로그 점수를 반대 부호로 보고하는 자료는 방향도 반대가 됩니다. 이름만 보고 방향을 추정하지 마세요. scoringrules의 점수 규칙 설명
이 글의 예측 확률과 두 손실값은 무차원 값이며, 시간이나 금액의 단위가 붙지 않습니다.
| 확인할 것 | 브라이어 점수 | 로그 손실 |
|---|---|---|
| 계산 대상 | 예측 확률과 결과 사이의 제곱오차 | 실현 결과 확률의 음의 로그 |
| 완벽한 예측의 손실 | 0 | 클리핑 전: 0 |
| 범위 | 이 글의 이진 규약은 0~1, 모든 클래스의 오차를 합하면 0~2 | 이산 결과: 0~양의 무한대 |
| 확신한 예측이 빗나가면 | 유한한 최댓값에 가까워짐 | 실현 결과 확률→0: 무한히 증가 |
| 함께 표시할 규약 | 이진식인지, 전체 클래스 합인지 | 밑·끝점 처리 |
어느 예측자의 브라이어 점수를 다른 예측자의 브라이어 점수와 비교할 수는 있습니다. 다만 같은 사건과 계산 규약이어야 합니다. 서로 다른 손실함수의 원점수는 다른 척도의 숫자입니다.
정답 선택과 확률 예측은 다릅니다
규칙이 분명한 예·아니요 사건 하나를 정합니다. p는 ‘예’가 일어날 예측 확률이고, 결과 y는 ‘예’이면 1, ‘아니요’이면 0입니다. ‘아니요’의 확률은 1−p입니다.
51%와 99%는 둘 다 ‘예’를 고를 수 있지만 확신의 크기는 다릅니다. 실제로 ‘예’가 일어나면 이진 브라이어 손실은 각각 0.2401과 0.0001입니다. 맞았는지만 세면 이 차이는 보이지 않습니다.
한 건의 손실은 다음과 같습니다.
- 이진 브라이어 손실 = (p−y)².
- 자연로그 손실 = −ln(p): y=1일 때.
- 자연로그 손실 = −ln(1−p): y=0일 때.
0<p<1에서는 로그 손실을 −[y ln(p)+(1−y) ln(1−p)]로 쓸 수도 있습니다. 끝점에서는 실제 결과에 부여한 확률을 직접 읽는 방식이 명확합니다. N건의 가중치가 같다면 각 손실을 더하고 N으로 나눕니다. 브라이어 정의, 로그 손실 정의
같은 세 예측을 두 방식으로 계산해 봅니다
다음은 결과가 나오기 전에 기록한 가상의 세 예측입니다. 사건마다 예·아니요의 정의가 고정되어 있고 결과는 확정되어 있습니다. 세 건의 가중치는 같으며, 이 표의 계산에는 클리핑을 쓰지 않습니다. 플랫폼의 실제 성적표가 아닙니다.
| 사건 | 예측한 ‘예’의 확률 p | 결과 y | 이진 브라이어 손실 | 자연로그 손실 |
|---|---|---|---|---|
| A | 0.80 | 1 | 0.040000 | 0.223144 |
| B | 0.30 | 0 | 0.090000 | 0.356675 |
| C | 0.01 | 1 | 0.980100 | 4.605170 |
| 평균 | — | — | 0.370033 | 1.728330 |
B에서는 ‘아니요’가 일어났으므로 −ln(0.70)을 계산합니다. ‘예’의 확률 0.30을 그대로 넣지 않습니다. C는 실제로 일어난 결과에 1%만 부여했던 예측이라 두 지표에서 모두 큰 손실을 받습니다.
브라이어 평균은 (0.04+0.09+0.9801)÷3입니다. 자연로그 평균은 [−ln(0.80)−ln(0.70)−ln(0.01)]÷3입니다. 평균은 반올림 전 값으로 계산한 뒤 소수 여섯째 자리까지 표시했습니다.
0.370033이 1.728330보다 작다는 사실은 어느 지표가 더 좋은 결과라는 뜻이 아닙니다. 같은 예측에 서로 다른 함수를 적용한 결과일 뿐입니다.
거의 0%였던 결과가 일어나면 차이가 커집니다
결과를 ‘예’로 고정하면 p가 커질수록 두 손실은 모두 작아집니다. 반대로 p가 0에 가까워질 때 이진 브라이어는 1에 가까워지지만, 자연로그 손실은 계속 커집니다.
두 그림은 서로 다른 세로축으로 함수의 모양을 보여 줍니다. 같은 높이를 같은 손실값으로 읽으면 안 됩니다. 로그 곡선은 p=0.01부터 표시했고, p=0의 무한대 끝점은 그림 밖입니다. 모두 설명용 곡선이며 정확한 예시는 다음 표에서 확인할 수 있습니다.
| ‘예’가 일어났을 때 예측 p | 이진 브라이어 손실 | 자연로그 손실 |
|---|---|---|
| 0.50 | 0.250000 | 0.693147 |
| 0.10 | 0.810000 | 2.302585 |
| 0.01 | 0.980100 | 4.605170 |
| 0.00 | 1.000000 | 클리핑하지 않으면 양의 무한대 |
브라이어도 확신한 오류에 반응하지만 한 건의 기여는 제한됩니다. 로그 손실에서는 소수의 극단적인 오류가 평균을 크게 바꿀 수 있습니다.
브라이어 점수가 정확히 두 배가 되는 이유
이진식은 ‘예’의 확률 하나를 평가합니다. 다른 규약은 ‘예’와 ‘아니요’의 제곱오차를 모두 합합니다.
전체 클래스 합 = (p−y)²+[(1−p)−(1−y)]² = 2(p−y)².
앞의 세 예측은 그대로인데 평균이 0.370033에서 0.740067로 바뀝니다. 모든 예측을 같은 방식으로 두 배 하면 그 규약 안에서의 순위는 바뀌지 않습니다. 서로 배타적이고 가능한 결과를 모두 포함하는 클래스의 전체 합은 0~2 범위이고, 이를 절반으로 줄이는 규약은 0~1 범위입니다. scikit-learn의 scaling 설명
결과가 세 종류인 사건도 계산 규약을 표시합니다
한 사건의 가능한 결과가 A·B·C 세 가지이고, 동시에 하나만 일어난다고 해 보겠습니다. 확률은 0.70·0.20·0.10으로 합이 1입니다. A가 일어나면 결과 벡터는 (1,0,0)입니다.
| 결과 | 예측 확률 | 실제 결과 표시 | 제곱오차 |
|---|---|---|---|
| A | 0.70 | 1 | 0.09 |
| B | 0.20 | 0 | 0.04 |
| C | 0.10 | 0 | 0.01 |
전체 클래스 합은 0.14이고, 절반으로 조정했다면 0.07입니다. 세 클래스의 오차를 3으로 나누고 같은 규약이라고 부르면 안 됩니다.
범주형 로그 손실은 실제로 일어난 A의 확률만 사용하므로 −ln(0.70)≈0.356675입니다. 일어나지 않은 클래스마다 −ln(1−p)를 추가하지 않습니다. 여러 라벨이 동시에 성립할 수 있는 문제에는 이 단일 결과의 범주형 공식을 자동으로 적용할 수 없습니다. scoringrules의 범주형 정의
로그의 밑과 클리핑을 확인합니다
밑을 바꾸면 수치가 달라집니다
ln은 밑이 e인 자연로그입니다. 밑이 2인 로그를 쓰려면 자연로그 손실을 ln(2)로 나눕니다. 앞의 세 건 평균은 1.728330 대신 2.493452가 됩니다. 모든 예측에 같은 밑을 적용하면 양의 상수로 재조정한 것이므로 순위는 바뀌지 않습니다.
도구를 비교할 때는 로그의 밑·평균/합계·표본 가중치를 확인하세요. scikit-learn log_loss는 자연로그를 씁니다. 공식 log_loss 문서
확률 0과 1은 같은 끝점이 아닙니다
클리핑하지 않을 때 실제 결과에 확률 1을 부여했다면 로그 손실은 0입니다. 확률 0을 부여했다면 양의 무한대입니다. 이진 브라이어는 각각 0과 1입니다. 전개식의 0×ln(0)은 통상적인 극한 규약으로 다루거나, 실제 결과에 부여한 확률로 직접 계산해야 합니다. 프로그램의 미정의 연산을 수학적 끝점이 없다는 뜻으로 읽지 마세요.
유한한 수치 계산을 위해 확률을 끝점에서 잘라 내기도 합니다. 이 글의 별도 연습 규약으로 ε=0.000001을 정하고 p를 min(1−ε,max(ε,p))로 바꾸겠습니다. 원래 p=0인데 ‘예’가 일어나면 로그 손실은 무한대 대신 −ln(0.000001)≈13.815511입니다.
이 ε는 라이브러리 기본값을 제시한 것이 아닙니다. 확인한 scikit-learn 1.9.1의 log_loss는 확률 배열 자료형의 기계 정밀도로 클리핑합니다. 입력명은 1.9부터 y_proba이며, y_pred는 이미 deprecated 상태로 1.11에서 제거될 예정입니다. 재현에는 버전과 규약을 기록하세요.
클리핑은 계산 대상도 바꿉니다. 경계 밖의 서로 다른 원래 확률이 같은 값으로 바뀌어 같은 점수를 받을 수 있습니다. 원래 확률을 보존하고, 경계값과 클리핑이 일어난 건수를 공개해야 합니다.
‘엄격히 적절한 점수 규칙’은 기대값의 성질입니다
원래 수학적 정의의 브라이어와 로그 손실은 엄격히 적절한 점수 규칙입니다. 진짜 확률분포를 예측했을 때 기대 손실이 유일하게 최소가 됩니다. 다음 몇 건에서도 반드시 가장 낮은 관측 손실을 얻는다는 보장은 아닙니다. scoringrules의 proper 정의
참인 이진 확률을 q라고 하면 브라이어 기대 손실은 다음과 같습니다.
q(1−p)²+(1−q)p² = q(1−q)+(p−q)².
q=0.70이라고 가정할 때 p=0.70으로 예측하면 기대 손실은 0.21, p=0.90으로 예측하면 0.25입니다. 그런데 바로 다음 결과가 ‘예’라면 그 한 건의 손실은 p=0.90에서 0.01, p=0.70에서 0.09입니다. 기대값의 비교와 실제 한 건의 비교는 답하는 질문이 다릅니다. 이 계산으로 실제 q를 알아냈다는 뜻도 아닙니다.
여러 원래 확률을 같은 값으로 만드는 클리핑 구현이 모든 원래 확률에 대해 유일한 최적 보상을 유지한다고 주장해서도 안 됩니다. 원래 규칙의 성질과 구현의 변환을 구분하세요.
비교 보고서를 읽는 여섯 가지 확인 순서
- 사건과 결과 규칙을 맞춥니다. 사건, 마감 시각, 클래스 이름, 결과 출처가 같아야 합니다. 정규시간 승리와 연장 후 진출은 다른 사건입니다. 무효·분쟁·미해결 사건을 어떻게 처리할지도 미리 정합니다.
- 예측 시점을 맞춥니다. 가진 정보와 결과까지 남은 시간이 비슷한지 확인합니다. 이른 예측과 결과 직전 업데이트를 섞었다면 그 차이를 설명해야 합니다.
- 평가할 사건 집합을 맞춥니다. 같은 확정 사건으로 계산하고, 건수와 누락 예측을 밝힙니다. 쉬운 사건과 어려운 사건을 서로 다르게 고르면 평균이 오해를 부를 수 있습니다.
- 계산 규약을 선언합니다. 브라이어 scaling, 로그 밑, 평균·합계, 가중치, 클리핑, 클래스 순서를 적습니다. 가중평균은 Σ(wᵢ×손실ᵢ)/Σwᵢ입니다. 가중치는 0 이상이고 합은 양수여야 하며 무엇을 뜻하는지 설명합니다.
- 평가를 학습·조정과 분리합니다. 모델을 맞추거나 조정할 때 사용하지 않은 결과로 평가합니다. 한 사건의 고정 시점 예측 하나를 채점하는지 여러 업데이트를 채점하는지, 그 가중치는 무엇인지 밝힙니다.
- 기준 예측을 먼저 정합니다. 기준선의 구성도 보고합니다. 모든 이진 사건을 항상 50%로 예측하면 브라이어는 0.25, 자연로그 손실은 약 0.693147입니다. 그러나 한 결과가 훨씬 잦은 집합에서는 유용한 기준선이 아닐 수 있습니다.
이 절차가 모든 분야에 공통인 ‘좋은 점수’ 문턱을 정해 주지는 않습니다. 점수 규칙이 달라지면 예측자 순위가 달라질 수도 있습니다. 작은 표본에서 조금 앞섰다는 결과를 지속적인 우위로 확대하지 마세요.
점수 하나가 말해 주지 않는 것
보정: 70% 부근으로 예측한 사건은 적절한 사례 집합에서 대략 70% 발생해야 한다는 관계입니다. 하지만 브라이어는 결과를 구별하는 능력과 자료의 불확실성도 함께 반영합니다. 낮은 브라이어만으로 더 잘 보정됐다고 결론 내릴 수 없습니다. 충분한 사례와 구간별 건수가 보이는 보정 곡선을 함께 확인하세요. scikit-learn의 확률 보정 안내
거래 수익: 두 손실함수에는 진입 가격, 거래금액, 수수료, 유동성, 청산 결정이 들어 있지 않습니다. 낮은 예측 손실만으로 수익성이나 특정 거래의 추천, 이용 자격을 판단할 수 없습니다.
보편적인 정확성: 점수는 규칙, 사건 집합, 기준 예측에 따라 해석해야 합니다. 세 건의 가상 예시나 유리한 숫자 하나가 플랫폼의 모든 시장에서의 정확성을 입증하지는 않습니다.
예측 확률과 결과를 함께 보관하고, 계산 규약을 표시한 다음 같은 조건끼리 비교하세요. 예측 시점·누락·보정까지 함께 읽어야 점수를 과대해석하지 않을 수 있습니다.
출처와 확인 범위
- scikit-learn, Brier score loss: 이진식, 전체 클래스 합, scaling.
- scikit-learn, Log loss: 자연로그, 집계, 자료형에 따른 끝점 처리와 버전별 입력.
- scoringrules, The theory of proper scoring rules: 손실의 방향, 범주형 정의, 기대값에서의 적절성.
- scikit-learn, Probability calibration: 보정 곡선과 집계 손실의 해석 한계.
공식 공개 텍스트는 웹 도구 응답으로 확인했습니다. 이는 자료의 발행일·갱신일과 다른 확인일이며, 전체 원본 HTML이나 PDF binary를 보관했다는 뜻은 아닙니다. 앞의 수치·표·곡선은 직접 계산한 가상 예제입니다. 실제 플랫폼 성적, 현재 시장 확률, 수익 전망을 제시하지 않습니다.
관련해서 읽기
- 기댓값과 확률: 가능한 결과의 가중평균과 확률을 구분합니다.
- 신뢰구간과 예측구간: 평균을 추정하는 범위와 새 관측값을 예측하는 범위는 다른 질문입니다.
두 글은 예측 확률과 확정 결과로 손실을 계산하는 이 글의 평가표를 대신하지 않습니다.
이 가이드 공유