콘텐츠로 이동

ch03 — Gen2 고전 기계학습 (2000–2016)

대응 노트북: notebooks/ch03_gen2_classical_ml.ipynb — stumpy로 UCR discord 발견

밀도·경계 기반: LOF, OC-SVM, KNN

시계열을 부분수열 윈도우 벡터로 임베딩하면 (embed_windows) 일반 outlier detection 기법을 그대로 쓸 수 있다:

  • KNN / Sub-KNN: train 윈도우들과의 k번째 최근접 거리. 단순하지만 단변량에서 매우 강력.
  • LOF: 국소 밀도 대비 상대 밀도 — 밀도가 불균일한 데이터에서 KNN보다 낫다.
  • OC-SVM: 정상 데이터를 감싸는 최소 경계 학습. \(\nu\)가 경계 밖 허용 비율을 제어.

Isolation Forest — "고립되기 쉬운 점이 이상이다"

랜덤 축·랜덤 분할의 트리에서 이상점은 얕은 깊이에서 고립된다. 밀도 추정 없이 O(n log n)으로 동작하고 고차원에 강해 실무 기본값으로 가장 널리 쓰인다. 확률적 알고리즘이므로 이 저장소에서는 시드 3개로 평가한다 (stochastic: true).

Matrix Profile — discord의 발견

부분수열 간 z-정규화 유클리드 거리의 최소값 프로파일 \(MP_i = \min_{j} d(w_i, w_j)\). discord(가장 가까운 이웃조차 먼 부분수열)가 collective 이상의 정의와 정확히 일치한다.

  • 파라미터가 윈도우 길이 하나뿐 — "parameter-free에 가까운" 강건함
  • train이 필요 없다 (test self-join) — 진짜 unsupervised
  • 반복 이상(같은 이상이 2회 이상)은 서로를 이웃으로 삼아 놓칠 수 있음 → twin freak 문제

UCR Anomaly Archive는 사실상 discord 발견 문제로 설계되어 있어 MP가 특히 강하다. 구현은 stumpy(BSD-3)를 pip 의존성으로 사용한다 (matrix_profile).

MERLIN은 왜 없나

MERLIN(모든 길이의 discord 탐색)은 공개 참조 구현의 라이선스가 불명확해 도입을 보류했다 (CLAUDE.md §10-2 — 라이선스 불명은 코드 복사 금지). THIRD_PARTY_NOTICES.md에 기록되어 있다.