원문 캡처 · github.com
원문 캡처 · github.com

Mistral AI가 여러 변수의 과거 데이터를 바탕으로 확률적 예측을 수행하는 시계열 모델 제품군 Timestral을 공개했다. 저장소는 CPU와 GPU에서 실행할 수 있는 추론 기능을 제공하며, 과거에만 알려진 변수와 예측 기간에도 값이 알려진 변수를 함께 다룬다.

Timestral은 5M, 28M, 123M, 209M의 네 가지 크기로 제공된다. Mistral AI는 공개 시점에 Timestral-209M이 세 가지 공개 벤치마크에서 사전 학습·제로샷 모델 가운데 1위를 기록했다고 밝혔다. 네 모델 크기 모두 정확도와 모델 크기 간 파레토 전선에 있다고 설명했다. 상세 결과는 블로그 게시물과 Hugging Face 컬렉션에서 확인할 수 있다.

모델Hugging Face 저장소가중치 크기(fp32)
Timestral-5Mmistralai/Timestral-5M21 MB
Timestral-28Mmistralai/Timestral-28M111 MB
Timestral-123Mmistralai/Timestral-123M490 MB
Timestral-209Mmistralai/Timestral-209M837 MB

모델은 시계열의 여러 변량을 함께 예측하고, 시점마다 21개 분위수(quantile)를 출력한다. 입력 문맥은 최대 32,768개 시점까지 지원한다. 예측 길이가 디코딩 블록 하나의 길이인 1,024시점을 넘으면 블록 단위로 예측하며, 각 블록의 중앙값을 다음 블록의 입력 문맥으로 사용한다.

설치와 사용

Python 3.10 이상, PyTorch 2.4 이상이 필요하다. 패키지는 다음 명령으로 설치한다.

bash
pip install git+https://github.com/mistralai/timestral.git # Python >= 3.10, torch >= 2.4

저장소를 복제해 uv로 설치할 수도 있다.

bash
git clone https://github.com/mistralai/timestral.git && cd timestral
uv sync --frozen
source .venv/bin/activate

가중치와 설정 파일은 처음 불러올 때 Hugging Face Hub에서 내려받아 캐시에 저장한다. from_pretrained에는 Hub 저장소 ID 또는 config.json과 model.safetensors가 있는 로컬 디렉터리를 지정할 수 있다. local_files_only=True 또는 HF_HUB_OFFLINE=1을 설정하면 네트워크 연결 없이 캐시에서 읽는다.

python
import numpy as np
from timestral import TimestralForecaster

forecaster = TimestralForecaster.from_pretrained("mistralai/Timestral-209M") # device="cuda" for a GPU

context = np.random.randn(2, 1, 2000).cumsum(-1) # (series, variates, time); NaN = missing
forecast = forecaster.forecast(context, prediction_length=96)

forecast.quantiles.shape # (2, 1, 96, 21): series, variates, horizon, quantile levels
forecast.quantile_levels # (0.01, 0.05, 0.1, ..., 0.9, 0.95, 0.99)
forecast.median # (2, 1, 96)
forecast.quantile(0.9) # (2, 1, 96)

입력은 (B, V, T), (B, T) 또는 (T,) 형태의 넘파이 배열이나 PyTorch 텐서다. NaN은 결측값을 뜻하며, 같은 모양의 observation_mask를 사용해 추가 결측값을 표시할 수도 있다. 문맥이 학습 시 길이인 32,768시점을 넘으면 가장 최근 시점만 사용한다.

과거 공변량은 문맥 구간에만 알려진 값을, 미래까지 알려진 공변량은 문맥과 예측 구간의 값을 입력한다. 공변량 자체는 예측 대상이 아니며, 공변량 행은 타깃값을 읽지 않는다. 미래 공변량의 값이 모두 0 또는 1인 행은 지표 변수로 처리한다. 범주형 공변량은 숫자 코드로 입력하며, 단변량 타깃에서는 시계열별 타깃 인코딩을 적용한다. 결측값과 패딩에는 NaN을 사용한다.

라이선스와 벤치마크 조건

저장소의 코드와 테스트는 Apache 2.0 라이선스로 제공된다. 모델 가중치는 별도로 배포되며, 각 모델 저장소의 수정 MIT 라이선스가 적용된다. 가중치를 사용할 때는 지식재산권을 포함한 제3자의 권리를 침해하거나 부당하게 이용해서는 안 된다. 라이선스 세부 내용은 저장소 안내와 각 모델 카드에서 확인할 수 있다.

Mistral AI는 기본 예측 설정과 최대 32,768시점의 전체 이력을 문맥으로 사용해 제로샷 평가를 했다고 밝혔다. 벤치마크별 입력 조건은 다음과 같다.

벤치마크평가 범위타깃 외 입력
GIFT-Eval97개 구성past_feat_dynamic_real을 과거 공변량으로 사용
fev-bench100개 과제과거·미래 공변량을 사용하고 범주형 열은 타깃 인코딩
TIME98개 과제없음(TIME에는 공변량이 없음)

저장소는 PyTorch, NumPy, safetensors, huggingface_hub만으로 독립 추론을 지원한다. Mistral AI는 풀 리퀘스트를 받지 않으며, 버그 신고와 질문은 GitHub 이슈로 받는다.