"재학습"이라는 단어가 삼키고 있는 세 가지 결정
모델의 성능이 떨어졌다고 느낄 때, 많은 팀이 '재학습(Retrain)'이라는 한 단어로 모든 상황을 해결하려 합니다. 하지만 에어비앤비의 데이터 과학 팀은 이 '재학습'이라는 행위가 사실은 성격이 완전히 다른 세 가지 결정을 하나로 뭉뚱그린 것이라고 말합니다.
- Refit (재적합): 모델의 구조는 그대로 두고, 최신 데이터로 파라미터만 업데이트하는 가장 기본적이고 저렴한 방법입니다. 대부분의 정기적인 성능 저하(Drift)는 이 방법으로 해결됩니다.
- Respecify (재설계): 모델의 구조 자체를 바꾸는 것입니다. 피처를 추가/삭제하거나, 모델의 가정(Prior)을 변경하는 것을 의미합니다. 데이터가 설명할 수 없는 근본적인 변화가 있을 때 필요하며, 가장 큰 성능 향상을 가져오지만 그만큼 리스크가 큰 결정입니다.
- Hold (유지): 성능 저하가 확인되었음에도 불구하고, 의도적으로 모델을 건드리지 않는 결정입니다. 일시적인 노이즈(Shock)에 과민반응하여 모델을 망치는 것을 방지하기 위해 필요합니다.
이 글의 핵심은 이 세 가지 결정을 내리는 판단 기준을 세우는 것입니다. 단순히 성능이 떨어졌다고 해서 무작정 Refit을 선택하는 것은, 마치 감기 환자에게 항생제를 처방하는 것과 같습니다. 때로는 휴식(Hold)이 필요하고, 때로는 수술(Respecify)이 필요합니다.

에어비앤비의 판단 기준: 무엇이 변했는가?
에어비앤비 팀은 수년간의 경험을 통해 다음과 같은 3가지 질문으로 선택지를 좁힙니다.
1. 데이터 생성 프로세스가 여전히 동일한가? -> Refit
모델이 가정하고 있는 세상의 구조는 그대로인데, 시간이 지나면서 숫자(파라미터)만 조금씩 변한 경우입니다. 예를 들어, 여행 수요는 여전히 계절성과 경기에 영향을 받지만, 그 강도가 조금씩 달라지는 경우입니다. 이 경우에는 기존 모델 구조가 유효하므로, 최신 데이터로 파라미터만 업데이트하는 Refit이 정답입니다.
2. 모델이 표현할 수 없는 근본적인 변화인가? -> Respecify
모델의 구조 자체가 더 이상 현실을 설명하지 못하는 경우입니다. 이때는 아무리 좋은 최신 데이터를 넣어도 소용이 없습니다. 핵심 신호는 방향성입니다. 모델이 같은 방향으로 계속해서 반복적으로 빗나간다면, 이는 단순한 노이즈가 아니라 구조적인 문제(Misspecification)입니다.
에어비앤비의 COVID-19 사례가 대표적입니다. 팬데믹 이전에는 비슷한 특성을 가진 시장들끼리 데이터를 공유(Borrowing)하며 예측력을 높였습니다. 하지만 팬데믹 이후 각 도시의 회복 속도가 제각각이 되면서, '비슷한 시장'이라는 개념 자체가 무너졌습니다. 이때 기존 구조를 유지한 채 Refit을 하면, 모델은 서로 다른 회복 궤적을 가진 시장들을 평균 내느라 불안정해집니다.
# 이 코드는 실제 에어비앤비 코드가 아닌, 개념을 설명하기 위한 의사코드입니다.
# [Bad] 기존 구조 유지: 모든 시장이 같은 패턴을 따른다고 가정
model = HierarchicalModel(borrowing='static_region')
model.refit(new_data) # 결과: 불안정하고, 큰 오차 발생
# [Good] 구조 변경: 지리적 인접성과 회복 속도 유사성을 기준으로 Borrowing
model = HierarchicalModel(borrowing='dynamic_recovery')
model.respecify(new_data) # 결과: 안정적이고, 오차 감소
3. 예측 오차가 모델이 예상하는 정상 범위 내인가? -> Hold
가장 하기 어렵지만, 가장 중요한 결정입니다. 오차가 발생했지만, 그 원인을 아직 설명할 수 없는 일시적인 충격(예: 갑작스러운 대형 이벤트)이라면, 차라리 가만히 있는 것이 최선일 수 있습니다. 충격을 모델에 학습시키면, 그 충격이 사라진 후에도 모델은 그것을 '새로운 정상'으로 착각하고 오랫동안 잘못된 예측을 할 수 있습니다. 에어비앤비 팀은 이를 두고 "앉아서 아무것도 하지 마라 (Don't just do something; sit there)" 는 명언으로 표현합니다.

실무에서 반드시 기억해야 할 것들
성급한 Refit은 '노이즈 체이싱(Chasing Noise)'이다
예측이 한 분기 정도 어긋났다고 해서, 예정에 없던 Refit을 바로 진행하는 것은 위험합니다. 그 '어긋남'이 일시적인 이벤트 때문이라면, 모델이 그것을 새로운 기준선으로 받아들여 버리기 때문입니다. 예정된 주기(Cadence)를 기다렸다가, 그 충격이 포함된 데이터와 포함되지 않은 데이터를 함께 학습시키는 것이 오히려 현명합니다.
조용히 쌓이는 '유령(ghost)'을 주의하라
반대의 실수도 있습니다. 코로나19와 같은 위기 상황에서 도입한 특수한 가정(예: 취소 시점 지연)이 위기가 끝난 후에도 모델에 남아 있는 경우입니다. 매번의 Refit이 정상적으로 보이기 때문에 발견이 어렵고, 이 '유령'은 예측을 조용히 편향시킵니다. 주기적으로 모델의 가정 자체를 점검하고, 필요하다면 과감하게 구조에서 제거(Respecify)하는 용기가 필요합니다.
한국 개발 생태계에서의 적용 맥락
국내 핀테크, 이커머스, OTT 서비스에서도 유사한 상황이 자주 발생합니다. 특히, 대규모 프로모션이나 신규 서비스 출시 직후에 모델의 예측이 크게 빗나가는데, 이때 무작정 Refit을 돌리는 경우가 많습니다. 하지만 이는 프로모션의 효과를 '영구적인 수요 증가'로 오해하게 만들어, 이후의 재고 및 인프라 계획에 심각한 차질을 빚을 수 있습니다. 프로모션과 같은 일시적 이벤트는 별도의 Feature로 모델링하고, 모델의 구조는 유지하는 것이 더 나은 전략입니다.
이 기술의 한계 또는 주의사항
이 3분법은 시계열 예측 모델에 특화된 프레임워크입니다. 자연어 처리나 이미지 인식 모델과 같이 데이터의 분포 변화(Distribution Shift)가 더 빈번하고 복잡한 도메인에서는, 'Hold'의 판단 기준이 더 모호해질 수 있습니다. 또한, 'Respecify'는 모델의 구조를 바꾸는 것이므로, 서빙 인프라의 변경이나 추가적인 검증 비용이 발생할 수 있다는 점을 인지해야 합니다.

결론: 모델은 '배우는 것'만큼 '잊는 것'도 중요하다
에어비앤비의 핵심 교훈은 명확합니다. 모델을 최신 상태로 유지하는 것(Refit)과, 모델을 정직하게 유지하는 것(Respecify)은 다릅니다. 주기적인 Refit은 파라미터를 업데이트하지만, 한때 유효했던 잘못된 가정은 그대로 남겨둡니다.
진정한 데이터 과학의 실력은 위기 상황에서 빠르게 대응하는 것이 아니라, 평상시에 어떤 결정을 내려야 할지에 대한 원칙을 세우는 것입니다. 오늘 소개한 3가지 질문을 팀의 모델 점검 프로세스에 적용해보는 것은 어떨까요?
이 글에서 소개한 모델 재학습 전략은 AI 기반 암 진단 시스템의 AWS 아키텍처 설계와 같이 안정성이 중요한 시스템에서 특히 더 유용하게 적용될 수 있습니다. 또한, 개발 생산성과 관련된 인사이트가 궁금하시다면 Claude Code를 활용한 개발 생산성 극대화 전략도 함께 읽어보시길 추천합니다.