무리에서 벗어난 점을 발견하는 일
앞 장에서 우리는 데이터의 전체 모양을 보는 법을 배웠습니다. K-means는 비슷한 데이터끼리 무리를 만들었고, PCA는 특징이 많은 데이터를 사람이 볼 수 있는 적은 축으로 눌러 주었습니다. 이제 자연스럽게 이런 질문이 생깁니다.
"그렇다면 무리에서 벗어난 데이터는 무엇일까?"
예를 들어 한 온라인 쇼핑몰의 고객 구매 데이터를 떠올려 봅시다. 대부분의 고객은 한 달에 1만 원에서 20만 원 정도를 씁니다. 그런데 어떤 고객이 새벽 3시에 5분 간격으로 300만 원짜리 상품권을 여러 번 구매했습니다. 이 데이터는 평범한 구매 패턴과 다릅니다. 단순히 큰손 고객일 수도 있지만, 도난당한 카드로 결제한 사기 거래일 수도 있습니다.
공장 센서 데이터도 마찬가지입니다. 기계의 온도는 보통 60도에서 75도 사이를 오가는데, 어느 순간 130도로 치솟았습니다. 센서가 고장 났을 수도 있고, 실제로 설비가 위험한 상태일 수도 있습니다. 어느 쪽이든 그냥 지나치면 안 됩니다.
이처럼 이상치 탐지는 데이터 속에서 보통의 패턴과 크게 다른 값을 찾아내는 일입니다. 영어로는 anomaly detection 또는 outlier detection이라고 부릅니다. 여기서 중요한 점은 이상치가 항상 나쁜 데이터라는 뜻은 아니라는 것입니다. 이상치는 때로는 잘못 입력된 값이고, 때로는 시스템 오류이며, 때로는 돈을 벌 기회나 위험을 알려 주는 귀중한 신호입니다.
머신러닝에서 이상치 탐지가 흥미로운 이유는 바로 여기에 있습니다. 대부분의 모델은 "일반적인 패턴"을 잘 배우려 합니다. 하지만 현실에서는 일반적인 것보다 드문 사건이 훨씬 중요할 때가 많습니다. 사기 거래, 서버 장애, 제조 불량, 보안 침입, 갑작스러운 고객 이탈 조짐은 모두 자주 일어나지 않지만 놓치면 큰 비용이 발생합니다.
이상치 탐지는 드문 것을 찾는 기술입니다. 그리고 드문 것을 찾는 일은 생각보다 어렵습니다.

이상치는 쓰레기일까, 보석일까
처음 데이터 분석을 할 때 많은 사람이 이상치를 보면 곧바로 "지워야 하나?"라고 생각합니다. 실제로 지워야 하는 경우도 있습니다. 사람의 나이가 999세로 입력되어 있다면 거의 확실히 잘못된 데이터입니다. 상품 가격이 -10,000원이라면 입력 과정에서 문제가 생겼을 가능성이 큽니다. 센서 값이 비어 있는데 시스템이 이를 임시로 -999로 저장했다면, 그 값은 실제 측정값이 아닙니다.
하지만 모든 이상치를 쓰레기통에 넣어서는 안 됩니다. 은행 거래 데이터에서 평소와 다른 거액 송금은 사기 탐지의 핵심 단서일 수 있습니다. 병원 검사 데이터에서 극단적으로 높은 수치는 중대한 질병의 징후일 수 있습니다. 서비스 로그에서 갑자기 늘어난 오류 메시지는 장애가 터지기 직전의 신호일 수 있습니다.
이상치에는 적어도 두 얼굴이 있습니다.
입력 오류나 센서 고장처럼 분석을 방해하는 잡음
사기, 장애, 불량처럼 반드시 찾아야 하는 위험 신호
새로운 고객 행동이나 시장 변화처럼 기회를 알려 주는 변화 신호
기존 모델이 아직 배우지 못한 새로운 패턴
따라서 이상치 탐지의 첫 번째 원칙은 "이상하니까 제거한다"가 아닙니다. 더 정확히는 "왜 이상한지 먼저 묻는다"입니다.
예를 들어 집값 예측 모델을 만든다고 해 봅시다. 대부분의 집은 2억 원에서 15억 원 사이인데, 데이터에 200억 원짜리 주택이 들어 있습니다. 이 값이 잘못 입력된 20억 원일 수도 있습니다. 하지만 실제 초고가 주택일 수도 있습니다. 만약 일반적인 아파트 가격을 예측하는 모델을 만들고 있다면 이 데이터는 모델을 흔들 수 있으므로 제외하는 편이 나을 수 있습니다. 반대로 고급 주택 시장을 분석하는 것이 목적이라면 이 데이터는 매우 중요한 샘플입니다.
이처럼 이상치의 의미는 데이터 자체만 보고 결정할 수 없습니다. 언제나 문제의 목적과 함께 봐야 합니다.
무엇이 '이상하다'는 뜻일까
이상치 탐지는 단순히 "값이 크다" 또는 "값이 작다"를 찾는 일이 아닙니다. 어떤 데이터가 이상한지는 주변 상황에 따라 달라집니다.
연봉 데이터에서 3억 원은 일반 직장인 데이터에서는 이상치일 수 있습니다. 하지만 대기업 임원이나 프로 운동선수 데이터에서는 평범한 값일 수 있습니다. 하루 방문자 10만 명은 작은 블로그에서는 폭발적인 수치지만, 대형 포털 서비스에서는 낮은 수치일 수 있습니다.
즉 이상함은 절대적인 기준이 아니라 맥락 속의 차이입니다. 머신러닝에서는 이 맥락을 데이터의 분포, 거리, 밀도 같은 개념으로 바라봅니다.
분포는 데이터가 어떤 범위에 얼마나 모여 있는지를 말합니다. 키 데이터를 보면 대부분의 사람은 평균 근처에 모이고, 아주 작거나 아주 큰 사람은 드뭅니다. 거리는 데이터 포인트끼리 얼마나 떨어져 있는지를 말합니다. 비슷한 고객은 가까이 있고, 전혀 다른 행동을 하는 고객은 멀리 있을 수 있습니다. 밀도는 어떤 지역에 데이터가 얼마나 빽빽하게 모여 있는지를 말합니다. 사람이 많이 모인 광장 한가운데 있는 점은 평범해 보이지만, 아무도 없는 들판에 혼자 떨어진 점은 이상해 보입니다.
이제 이상치를 판단하는 대표적인 직관 세 가지를 차례로 살펴보겠습니다. 통계적 기준, 거리 기반 방법, 밀도 기반 방법입니다.
통계적 기준: 평균에서 얼마나 멀리 떨어졌는가
가장 단순한 이상치 탐지 방법은 평균과 표준편차를 이용하는 것입니다. 평균은 데이터의 중심이고, 표준편차는 데이터가 평균 주변에 얼마나 퍼져 있는지를 나타내는 값입니다.
예를 들어 어떤 반의 수학 시험 점수 평균이 70점이고, 대부분의 학생이 60점에서 80점 사이에 있다면 72점은 평범합니다. 95점은 꽤 높은 점수지만 이상하다고 보기는 어려울 수 있습니다. 그런데 3점이나 150점이 있다면 이야기가 달라집니다. 3점은 매우 낮고, 150점은 시험 만점이 100점이라면 불가능한 값입니다.
통계적 기준은 이런 식으로 생각합니다.
"대부분의 데이터가 이 정도 범위 안에 있는데, 이 값은 그 범위에서 너무 멀리 떨어져 있지 않은가?"
자주 쓰는 방식 중 하나는 평균에서 몇 표준편차 이상 떨어진 값을 이상치로 보는 것입니다. 예를 들어 평균에서 3표준편차 이상 떨어진 값을 의심 대상으로 삼을 수 있습니다. 또 다른 방식은 사분위수를 이용하는 것입니다. 데이터를 작은 순서대로 세웠을 때 가운데 50%가 들어 있는 범위를 보고, 그 범위보다 지나치게 아래나 위에 있는 값을 이상치 후보로 봅니다.
이 방법은 직관적이고 빠릅니다. 특히 하나의 숫자 특징을 볼 때 유용합니다. 매출, 온도, 압력, 응답 시간, 구매 금액처럼 값의 범위가 어느 정도 안정적인 데이터에서는 꽤 좋은 출발점이 됩니다.
하지만 한계도 있습니다. 현실의 데이터가 항상 예쁜 종 모양으로 퍼지는 것은 아닙니다. 소득, 결제 금액, 웹사이트 방문 수처럼 일부 값이 아주 크게 튀는 데이터는 원래부터 한쪽으로 길게 늘어진 모양을 가질 수 있습니다. 이때 평균과 표준편차만 믿으면 정상적인 고액 고객을 이상치로 오해할 수 있습니다.
또 여러 특징이 함께 작용할 때는 단순한 통계 기준이 부족합니다. 어떤 사람의 나이만 보면 정상이고, 구매 금액만 봐도 정상인데, "13세 고객이 새벽에 수백만 원어치 상품권을 구매했다"는 조합은 이상할 수 있습니다. 하나하나의 값은 평범해도 조합이 이상한 경우가 있기 때문입니다.
통계적 기준은 이상치 탐지의 출발점입니다. 하지만 복잡한 데이터에서는 거리와 밀도의 감각이 필요합니다.
거리 기반 방법: 혼자 멀리 떨어져 있는가
거리 기반 이상치 탐지는 데이터 포인트 사이의 거리를 봅니다. 앞에서 배운 K-means를 떠올리면 이해하기 쉽습니다. K-means에서는 비슷한 데이터끼리 모이고, 각 군집에는 중심점이 있었습니다. 만약 어떤 데이터가 어떤 중심점에서도 멀리 떨어져 있다면 어떨까요? 그 데이터는 기존 무리와 잘 어울리지 않는 점일 가능성이 있습니다.
고객 데이터를 예로 들어 보겠습니다. 우리는 고객을 월 구매 횟수, 평균 결제 금액, 최근 접속일, 할인 쿠폰 사용 횟수 같은 특징으로 표현할 수 있습니다. 대부분의 고객은 몇 개의 무리를 이룹니다. 자주 조금씩 사는 고객, 가끔 크게 사는 고객, 쿠폰이 있을 때만 사는 고객처럼 말입니다.
그런데 어떤 고객은 모든 무리에서 멀리 떨어져 있습니다. 구매 횟수는 매우 많고, 결제 금액도 크며, 접속 시간대도 특이하고, 배송지는 계속 바뀝니다. 이 고객은 특별한 VIP일 수도 있고, 비정상적인 자동화 계정일 수도 있습니다. 거리 기반 방법은 이런 점을 "주변 데이터와 멀다"는 이유로 이상치 후보로 올립니다.
가장 단순한 아이디어는 가까운 이웃을 보는 것입니다. 어떤 데이터의 가장 가까운 이웃들이 모두 멀리 있다면, 그 데이터는 외딴섬처럼 떨어져 있는 셈입니다. 반대로 주변에 비슷한 데이터가 많다면 정상 패턴에 속한다고 볼 수 있습니다.
거리 기반 방법의 장점은 여러 특징을 함께 볼 수 있다는 것입니다. 나이, 구매 금액, 접속 빈도, 위치, 기기 정보처럼 여러 요소를 하나의 공간에 놓고 "다른 데이터와 얼마나 다른가"를 판단할 수 있습니다.
하지만 거리 기반 방법에도 조심할 점이 있습니다. 특징의 단위가 서로 다르면 거리 계산이 왜곡될 수 있습니다. 예를 들어 나이는 0에서 100 정도의 범위를 갖지만, 연소득은 수천만 원에서 수억 원까지 갑니다. 두 값을 그대로 거리 계산에 넣으면 연소득 차이가 모든 것을 압도할 수 있습니다. 그래서 거리 기반 방법을 쓸 때는 스케일링, 즉 특징의 크기 범위를 맞추는 전처리가 중요합니다.
또 특징이 너무 많아지면 거리의 의미가 흐려질 수 있습니다. 차원이 높아질수록 모든 점이 서로 멀어 보이는 현상이 생기기 때문입니다. 앞 장에서 차원 축소를 배운 이유가 여기서도 이어집니다. PCA 같은 방법으로 중요한 구조를 남기고 차원을 줄이면, 거리 기반 이상치 탐지를 더 이해하기 쉽게 만들 수 있습니다.
밀도 기반 방법: 사람이 드문 곳에 혼자 있는가
거리 기반 방법이 "얼마나 떨어져 있는가"를 본다면, 밀도 기반 방법은 "주변이 얼마나 빽빽한가"를 봅니다. 이 차이는 작아 보이지만 꽤 중요합니다.
도시 지도를 떠올려 봅시다. 서울 한복판에서는 사람들 사이의 거리가 매우 가깝습니다. 반면 시골길에서는 사람들 사이의 거리가 훨씬 멉니다. 서울에서 주변 10미터 안에 아무도 없다면 이상해 보일 수 있지만, 시골에서는 전혀 이상하지 않을 수 있습니다. 이상함은 절대 거리만으로 정해지지 않습니다. 그 지역의 밀도와 비교해야 합니다.
데이터도 마찬가지입니다. 어떤 군집은 아주 촘촘하게 모여 있고, 어떤 군집은 넓게 퍼져 있을 수 있습니다. 촘촘한 군집에서 조금만 벗어나도 이상해 보일 수 있지만, 원래 넓게 퍼진 군집에서는 같은 거리도 정상일 수 있습니다.
밀도 기반 방법은 이런 질문을 던집니다.
"이 데이터 주변에는 비슷한 데이터가 충분히 많은가?"
주변에 데이터가 거의 없다면 이상치일 가능성이 높습니다. 주변에 데이터가 많다면 정상 패턴에 가까울 가능성이 높습니다. 대표적인 밀도 기반 아이디어는 각 데이터 주변의 이웃 밀도를 계산하고, 그 밀도가 주변 데이터들의 밀도와 얼마나 다른지 비교하는 것입니다. 어떤 점은 전체적으로 보면 멀리 떨어져 있지 않아도, 자기 주변만 유독 텅 비어 있다면 이상치로 볼 수 있습니다.
이 방식은 실제 서비스에서 유용합니다. 예를 들어 서버 응답 시간 데이터를 봅시다. 평소에는 응답 시간이 100밀리초 근처에 몰려 있습니다. 트래픽이 많은 시간대에는 300밀리초 근처에 넓게 퍼질 수도 있습니다. 이때 단순히 300밀리초를 이상치로 보면 안 됩니다. 바쁜 시간대에는 정상일 수 있기 때문입니다. 하지만 같은 시간대, 같은 서버 그룹, 같은 요청 유형에서 특정 요청만 5초가 걸린다면 그건 의심해야 합니다.
밀도 기반 방법은 "전체 평균과 비교했을 때 이상한가?"보다 한 걸음 더 나아갑니다. "비슷한 상황에 있는 데이터들과 비교했을 때 이상한가?"를 묻습니다. 그래서 복잡한 현실 데이터에서 더 섬세한 판단을 할 수 있습니다.
라벨이 있는 이상 탐지와 라벨이 없는 이상 탐지
이상치 탐지는 지도학습일 수도 있고 비지도학습일 수도 있습니다. 이 차이는 라벨이 있느냐 없느냐에서 시작합니다.
라벨이 있는 경우를 먼저 봅시다. 카드 거래 데이터에 각 거래가 정상인지 사기인지 표시되어 있다면, 우리는 분류 모델을 만들 수 있습니다. 입력은 거래 금액, 시간, 위치, 가맹점 종류, 사용 기기 같은 특징이고, 라벨은 "정상" 또는 "사기"입니다. 이 경우 이상 탐지는 분류 문제에 가깝습니다. 모델은 과거에 사기로 판정된 거래의 패턴을 학습하고, 새 거래가 사기일 확률을 예측합니다.
하지만 이상 탐지에서는 라벨이 있는 경우에도 어려움이 큽니다. 이상 사건은 원래 드뭅니다. 정상 거래 100만 건 중 사기 거래가 100건뿐일 수도 있습니다. 이런 데이터를 그대로 학습하면 모델은 모든 거래를 정상이라고만 해도 정확도가 99.99%처럼 높아 보일 수 있습니다. 하지만 정작 중요한 사기 거래는 하나도 잡지 못합니다. 그래서 이상 탐지에서는 정확도 하나만 보면 위험합니다. 앞에서 배운 정밀도와 재현율의 관점이 특히 중요해집니다. 잘못 잡아내는 것도 문제지만, 놓치는 것은 더 큰 문제가 될 수 있기 때문입니다.
라벨이 없는 경우도 많습니다. 공장 센서 데이터에서 어떤 시점이 진짜 고장 직전이었는지 라벨이 없을 수 있습니다. 서비스 로그에서 어떤 요청이 장애의 원인이었는지 일일이 표시되어 있지 않을 수 있습니다. 고객 행동 데이터에서 어떤 패턴이 비정상인지 미리 알 수 없을 수도 있습니다.
이때는 비지도학습 방식으로 접근합니다. 먼저 대부분의 데이터가 이루는 정상 패턴을 파악합니다. 그런 다음 그 패턴에서 크게 벗어난 데이터를 이상치 후보로 찾습니다. 이 방식은 "정답을 맞힌다"기보다 "평소와 다른 것을 보여 준다"에 가깝습니다.
중간 형태도 있습니다. 정상 데이터는 많이 있지만 이상 데이터는 거의 없는 경우입니다. 예를 들어 정상적으로 작동하던 장비의 센서 기록은 충분히 있지만, 고장 데이터는 매우 적을 수 있습니다. 이때는 정상 패턴을 먼저 학습한 뒤, 그 정상 패턴과 맞지 않는 새 데이터를 이상으로 보는 접근을 사용할 수 있습니다. 이를 새로움 탐지, 즉 novelty detection이라고 부르기도 합니다.
정리하면 이상 탐지는 라벨의 상황에 따라 접근이 달라집니다.
정상과 이상 라벨이 충분히 있으면 분류 문제처럼 다룰 수 있습니다.
라벨이 거의 없으면 데이터의 구조에서 벗어난 점을 찾는 비지도학습으로 접근합니다.
정상 데이터만 많으면 정상 패턴을 학습한 뒤 그 밖의 데이터를 의심합니다.
중요한 것은 이상 탐지가 단일 알고리즘 이름이 아니라는 점입니다. 문제 상황에 따라 통계 기준을 쓸 수도 있고, 거리나 밀도 기반 방법을 쓸 수도 있으며, 지도학습 분류 모델을 쓸 수도 있습니다.
이상치 점수와 임계값
실무에서 이상치 탐지는 보통 "이상하다" 또는 "정상이다"를 바로 말하지 않습니다. 그 전에 이상치 점수를 계산합니다. 이상치 점수는 이 데이터가 얼마나 수상한지를 나타내는 숫자입니다.
예를 들어 카드 거래 하나에 대해 모델이 0에서 100 사이의 이상치 점수를 준다고 해 봅시다. 점수가 5라면 평범한 거래일 가능성이 큽니다. 점수가 80이라면 꽤 수상합니다. 점수가 99라면 즉시 확인해야 할 거래일 수 있습니다.
그다음 필요한 것이 임계값입니다. 임계값은 "몇 점 이상부터 이상으로 볼 것인가"를 정하는 기준입니다. 임계값을 낮게 잡으면 더 많은 이상치를 잡을 수 있습니다. 하지만 정상 데이터도 많이 걸려 들어옵니다. 임계값을 높게 잡으면 경고 수는 줄어들지만, 진짜 이상을 놓칠 수 있습니다.
이 균형은 문제마다 다릅니다. 쇼핑몰 추천 시스템에서 특이한 취향의 고객을 조금 잘못 분류하는 것은 큰 문제가 아닐 수 있습니다. 하지만 병원에서 위험 신호를 놓치거나, 금융 시스템에서 대규모 사기 거래를 놓치는 것은 심각합니다. 반대로 너무 많은 경고를 만들면 사람이 모두 확인할 수 없어 시스템이 무용지물이 되기도 합니다.
이상치 탐지에서 임계값은 단순한 숫자가 아닙니다. 비즈니스 비용과 위험을 반영한 결정입니다. 정상인데 이상으로 잘못 판단했을 때의 비용, 이상인데 정상으로 놓쳤을 때의 비용, 사람이 확인할 수 있는 하루 처리량까지 함께 고려해야 합니다.
머신러닝 모델이 점수를 만들 수는 있습니다. 하지만 그 점수를 어디서 잘라 행동으로 옮길지는 사람과 조직의 판단이 필요합니다.
이상치를 발견한 뒤 해야 할 일
이상치를 찾았다고 일이 끝나는 것은 아닙니다. 오히려 진짜 중요한 일은 그다음입니다. 이상치를 어떻게 다룰지 결정해야 합니다.
첫 번째 선택지는 제거입니다. 명백한 입력 오류, 중복 데이터, 측정 장비의 오작동, 결측값을 임시 숫자로 채운 값처럼 분석 목적과 무관한 데이터는 제거하거나 수정하는 편이 좋습니다. 집값 예측 데이터에서 면적이 0㎡인 집, 나이가 -5세인 고객, 존재하지 않는 날짜의 거래는 모델에 넣기 전에 정리해야 합니다.
두 번째 선택지는 별도 분석입니다. 이상치가 잘못된 값이 아니라 중요한 사건일 수 있다면, 일반 데이터와 섞어서 평균을 내기보다 따로 살펴보는 것이 좋습니다. 고액 구매 고객, 급격히 증가한 서버 오류, 갑자기 이탈한 우수 고객, 특정 공정에서만 발생한 불량품은 별도의 분석 대상입니다. 이들은 전체 평균을 흐리는 잡음이 아니라, 오히려 문제 해결의 출발점일 수 있습니다.
세 번째 선택지는 모델의 타깃으로 삼는 것입니다. 사기 거래 탐지, 장애 예측, 불량품 판정, 보안 침입 탐지처럼 이상 사건 자체가 우리가 찾고 싶은 대상이라면 이상치를 제거하면 안 됩니다. 이 경우 이상치는 모델이 배워야 할 핵심 라벨입니다. "이상한 데이터"가 곧 "정답 데이터"가 되는 셈입니다.
결국 이상치를 어떻게 처리할지는 다음 질문으로 결정할 수 있습니다.
이 값은 현실적으로 가능한 값인가?
분석 목적에 도움이 되는 신호인가, 방해되는 잡음인가?
같은 패턴이 반복해서 나타나는가, 단 한 번의 입력 실수인가?
이 데이터를 제거하면 모델이 더 잘 일반화하는가, 중요한 사건을 놓치는가?
여기서도 머신러닝의 기본 구조는 변하지 않습니다. 데이터를 준비하고, 특징을 만들고, 모델이나 기준이 판단하고, 실제 결과와 비교하며, 더 나은 기준으로 고쳐 갑니다. 이상치 탐지는 이 구조에서 "보통과 다른 데이터"에 돋보기를 대는 과정입니다.
이상치 탐지는 도메인 지식과 함께 움직인다
이상치 탐지는 알고리즘만으로 완성되지 않습니다. 데이터가 만들어진 현장을 이해해야 합니다.
예를 들어 새벽 시간대의 고액 결제는 일반 쇼핑몰에서는 수상해 보일 수 있습니다. 하지만 해외 고객이 많은 면세점 서비스라면 정상일 수 있습니다. 서버 CPU 사용률이 95%인 것은 평소에는 위험 신호일 수 있지만, 대규모 이벤트 기간에 미리 계획된 부하 테스트라면 예상된 현상일 수 있습니다. 공장 온도가 갑자기 오른 것도 고장일 수 있지만, 특정 공정 단계에서는 원래 온도가 올라가는 것이 정상일 수 있습니다.
데이터만 보면 이상한데 현장을 알면 정상인 경우가 있고, 데이터만 보면 정상인데 현장을 알면 위험한 경우도 있습니다. 그래서 좋은 이상치 탐지 시스템은 보통 모델과 사람의 협업으로 만들어집니다. 모델은 수많은 데이터 속에서 수상한 후보를 빠르게 찾아냅니다. 사람은 그 후보가 실제로 위험한지, 의미 있는 변화인지, 단순한 예외인지 판단합니다. 그리고 그 판단 결과가 다시 데이터로 쌓이면 모델은 더 똑똑해집니다.
이 과정은 보안 관제, 금융 사기 탐지, 제조 품질 관리, 의료 모니터링, 클라우드 장애 감지 같은 분야에서 반복됩니다. 모델이 모든 답을 내리는 것이 아니라, 사람이 봐야 할 곳을 좁혀 주는 역할을 합니다.
작은 예: 고객 구매 데이터에서 이상치 찾기
간단한 예를 하나 만들어 봅시다. 어떤 쇼핑몰이 고객의 월간 행동을 분석하고 있습니다. 특징은 월 구매 횟수, 평균 결제 금액, 쿠폰 사용률, 최근 접속 일수라고 하겠습니다.
대부분의 고객은 세 부류로 나뉩니다. 첫 번째는 자주 들어오지만 소액으로 구매하는 고객입니다. 두 번째는 가끔 들어오지만 한 번에 큰 금액을 쓰는 고객입니다. 세 번째는 쿠폰이 있을 때만 구매하는 고객입니다. K-means를 적용하면 이런 군집이 나타날 수 있습니다.
그런데 몇몇 고객은 어디에도 잘 들어맞지 않습니다. 한 고객은 하루에도 수십 번 접속하고, 결제 금액이 매우 크며, 매번 다른 배송지를 사용합니다. 또 다른 고객은 몇 년 동안 꾸준히 구매하다가 최근 한 달 동안 접속이 급격히 줄었습니다. 첫 번째 고객은 사기 거래나 리셀러 활동의 후보일 수 있고, 두 번째 고객은 이탈 위험 고객일 수 있습니다.
흥미로운 점은 두 고객 모두 "이상치"이지만 의미가 다르다는 것입니다. 하나는 위험을 줄이기 위해 확인해야 할 대상이고, 다른 하나는 고객을 붙잡기 위해 마케팅팀이 살펴봐야 할 대상입니다. 같은 이상치 탐지라도 목적에 따라 다음 행동이 달라집니다.
이것이 실전에서 매우 중요합니다. 이상치 탐지는 "특이한 점 찾기"로 시작하지만, 실제 가치는 "그 특이함에 어떻게 반응할 것인가"에서 만들어집니다.
이상치 탐지에서 흔한 함정
이상치 탐지를 할 때는 몇 가지 함정을 조심해야 합니다.
첫째, 이상치를 무조건 제거하면 안 됩니다. 특히 예측하려는 대상이 드문 사건이라면 이상치는 가장 중요한 데이터입니다. 사기 탐지 모델을 만들면서 사기 거래를 제거하면 모델은 배울 것이 없어집니다.
둘째, 전체 데이터 기준만 믿으면 안 됩니다. 시간대, 지역, 고객군, 장비 종류에 따라 정상 범위가 달라질 수 있습니다. 전체 평균에서는 이상해 보여도 특정 그룹 안에서는 정상일 수 있고, 전체 평균에서는 정상이어도 특정 그룹 안에서는 이상할 수 있습니다.
셋째, 라벨이 없을 때 모델의 결과를 정답처럼 받아들이면 안 됩니다. 비지도 이상치 탐지는 "이상할 가능성이 높은 후보"를 찾아 주는 도구입니다. 그 후보가 진짜 문제인지는 확인 과정이 필요합니다.
넷째, 데이터 전처리를 소홀히 하면 거리와 밀도 판단이 흔들립니다. 단위가 다른 특징을 그대로 섞거나, 결측값을 이상한 숫자로 채운 채 분석하면 모델이 엉뚱한 것을 이상하다고 배울 수 있습니다.
이상치 탐지는 탐정 일과 비슷합니다. 수상한 사람을 찾았다고 곧바로 범인이라고 말할 수는 없습니다. 단서를 모으고, 맥락을 확인하고, 정말 중요한 신호인지 검증해야 합니다.
다음 장으로 가기 전에
이번 장에서는 보통의 패턴에서 벗어난 데이터를 찾는 이상치 탐지를 살펴보았습니다. 이상치는 단순한 오류일 수도 있지만, 사기 거래, 시스템 장애, 제조 불량, 고객 이탈처럼 중요한 사건의 신호일 수도 있습니다. 그래서 이상치 탐지는 데이터를 버리는 기술이 아니라, 데이터가 보내는 작은 경고음을 듣는 기술에 가깝습니다.
우리는 이상함을 판단하는 세 가지 직관을 배웠습니다. 통계적 기준은 평균이나 일반적인 범위에서 얼마나 벗어났는지를 봅니다. 거리 기반 방법은 다른 데이터나 군집 중심에서 얼마나 멀리 떨어져 있는지를 봅니다. 밀도 기반 방법은 주변에 비슷한 데이터가 얼마나 많은지를 봅니다.
또 라벨이 있는 경우에는 이상 탐지를 분류 문제처럼 다룰 수 있고, 라벨이 없는 경우에는 정상 패턴에서 벗어난 후보를 찾는 비지도학습으로 접근한다는 점도 살펴보았습니다. 중요한 것은 이상치를 발견한 뒤의 판단입니다. 제거할지, 별도로 분석할지, 모델이 찾아야 할 타깃으로 삼을지는 문제의 목적에 따라 달라집니다.
지금까지 우리는 비지도학습의 중요한 도구들을 하나씩 익혔습니다. 군집화는 비슷한 데이터를 묶어 주었고, PCA는 복잡한 데이터를 더 적은 축으로 압축해 주었으며, 이상치 탐지는 보통의 구조에서 벗어난 데이터를 찾아 주었습니다. 다음 장에서는 이 흐름을 한 단계 더 확장해, 현대 AI에서 매우 중요한 개념인 임베딩을 이해하기 위한 준비를 시작합니다. 데이터를 숫자 벡터로 표현한다는 감각이 잡히면, 추천 시스템과 검색, 그리고 나중에 만날 LLM의 세계가 훨씬 선명하게 보이기 시작할 것입니다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.