평가 규약
공개 관문, 코호트 구간, 지표, 학습/평가 분할의 정의는 이 문서에만 둔다. 다른 페이지는 정의를 다시 쓰지 않고 이 규약을 링크로 가리키며, 숫자의 원장은 일일 평가 API가 맡는다. 정의를 바꿀 때는 규격 버전을 올리고 이 문서를 먼저 고친다.
2026-08-20 — 규격을 evaluation-v6, 점수 정책을 composite-score-v2로 분리했다.
확률 맞춤 항목이 전체 평균에서 시간대별 과소·과대 예측을 상쇄하고, 라벨을 섞어도 변하지 않는 값을 재료로 쓰던 결함을 고쳤다.
이제 시(hour)마다 편향을 먼저 재고 표본 수로 평균한다. 전체 블록은 모든 시간대를 쓰며, 코호트는 각 시간대 층이 30행 이상일 때만 이 지표와 종합 점수를 낸다.
calibration_bias와 ecce_mad는 진단값으로 남지만 점수에는 들어가지 않는다.
v1과 v2 점수는 같은 눈금이 아니므로 서로 비교하지 않는다.
2026-08-19 — 규격이 evaluation-v4 에서 evaluation-v5 로 올라갔고, 평가 Lambda 에 실제로 올라갔다.
아래 공개 계약은 그대로다 — 지표 열 개, 가중치, 코호트 13구간, 모델 일곱, 학습·평가 분할이 v2 부터 바뀌지 않았다.
v5 가 더한 것은 사설 산출물에만 들어가는 둘이다.
(1) 좌석 채점 — 08번의 지평 모델이 만석 확률만이 아니라 좌석 분포 전체로 채점된다(4-1절).
(2) 지평 전용 코호트 축 — 확률 17축, 좌석 26축(3절).
관측 처리도 셋 고쳤다 — 상류 관측을 창의 첫 관측으로 잡아 지평 1 의 중앙 리드타임이 0.33분에서 1.7분이 됐고(종전은 예보가 아니라 도착 순간의 실황이었다),
capacity 에 관측 횟수를 함께 실어 관측이 모자라 상한에 못 닿은 차량을 드러내며, 출발 후 검증의 허용 stateCd 를 명시했다.
지평(horizonStops)은 목표 순번 − 차량 순번인 raw 노선 대장 순번 차이다. 경유(미정차) 지점도 한 칸으로 세며 승차 가능한 정류장 수가 아니다.
상류 관측을 바꿨으므로 v4 이전에 적합한 계수는 옮겨 쓸 수 없고, 지평 성적은 어제와 이어 읽으면 안 된다.
2026-08-19 — 규격이 evaluation-v3 에서 evaluation-v4 로 올라갔다.
아래 정의는 여기서도 하나도 바뀌지 않았다 — 지표 열 개, 가중치, 라벨 계약, 코호트, 학습·평가 분할이 v2 부터 그대로다.
v4 가 바꾼 것은 어느 정류장을 채점하느냐 하나다 — 채점 대상을 승차 정류장으로 한정했다.
판정은 노선 판본에 매인 정류장 대장을 조회해 boarding_allowed = NOT station_id LIKE '277%' 로 한다
(순번 목록을 규약에 박아 두면 노선이 개편될 때 순번이 밀려도 오류 없이 조용히 틀린다).
뺀 건수는 말뭉치 원장의 excluded_non_boarding 과 산출물의 label_scope 양쪽에 남긴다 — 조용히 빼지 않는다.
수집기가 실어 보낸 stationId 가 대장과 어긋나면 일일 발행을 멈춘다(station_id_mismatch_policy: fail).
셀 통계·z화 모집단·이웃 폴백·구간합의 seen 이 모두 승차 정류장만으로 잡히므로 v3 에서 적합한 계수는 옮겨 쓸 수 없다.
2026-08-19 평가 Lambda 배포로 실제 반영됐다.
2026-08-19 — 그 전에 규격이 evaluation-v2 에서 evaluation-v3 로 올라갔다.
아래 정의는 하나도 바뀌지 않았다 — 지표 열 개, 가중치, 라벨 계약, 코호트, 학습·평가 분할이 전부 v2 그대로다.
v3 가 바꾼 것은 무엇을 채점하느냐 셋이다.
(1) 08번의 지평을 2·4·8·12 넷에서 1~12 전부로 넓혔다 — 서빙 계약의 운영 범위와 맞췄다.
(2) 나머지 일곱의 일일 채점을 2026-08-19 평가일까지로 끊었다. 멈추는 것과 지우는 것은 다르다 — 일곱은 이 규약에 그대로 남고 지난 점수도 이력에 그대로 이어진다.
멈춘 뒤 산출물은 지표 자리를 비우고 그 자리에 멈춘 사실과 시점을 적는다. 규약의 상태값을 되돌리면 다시 채점된다.
(3) 일곱의 역할을 운영 후보에서 비운영 참조로 내렸다 — 서빙 후보도 아니고 매일 겨루는 대조군도 아니게 됐으므로 옛 라벨이 참이 아니다.
2026-08-19 평가 Lambda 배포로 실제 반영됐다.
1. 라벨 — 만석이라는 사건
모든 모델의 정답은 하나다. 목표 정류장을 출발한 직후의 잔여석이다.
| 만석 | 목표 정류장 출발 뒤 처음 확인한 유효 잔여석이 0이면 만석이다. |
|---|---|
| 비만석 | 같은 시점의 유효 잔여석이 1 이상이면 비만석이다. |
| 결측 | 잔여석 -1과 값 없음은 만석으로도 비만석으로도 바꾸지 않는다. 0으로 바꾸면 가짜 만석이 생긴다. |
| 출발 전 상태 | 잔여석이 보여도 라벨로 쓰지 않는다. 내 정류장 도착값도 금지한다. |
| 중복과 경계 | 같은 통과 사건은 한 번만 세고, 분할 경계 뒤에 확인된 라벨은 학습·평가에서 뺀다. |
| 뜻의 범위 | 만석은 좌석 소진이라는 보수적 사건이다. 하차로 생긴 자리에 일부 승객이 탄 경우까지 만석으로 세며, 개인의 승차 성공과 같지 않다. |
| 입석 | 대상 두 노선에 입석은 없다. 형식승인 입석 정원이 연결된 49/49 차종에서 0이다. 그래서 잔여석 0은 곧 승차 불가이고, 좌석 감소량은 곧 순 승차 인원이다. |
2026-08-19 — 라벨이 이진에서 분포로 넓어졌다.
위 정의는 그대로 유효하다. 다만 좌석 분포를 내는 후보(08번)가 생기면서
정답을 출발 뒤 잔여석 그 자체로도 읽는다 — 만석은 그 분포의 0 지점이다.
이진 라벨 잔여석 == 0은 분포 라벨에서 파생되므로 두 정의는 어긋나지 않는다.
공개 일일 평가가 채점하는 대상은 지금도 만석 확률 하나이고, 좌석 그 자체를 채점하는 것은 사설 지평 산출물뿐이다(evaluation-v5부터, v6 유지).
분포를 쓰는 이유는 표본에 있다 — 만석은 전체의 1.04%뿐이라 그것만으로는 배울 표본이 모자라지만,
분포로 배우면 나머지 98.96%도 학습에 들어온다.
채점 대상은 승차 정류장뿐이다(evaluation-v4부터, v6 유지).
boarding_allowed = NOT station_id LIKE '277%' 가 거짓인 지점은 승객이 탈 수 없으므로
예보 행도 채점 행도 만들지 않는다. 라벨 정의(위 표)는 여기에 영향받지 않는다 —
이것이 정하는 것은 어느 정류장을 채점하느냐뿐이다.
2. 학습/평가 분할
한국 표준시 날짜의 순방향 분할이다. 미래 정답이 과거로 새는 길을 막는다.
- 날짜 경계 — 시간 순서와 KST 날짜 경계는 수집기 응답 수신시각으로만 정한다. 공급자 시각은 쓰지 않는다(7. 한계).
- 순방향 — 앞선 날짜만 학습하고 뒤 날짜만 평가한다. 금요일까지 모은 자료로 학습했으면 성적은 토요일 행에서만 잰다.
- 누출 차단 — 경계 뒤에 확인된 라벨은 앞선 학습 구간에 넣지 않는다. 노선·정류장·시간대 경향, 전이 규칙, 보정 눈금은 각 학습 구간에서만 추정하고 평가 구간의 정답으로 다시 맞추지 않는다.
- 학습 단위(2026-08-19 추가) — 후보는 노선을 합쳐 배울 수도, 노선마다 따로 배울 수도 있다. 규약은 어느 쪽도 강제하지 않고 선언을 요구한다. 08번은 노선별로 따로 적합하고 계수를 공유하지 않는다. 합치면 표본이 늘어 분산은 줄지만, 어느 정류장에서 어떤 속도로 차는지가 노선마다 달라 편향은 그대로 남는다 — 실측에서도 3330의 격차가 학습 2일 +0.190에서 4일 +0.029로 11배 줄었다. 노선별로 배운 후보는 노선 코호트를 독립 성적으로 읽고, 노선을 합친 코호트는 두 모델의 가중 평균으로 읽는다.
3. 코호트 13구간
요일 2 + 시간대 3 + 노선 2 + 노선×시간대 6 = 13구간. 구간 규격은 cohort-v2다.
| 축 | 구간 | 정의 |
|---|---|---|
| 요일 (2) | 평일 | 공휴일이 아닌 월~금. KST 날짜 기준이다. |
| 주말 | 토~일, 그리고 공휴일. | |
| 시간대 (3) | 출근 | KST 07:00 이상 09:00 미만. |
| 퇴근 | KST 17:00 이상 20:00 미만. | |
| 그 외 | 출근·퇴근에 들지 않는 모든 시각. | |
| 노선 (2) | 노선 1650 | 노선 1650의 전체 평가 행. |
| 노선 3330 | 노선 3330의 전체 평가 행. | |
| 노선×시간대 (6) | 1650·출근 / 1650·퇴근 / 1650·그 외 / 3330·출근 / 3330·퇴근 / 3330·그 외 | 위 노선과 시간대 정의를 그대로 교차한다. |
- 공휴일 규칙 — 평일·주말 구분은 달력 요일에 관공서 공휴일·대체공휴일·선거일을 얹는다(2026년 22일, 노동절 포함). 공휴일은 주말로 분류한다. 달력은 2026년만 덮으며, 그 밖의 연도는 요일로만 가른다.
- 빈 구간도 지우지 않는다. 어느 구간의 0행은 이번 평가 날짜에 해당 행이 없다는 뜻이며, 수집 전체나 학습 자료가 없다는 뜻이 아니다.
- 한 클래스만 있는 구간의 PR-AUC·ROC-AUC는 계산 불가와 이유를 표시한다.
- 구간마다 표본 구성이 달라 숫자 크기만으로 구간 우열을 말하지 않는다.
3-1. 지평 모델 전용 축 (horizon-cohort-v1)
2026-08-19 추가. 위 13구간은 공개 계약이라 그대로다. 지평 모델은 사설 산출물이라 그 계약에 매이지 않아 축을 더 뒀다. 표본이 되는 축만 넣었다.
| 축 | 구간 | 만석 확률 | 좌석 | 근거 |
|---|---|---|---|---|
| 공개 13구간 + 전체 | 17 | 채점 | 채점 | 위 3절 그대로 상속한다. |
| 직전 만석 연속 | 0 / 1~2 / 3+ | 신설 | 신설 | 세 버킷 모두 12지평 전부에서 만석 20건을 넘는다. 새로 넣은 축 가운데 유일하다. 대기가 쌓인 국면은 서비스가 가장 답해야 하는 자리인데 13구간 어디에도 잡히지 않았다. |
| 정류장 구간 | 앞머리 1~12 / 중간 / 회차±4 / 후미 12 | 넣지 않음 | 신설 | 앞머리·회차±4·후미는 12지평 전부에서 만석 0건이라(합쳐 14.7만 행) 확률 지표가 영구히 정의되지 않는다. 좌석 오차는 만석이 0건이어도 정의된다. |
| 예측 시점 좌석 | 0석 / 1~25 / 26~50 / 51~75 / 76~100% | 넣지 않음 | 신설 | 만석이 지평을 따라 버킷 사이를 통째로 옮겨 다녀(지평 1은 68%가 '이미 만석', 지평 12는 63%가 '76~100%') 60칸 중 만석 20건 이상이 17칸뿐이다. |
| 차량 정원 · 시간대 세분 | — | 넣지 않음 | 정원은 49·68석이 관문 밖이고 capacity 자체가 관측 파생값이다. 시간대 세분은 만석이 가장 많은 06·07시의 만석 관측일이 하루뿐이라 하루가 칸을 지배한다. | |
- 확률 17축, 좌석 26축(17 + 정류장 4 + 좌석 5). 지평 12를 곱해 확률 204칸·좌석 312칸이다.
- 좌석 블록의 관문은 만석 건수가 아니라 행 수다(
n ≥ 100). 미만이면ready:false로 두고 수치를 내지 않는다.
4. 지표 11개
확률 오차를 첫 지표로 보되, 한 가지 지표만으로 모델을 판단하지 않는다.
| 이름 | 공개 이름 | 뜻 | 좋은 방향 |
|---|---|---|---|
| brier | 확률 오차 (Brier) | 예측한 만석확률과 실제 결과의 차이를 제곱해 평가 건 전체에서 평균한다. | 낮을수록 |
| log_loss | 로그 손실 (Log loss) | 틀린 답을 강하게 확신할수록 더 큰 벌점을 주고 평균한다. | 낮을수록 |
| calibration_bias | 평균 확률 편향 (Calibration bias) | 평균 예측확률이 실제 만석 비율보다 전체적으로 높거나 낮은 정도다. | 0에 가까울수록 |
| calibration_stratified | 층별 확률 편향 (Stratified calibration error) | 시(hour)마다 따로 잰 평균 확률 편향의 절댓값을 그 시의 평가 건수로 가중해 평균한다. 2026-08-20 추가 — 아래 5절. | 낮을수록 |
| ecce_mad | 누적 보정 오차 (ECCE-MAD) | 예측확률이 낮은 순으로 정렬해 실제값과 예측확률의 차이를 누적하고, 누적 절댓값의 최댓값을 평가 건수로 나눈다. | 낮을수록 |
| miss_rate | 만석 누락률 (Miss rate) | 실제 만석 가운데 확률을 경고 기준 .50보다 낮게 말해 놓친 비율이다. | 낮을수록 |
| pr_auc | 만석 탐지 성능 (PR-AUC) | 경고 기준을 바꿔 가며 만석을 놓치지 않는 정도와 경고가 맞는 정도의 균형을 요약한다. | 높을수록 |
| roc_auc | 만석 구분 성능 (ROC-AUC) | 무작위로 고른 만석·비만석 한 쌍에서 만석에 더 높은 확률을 주는 정도다. | 높을수록 |
| cost_1 | 가중 오분류 비용 1:1 | 만석을 놓친 손해와 잘못 경고한 손해를 같게 두고 임계값 .50에서 오판 비용을 평균한다. | 낮을수록 |
| cost_2 | 가중 오분류 비용 2:1 | 만석을 놓친 손해를 두 배로 두고 임계값 .33에서 평균한다. | 낮을수록 |
| cost_4 | 가중 오분류 비용 4:1 | 만석을 놓친 손해를 네 배로 두고 임계값 .20에서 평균한다. | 낮을수록 |
- 만석 20건 미만이면 만석 누락률·PR-AUC·ROC-AUC는 수치를 억제한다. 실제 만석이 없으면 누락률은 분모가 없고, 한 클래스만 있으면 두 AUC는 계산 불가다.
- 비용비 1·2·4는 사용자 비용의 민감도 가정이지 측정값이 아니다. 어느 비율에서 방향이 뒤집히면 우열을 정하지 않는다.
- 0.0000은 모든 예측이 맞았다는 뜻이 아니라 해당 평가 표본에서만 0으로 계산됐다는 뜻이다.
표기 — 지표는 소수 4자리(0.0107), PR-AUC·ROC-AUC는 3자리(0.834), 누락률은 백분율(100.0%), 종합 점수는 1자리(45.6).
4-1. 좌석 분포를 내는 후보의 추가 축
2026-08-19 추가. 위 11개는 일일 평가 원장의 지표다. 분포를 내는 후보는 설계 검증에서 아래 네 축을 함께 본다.
| 축 | 재는 것 | 좋은 방향 |
|---|---|---|
| CRPS | 분포 정확도. 예측한 좌석 분포 전체가 실제 좌석에서 얼마나 벗어났는지를 좌석 단위로 잰다. | 낮을수록 |
| p0 brier | 만석 확률 오차. 분포의 0 지점만 떼어 낸 확률 오차다. 위 brier와 같은 계산이다. | 낮을수록 |
| calib ratio | 보정비. 평균 만석확률을 실제 만석률로 나눈 값의 로그 절댓값. 1.5배 과대예측과 1.5배 과소예측에 같은 벌점을 준다. | 0에 가까울수록 |
| pr_auc | 만석 탐지. 위 pr_auc와 같다. | 높을수록 |
- 한 지표만으로 판정하지 않는다. 규약의 원칙이었지만 이제는 실측 근거가 있다 — 08번 설계 검증에서 분포 지표와 만석 지표가 정반대를 가리킨 층이 세 번 나왔다. 분포 정확도로는 기여가 없는데 만석 확률 정확도로는 가장 크게 기여한 층이 있었고, 그 반대도 있었다. 분포 정확도만 봤다면 만석 성능을 떨어뜨리는 결정을 했을 것이다.
- 보정비는 만석이 0건인 층에서 정의되지 않는다. 만석 탐지도 마찬가지다. 정의되지 않은 칸은 판정에서 세지 않고 빈칸으로 남긴다.
- 종합 점수(5절)에는 이 네 축을 넣지 않는다. 일일 평가의 지표 구성과 가중치는
evaluation-v3에서도 v2 그대로다.
4-2. 좌석 점추정 축 (evaluation-v5)
2026-08-19 추가. 4-1절 네 축은 그대로 두고, 좌석 단위 점추정 축을 덧붙였다. 사설 지평 산출물에만 들어가며 종합 점수에는 넣지 않는다.
| 축 | 재는 것 | 좋은 방향 |
|---|---|---|
| mae | 평균 |예측−실제|. | 낮을수록 |
| rmse | 제곱오차의 뿌리. 큰 실수를 드러낸다. | 낮을수록 |
| within3 | ±3석 이내 비율. | 높을수록 |
| bias | 평균(예측−실제). 양수면 자리를 실제보다 많게 봤다. | 0에 가까울수록 |
| head_to_head | 그 행에서 모델이 기준선보다 가까웠던 비율. 동점은 반 건. | 높을수록 |
- 평균과 중앙값을 둘 다 낸다.
expectedSeats는 분포의 평균이라 API 가 실제로 내보내는 값이지만, MAE 를 최소화하는 점추정은 분포의 중앙값이다. 둘을 나란히 놓아야 어떤 패배가 모델 탓인지 점추정 선택 탓인지 자료가 답한다. PMF 를 이미 쥐고 있으므로 중앙값은 덤이다. - 기준선은 셋이다.
persistence(예측 시점 좌석 그대로) ·cell_climatology((노선, 정류장, 시간대) 학습 평균) ·blend_50(둘의 산술평균, 주 비교 대상). 셋 다 모델 없이 낼 수 있다. 하나만 두면 반드시 이기는 쪽을 고르게 된다 — 실측에서persistence는 지평 8부터cell_climatology에 진다. 지평별로 어느 기준선이 가장 셌는지를strongest_baseline로 매일 찍고, 기준선이 이긴 지평은baseline_better_at_horizon에 매일 표본에서 다시 뽑는다 — 문장으로 못박지 않는다. - 분모는 하나다. 모델과 세 기준선 가운데 하나라도 값이 없는 행은 모든 분모에서 함께 뺀다. 뺀 수는
seats.skipped에 남긴다. 지평별로evaluation_rows(평가 행 전부)와scored_rows(상류 관측이 붙어 실제로 채점된 행)를 둘 다 남겨 커버율을 산출물에서 읽을 수 있게 한다.
5. 종합 점수
서로 다른 지표를 0~100으로 바꿔 가중 합산한 연구용 보조값이다(composite-score-v2).
| 구성 요소 | 이름 | 가중치 |
|---|---|---|
| 확률 오차 | probability_error | 35 |
| 과신 벌점 | overconfidence | 15 |
| 확률 맞춤 | calibration | 20 |
| 만석 구분 | full_ranking | 15 |
| 놓침 비용 | service_cost | 15 |
- 가중치 35·20·15·15·15 는 유도한 값이 아니라 정한 값이다. 평가일 5개로는 표본 밖에서 재현되는 한 벡터를 얻지 못했다. 결함이 있던 항목 정의만 고치고 가중치는 유지했다.
- 기준 50 = 시간순 과거 만석률 기준 모델. 각 평가일보다 앞서 관측한 만석률만 그대로 쓰는 단순 예측을 50점에 둔다. 모든 평가 건에 0 또는 1을 정확히 준 예측이 100점이다.
- 순위·선정에 쓰지 않는다(
selection_use=false). 매일 갱신하는 연구용 점수이며, 정해 둔 표본 관문을 채우기 전에는 모델 선정에 쓰지 않는다. 이미 내린 결정을 뒤에서 받치는 근거로도 인용하지 않는다. - 구성 점수 하나라도 계산할 수 없거나 기준 예측과 평가 표본이 다르면 종합 점수를 표시하지 않고 이유를 남긴다. 보정층(숫자 다듬기)은 종합 점수를 계산하지 않는다.
확률 맞춤 항목을 고쳤다
종전 항목은 예측과 실제의 짝을 제대로 보지 못했다.
|calibration_bias|는 평균 예측확률과 전체 만석률만 쓰므로 라벨을 무작위로 섞어도 소수 9자리까지 같았다.
ecce_mad ≥ |calibration_bias|는 누적 경로의 끝점 때문에 정확 산술에서 항상 성립한다. 서로 다른 두 증거가 아니라 같은 정보를 겹쳐 센 셈이다.
| 지평 12 | 편향 | 뜻 |
|---|---|---|
| 06시 | −56.09‰ | 만석을 크게 낮춰 봄 |
| 07시 | −30.02‰ | 만석을 낮춰 봄 |
| 18시 | −9.53‰ | 낮춰 봄 |
| 19시 | +9.69‰ | 높여 봄 |
| 전체 평균 편향 절댓값 | 0.838‰ | 반대 방향이 서로 지워짐 |
| 시간대별 편향 가중평균 | 7.944‰ | 상쇄를 막은 값 |
v2는 시(hour)마다
| 지평 12 공격 시험 | 확률 맞춤 v1 | 확률 맞춤 v2 | 종합 v2 |
|---|---|---|---|
| 원본 A18 | 90.0 | 67.4 | 67.8 |
| 실제 만석률 상수 | 90.3 | 46.4 | 49.6 |
| 자기평균 상수 | 84.7 | 47.8 | 49.8 |
| 확률 순서 섞기 | 52.8 | 45.6 | 35.7 |
| 예측 뒤집기 | 0.0 | 0.0 | 7.4 |
정보가 없는 두 상수 예보자가 기준 50 아래로 내려갔다. 순서를 섞은 예보는 시간대 평균도 어긋나지만, 예측과 결과의 짝이 무너진 더 큰 손해는 만석 구분과 확률 오차가 함께 잡는다.
눈금이 바뀐 경계
| 지평 | 확률 맞춤 v1 | 확률 맞춤 v2 | 종합 v1 | 종합 v2 |
|---|---|---|---|---|
| 1 | 90.4 | 93.0 | 90.7 | 91.2 |
| 4 | 77.9 | 84.8 | 79.6 | 81.0 |
| 8 | 87.5 | 77.2 | 76.2 | 74.1 |
| 10 | 91.7 | 70.1 | 74.6 | 70.3 |
| 11 | 90.8 | 67.0 | 72.4 | 67.6 |
| 12 | 90.0 | 67.4 | 72.3 | 67.8 |
먼 지평이 갑자기 좋아 보이던 U자 모양이 사라졌다. 지평 순서의 스피어만 상관은 확률 맞춤에서 +0.462 → −0.993, 다섯 항목이 모두 같은 방향인 지평쌍은 21/66 → 64/66이 됐다.
v1과 v2의 차이를 모델 성능 변화로 읽지 않는다. 같은 자료를 다른 눈금으로 잰 값이다. A18은 사설 산출물이며 당시 12지평 모두 참고 가능 단계였다.
구성 항목과 놓침 비용의 한계
교정 뒤 확률 맞춤과 나머지 넷 평균의 상관은 +0.969다. 독립 축을 하나 더 만든 것이 아니라 반대로 움직이던 잡음 축을 없앤 것이다. 따라서 가중치 20에 새 유도 근거가 생긴 것은 아니다. 지평 12의 날짜별 종합은 56.6~75.2로 흔들렸고 평가일은 5개뿐이었다.
놓침 비용 4대1도 이름 그대로 읽으면 안 된다. 이 원장에서 시간순 기준 예보자는 임계값 0.2를 한 번도 넘지 않아 기준 cost_4 = 4π가 12지평·204코호트에서 성립했다.
이때 점수는 100 − 50·미탐률 − 50·오탐수/(4·만석수)라 비용비 4가 미탐 항에서 약분된다. 놓침을 네 배로 센 값이 아니라 오탐 벌점을 줄인 값이다.
두 대상의 우열은 같은 평가 규격·같은 표본에서 다섯 구성 항목이 모두 한쪽인 경우에만 말한다. A18 운영 선택은 이 점수로 정하지 않았고, 비운영 참조와 A18은 표본이 달라 서로 빼지 않는다.
6. 공개 관문
어느 상태에서도 계산 가능한 점추정은 공개하되, 허용하는 해석 범위가 달라진다.
| 공개 상태 | 조건 | 허용하는 해석 |
|---|---|---|
| 잠정 | 승인된 운영 자료로 계산했지만 아래 기준을 아직 채우지 못했다. | 해당 평가 표본에서 나온 계산값으로만 읽는다. |
| 참고 가능 | 관측일 5일 · 평가 200행 · 만석 20건 · 비만석 100건 · 만석 관측일 3일 이상을 모두 채웠다. | 해당 구간에서 관측된 경향으로 읽는다. |
| 모델 비교 가능 | 관측일 10일 · 평가 500행 · 만석과 비만석 각 100건 · 만석 관측일 5일 이상을 모두 채웠다. | 같은 평가 규격과 같은 구간 안에서 모델을 비교할 수 있다. |
| 최종 평가 통과 | 학습일 14일 이상을 확보한 뒤, 사전에 기록한 미래평가 시작 시각 다음의 35일 고정 구간과 품질 관문을 통과했다. | 최종 모델 선택의 근거로 쓸 수 있다. |
지금 어디까지 왔는지는 이 문서가 아니라 현황판의 관문 막대가 보여준다.
7. 한계
규약이 일부러 쓰지 않는 것과, 라벨이 원리상 못 보는 것.
- 공급자 시각(queryTime)은 쓰지 않는다. 직접 수집 92호출 전부가 로컬 수신 시각보다 미래였고 중앙값 +17.265초였다. 인접 호출에서 시각 되감김이 16건 나왔고, HTTP Date 헤더도 초 절삭까지 92/92 일치해 독립 시계가 아니다. 이 값으로 경과시간을 재면 서버 시계 차이를 시간 흐름으로 오독한다. 시각은 수집기 응답 수신 KST만 쓰고, 도착 ETA 파생값도 공급자 예측을 다시 배우는 셈이라 뺀다.
- 폴링 수집은 만석을 못 보는 창을 남긴다.
관측 간격이 90초를 넘거나 정류장 순번이 건너뛴 구간의 중간 통과는 라벨을 만들지 않고 검열로 남긴다.
잔여석
-1과 값 없음도 결측으로 둔다. 라벨 안쪽에도 검열이 있다 — 자리가 딱 맞아 0이 된 경우와 여럿이 못 탄 경우가 라벨상 같아 초과 수요의 크기를 모르고, 하차 인원은 API에 없다. 이 규약은 못 본 값을 사실로 바꾸지 않는 쪽을 고른다. - 승차와 하차를 나눠 볼 수 없다. 15초 폴링으로 정류장 체류의 63.1%를 세 번 이상 관측하는데도, 하차 뒤 승차를 뜻하는 비단조 궤적은 0.55%뿐이다. 앞문 승차와 뒷문 하차가 동시에 일어나기 때문이다. 한 홉 변화의 57.1%가 0인데, 그것이 "아무 일 없었다"인지 "3명 타고 3명 내렸다"인지 구분할 방법이 없다. 관측되는 것은 언제나 순 승차 인원이고, 규약은 이 값을 승차 인원으로 바꿔 부르지 않는다.
- 만석 이후의 수요는 완전히 절단된다.
좌석이 0이면 몇 명이 더 타려 했는지 관측값은 계속 0이다.
연속 만석 구간이 중앙값 6개·최대 12개 정류장이고, 그동안 못 탄 사람은 전부 정류장에 남는데 그 수를 세는 채널이 없다.
혼잡도로 회복되지도 않는다 — 만석 구간 169개 중
crowded값이 변한 것은 1개(0.6%)뿐이다. 그래서 "얼마나 많이 못 탔는가"는 이 자료로 검증할 수 없는 양이고, 규약은 그 양을 지표로 만들지 않는다. - 못 보는 것이 아니라 확정된 것 하나. 입석은 없다(형식승인 입석 정원 49/49가 0). 그래서 잔여석 0 = 승차 불가, 좌석 감소량 = 순 승차 인원이라는 등식은 근사가 아니라 정확하다. 위 세 한계는 전부 이 등식 바깥의 문제다.
출처와 검증 장부
- 규격 버전
evaluation-v6(2026-08-20 확률 맞춤 교정 · 직전은evaluation-v5·evaluation-v4·evaluation-v3) ·cohort-v2· 지평 전용horizon-cohort-v1·composite-score-v2· 응답 스키마1.1.0. 지난 보고서의 v1 점수는 역사값으로 남기되 v2와 비교하지 않는다. - 확인 원장 일일 평가
daily-20260816-86afbfc70dbb876b· 2026-08-16분 · 생성 08-17 00:15 KST — 종합 점수 구성·가중치와 기준 모델 문구를 이 보고서에서 확인했다. - 이관 관문·코호트·지표·분할·라벨·검열 서술은 모델 상세와 재료 페이지의 규약 블록을 이 문서로 옮긴 것이다. 각 페이지는 이제 이 문서를 링크로 가리킨다.
- 2026-08-19 추가분 1절 분포 라벨 주석 · 2절 학습 단위 · 4-1절 분포 후보의 추가 축 · 7절 관측 한계 3건.
출처는 08번 후보의 설계 세션이며, 그 세션이 쓴 평가 규약·지표 구현·점수 정책은 이 문서와 같다.
당시 일일 평가의 지표 10개·가중치·관문은 바뀌지 않았다 — 같은 날 규격이
evaluation-v3를 거쳐evaluation-v4로 올라갔지만 두 번 다 바뀐 것은 채점 대상이었다. - 2026-08-19
evaluation-v4추가분 1절 채점 대상 주석 ·route_reference절(노선 판본에 매인 정류장 대장 — 1650 89정류장 중 승차 65 · 3330 85정류장 중 승차 78) ·label.boarding_stops_only. 대장은 GBISgetBusRouteStationList2026-08-19 조회본이고 규약 digest 가 그것을 묶는다. - 2026-08-19 가중치 사후 검토 5절의 가중치 유도 근거·구성 항목 비독립·민감도 세 문단이 이 검토에서 나왔다.
원리 있는 대안 가중치 아홉 개를 유도해 네 기준(순위 안정성 · 해석 가능성 · 결정 정합 · 조건 견딤)으로 겨루고,
목적 11개 × 분할설계 3종에서 목적별 최적 가중치를 풀었다. 결론은 근거 있는 단일 가중치는 없다이며 그래서 값을 바꾸지 않았다.
검토 전에 게시 종합 점수 641건·구성 점수 125건을 정본 규칙(
scoring.py)으로 재현해 불일치 0 을 확인했다. 2026-08-20 A18 재감사에서 이전 검토의 재현되지 않은 수치를 제거하고, 확률 맞춤 결함과 날짜 표본 한계를 다시 기록했다. 가중치 35·20·15·15·15는 유지했지만 확률 맞춤 정의가 달라 점수 정책은composite-score-v2로 분리했다.