논문명: N-BEATS: Neural Basis Expansion Analysis for Interpretable Time Series Forecasting
학회(출판연도): ICLR (2020)
연구분야: 딥러닝 기반 시계열 예측 및 시계열 표현 학습


| 기호 | 의미 |
|---|---|
| ( ) ) | basis function (기본 함수) |
| ( ) | weight (얼마나 쓸지) |
| ( K ) | basis 개수 |
✓ N-BEATS에서는 어떻게 쓰는가?
- 총 2가지 모드 - Generic / Interpretable mode
- Generic (Black-box)
- basis 없음 (learned)
- 그냥 Neural Net
- ✓ Interpretable mode ← 여기에 basis 등장
- Trend basis: ϕ(t)=[1] → 다항식
- Seasonality basis: ϕ(t)=[] → 주기패턴
연구목표: 단변수 시계열 예측(한 개의 값만 있는 시계열)를 딥러닝으로 해결하자!
✓ 현실에서 단변수 시계열을 많이 쓰는가?
N-BEATS의 목표는 “복잡한 구조 없이도 SOTA 성능 + 해석 가능성”
- 입력 : 하나의 시계열
- 구조: 매우 단순(MLP + residual)
수요 예측(상품 하나의 판매량), 에너지(특정 지역 전력 소비), 금융(특정 주식 가격) 등 다양한 분야에서 사용
하지만 실제로 단변수처럼 보이지많 다변수 문제인 경우도 있음
→ 매출 = 가격 + 날씨 + 이벤트 영향 받음
다변수 시계열
- 여러 변수가 동시에 존재 =[]
N-BEATS는 다변수에 최적화된 모델은 아님
그래서 다변수 시계열 문제를 풀기 위해서는
- 모델 자체가 multivaritate한 LSTM, RNN, Transformer기반의 DeepAR이나 Temporal Fusion Transformer 사용
- 피처엔지니어링을 할 수도
- 앙상블
- N-BEATS + XGBoost, RNN + Transformer
forward / backward residual 연결 구조를 가진 아주 깊은 fully-connected 네트워크 제안
→ 즉 일반적으로 시계열에서는 RNN과 LSTM을 쓰는데 여기서는 그게 필요없다는 도전적인 주장 준비중!
기여
① Interpretable (모델 내부가 왜 이렇게 예측했는지 설명 가능하고)
② Applicable without modification (도메인별 feature engineering 필요없음)
③ Fast to train (FC기반으로 구조가 단순해서 계산 효율이 좋음)
↔ 기존 시계열 모델들을 복잡하고 도메인 의존적이며, 느리다..
실험
M3, M4, TOURISM 같은 유명한 시계열 데이터셋에서 테스트
2가지의 N-BEATS 모델 설정으로 모든 데이터셋에서 SOTA 달성
첫번째 모델은 시계열 전용 구조(RNN, seasonal component 등)없이도 다양한 데이터에서 잘 작동
→ 시계열은 특별한 구조가 필요하다는 기존 생각과 달리 단순한 딥러닝 구조(residual block 같은 기본 building block)만으로도 충분하다는 것을 보여줌
해석가능한 결과를 만들면서도 성능도 거의 유지!
→ 성능과 해석가능성은 보통 trade-off관계인데 이 논문에서는 둘 다 가능하다!
시계열예측은 ① 비즈니스에서 매우 중요하고 ② 머신러닝이 잘 활용되는 대표적인 분야
재고관리, 고객관리, 생산 및 유통, 금융, 마케팅 등 거의 모든 비즈니스 핵심 영역에서 사용됨
예측정확도가 조금만 올라가도 수백만 달러의 규모의 경제적 효과 발생 가능!
CV나 NLP에서는 딥러닝 good, 시계열에서는 딥러닝보단 전통 통계 모델 多
→ 실제 M4대회에서 상위 모델은 대부분 통계 모델의 앙상블
핵심 주장
✓ Depcomposition(분해)
- 시계열을 trend (장기 증가/감소), seasonality (주기성), level (기본값)로 나누는 방식
문제 정의
① 이산 시간(discrete time)에서 ②단일 변수 시계열 예측 문제를 다룸
→ 즉, continuous time 문제, multivariate 문제는 고려하지 않겠다.
길이 T의 과거 데이터가 주어지면 앞으로 H개 미래 값 예측
실제 모델 입력(Loockback window)은 전체 과거(T)가 아니라 최근 t개만 사용
→ 먼 과거는 중요하지 않을 수 있음, sliding window방식 사용
평가지표

sMAPE: 실제값과 예측값의 차이를 두 값의 평균으로 나눈 값
⇒ (상대 오차 측정) 작은 값/큰 값 모두 공정하게 평가하려는 의도
MASE: 예측 오차를 naive 모델의 평균 오차로 나눈 값
Naive predictor: y(t) = y(t-m)
✓ Naive 모델?
“다음 값 = 바로 이전 값”이라고 예측하는 가장 단순한 모델
왜 이렇게 멍청한 모델을 쓰는가?
- baseline: 이것보다 못하면 모델 쓸 이유 없음
- 많은 시계열에서 변화가 느리고 패턴이 단순한 경우가 많기 때문에 naive가 꽤 잘 맞음
⇒ seasonality 고려한 baseline
✓ MAPE, sMAPE, MASE 비교
Metric 핵심 아이디어 장점 단점 MAPE 실제값 기준 비율 오차 직관적 0에서 터짐 sMAPE 평균 기준 비율 오차 대칭적, 안정적 약간 해석 어려움 MASE naive 모델 대비 성능 dataset-independent 직관성 낮음
MAPE: 실제값 대비 몇 % 틀렸나?
sMAPE(Symmetirc MAPE)
MASE: 이 모델이 naive보다 얼마나 좋은가?
OWA: sMAPE와 MASE를 baseline 대비 정규화해서 합친 metric
모델 설계의 원칙
구조는 단순해야하지만(simple&generic), 표현력은 충분히 커야 한다 (깊어야 한다)
시계열 전용 feature engineering이나 특별한 scaling없이 동작해야한다.
⇒ 순수한 딥러닝의 가능성 테스트
모델이 해석 가능하도록 확장 가능해야함

블록
첫번째 블록 입력: 전체 모델 입력(최근 t개의 시계열)

입력 길이: H의 배수로 보통 2H~7H 사용
ex. 월요일~일요일(7일)까지의 일별 기온을 예측하고 싶다 → 2H:과거14일간의 기온 데이터 사용
→ 미래 길이(H) 대비 충분한 과거 필요(과거 데이터에서 시계열의 잠재적인 패턴, 추세, 계절성 등 미래를 예측하는 데 필요한 정보를 학습하기 위함)
다음 블록 입력: 이전 블록의 residual
residual: 아직 설명되지 않은 부분
→ 즉 각 블록은 “남은 정보만 처리”
블록 내부

첫 번째 부분: FC 네트워크로(-> 복잡하고 비선형적인 특징을 추출하고 데이터를 고차원으로 표현하기 위함) θf (forecast 계수), θb (backcast 계수)를 만듦
두 번째 부분: basis function을 이용해서 실제 output을 만듦
출력은 그냥 값이 아니라 basis 벡터들을 계수로 가중합해서 만듦
→ 모델을 “패턴들의 조합”으로 예측 ⇒ trend, seasonality 해석 가능한 구조!
기존
ResNet: 입력을 출력에 더해서 다음 레이어로 넘기는 방법
DenseNet: 모든 레이어의 출력이 이후 모든 레이어의 입력으로 연결
⇒ 이러한 구조는 깊은 네트워크를 학습하기 쉽게 만듦
하지만, 해석하기는 어려운 구조,,(블랙박스)
그래서 이중 residual 구조 제안
backcast쪽의 residual

forecast쪽의 residual

✓ 모델의 핵심 아이디어 → 입력을 점점 분해한다

햇 (backcast) → 설명된 부분
residual → 아직 설명 안 된 부분
최종 예측은 모든 블록의 예측을 더한 값
⇒ 이전 블록이 잘 설명할 수 있는 부분을 제거하면 다음 블록은 더 쉬운 문제만 남음
⇒ 즉 각 블록의 예측이 계층적으로 합쳐짐
basis 함수가 자유롭게 학습되면 gradient 흐름이 더 좋아지고, 반대로 basis를 특정 구조로 제한하면 의미 있는 해석이 가능해짐
basis함수 (, )를 어떻게 선택하느냐에 따라 2가지 모델 구조 제안
→ 해석 가능성은 basis 선택에 달려있음
하나는 일반 딥러닝 모델, 다른 하나는 특정 구조를 넣어 해석 가능하게 만든 모델

FC 네트워크: basis 를 학습하고 그 basis의 조합으로 예측
→ 시간길이 H x basis 개수 크기
→ 행은 시간 (t=1~H), 열은 basis 함수 index (하나의 파형)
이때, 아무 제약이 없기 때문에 학습된 wave는 의미없는 형태일수도,,
✓ 왜 generic모델에서는 의미없는 wave가 나올까?
- 같은 데이터를 설명하는 방법이 너무 많아서 모델이 굳이 의미 있는 방식으로 표현할 필요가 없기 때문
- 각 부분이 표현할 수 있는 형태를 제한하면, 그 역할이 강제되기 때문에 나누면 의미가 생김
⇒ 즉 basis가 자유로워서 해석이 불가능
trend는 천천히 변하는 함수 → basis를 저차 다항식으로 제한


t는 0~1로 normalize된 값
basis matrix는 polynormal basis
⇒ 즉 trend는 smooth + polynomial 로 충분하다
✓ Polynomial
- 변수의 거듭제곱들의 합으로 이루어진 함수
- trend는 보통 천천히 증가하거나 감소 = smooth + low-frequency
- - 부드럽게 변하고 갑자기 진동 불가능
- 간단하고 과도한 복잡성이 없으며 느린 변화에 딱 맞음
seasonality는 반복되는 패턴 → periodic 함수로 제한
푸리에 basis 사용


⇒ Seasonality는 주기이므로 푸리에가 자연스러움
✓ N-BEATS 구조에서 일어나는 일
- Stack1 (trend)
- polynomial만 학습 가능
- trend만 설명
- Stack2 (seasonality)
- 푸리에만 가능
- 남은 periodic만 설명
즉 모델은 trend stack + seasonality stack으로 구성됨
먼저 trend를 먼저 제거하고 나머지로 seasonality 처리
→ trend와 seasonality를 각각 따로 볼 수 있음
각 스택은 여러 블록으로 구성되어 있으며 같은 basis를 stack 내에서 공유함
M4대회 상위 모델들이 모두 앙상블 사용했음 → 우리도 공정한 비교를 위해 앙상블진행
앙상블은 dropout이나 L2 보다 훨씬 강력한 regularization(오버피팅 방지)임
dropout과 L2는 개별 모델 성능은 올리지만 앙상블 성능은 오히려 떨어짐
→ dropout과 L2는 모델을 더 안정적이고 비슷하게 만듦
그래서 개별 모델이 좋아질수록 서로 비슷해지고 다양성이 줄어듦
→ 앙상블에서는 모델 간 다양성이 더 중요함
(앙상블에서 중요한 것은 모델이 얼마나 잘 맞추냐보다 모델들이 얼마나 다르게 틀리냐이다)
✓ 왜 다르게 틀리는 게 중요할까?
- 모델이 다 같이 똑같은 걸 틀려버리면 아무런 소용이 없음
- 서로 다른 걸 틀려서 오차가 서로 상쇄,,
이 논문에서 dropout보다 앙상블이 강한 이유는 dropout은 하나의 모델을 안정화(variance 줄임)인 반면, 앙상블은 여러 모델을 평균 즉, variance를 크게 줄여서 오차를 상쇄시킴
다양성을 만드는 방법
서로 다른 loss function으로 학습 → sMAPE, MASE, MAPE
입력 길이를 다르게 해서 학습 (다양한 시간 범위 고려)
2H,3H, … , 7H
→ 짧은 window (최근패턴), 긴 window (장기패턴)
⇒ 전체 모델은 multi-scale 특성을 가짐
random initialization을 다르게 해서 여러 모델 만듦 (id = “m4l3)
⇒ 총 180개의 모델을 앙상블

각 데이터셋마다 기존 top-5 모델들과 비교
3가지 모델로 비교:
① N-BEATS(generic), ② N-BEATS-I(interpretable) ③ N-BEATS-I+G(앙상블)
⇒ generic vs interpretable vs ensemble
모든 데이터셋에서 N-BEATS가 SOTA 달성
데이터 → train/validation/test로 나눔
test는 기존의 brench mark 그대로 사용
train 데이터는 다시 나눠서 validation생성하고 validation으로 튜닝
튜닝 후 전체 train으로 다시 학습
⇒ train → validation (튜닝) → full train → test (평가)
TensorFlow로 구현하고, horizon마다 같은 구조를 사용함 → horizon별로 따로 학습
학습 방식
배치 사이즈 = 1024
랜덤하게 시계열 선택
lookback 범위 튜닝
데이터가 많으면 짧은 window, 데이터가 적으면 긴 window
→ 데이터가 많으면 최근 정보만으로도 충분하고, 데이터가 적으면 더 많은 과거가 필요하기 때문
입력: 과거 window, 출력: 미래 H
Adam 사용
sMAPE는 unstable하기때문에 학습 시 분모 gradient를 차단

generic 모델의 출력은 의미 없이 섞여있음
Interpretable 모델은 명확한 패턴을 가짐
trend는 천천히 변하고 부드러움
seasonality는 반복적이고 주기적임
⇒ seasonality가 강하면 변동폭이 크고, trend가 없으면 trend 출력도 작음
⇒ 따라서 trend와 seasonality로 분해 됨 - 즉 딥러닝도 해석 가능하도록 할 수 있음
✓ meta-learning
- epoch학습과 메타러닝의 차이
구분 Epoch 학습 Meta-learning 데이터 하나 여러 task 목표 정확도 ↑ 적응 속도 ↑ 일반화 같은 task 새로운 task
- 한 번의 학습으로 끝내는 게 아니라 여러 task를 통해 학습 능력을 일반
- 쉽게 말해 문제를 푸는 게 아니라 문제 푸는 방법을 배우는 것
- 2단계 학습
- Inner loop (task 학습) : 각 task에서 모델 학습
- Outer loop (meta 학습) : 어떻게 학습할지 업데이트
inner learning은 outer learning에 의해 파라미터화되거나 조건화되거나 혹은 다른 방식으로 영향 받을 수 있음
내부 파라미터(ex. 시냅스 가중치): 내부 학습 과정에서 변화
외부 파라미터 또는 메타 파라미터(ex. 유전자): 외부 학습 과정에서만 변화
N-BEATS도 메타러닝의 한 사례라고 볼 수 있다 → gradient descent를 통해 학습
내부 학습 과정
기본적인 블록의 집합으로 구성
basis 함수 의 입력으로 확장계수 수정
여러 단계로 학습이 이루어지는데, 각 단계는 아키텍처 스택 안의 하나의 블록에 해당
① 각 블록은 하나의 업데이트 단계처럼 작동하고
② 확장계수 를 점진적으로 수정하고
③ 이 계수들은 각 블록에서 에 입력되어 최종적으로 합쳐져 예측 생성
해석 가능한 모델의 경우 가 고정되어 있어 메타 파라미터는 FC레이어에만 존재
↔ Generic 모델은 를 정의하는 행렬V 역시 학습되므로 이 또한 메타 파라미터에 포함됨
스택 내 블록 수나 스택의 개수를 증가시키면 일반화 성능이 향상되는 이는 내부 학습 과정의 반복 횟수 증가로 해석 가능