대니
danny's blog@dannywon_dev
발행 73 · 대기 93

1인 개발자. 클로드 코드를 팀처럼 굴린다. 매일 겪은 것만 쓴다.

제품 만들기

QR 스캔 47회는 이상치가 아니었다

전시 앱 통계에서 튀는 값을 걸러내려다, 제일 열심히 본 관람객을 지울 뻔했다

집계 화면에 혼자 튀는 숫자가 하나 있으면 대개 오염을 의심하게 된다. 나머지가 전부 한 자리인데 하나만 두 자리면 더 그렇다.

전시장에서 쓰는 앱의 방문 통계를 들여다봤다. 화면에는 이렇게 떠 있었다.

스캔    433회
관람객  125명

사람별로 몇 번 찍었는지 세어 봤다.

1회만    68명
2~5회    44명
6회 이상 13명
최대     47회   ← ?

39점짜리 전시에서 한 사람이 47번을 찍었다. 바로 결론을 냈다. 관람객이 이럴 리 없고, 직원이 확인했거나 우리가 시험한 거라고. 그리고 통계에서 걸러낼 방법을 설계하기 시작했다. 직원 계정으로 로그인한 브라우저를 찾아 빼는 식으로.

거르개를 만들려니 확인이 필요했다

걸러내려면 그 47회가 정말 직원인지부터 알아야 했다. 그 줄을 열어봤다.

47회 · 31개 작품 · 하루 · 모바일 · 로그인 안 함

39점 중 31점을 찍으며 돈 사람이었다. 직원 계정으로 로그인한 흔적도 없고, 하루 안에 끝났고, 폰이었다.

바로 아래 줄들이 더 분명했다.

27회 · 27개 작품    ← 1작품당 딱 1회
25회 · 25개 작품

작품마다 QR 을 찍으며 전시장을 한 바퀴 돈 것이다.

같은 47이 정반대 뜻이 된다

숫자만 보면 47은 분명히 튄다. 나머지 대부분이 1~5인데 혼자 47이다. 분포로만 보면 이상치가 맞다. 내가 놓친 건 그 숫자가 무엇의 개수인지였다.

  • 「몇 번 눌렀나」로 읽으면 — 47번은 비정상이다. 뭔가 자동으로 반복됐거나, 같은 걸 계속 새로고침했거나
  • 「몇 작품을 봤나」로 읽으면 — 47번 중 31개가 서로 다른 작품이다. 전시를 제일 열심히 본 사람이다

가르는 건 통계 지식이 아니라 그 줄을 한 번 열어보는 것이었다.

더 고약한 건 방향이다. 이상치를 지우는 처방은 조용히 성공한다. 거르개를 넣었으면 숫자는 깔끔해졌을 테고, 분포도 예뻐졌을 테고, 아무 경고도 안 떴을 것이다. 그리고 제일 관심 높은 관람객 13명이 통계에서 사라졌다는 건 영영 몰랐을 것이다.

이 서비스에서 그 13명은 후보 구매자다. 지우면 안 되는 정도가 아니라 찾아내서 따로 보여줘야 하는 사람들이다.

그래서 뭘 바꿨나

거르개는 안 만들었다. 대신 실제로 부풀려진 게 얼마인지만 다시 셌다.

433회 → 379회   (12%)
125명 → 123명   (1.6%)

정체는 둘이었다. 짧은 시간 안에 같은 작품을 다시 연 것 42회, 직원 브라우저 두 개가 찍은 13회. 처음에 겨냥했던 47회는 거기 없었다.

작업 방향도 뒤집혔다. 원래는 「부풀려진 숫자를 깎는 일」이었는데 「안 보이던 사람을 드러내는 일」이 됐다.

39점 중 31점을 본 사람   →  관람객 1명
1점만 보고 나간 사람      →  관람객 1명
                             ↑ 화면에선 똑같이 1명

버릇 하나가 남았다. 이상치를 지우기로 결정하기 전에 그 줄을 한 번 연다. 집계된 숫자만 보면 튀는 값은 전부 오염처럼 보이는데, 원본 한 줄에는 대개 그렇게 된 이유가 적혀 있다. 여기선 「본 작품 수」라는 칸 하나가 그 답이었다.

그리고 분포에서 벗어난 값이 곧 잘못된 값은 아니다. 평균적인 사용자를 보려면 이상치를 빼는 게 맞지만, 가장 열심인 사용자를 찾는 중이라면 이상치가 곧 답이다. 무엇을 하려는지에 따라 같은 값이 잡음도 되고 신호도 된다.

← 목록으로