느낌을 데이터로 바꾸기 — 신고 버튼의 설계
두 요구가 충돌한다
사람의 판단을 데이터로 받으려면 신고 기능이 필요하다. 그런데 이 설계에는 정면으로 충돌하는 두 요구가 있다.
요구 1 — 운전 중에 쓸 수 있어야 한다. 위험을 느끼는 순간은 운전 중이다. 화면을 보고 항목을 고르고 입력하는 일은 불가능하다. 위험하고, 실제로 아무도 안 한다.
요구 2 — 쓸모 있는 정보를 남겨야 한다. 그냥 “여기 이상함”만으로는 부족하다. 8편에서 봤듯 파인 곳과 과속방지턱은 신호가 비슷하다. 무엇이었는지 구분되지 않으면 기계가 배울 수 없다.
첫 요구는 입력을 줄이라고 하고, 둘째 요구는 정보를 더 받으라고 한다.
해결의 열쇠는 시간 분리
이 충돌을 푼 방식은 입력을 두 시점으로 나누는 것이었다.
주행 중에는 표시만 한다. 버튼 하나. 무엇이 이상했는지 묻지 않는다. 그냥 “지금 여기”를 찍는다.
나중에 분류한다. 정차했거나 운전이 끝난 뒤, 아까 찍은 지점들이 목록으로 나타난다. 그때 하나씩 “파인 곳이었다 / 방지턱이었다 / 물컹했다”를 고른다.
이러면 두 요구가 다 만족된다. 주행 중 부담은 버튼 한 번이고, 정보는 나중에 채워진다.
그리고 이게 가능한 이유는 데이터가 이미 기록되고 있기 때문이다. 버튼을 누른 시점의 가속도 신호는 폰에 남아 있다. 분류는 나중에 붙여도 그 신호에 연결된다.
버튼 하나를 어디에 두나
버튼 하나라도 운전 중에 누르기는 쉽지 않다. 몇 가지 방법을 검토했다.
화면의 큰 버튼 — 거치대에 폰이 있고 화면이 켜져 있어야 한다. 조건이 맞으면 가장 쉽다.
볼륨 버튼 — 화면을 보지 않고 손끝 감각으로 누를 수 있다. 폰이 가방에 있어도 된다. 다만 다른 앱과 충돌할 수 있다.
음성 — “이상해” 한마디. 손을 쓰지 않아 가장 안전하다. 대신 인식 실패와 오작동이 있고, 배터리를 더 쓴다.
자동 감지 + 사후 확인 — 큰 충격이 감지되면 시스템이 자동으로 표시하고, 나중에 사용자가 확인하거나 지운다.
마지막 방식이 흥미롭다. 사용자가 아무것도 하지 않아도 후보가 쌓인다. 그리고 사후 확인 단계에서 사람의 판단이 붙는다.
다만 자동 감지만으로는 부족하다. 우리가 결국 찾으려는 “물컹함”은 자동 감지의 임계값에 걸리지 않을 정도로 미약하기 때문이다. 그건 사람이 직접 표시해야만 잡힌다.
그래서 둘 다 쓴다. 자동 감지로 명백한 충격을 모으고, 수동 버튼으로 사람만 아는 미세한 이상을 모은다. 후자가 훨씬 적게 모이겠지만, 2단계 학습에는 그게 더 귀하다.
사후 분류를 어떻게 받을까
여기서 또 하나의 설계 문제가 있다. 분류 항목을 몇 개로 할까.
항목이 많으면 정보는 풍부해지지만 아무도 끝까지 채우지 않는다. 적으면 채우기 쉽지만 구분이 안 된다.
우리가 정한 기준은 “기계가 구분해야 할 것만 묻는다”였다.
8편의 목록을 다시 보면, 신호가 비슷해서 반드시 갈라야 하는 짝이 있다.
- 파인 곳 vs 과속방지턱 — 둘 다 짧고 강한 펄스. 반드시 구분 필요
- 일회성 충격 vs 지속되는 이상함 — 성질이 완전히 다르다. 반드시 구분 필요
- 도로 문제 vs 내 차 문제 — 타이어 공기압 같은 것. 걸러내야 한다
반면 굳이 안 물어도 되는 것도 있다. 파인 곳의 깊이나 크기는 사람이 정확히 모르고, 신호에서 추정하는 게 낫다.
그래서 최소한의 항목만 남겼다. 무엇이었나(파인 곳 / 방지턱 / 물컹함 / 기타), 그리고 얼마나 이상했나(약간 / 뚜렷).
두 항목이면 탭 두 번이다. 그 정도는 채워진다.
위치라는 까다로운 문제
신고에는 위치가 붙어야 한다. 그런데 이게 생각보다 어렵다.
GPS 오차. 도심에서 GPS는 수 미터에서 수십 미터까지 틀린다. 건물 사이나 고가 아래에서는 더 심하다.
사람의 반응 지연. 이상함을 느낀 순간과 버튼을 누른 순간 사이에 시간이 있다. 시속 40km면 1초에 11미터를 간다. 반응이 2초 늦으면 22미터 뒤에 표시가 찍힌다.
차선. 같은 지점이라도 어느 차선인지에 따라 노면 상태가 다르다. GPS로는 차선을 구분할 수 없다.
이 문제들을 완전히 해결할 방법은 없다. 대신 두 가지로 완화한다.
첫째, 신호에서 역추적한다. 버튼을 누른 시점보다 조금 앞의 가속도 기록을 본다. 그 구간에 뚜렷한 충격이 있으면 그 시점이 실제 위치일 가능성이 높다. 사람의 지연을 신호로 보정하는 방식이다.
둘째, 점이 아니라 구간으로 다룬다. “여기”를 한 점으로 보지 않고 몇십 미터 구간으로 본다. 정확도가 떨어지는 대신, 여러 사람의 신고가 같은 구간에 모이는지를 판단할 수 있다.
두 번째가 중요하다. 개별 위치의 정확도를 포기하고, 대신 여러 신고의 중첩을 본다. 이건 지금까지 계속 나온 원리 — 정밀도를 반복으로 대체하는 것 — 의 또 다른 적용이다.
남는 문제
여기까지 하면 신고 데이터가 쌓이기 시작한다. 그런데 이 데이터에는 근본적인 약점이 있다.
틀린 신고가 섞여 있다. 착각, 오작동, 내 차 문제를 도로 탓한 것, 그리고 장난.
그리고 우리는 어느 것이 틀렸는지 알 방법이 없다. 정답을 아는 사람이 없기 때문이다.
이 문제를 어떻게 다루느냐가 이 프로젝트의 성패를 가른다. 신고가 신뢰할 수 없다면 그 위에 쌓는 모든 것이 무너진다.
답은 한 건씩 검증하지 않는 것이다. 개별 신고의 진위를 판단하려 하지 않고, 신고들 사이의 관계를 본다. 다음 편의 주제다.
다음 편 예고 — 동네에 깃발을 꽂다. 신고가 지도 위에 모이면 무엇이 보이는지, 그리고 그것이 왜 개별 신고보다 강한지 이야기한다.
「우리 동네가 먼저 안다」는 5부 30편으로 이어집니다. 지금 읽은 글은 2부 사람이 먼저의 3번째(전체 제9회)입니다.