시간이나 문맥이 포함된 데이터에서는 Shuffle(무작위 섞기)은 독이 됩니다. 왜 섞으면 안 되는지, 그리고 어떻게 학습시키는지 구조적으로 알아봅니다.
1. 시계열 데이터 (Time-Series): 시간을 거스르지 않는 학습
시계열 데이터의 대원칙은 과거(t−n)를 보고 미래(t+1)를 예측하는 것입니다.
1) 데이터 분할: "과거 속의 미래" 활용
우리는 전체 데이터셋(T)을 시간 순서대로 나열한 뒤, 가장 마지막 구간을 테스트셋으로 설정합니다.
- Train: t=1부터 t=k까지
- Test: t=k+1부터 t=T까지 (이 구간이 모델에게는 '미제'의 미래가 됩니다.)
2) 학습 수식 (Loss & Metric)
- Loss (MSE): 모델이 예측한 값(y^t)과 실제 값(yt)의 차이를 제곱하여 평균을 냅니다. 미분이 가능하여 가중치 업데이트의 나침반이 됩니다.
- Loss(MSE)=n1∑t=1n(yt−y^t)2
- Metric (MAPE): 실제 값 대비 오차가 몇 %인지 계산하여 사람이 직관적으로 성능을 판단합니다.
- MAPE=n100%∑t=1n∣∣∣∣ytyt−y^t∣∣∣∣
3) 왜 무작위로 섞으면(Shuffle) 안 되는가?
"미래의 정보가 과거로 흘러 들어가는 데이터 누수(Data Leakage)" 때문입니다. 시계열 데이터에서 셔플을 하면 모델은 현실에서 불가능한 '타임머신'을 타게 됩니다.
- 이유: 2026년의 금리 데이터를 학습(Train)에 쓰고, 2025년의 주가를 예측(Test)하게 된다면, 모델은 이미 '결과(미래)'를 알고 있는 상태에서 '원인(과거)'을 맞히는 꼴이 됩니다.
- 결과: 학습 시에는 정확도가 99%인 것처럼 보이지만, 실제 내일의 주가를 맞히라고 하면 아무것도 못 하는 '가짜 모델'이 됩니다.
- 수식적 관점: P(yt∣yt−1,…,y1)을 구해야 하는데, 셔플을 하면 P(yt∣yt+1)이라는 미래의 단서가 학습에 개입하게 됩니다.
2. 텍스트 데이터 (Text/NLP): 문맥의 인과관계 유지
텍스트는 단어들의 시퀀스(Sequence)입니다. 한 문장 안에서 단어의 순서가 바뀌면 의미가 완전히 달라집니다.
1) 데이터 분할: "의미 단위의 격리"
문장을 단어 단위로 섞어서 나누면 안 됩니다. 문맥이 끊기면 모델은 언어의 논리를 배우는 게 아니라 앞뒤 단어를 '암기'하게 됩니다. 따라서 문서(Document)나 대화 세션 단위로 통째로 분리해야 합니다.
2) 학습 수식 (Next Token Prediction)
- Loss (Cross-Entropy): 다음에 올 단어(xt+1)가 정답일 확률 P(xt+1∣x1,…,xt)을 최대화하도록 학습합니다.
- Loss=−∑p(x)log(q(x))
- Metric (Perplexity): 모델이 다음 단어를 예측할 때 얼마나 헷갈려 하는지를 나타냅니다. 값이 낮을수록 모델이 문맥을 잘 이해하고 있다는 뜻입니다.
- PPL(X)=exp(−N1∑i=1NlogP(xi∣x<i))
3) 왜 무작위로 섞으면(Shuffle) 안 되는가?
텍스트 데이터에서 문장을 무작위로 섞으면 모델은 언어의 '논리'를 배우는 대신 '패턴 암기'에 빠집니다.
- 이유: 한 소설이나 기사 안의 문장들은 강한 인과관계가 있습니다. 예를 들어 "그는 범인이었다"라는 결말 문장이 학습셋에 들어가고, 앞부분의 복선 문장이 테스트셋에 들어간다면, 모델은 문맥을 이해한 게 아니라 정답(범인)을 미리 보고 문제를 푸는 셈입니다.
- 결과: 모델이 단어들 사이의 깊은 의미(Context)를 파악하지 않고, 단순히 주변에 자주 등장하는 단어 조합만으로 정답을 때려 맞히는 '지름길 학습(Shortcut Learning)' 현상이 발생합니다.
- 수식적 관점: 다음 단어 예측 시 P(xn∣x1,…,xn−1)의 조건부 확률이 깨지며, 독립적이지 않은 데이터 간의 오염이 발생합니다.
| 데이터 타입 | 셔플 시 발생하는 치명적 문제 | 한 줄 요약 |
|---|
| 시계열 | Data Leakage (데이터 누수) | 미래의 정보를 훔쳐보고 과거를 맞히는 '컨닝' 발생 |
| 텍스트 | Context Violation (문맥 파괴) | 논리적 흐름을 무시하고 특정 단어를 암기하는 '편법' 발생 |
3. 시계열 vs 텍스트: 구조적 공통점과 차이점
두 데이터는 모두 "순서가 정보"라는 공통점을 갖지만, 다루는 방식에서 차이가 있습니다.
| 구분 | 시계열 데이터 (Time-Series) | 텍스트 데이터 (Text/NLP) |
|---|
| 핵심 제약 | Temporal Dependency (시간적 의존성) | Contextual Dependency (문맥적 의존성) |
| 분할 전략 | 특정 시점(Time-stamp) 기준 절단 | 의미 덩어리(Session/Doc) 기준 절단 |
| 데이터 형태 | 연속적인 수치 (Continuous) | 이산적인 토큰 (Discrete) |
| Shuffle 금지 이유 | 미래 정보를 훔쳐보는 Data Leakage 방지 | 앞뒤 관계를 유추하는 Shortcut Learning 방지 |
시계열 vs 텍스트: 학습 단계 비교
(1) 시계열 데이터
테스트셋이 미래 데이터라면, 우리는 "과거의 데이터만 본 모델이, 우리가 숨겨둔 '미래인 척하는 과거 데이터'를 얼마나 잘 맞히는지"를 보고 성능을 가늠합니다.
- 훈련(Train)
- 검증(Val)
- 2025년 데이터로 모의고사를 보며 하이퍼파라미터를 튜닝한다.
- 평가(Test)
- 2026년 데이터(모델에겐 미래)로 수능을 본다.
- 실전
- 이 모든 과정에서 Metric이 좋다면, 비로소 진짜 미래(내일)를 예측하러 나갑니다.
이러첨 시계열 데이터가 '시간의 흐름'을 기준으로 공부한다면, 텍스트 데이터는 '문맥의 완결성'을 기준으로 단계별 학습을 진행합니다. 텍스트 모델은 문장 속에서 단어의 순서와 관계를 파악해야 하므로, '문서의 독립성'을 지키는 것이 핵심입니다.
(2) 텍스트 데이터
- 훈련 (Train): 기존 백과사전/뉴스 데이터로 공부시킨다.
- 소설 A권, 뉴스 B세트 등 이미 완성된 텍스트 뭉치(Corpus)를 통해 단어 사이의 관계와 문법을 배웁니다.
- 검증 (Val): 별도의 소설 C권으로 '문장 채우기' 모의고사를 본다.
- 공부할 때 보지 않았던 새로운 문서(C권)를 가져와서, 중간에 빠진 단어를 얼마나 잘 맞히는지(Perplexity 등) 확인하며 모델의 크기나 학습률을 조절합니다.
- 평가 (Test): 아예 출처가 다른 전문 서적 D권으로 최종 수능을 본다.
- 모델이 한 번도 접해보지 못한 완전히 새로운 문체나 주제의 글(D권)을 던져주고, 얼마나 자연스럽게 문장을 생성하거나 분류하는지 최종 성적표를 냅니다.
- 실전: 실제 사용자가 입력하는 '살아있는 문장'을 처리하러 나갑니다.
- 1~3단계에서 지표(Metric)가 검증되었다면, 이제 챗봇이나 번역기 서비스에 투입되어 사용자의 질문에 답하기 시작합니다.
| 학습 단계 | 시계열 (Time-Series) | 텍스트 (Text/NLP) | 핵심 포인트 |
|---|
| 1. 훈련 (Train) | 과거 시점의 데이터 | 이미 읽은 문서 뭉치 | 데이터의 기본 패턴 습득 |
| 2. 검증 (Val) | 직근 과거 (모의고사) | 안 읽은 문서 (모의고사) | 하이퍼파라미터 최적화 |
| 3. 평가 (Test) | 데이터상 미래 (수능) | 새로운 영역의 문서 (수능) | 모델의 일반화 능력 검증 |
| 4. 실전 (Real) | 진짜 내일의 수치 | 처음 보는 사용자의 입력 | 실제 서비스 배포 및 예측 |
"시계열 학습이 '어제의 일기로 내일을 맞히는 과정'이라면, 텍스트 학습은 '철학책으로 공부해서 처음 보는 소설책을 이해하는 과정'입니다."