블로그
분석 모델이 새 데이터에 흔들리지 않게 — 안정 구간 trim
발행: 2026-05-13 · 태그: ml, training, time-series
새로 들어온 데이터가 모델을 흔드는 문제
분석 모델은 새 대상이 추가될 때마다 그 측정 기록을 받아 가중치를 조금씩 갱신한다. 그런데 새로 들어온 대상의 초반 구간 은 거의 항상 불안정하다. 데이터가 늦게 도착하거나, 한동안 비어 있거나, 첫 측정에 평소와 다른 잡음이 섞이기 때문이다.
이 잡음까지 그대로 학습에 들어가면 정상 패턴의 기준선 자체가 새 대상이 추가될 때마다 한 번씩 흔들린다. "어제는 안정으로 본 대상" 이 "오늘 모델이 갱신된 뒤에 다시 보면 의심" 으로 바뀌어 버린다. 같은 대상을 두고 결과가 오락가락하는 셈이다.
안정 구간만 학습에 쓰기
해법은 학습 입력 단계에 한 줄을 더한 것이다. 충분한 시간 동안 일정한 흐름이 잡힌 구간만 모델에 넣고, 그 전까지는 모델 갱신에 영향을 주지 않는다.
function trainingInputFor(reviewer) {
const trace = traceOf(reviewer);
if (trace.length < MIN_TICKS) return null; // 아직 학습 안 함
const stableStart = firstStableTick(trace); // 흔들림이 가라앉은 시점
if (stableStart < 0) return null; // 아직 안정 아님
return trace.slice(stableStart); // 안정 구간만 반환
}핵심은 "지금은 학습하지 않는다" 도 떳떳한 선택이라는 점이다. 데이터가 부족할 땐 그 대상의 영향을 잠시 0 으로 두고, 충분히 안정된 다음에야 모델에 반영한다.
적용 전후의 학습 안정성
같은 기간 동안 모델의 흔들림 폭을 적용 전후로 비교했다.
적용 후에는 새 대상이 들어온 D0 시점에 모델이 거의 흔들리지 않는다. 안정 구간에 다다르는 D+3 즈음부터 천천히 영향을 미치기 시작한다.
잘못 말하지 않는 것이 먼저
이 방식이 공짜는 아니다. 진짜 신호의 일부도 같이 잘린다. 처음부터 뚜렷한 패턴이 있던 대상이라도 안정으로 판정되기 전까지는 학습에서 빠지기 때문에, 모델이 그 대상을 알아보는 데 시간이 더 걸린다.
결국 선택의 축은 단순하다. 빠르게 반응하지만 자꾸 흔들리는 모델 과 조금 늦게 반응하지만 한 번 내린 판단이 잘 뒤집히지 않는 모델 중 어디에 무게를 둘 것인가. 실제 운영 데이터 위에서는 후자가 사용자가 받아보는 결과에 더 가깝다. 그래서 안정 구간만 학습에 쓰는 방식을 기본으로 두기로 했다.