누구의 신고를 믿을 것인가 — 신뢰 점수
두 개의 점수
지금까지 나온 이야기를 실제 계산 구조로 정리하면, 점수가 두 개 필요하다.
사용자 점수 — 이 사람의 판단에 얼마나 무게를 둘까 지점 점수 — 이 구간이 얼마나 주목할 만한가
그리고 둘은 서로를 참조한다. 신뢰받는 사용자가 표시한 지점은 점수가 높아지고, 나중에 인정받은 지점을 먼저 표시했던 사용자는 점수가 올라간다.
이 상호 참조가 이 설계의 핵심이면서 동시에 가장 위험한 부분이다. 잘못 돌면 서로를 강화하며 편향이 굳는다.
지점 점수는 무엇으로 만드나
10편에서 두 축을 이야기했다. 겹침과 시간 변화. 여기에 두 가지를 더한다.
① 독립적 신고 수. 서로 다른 사용자가 몇 명 표시했는가. 같은 사람이 열 번 표시한 것은 한 명으로 센다. 이게 겹침의 실체다.
② 시간 추세. 최근에 늘고 있는가. 꾸준한 것은 구조물이고, 늘어나는 것이 우리 목표다.
③ 신호 뒷받침. 그 지점을 지나간 주행들의 신호에 공통된 이상이 있는가. 신고가 없는 통과의 신호까지 포함해서 본다.
④ 알려진 구조물 제외. 과속방지턱·건널목·맨홀 위치와 겹치면 크게 감점한다.
이 네 항목의 조합으로 지점 점수를 만든다. 그리고 중요한 원칙이 하나 있다.
점수는 “위험도”가 아니라 “확인 우선순위”다. 11·12편에서 반복한 이야기다. 우리는 위험을 판정할 수 없다. 어디를 먼저 보라고 말할 수 있을 뿐이다.
사용자 점수는 무엇으로 만드나
12편에서 세 기준을 이야기했다. 정리하면 이렇다.
① 일치도. 이 사람의 신고가 다른 사람들의 신고와 겹친 비율.
② 구간 친숙도. 그 구간을 반복해서 지났는가. 기준선을 가진 사람의 판단이 무겁다.
③ 신호 정합성. 이 사람의 신고에 실제로 신호 이상이 따라왔는가. 오작동이나 습관적 오조작을 걸러낸다.
그리고 12편에서 지적한 편향 위험 — 최초 발견자가 불리해지는 문제 — 에 대한 대응을 구조에 넣는다.
소급 보상. 어떤 지점이 나중에 여러 사람에게 인정받으면, 그 지점을 가장 먼저 표시했던 사용자에게 큰 가중치를 준다. 늦게 동조한 사람보다 먼저 발견한 사람이 더 많이 얻는다.
이 규칙이 없으면 시스템은 다수 동조자를 우대하고, 그러면 새로운 발견이 억제된다.
세 가지 안전장치
이 구조가 폭주하지 않게 하는 규칙을 정해뒀다.
1. 신고를 버리지 않는다
낮은 점수의 사용자 신고도 저장하고 집계에 포함한다. 무게만 낮춘다.
이유는 12편에서 말한 대로다. 걸러내기 시작하면 시스템이 자기가 이미 아는 것만 본다. 새로운 유형의 이상을 처음 표시하는 사람은 대개 기존 패턴과 안 맞고, 그래서 점수가 낮을 수 있다.
2. 점수 범위를 제한한다
사용자 점수가 무한히 벌어지지 않게 상한과 하한을 둔다. 아무리 신뢰받는 사용자라도 혼자서 지점 점수를 끌어올릴 수는 없다.
한 사람이 결정할 수 없게 만드는 것. 이게 집단 판단 시스템의 기본 안전장치다.
3. 사후 확인이 다른 모든 것을 덮어쓴다
실제로 함몰이 발생했거나, 정밀 조사에서 공동이 확인되었거나, 보수 기록이 나온 경우. 이런 외부 사실이 들어오면 그것이 최우선이다.
그리고 그 사실을 기준으로 관련된 모든 점수를 재계산한다. 그 지점을 표시했던 사람들의 점수가 오르고, 시스템이 그 지점을 낮게 평가했다면 왜 그랬는지가 기록된다.
이 외부 사실이 유일한 진짜 정답이다. 그리고 드물다. 그래서 초기에는 시스템 전체가 정황에 의존한다. 이 한계를 감추지 않는 것이 중요하다.
개인정보라는 문제
여기서 반드시 짚어야 할 것이 있다. 이 시스템은 누가 언제 어디를 지났는지를 다룬다. 이동 경로 데이터다.
민감하다. 매일의 출퇴근 경로는 집과 직장을 드러낸다.
그래서 설계 원칙을 정해뒀다.
- 개별 경로를 저장하지 않는다. 신고 지점과 그 주변 짧은 구간의 신호만 남기고, 그 사이의 이동은 버린다.
- 집계 단위로만 다룬다. “이 구간에 몇 명이 표시했다”까지만 남기고 누구인지는 분리한다.
- 사용자 점수는 식별자에 붙이지 않는다. 점수 계산에 필요한 최소 정보만 유지한다.
- 기여 이력을 본인이 지울 수 있게 한다.
이 원칙들은 데이터의 품질을 일부 희생한다. 전체 경로가 있으면 차량 지문을 더 정확히 파악할 수 있고, 사용자 이력이 길수록 점수가 정확해진다. 그런데 그건 가져도 되는 데이터가 아니다.
앞으로 실제 서비스로 만들 때 이 부분이 가장 신중해야 할 영역이다.
2부를 정리하며
일곱 편에 걸쳐 하나를 다뤘다. 정답이 없는 상태에서 어떻게 신뢰를 만드나.
답은 세 겹이었다.
- 겹침 — 흩어지는 오류와 모이는 실재를 구분한다
- 변화 — 꾸준한 구조물과 새로 생긴 이상을 구분한다
- 이력 — 사람과 지점에 무게를 매기되, 아무것도 버리지 않는다
그리고 이 셋으로 얻는 것은 판정이 아니라 우선순위다. 어디를 먼저 확인할지.
여기까지가 1단계다. 사람이 판단하고, 사람의 판단끼리 검증하고, 그 결과로 목록을 만드는 단계. 이건 지금 만들 수 있고, 지금 쓸모가 있다.
그리고 이 단계가 돌아가는 동안 무엇이 쌓이는가. 사람의 판단이 붙은 신호 기록이다. 어떤 구간의 신호에 “여기 이상함”이라는 이름표가 달린 데이터.
이게 2단계의 재료다. 기계가 배울 수 있는 형태의 데이터.
3부에서는 그 신호 자체로 들어간다. 가속도 기록에서 무엇을 어떻게 읽어낼 수 있는지, 도심 주행의 소음 속에서 미약한 신호를 어떻게 건져 올리는지.
다음 편 예고 — 진동은 무엇을 말하는가. 3부의 시작. 흔들림이라는 물리 현상에 어떤 정보가 담기는지, 그것을 숫자로 어떻게 다루는지 기초부터 짚는다.
「우리 동네가 먼저 안다」는 5부 30편으로 이어집니다. 지금 읽은 글은 2부 사람이 먼저의 7번째(전체 제13회)입니다.