비운영 참조

못 본 것도 세기

미관측 구간 가중 경험 베이즈 · interval_censored

한 줄 결론 — 여러 정류장을 건너뛴 관측을 버리지 않고, 구간 하나의 가중치 1을 후보 정류장에 나눠 세는 후보다. 비교 관문을 채우지 못한 채 2026-08-19 결정으로 비운영 참조가 됐다.

왜 믿나

숫자의 원장은 일일 평가 하나다

점수와 지표는 일일 평가가 날마다 다시 계산해 왔다. 이 페이지는 로드할 때 한 번 그 값을 읽고, 실패하면 배포 시점 값이 기준 스탬프와 함께 남는다.

이 모델의 일일 채점은 2026-08-19 평가일까지로 끝났다. 08번(A18)을 단일 운영 모델로 확정하며 evaluation-v3에서 도입한 결정이고, 현재 evaluation-v6도 이어받는다. 새 점수는 만들지 않으며 마지막 값과 중단 시점은 이력에 남는다.

학습은 앞선 한국 표준시 날짜만, 채점은 뒤 날짜만 쓴다. 관측일과 만석 관측일이 평가 규약의 관문에 못 미치는 동안은 모든 값을 잠정으로 표시하고 순위·채택을 판단하지 않는다. 계산할 수 없는 값은 0으로 채우지 않고 사유와 함께 비워 둔다.

동결 이력 성적

종합 점수
45.6

상태 잠정 — 아래 관문을 다 채우기 전의 점추정이다.

평가 관측일
2일 / 10일
만석 누적
173건 / 100건
만석 관측일
2일 / 5일
지표오늘 값읽는 법
Brier0.0107확률이 얼마나 빗나갔나. 낮을수록 좋다.
만석 누락률100.0%만석을 안심으로 놓친 비율. 낮을수록 좋다.
ROC-AUC0.834만석과 비만석을 가르는 힘. 높을수록 좋다.
Log loss0.0513확신하고 틀린 벌점. 낮을수록 좋다.
ECCE-MAD0.0097말한 확률이 실제와 맞는지 본다. 낮을수록 좋다.
PR-AUC0.053드문 만석을 찾는 힘. 높을수록 좋다.
Calibration bias0.0097확률 쏠림. 0에 가까울수록 좋다.
놓침 비용 1:10.0114놓침과 헛걸음을 같게 친 비용. 낮을수록 좋고, 다른 가정과는 비교하지 않는다.
놓침 비용 2:10.0236놓침을 2배 무겁게 친 비용. 낮을수록 좋다.
놓침 비용 4:10.0530놓침을 4배 무겁게 친 비용. 낮을수록 좋다.

구간별 동결 이력 값

구간행만석Brier만석 누락ROC-AUC
주말18,0551730.0107100.0%0.834
출근2,70200.0010——
퇴근4,195120.0082100.0%0.955
그 외11,1581610.0140100.0%0.871
노선 16507,5321600.0196100.0%0.833
노선 333010,523130.0043100.0%0.881
노선 1650·출근97000.0005——
노선 1650·퇴근1,694120.0075100.0%0.969
노선 1650·그 외4,8681480.0276100.0%0.863
노선 3330·출근1,73200.0012——
노선 3330·퇴근2,50100.0087——
노선 3330·그 외6,290130.0035100.0%0.922

평가 행이 없는 구간 1개: 평일

배포 시점 값 · 일일 평가 2026-08-16분 · 생성 08-17 00:15 KST

점수 50 = 시간순 과거 만석률 기준 모델 · 자세한 기준은 평가 규약

Q. 이 모델은 지금 무엇을 계산하나?

목표 버스가 목표 정류장을 출발한 뒤 남은 좌석이 0일 확률을 계산한다. 확정 점 통과 라벨에, 여러 정류장을 건너뛴 관측의 끝 라벨을 후보 정류장별 분할 가중치로 더하면 이 확률을 더 잘 추정할 수 있는지 확인하는 중이다.

Q. 사진 사이에서 사라진 통과는 버려야 하나?

아니다. 폴링은 버스를 계속 보는 영상이 아니라 띄엄띄엄 찍는 사진이다. 앞 사진에서 순번 20이던 버스가 다음 사진에서 순번 23이면, 21과 22의 출발 후 좌석 상태는 보이지 않는다. 그렇다고 두 통과가 없었던 일은 아니다.

운영 버전은 이 구간을 버리지도, 중간 상태를 지어내지도 않는다. 뒤 관측의 라벨을 후보 정류장 21·22·23에 복사하되 가중치를 각각 1/3로 둔다. 구간 하나가 셀 집계에 더하는 총가중치는 1이다. 후보가 많은 구간이라고 영향이 저절로 커지지 않고, 못 본 통과가 근거에서 사라지지도 않는다.

이렇게까지 세는 이유는 셀이 얇아서다. 셀이 얼마나 얇은지 실측한 수치는 아래 실측 워크스루에 있다.

Q. 어떻게 계산하나?

점 라벨과 구간 근거를 나눈다

한 정류장 이동을 90초 안에 확인한 유효 출발 뒤 관측은 점 통과 사건으로 만든다. 여러 정류장을 건너뛰었거나 90초를 넘긴 관측쌍은 후보가 6개 이하일 때만 별도 구간 근거로 남긴다.

점 라벨로 전역 평균을 만든다

앞선 날짜의 점 통과 라벨에 만석과 비만석을 0.5건씩 더한 고정 Beta(0.5, 0.5)로 전체 평균을 안정화한다. 구간 근거는 전역 평균에 더하지 않는다.

구간 가중치를 균등 분할한다

구간 하나의 뒤 관측 라벨을 모든 후보 정류장에 복사하되 각 후보의 가중치를 후보 수의 역수로 둔다. 한 구간이 셀 집계에 더하는 총가중치는 1이다.

셀 평균을 계층적으로 축소한다

점 라벨과 분할 가중 구간을 노선, 노선×시간대, 노선×정류장, 노선×정류장×시간대 셀에 더한다. 고정 강도 6으로 노선은 전역 평균에, 시간대와 정류장은 노선 평균에, 가장 세밀한 셀은 두 부모의 50 대 50 평균에 축소한다.

점 통과 사건에서 평가한다

만든 확률을 다음 한국 표준시 날짜의 확정 점 통과 사건에 적용한다. 성능은 위 오늘 성적과 이력에서 읽는다.

이 방식의 강점

Q. 보정은 실제로 적용됐나?

적용하지 않는다. 셀 평균의 계층적 축소는 별도 확률 보정이 아니고, 이 모델의 출력에는 보정층을 얹지 않는다. 보정층은 숫자 다듬기가 따로 다룬다.

재료 한눈에

구분재료
쓴다현재 운영 수집기 자료 중 검증을 통과한 확정 점 통과 사건의 노선, 정류장 순번, 시간대, 만석 라벨
쓴다같은 운행에서 정류장이 둘 이상 진행했거나 관측 간격이 90초를 넘은 관측쌍의 뒤 라벨(노선·시간대·만석)과 후보 정류장 순번 목록
쓴다구간 후보: 앞 관측 다음 정류장부터 뒤 관측이 확인한 정류장까지, 후보 6개 이하만
쓴다응답 수신시각의 한국 표준시 날짜(순방향 학습·평가 경계)와 뒤 관측의 시간대(구간 셀)
쓴다출발 뒤 잔여석 0이면 만석, 1 이상이면 비만석인 라벨(앞선 날짜의 학습 정답)
안 쓴다앞 관측의 좌석 상태, 상태 전이 행렬, 중간 정류장별 상태와 통과 시각
안 쓴다후보가 7개 이상인 구간과 한국 표준시 날짜를 넘는 관측쌍
안 쓴다잔여석 -1·결측, 출발 전 상태, 중복 사건(점 라벨로 바꾸지 않는다)
안 쓴다현재 좌석·위치·상태, 연속 시각, 요일 구분, 운행 간격 자체
안 쓴다평가일 라벨과 평가일 뒤 관측(그날의 평균·셀 집계에 넣지 않는다)
안 쓴다개별 운행을 다시 식별할 수 있는 값과 원본 응답

관문 기준, 구간 정의, 지표 정의, 분할 규칙, 라벨 정의는 평가 규약에 있다.

재료 출처 장부 — 연구 구현 기준

이 장부는 interval-censored-v1 구현 기준이다. 운영 버전은 interval-censored-v2+fd482d90이며 전이 그룹·상류 버스 상태·보정층 재료를 쓰지 않는다.

정원·차종은 검증해서 버린 재료가 아니다

M3는 직접 수집분만 쓰고 공식 이력·제원으로 정원·차종 ablation을 실행했다. 직접 관측 고유차량 55/62대에 공식 이력이 연결됐다. 공유 페이지에는 차량번호와 비공개 조인 식별자 값을 싣지 않는다.

새 지표에서 명백한 개선으로 판정한 조합은 0개다. 표본 관문 미달이라 쓸모없다는 뜻은 아니다. 관측 최대 잔여석으로 정원을 추정한 행은 0건이며 계속 금지한다.

쓰는 재료 17개 — 출처 필드까지

재료종류어느 API의 어느 필드
노선 (route)직접 수집은 calls.jsonl.route_name, 코퍼스는 route.name을 모델 범주로 읽고 같은 route.routeName 마스터 행을 찾는다. 수집기 설정의 route.route_id와 원응답 routeId는 원문에 남는다.주의 — 현재 S1 구현은 실제로 routeName으로 마스터를 찾는다. msgBody.busLocationList[].routeId를 모델의 route로 복사하지 않는다. 대상 두 노선 밖으로 넓힐 때는 ID 검증이 필요하다.응답 원본msgBody.busLocationList[].routeId; 운영 수집기 route.name, route.route_id; S1 E4 calls.jsonl.route_name; 코퍼스 route.name; route.routeName, route.routeId; S1 routeGBIS 버스위치정보 getBusLocationListv2 + 우리 수집기 노선 메타데이터 + 제한 코퍼스 + GBIS route 마스터
목표 정류장 ID (station_id)차량별 정규화 위치가 전진한 끝점의 station_seq를 만들고, 같은 노선의 staOrder와 맞춰 stationId를 붙인다.주의 — 응답의 msgBody.busLocationList[].stationId를 목표 통과 정류장 ID로 복사하지 않는다. 그 값은 응답 시점 차량 위치의 정류장이다.파생msgBody.busLocationList[].vehId, msgBody.busLocationList[].stationSeq, msgBody.busLocationList[].stateCd; routestation.routeName, routestation.staOrder, routestation.stationId; S1 station_idGBIS 버스위치정보 getBusLocationListv2 + GBIS routestation 마스터 + S1 통과 사건 빌더
KST 30분대 (query_half_hour)응답 수신시각을 KST로 바꾸고 hour*2 + 1[minute>=30]으로 0~47을 만든다.주의 — msgHeader.queryTime과 HTTP Date는 시간 계산에 쓰지 않는다. 코퍼스 collectedAt은 본문 파싱 뒤 시각이다.파생timing.response_received_at.kst, timing.response_received_at.utc; S1 E4 response_received_kst, response_received_utc; 코퍼스 collectedAt; S1 query_half_hour우리 수집기 응답 수신시각; 제한 코퍼스는 수집기가 붙인 collectedAt
출발 후 만석 라벨 (label_full)정류장 s 통과 뒤 같은 차량에서 (stateCd,stationSeq)=(2,s),(0,s),(1,s+1) 중 처음 잡힌 유효 좌석값을 찾는다. 0이면 1, 양수면 0이다.주의 — remainSeatCnt=-1은 결측이다. (stateCd,stationSeq)=(1,s)는 도착 상태라 라벨이 아니다. 예측 시점 뒤에 생기므로 학습 정답으로만 쓴다.파생msgBody.busLocationList[].vehId, msgBody.busLocationList[].stationSeq, msgBody.busLocationList[].stateCd, msgBody.busLocationList[].remainSeatCnt; timing.response_received_at.kst, timing.response_received_at.utc; S1 passage_events.label_full, label_remain_seatsGBIS 버스위치정보 getBusLocationListv2 + 우리 수집기 응답 수신시각 + S1 통과 사건 빌더
상류 버스 잔여석 (upstream_remain_seats)축거리와 동률 규칙으로 고른 상류 차량의 remainSeatCnt를 붙인다.주의 — -1은 0으로 바꾸지 않고 결측으로 둔다. 이 값은 목표 차량의 미래 라벨이 아니다.파생msgBody.busLocationList[].remainSeatCnt, msgBody.busLocationList[].stationSeq, msgBody.busLocationList[].stateCd, msgBody.busLocationList[].vehId; S1 upstream_remain_seatsGBIS 버스위치정보 getBusLocationListv2 + S1 최근접 상류차 선택
상류 버스 존재 (upstream_bus_exists)정규화 마지막 통과 순번이 목표 station_seq보다 작은 차량이 하나라도 있으면 1이다.주의 — API가 노선의 모든 차량을 포착한다는 뜻은 아니다.파생msgBody.busLocationList[].vehId, msgBody.busLocationList[].stationSeq, msgBody.busLocationList[].stateCd; S1 정규화 last_passed; S1 upstream_bus_existsGBIS 버스위치정보 getBusLocationListv2 + S1 스냅샷 특징 빌더
상류 버스 축거리 (upstream_axis_gap_seq)상류 후보 중 목표에 가장 가까운 차량을 고르고 target station_seq-last_passed를 계산한다.주의 — 동률은 출발 stateCd=2, 교차 0, 도착 1 순, 더 최신 운행, 차량키 사전순으로 푼다. 좌석값은 선택 기준이 아니다.파생msgBody.busLocationList[].vehId, msgBody.busLocationList[].stationSeq, msgBody.busLocationList[].stateCd; S1 정규화 last_passed; S1 upstream_axis_gap_seqGBIS 버스위치정보 getBusLocationListv2 + S1 스냅샷 특징 빌더
KST 하루 중 분 (query_minute_of_day)KST 시각에서 hour*60+minute을 계산한다.주의 — msgHeader.queryTime은 쓰지 않는다. 초는 버린다.파생timing.response_received_at.kst, timing.response_received_at.utc; S1 E4 response_received_kst, response_received_utc; 코퍼스 collectedAt; S1 query_minute_of_day우리 수집기 응답 수신시각; 제한 코퍼스는 수집기가 붙인 collectedAt
목표 축 순번 (station_seq)stateCd=1이면 현재 stationSeq-1, stateCd=0·2이면 현재 stationSeq를 마지막 통과 순번으로 놓는다. 인접 적격 응답에서 이 값이 전진한 끝점을 통과 사건 순번으로 삼는다.주의 — 모델 축은 routestation 전체 순번이다. 학습 행은 서비스 정차점만 남겨도 축 간격에는 미정차·경유 지점이 들어간다.파생msgBody.busLocationList[].vehId, msgBody.busLocationList[].stationSeq, msgBody.busLocationList[].stateCd; routestation.staOrder; S1 station_seqGBIS 버스위치정보 getBusLocationListv2 + GBIS routestation 마스터 + S1 통과 사건 빌더
원천 구분 (source_kind)직접 수집 행은 direct_e4, 제한 코퍼스 행은 corpus로 붙인다.주의 — GBIS 응답 필드가 아니다. GBM에는 범주형 예측 재료로 들어가고, 구간 검열에서는 같은 원천끼리 연결하는 데 쓴다.파생S1 source_kindS1 데이터셋 빌더
날짜 순번 (query_day_index)KST 날짜에서 2026-07-19를 뺀 일수를 쓴다.주의 — 이 데이터셋의 고정 기준일에 묶인 값이다. 달력 날짜의 보편적 ID가 아니다.파생timing.response_received_at.kst, timing.response_received_at.utc; S1 E4 response_received_kst, response_received_utc; 코퍼스 collectedAt; S1 query_day_index우리 수집기 응답 수신시각; 제한 코퍼스는 수집기가 붙인 collectedAt
같은 차량·운행 연결키같은 원천·노선·구간·가명 차량을 묶고 순번 회귀·긴 공백에서 운행을 나눠 journey_index를 붙인다.주의 — 코퍼스 차량키는 plateNo 우선 HMAC 앞 16 hex이며 외부 원 식별자로 되돌릴 수 없다. 원천을 넘겨 같은 차량으로 보지 않는다.파생msgBody.busLocationList[].vehId, msgBody.busLocationList[].plateNo; 직접 S1 target_vehicle_hash, 코퍼스 vehicles[].id; S1 source, route, segment_id, vehicle_hash, journey_indexGBIS 버스위치정보 getBusLocationListv2 + 수집기 가명화 + S1 운행 분할
미관측 중간 통과 구간인접 적격 응답의 정규화 순번이 +2 이상이면 끝점 사건만 만들고 각 중간 순번을 reason=sequence_jump_intermediate_passage_unobserved로 기록한다.주의 — 선형 보간한 가짜 통과시각을 만들지 않는다. 불가능 이동 사유는 이 모형의 전이쌍에서 제외한다.파생S1 censored_passages.reason, censored_passages.source, censored_passages.route, censored_passages.segment_id, censored_passages.vehicle_hash, censored_passages.interval_start, censored_passages.interval_end, censored_passages.station_seq, censored_passages.normalized_sequence_jumpS1 censored_passages
서비스 정차점 표시stationName에 (미정차)나 (경유)가 없으면 1로 둔다.주의 — 현재 S1 빌더는 station.stationName이 아니라 routestation.stationName을 읽는다.파생routestation.stationName; S1 is_service_stopGBIS routestation 마스터 + S1 정류장 필터
검열 구간 양끝 만석 상태검열 구간 끝점의 서비스 정차 통과 라벨과, 같은 차량·운행에서 90초 안에 앞서 확정된 서비스 정차 라벨을 연결한다.주의 — label_status=ok, is_service_stop=1만 쓴다. 같은 원천과 인과 시각 조건을 지킨다.파생S1 censored_passages.source, censored_passages.route, censored_passages.segment_id, censored_passages.vehicle_hash, censored_passages.interval_start, censored_passages.interval_end, censored_passages.station_seq; passage_events.source, passage_events.route, passage_events.segment_id, passage_events.vehicle_hash, passage_events.label_status, passage_events.is_service_stop, passage_events.label_full, passage_events.passage_interval_start, passage_events.passage_interval_end, passage_events.journey_index, passage_events.station_seq; 모델 내부 start_state, end_stateS1 censored_passages + S1 passage_events
전이 횟수와 숨은 통과 수같은 검열 구간의 중간 순번 행 수를 latent_passage_count로 세고 transition_count=latent_passage_count+1로 둔다.주의 — 한 구간의 중간 순번 행을 서로 독립 표본으로 세지 않는다.파생S1 censored_passages.normalized_sequence_jump; 모델 내부 latent_passage_count, transition_countS1 censored_passages + 구간 검열 모형 내부
검열 전이 그룹route | am·pm | b((station_seq-1)//10)으로 묶어 0↔1 전이율을 추정한다. 12:00 전은 am이다.주의 — API의 공식 시간대나 방향 코드가 아니다. 10순번 폭은 구현 규칙이다.파생S1 route, query_minute_of_day, station_seq; 모델 내부 transition_group구간 검열 모형 내부

지금은 안 쓰는 재료 5개

Q. 언제 실패하나?

함께 읽을 한계

연구 구현에서 확인한 취약점

아래는 interval-censored-v1 구현과 연구 자료에서 확인한 기록이다.

Q. 개인정보와 미래 정답은 어떻게 막나?

다음 확인 사항

실측 워크스루 — 연구 구현 기준

이 해설은 interval-censored-v1 구현 기준이다. 운영 버전은 interval-censored-v2+fd482d90이다. v1은 전이 행렬 T^k로 미관측 통과를 합산하고 isotonic 보정을 썼다. v2는 전이 행렬과 보정층 없이 뒤 관측 라벨을 후보 정류장에 균등 분할한다. 아래 수치는 연구 자료의 기록이며 오늘 성적과 합치지 않는다.

재구축 자료의 검열행은 2,779건이다. 이 가운데 정상 순번 도약에서 생긴 미관측 중간 통과가 2,090건이다. 물리적으로 불가능한 이동 689건은 PX로 빼고 라벨 우도에 넣지 않았다. 시간 경계, 정차 정류장, 90초 연속성까지 통과해 코퍼스 train 우도에 들어간 것은 양끝 상태쌍 800개다. 그 안에서 중간 통과 821개를 잠재 상태로 합산했다. 점 라벨을 새로 만든 건 0건이다.

이 재료가 필요한 배경은 셀의 얇음이다. 노선×정류장×30분 셀은 833개다. 표본 10건 이하가 281개, 33.73%다. 만석을 한 번도 못 본 셀은 719개, 86.31%다. 셀 빈도만 믿으면 “못 봤다”를 “없다”로 읽기 쉽다. 구간 검열 모형은 셀 위험을 축소한 뒤, 폴링 사이 전이가 남긴 정보를 따로 보탠다.

코퍼스 보조 검증에서는 잠정 운영 선두였다. 검증 표본은 10,040건, 만석은 583건이다.

모형ECEBrierlog lossAUC
정류장×시간 기준선.0063.0327.1033.9613
구간 검열 raw.0200.0284.0968.9748
구간 검열 isotonic.0053.0268.0878.9751

전이 정보만 섞은 raw는 순위를 잘 세웠지만 확률 눈금은 틀어졌다. 시간순 OOF로 학습한 isotonic 보정이 그 눈금을 다시 맞췄다. 기준선 대비 ECE 차이 -.0010의 95% 구간은 [-.0037, +.0040]이라 보정 개선 자체는 유의하지 않다. Brier와 log loss, AUC의 짝지은 95% 구간은 모두 0을 포함하지 않았다.

두 갈래가 한 확률이 되는 과정
노선×정류장×30분 기록
의사표본 강도 4
축소 셀 위험
양끝 상태·못 본 통과 수
중간 상태 합산
T^k 전이 위험
10%
log-odds 90:10 혼합
OOF 10,236건
isotonic 보정
1에서 뺌
탈 확률 = 1-p_full

축소 셀 위험과 검열 전이 위험을 섞고, 시간순 OOF 보정 뒤 탈 확률로 뒤집는다.

Q. 무엇이 보이고 무엇이 안 보이나?

상태는 둘만 둔다. 출발 후 잔여석 0이면 F(만석), 양수면 A(여유)다. -1은 결측이라 어느 쪽에도 넣지 않는다.

예를 들어 F → ? → A가 관측됐다고 하자. 가운데를 F나 A로 찍지 않는다. F→F→A와 F→A→A 두 경로를 모두 남긴다. 못 본 상태가 두 개면 가능한 네 경로를 모두 더한다.

Q. 모든 경로를 직접 늘어놓나?

아니다. 두 상태의 전이표를 T라 두고 작은 우도 하나만 계산한다.

P(Y_end | Y_start, T^k)

k는 양끝 사이의 축상 이동 칸 수다. T^k가 중간의 모든 F/A 경로를 한 번에 합친다. 가짜 행도, 가짜 통과시각도 생기지 않는다.

전이표는 노선, 오전·오후, 정류장 순번 10칸 묶음으로 나눈 29개 그룹에서 배운다. 각 그룹에는 A→F와 F→A 두 확률이 있다. 그룹 표본이 얇으면 전역 전이 쪽으로 당긴다. 선택된 전이 규제값은 5다.

Q. 전이 확률만으로 답하나?

아니다. 첫 갈래는 노선×정류장×30분 셀 위험이다. 만석 수와 표본 수를 세고, 의사표본 강도 4로 노선 평균 쪽에 축소한다. 둘째 갈래는 가장 가까운 상류 관측 버스의 0석/양수, 목표까지의 내부 축거리, 위 전이표로 계산한 위험이다.

두 갈래는 확률 자체가 아니라 log-odds에서 90:10으로 섞는다. 상류 버스나 축거리가 없으면 셀 위험만 쓴다. 마지막에는 train 안의 날짜 순방향 OOF 10,236건, 만석 572건으로 배운 isotonic 계단을 통과한다. validation 라벨은 이 과정에 들어가지 않았다.

가짜 복원과 주변화의 차이
관측: F → ? → A가짜 복원: F → F → A 한 경로만 학습
주변화: F→F→A와 F→A→A를 함께 학습

관측은 F와 A 두 끝뿐이다. 가운데 상태를 하나로 찍지 않는다.

Q. 실제 한 행은 어떻게 계산되나?

2026년 8월 3일 07:12:25 KST, 1650번 부흥고등학교.임광아파트 정류장이다. 정류장 ID는 209000147, 내부 순번은 54다. 가장 가까운 상류 관측 버스는 축상 2칸 앞에 있었고 잔여석은 0이었다. 실제 출발 후 라벨도 만석이었다. 아래 값은 소수 넷째 자리로 반올림했다.

단계실측값과 계산만석 확률
셀 위험train 14건 중 만석 7건. 1650 노선 사전확률 .0688을 의사표본 4개로 섞음: (7 + 4×.0688) / 18.4042
전이 위험1650·오전·순번 51~60 그룹의 A→F=.0033, F→A=.0376. 만석에서 2칸 뒤 만석은 .9624×.9624 + .0376×.0033.9263
raw 혼합셀 .4042와 전이 .9263의 log-odds를 90:10으로 혼합.4760
isotonic 보정과거 OOF에서 배운 단조 계단 적용.5976
사용자용 변환탈 확률 = 1 - 만석 확률.4024

전이 갈래만 보면 만석 지속 위험이 높다. 셀 갈래는 그보다 낮다. 10%만 섞었는데도 raw가 .4042에서 .4760으로 올랐다. 보정기는 이 raw 구간이 과거에 실제 만석으로 더 자주 이어졌다고 보고 .5976으로 올렸다.

Q. 프로토타입의 검열과 무엇이 다른가?

같은 “검열”이라는 말이 같은 계산을 뜻하나? 아니다.

프로토타입구간 검열 반영 모형
좌석 변화 관측쌍의 양끝 중 하나가 0석이면 수요 숫자를 버리고 censoredWeight만 올렸다.폴링 사이에 못 본 중간 통과의 F/A를 잠재 상태로 두고 양끝 우도에 넣는다.
화면의 탑승률은 정류장×시간 셀의 1-zeroCount/samples였다. 차량별 좌석 예보와 다른 계산이었다.출발 후 만석확률 하나를 내고, 사용자용 탈 확률은 1-p_full로만 바꾼다.
좌석값을 도착 전과 처리 후 의미로 섞어 읽는 경로가 있었다.내 정류장 도착값은 금지한다. 출발 이후 0만 만석 라벨이다.
확률 보정층이 없었다.날짜 순방향 OOF로 isotonic을 학습한다. validation 라벨은 보지 않는다.
중간 상태 전이표가 없었다.T^k가 가능한 중간 상태 경로를 합산한다. 점 통과시각과 가짜 행은 만들지 않는다.

계승한 원칙도 있다. -1과 0을 가르고, 보지 못한 값을 사실처럼 만들지 않는다. 달라진 점은 못 본 사건을 경고 숫자로만 남기지 않고 학습 우도에 직접 넣었다는 데 있다.

M3 연구 이력 — 2026-08-15 동결

이 구역의 값은 동결된 연구·평가 기록이다. 당시 문장에 '최신'이나 '권위값'이라 적혀 있어도 오늘 성적을 뜻하지 않으며, 위 값과 합치거나 변화율로 계산하지 않는다.

Brier0.0053ECCE-MAD0.0344log loss0.04401:1 결정비용0.00422:1 결정비용0.00844:1 결정비용0.0079
M3 권위값

직접 API 응답 582개를 고정해 train 604행·만석 28건, validation 1,901행·만석 8건·날짜 1일로 나눴다.

모델 7개를 paired bootstrap 5,000회와 Holm 21쌍으로 비교했다. 결정은 no_winner, 승자 없음이다. 최소 관문은 validation 날짜 10일·만석 100건이다.

validation 양성 20건 미만이면 만석 누락률·PR-AUC·ROC-AUC 수치를 억제한다. 아래 M1·M2 수치는 역사 기록이며 최신 결론과 섞지 않는다.

M3 직접 수집분 성적

68/32 이동 분할이 아니라 M2 마지막 응답 뒤의 고정 미래구간을 썼다. 검증 1,901행·만석 8건· 하루·정류소×날짜 129군집, paired_station_id_x_query_date_cluster_bootstrap 5,000회다.

E · 못 본 것도 세기 · raw

운영 후보 · M3 고정 미래구간 기술값 · 낮을수록 좋음

지표값 (95% 구간)
Brier · 얼마나 빗나갔나0.0053[0.0023, 0.0094]
ECCE-MAD · 확률 오차가 쌓이나0.0344[0.0283, 0.0412]
log loss · 확신하고 틀린 벌점0.0440[0.0329, 0.0576]
만석 누락 @ .5 · 만석을 안심으로 놓쳤나만석 20건 미만 · 수치 억제
1:1 결정비용 @ .500.0042[0.0000, 0.0099]
2:1 결정비용 @ .330.0084[0.0000, 0.0199]
4:1 결정비용 @ .200.0079[0.0000, 0.0196]

F · 못 본 것도 세기 + 숫자 다듬기 (raw fallback)

운영 후보 · M3 고정 미래구간 기술값 · 낮을수록 좋음

지표값 (95% 구간)
Brier · 얼마나 빗나갔나0.0053[0.0023, 0.0094]
ECCE-MAD · 확률 오차가 쌓이나0.0344[0.0283, 0.0412]
log loss · 확신하고 틀린 벌점0.0440[0.0329, 0.0576]
만석 누락 @ .5 · 만석을 안심으로 놓쳤나만석 20건 미만 · 수치 억제
1:1 결정비용 @ .500.0042[0.0000, 0.0099]
2:1 결정비용 @ .330.0084[0.0000, 0.0199]
4:1 결정비용 @ .200.0079[0.0000, 0.0196]
승자는 없다

동결 당시 표본은 validation 날짜 1/10일 (미달), 만석 8/100건 (미달)이다. 만석 민감 지표는 양성 20건부터 숫자를 내며 동결 시점에는 수치 억제였다. 관문은 검토 최소선이지 충분조건이 아니다.

모델별 보정 관문은 미달 — 적격 적용 0/3개 · raw fallback 5,703행이다. 비억제 모델쌍×지표 bootstrap 유효비율 최소값은 100.0%(기준 90%), 운영 후보 비용 방향 뒤집힘은 0/15쌍이다. 마지막 세 날짜 누적 Brier도 승자 전에 확인한다.

하루 조건부 기술 구간과 Holm 계산상 0을 벗어난 Brier 쌍은 10/21쌍이지만 날짜 일반화나 우열 판정이 아니다. 최종 판정은 0/21쌍이다. 만석 8건이면 누락률이 한 사건당 12.5%p 움직인다. PR-AUC·ROC-AUC도 만석 20건 미만이면 억제하며 순위에 쓰지 않는다.

1–4일은 관측 날짜 안 조건부 기술값, 5–9일은 진단 기술값이다. 검증 10일부터도 모든 관문을 통과해야 추론과 승자 선언을 검토한다. 경로·수집구간·날짜·라벨 규칙·관측간격 다섯 축은 한 축씩 기록하고 90초 초과는 검열한다. ECCE 동률은 독립 동결 nonce의 SHA-256 순서로 재현하고 전 행 누적곡선을 남긴다. 이번 재실행은 registry 후보 3,054건 중 기존 nonce 3,054건을 재사용했고 신규는 0건이다.

보정은 이름이 아니라 실제 예측 출처로 판정한다. 이 페이지 변형의 적격 적용은 0/1개, raw fallback은 1,901행이다. 모델별 순방향 fold·실제 calibrated prediction·raw fallback 0행을 모두 확인하기 전에는 보정 우위를 말하지 않는다.

이전 공개 평가

eval-20260815-f0f59cf25a9c3503은 2,894행 · 만석 23건 · 비만석 2,871건 · 관측일 1일의 잠정 기록이며, 이 모델에 보정층을 적용한 행은 0행이었다.

평가평가 규격모델 버전행Brier
eval-20260815-f0f59cf25a9c3503evaluation-v2interval-censored-v2+cca34cdb2,8940.010012
eval-20260815-7e03dc730de91f34evaluation-v1interval-censored-v1+fbebba552,8940.010010
출처와 검증 장부