Tutorial Nixtla TimeGPT: Foundation Model untuk Time Series Forecasting

# Tutorial Nixtla TimeGPT: Foundation Model untuk Time Series Forecasting Time series forecasting adalah salah satu task paling penting dalam data science, mulai dari prediksi penjualan, forecasting...

By Ruby Abdullah · · tutorial
TimeGPTNixtlaTime SeriesForecastingPython

Tutorial Nixtla TimeGPT: Foundation Model untuk Time Series Forecasting

Time series forecasting adalah salah satu task paling penting dalam data science, mulai dari prediksi penjualan, forecasting demand, monitoring infrastruktur, hingga analisis keuangan. Namun, membangun model forecasting yang akurat seringkali membutuhkan expertise mendalam dalam pemilihan model, feature engineering, dan hyperparameter tuning.

Nixtla hadir dengan TimeGPT — sebuah foundation model untuk time series yang mengubah cara kita melakukan forecasting. Mirip seperti GPT untuk teks, TimeGPT adalah model pre-trained yang bisa langsung digunakan untuk forecasting tanpa perlu training dari nol. Dalam tutorial ini, kita akan mempelajari cara menggunakan Nixtla TimeGPT secara praktis, mulai dari instalasi hingga advanced use cases.

Apa itu Nixtla TimeGPT?

TimeGPT adalah foundation model pertama untuk time series forecasting yang dikembangkan oleh Nixtla. Model ini di-training pada miliaran data point dari berbagai domain, sehingga mampu melakukan zero-shot forecasting — artinya model bisa langsung memberikan prediksi tanpa perlu di-training ulang pada data spesifik Anda.

Keunggulan utama TimeGPT:

  • Zero-shot forecasting: Langsung prediksi tanpa training
  • Multi-horizon: Bisa forecast untuk berbagai horizon waktu
  • Anomaly detection: Deteksi anomali pada time series data
  • Exogenous variables: Support variabel eksternal untuk meningkatkan akurasi
  • Conformal prediction: Interval prediksi yang terkalibrasi
  • Cross-validation: Built-in temporal cross-validation
  • Fine-tuning: Bisa di-fine-tune pada data spesifik untuk performa lebih baik

Instalasi

Menggunakan pip

pip install nixtla

Menggunakan conda

conda install -c conda-forge nixtla

Dependensi tambahan untuk visualisasi

pip install nixtla matplotlib plotly pandas

Setup API Key

TimeGPT menggunakan API-based inference. Anda perlu mendaftar di dashboard Nixtla untuk mendapatkan API key.

from nixtla import NixtlaClient

Inisialisasi client

nixtlaclient = NixtlaClient(apikey='yourapikeyhere')

Atau set via environment variable

export NIXTLAAPIKEY=yourapikeyhere

nixtlaclient = NixtlaClient()

Untuk memvalidasi bahwa API key Anda berfungsi:

nixtlaclient.validateapikey()

Output: True jika valid

Basic Usage: Forecasting Sederhana

Menyiapkan Data

TimeGPT menerima data dalam format pandas DataFrame dengan minimal dua kolom: timestamp dan value.

import pandas as pd

from nixtla import NixtlaClient

nixtlaclient = NixtlaClient()

Membuat sample data

Misalnya data penjualan harian selama 2 tahun

dates = pd.daterange(start='2024-01-01', end='2025-12-31', freq='D')

import numpy as np

np.random.seed(42)

trend = np.linspace(100, 200, len(dates))

seasonal = 30 np.sin(2 np.pi np.arange(len(dates)) / 365.25)

noise = np.random.normal(0, 10, len(dates))

values = trend + seasonal + noise

df = pd.DataFrame({

'timestamp': dates,

'value': values

})

print(df.head())

print(f"Shape: {df.shape}")

Forecasting Pertama

# Forecast 30 hari ke depan

forecastdf = nixtlaclient.forecast(

df=df,

h=30, # horizon: 30 hari ke depan

timecol='timestamp',

targetcol='value'

)

print(forecastdf.head())

Visualisasi Hasil

# Plot hasil forecasting

nixtlaclient.plot(

df=df,

forecastsdf=forecastdf,

timecol='timestamp',

targetcol='value',

maxinsamplelength=90 # Tampilkan 90 hari data historis

)

Menggunakan Dataset Real-World

Contoh dengan Data Retail

# Menggunakan dataset AirPassengers

from nixtla import NixtlaClient

import pandas as pd

nixtlaclient = NixtlaClient()

Load AirPassengers dataset

df = pd.readcsv(

'https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv',

parsedates=['Month'],

)

df.columns = ['timestamp', 'value']

Forecast 12 bulan ke depan

forecastdf = nixtlaclient.forecast(

df=df,

h=12,

timecol='timestamp',

targetcol='value',

freq='MS' # Monthly Start frequency

)

Visualisasi

nixtlaclient.plot(

df=df,

forecastsdf=forecastdf,

timecol='timestamp',

targetcol='value'

)

Multiple Time Series (Panel Data)

TimeGPT bisa menangani multiple time series sekaligus menggunakan uniqueid column:

# Data dengan multiple series

data = []

for productid in ['SKU001', 'SKU002', 'SKU003']:

dates = pd.daterange('2024-01-01', '2025-12-31', freq='D')

np.random.seed(hash(productid) % 100)

values = (

np.random.uniform(50, 150) +

20 np.sin(2 np.pi np.arange(len(dates)) / 7) + # weekly pattern

np.random.normal(0, 5, len(dates))

)

for date, val in zip(dates, values):

data.append({

'uniqueid': productid,

'timestamp': date,

'value': max(0, val)

})

dfpanel = pd.DataFrame(data)

Forecast semua series sekaligus

forecastpanel = nixtlaclient.forecast(

df=dfpanel,

h=14, # 2 minggu ke depan

timecol='timestamp',

targetcol='value',

idcol='uniqueid'

)

print(forecastpanel.groupby('uniqueid').size())

Advanced Usage

Prediction Intervals (Conformal Prediction)

TimeGPT mendukung conformal prediction intervals yang terkalibrasi secara statistik:

# Forecast dengan prediction intervals

forecastwithintervals = nixtlaclient.forecast(

df=df,

h=30,

timecol='timestamp',

targetcol='value',

level=[80, 95] # 80% dan 95% prediction intervals

)

print(forecastwithintervals.columns)

Output: ['timestamp', 'TimeGPT', 'TimeGPT-lo-95', 'TimeGPT-lo-80',

'TimeGPT-hi-80', 'TimeGPT-hi-95']

Visualisasi dengan intervals

nixtlaclient.plot(

df=df,

forecastsdf=forecastwithintervals,

timecol='timestamp',

targetcol='value',

level=[80, 95],

maxinsamplelength=60

)

Exogenous Variables

Tambahkan variabel eksternal untuk meningkatkan akurasi prediksi:

# Menambahkan exogenous variables

dfwithexog = df.copy()

dfwithexog['dayofweek'] = dfwithexog['timestamp'].dt.dayofweek

dfwithexog['month'] = dfwithexog['timestamp'].dt.month

dfwithexog['isweekend'] = (dfwithexog['dayofweek'] >= 5).astype(int)

Buat future exogenous variables

futuredates = pd.daterange(

start=dfwithexog['timestamp'].max() + pd.Timedelta(days=1),

periods=30,

freq='D'

)

futureexog = pd.DataFrame({

'timestamp': futuredates,

'dayofweek': futuredates.dayofweek,

'month': futuredates.month,

'isweekend': (futuredates.dayofweek >= 5).astype(int)

})

Forecast dengan exogenous variables

forecastexog = nixtlaclient.forecast(

df=dfwithexog,

Xdf=futureexog,

h=30,

timecol='timestamp',

targetcol='value'

)

Anomaly Detection

TimeGPT bisa mendeteksi anomali pada data time series:

# Deteksi anomali

anomaliesdf = nixtlaclient.detectanomalies(

df=df,

timecol='timestamp',

targetcol='value',

freq='D'

)

Visualisasi anomali

nixtlaclient.plot(

df=df,

anomaliesdf=anomaliesdf,

timecol='timestamp',

targetcol='value'

)

Filter hanya data point yang anomali

anomalouspoints = anomaliesdf[anomaliesdf['anomaly'] == True]

print(f"Jumlah anomali terdeteksi: {len(anomalouspoints)}")

Cross-Validation

Lakukan temporal cross-validation untuk mengevaluasi performa model:

# Cross-validation

cvresults = nixtlaclient.crossvalidation(

df=df,

h=30, # forecast horizon

nwindows=3, # jumlah windows

timecol='timestamp',

targetcol='value',

level=[90]

)

print(cvresults.head())

Hitung metrik evaluasi

from sklearn.metrics import meanabsoluteerror, meansquarederror

mae = meanabsoluteerror(cvresults['value'], cvresults['TimeGPT'])

rmse = meansquarederror(cvresults['value'], cvresults['TimeGPT'], squared=False)

mape = np.mean(np.abs(

(cvresults['value'] - cvresults['TimeGPT']) / cvresults['value']

)) 100

print(f"MAE: {mae:.2f}")

print(f"RMSE: {rmse:.2f}")

print(f"MAPE: {mape:.2f}%")

Fine-tuning pada Data Spesifik

Untuk domain-specific data, Anda bisa fine-tune TimeGPT:

# Fine-tuning TimeGPT pada data Anda

forecastfinetuned = nixtlaclient.forecast(

df=df,

h=30,

timecol='timestamp',

targetcol='value',

finetunesteps=50, # jumlah langkah fine-tuning

finetuneloss='mse' # loss function: 'mse', 'mae', 'rmse', 'mape'

)

Bandingkan dengan tanpa fine-tuning

forecastdefault = nixtlaclient.forecast(

df=df,

h=30,

timecol='timestamp',

targetcol='value'

)

Visualisasi perbandingan

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(12, 6))

ax.plot(df['timestamp'].tail(60), df['value'].tail(60), label='Historical', color='black')

ax.plot(forecastdefault['timestamp'], forecastdefault['TimeGPT'],

label='TimeGPT (default)', linestyle='--')

ax.plot(forecastfinetuned['timestamp'], forecastfinetuned['TimeGPT'],

label='TimeGPT (fine-tuned)', linestyle='-.')

ax.legend()

ax.settitle('Perbandingan Default vs Fine-tuned')

plt.tightlayout()

plt.savefig('comparison.png', dpi=150)

plt.show()

Menggunakan Model TimeGPT-1-Long-Horizon

Untuk forecast dengan horizon yang panjang, gunakan model khusus:

# Long-horizon forecasting

longforecast = nixtlaclient.forecast(

df=df,

h=365, # Forecast 1 tahun ke depan

timecol='timestamp',

targetcol='value',

model='timegpt-1-long-horizon', # Model khusus long-horizon

level=[90]

)

nixtlaclient.plot(

df=df,

forecastsdf=longforecast,

timecol='timestamp',

targetcol='value',

level=[90],

maxinsamplelength=180

)

Integrasi dengan Tools Populer

Integrasi dengan MLflow

import mlflow

from nixtla import NixtlaClient

nixtlaclient = NixtlaClient()

with mlflow.startrun(runname="timegptforecast"):

# Forecast

forecastdf = nixtlaclient.forecast(

df=df, h=30,

timecol='timestamp', targetcol='value',

level=[90]

)

# Cross-validation untuk metrik

cvresults = nixtlaclient.crossvalidation(

df=df, h=30, nwindows=3,

timecol='timestamp', targetcol='value'

)

# Log metrik

mae = meanabsoluteerror(cvresults['value'], cvresults['TimeGPT'])

rmse = meansquarederror(

cvresults['value'], cvresults['TimeGPT'], squared=False

)

mlflow.logmetric("mae", mae)

mlflow.logmetric("rmse", rmse)

mlflow.logparam("horizon", 30)

mlflow.logparam("model", "timegpt-1")

# Simpan forecast sebagai artifact

forecastdf.tocsv("forecastresults.csv", index=False)

mlflow.logartifact("forecastresults.csv")

print(f"MAE: {mae:.2f}, RMSE: {rmse:.2f}")

Integrasi dengan Pandas dan Plotly

import plotly.graphobjects as go

Forecast dengan intervals

forecastdf = nixtlaclient.forecast(

df=df, h=30,

timecol='timestamp', targetcol='value',

level=[80, 95]

)

fig = go.Figure()

Data historis

fig.addtrace(go.Scatter(

x=df['timestamp'].tail(90),

y=df['value'].tail(90),

mode='lines',

name='Historical',

line=dict(color='black')

))

Forecast

fig.addtrace(go.Scatter(

x=forecastdf['timestamp'],

y=forecastdf['TimeGPT'],

mode='lines',

name='Forecast',

line=dict(color='blue')

))

95% interval

fig.addtrace(go.Scatter(

x=pd.concat([forecastdf['timestamp'], forecastdf['timestamp'][::-1]]),

y=pd.concat([forecastdf['TimeGPT-hi-95'], forecastdf['TimeGPT-lo-95'][::-1]]),

fill='toself',

fillcolor='rgba(0,0,255,0.1)',

line=dict(color='rgba(255,255,255,0)'),

name='95% CI'

))

fig.updatelayout(

title='TimeGPT Forecast dengan Prediction Intervals',

xaxistitle='Tanggal',

yaxistitle='Value',

template='plotlywhite'

)

fig.show()

Best Practices

1. Persiapan Data yang Baik

# Pastikan data lengkap tanpa missing values

def preparetimeseries(df, timecol, valuecol, freq='D'):

df = df.copy()

df[timecol] = pd.todatetime(df[timecol])

df = df.sortvalues(timecol)

# Buat complete date range

fullrange = pd.daterange(

start=df[timecol].min(),

end=df[timecol].max(),

freq=freq

)

df = df.setindex(timecol).reindex(fullrange)

df.index.name = timecol

df = df.resetindex()

# Interpolasi missing values

df[valuecol] = df[valuecol].interpolate(method='linear')

# Hapus remaining NaN

df = df.dropna(subset=[valuecol])

return df

dfclean = preparetimeseries(df, 'timestamp', 'value')

2. Pilih Horizon yang Tepat

# Rule of thumb: gunakan timegpt-1-long-horizon untuk h > 1 seasonality period

datafreq = 'D' # daily data

seasonalityperiod = 7 # weekly seasonality

horizon = 30 # 30 hari

if horizon > seasonalityperiod:

model = 'timegpt-1-long-horizon'

else:

model = 'timegpt-1'

forecast = nixtlaclient.forecast(

df=df, h=horizon,

timecol='timestamp', targetcol='value',

model=model

)

3. Validasi dengan Cross-Validation

Selalu validasi model sebelum digunakan di production:

# Comprehensive evaluation

def evaluatetimegpt(df, horizons=[7, 14, 30], nwindows=5):

results = {}

for h in horizons:

cv = nixtlaclient.crossvalidation(

df=df, h=h, nwindows=nwindows,

timecol='timestamp', targetcol='value'

)

mae = meanabsoluteerror(cv['value'], cv['TimeGPT'])

rmse = meansquarederror(cv['value'], cv['TimeGPT'], squared=False)

results[h] = {'MAE': mae, 'RMSE': rmse}

return pd.DataFrame(results).T

evalresults = evaluatetimegpt(df)

print(evalresults)

4. Gunakan Fine-tuning untuk Domain Spesifik

# Fine-tuning dengan evaluasi

cvdefault = nixtlaclient.crossvalidation(

df=df, h=30, nwindows=3,

timecol='timestamp', targetcol='value'

)

cvfinetuned = nixtlaclient.crossvalidation(

df=df, h=30, nwindows=3,

timecol='timestamp', targetcol='value',

finetunesteps=50

)

maedefault = meanabsoluteerror(cvdefault['value'], cvdefault['TimeGPT'])

maefinetuned = meanabsoluteerror(cvfinetuned['value'], cvfinetuned['TimeGPT'])

print(f"MAE Default: {maedefault:.2f}")

print(f"MAE Fine-tuned: {maefinetuned:.2f}")

print(f"Improvement: {((maedefault - maefinetuned) / maedefault) 100:.1f}%")

5. Monitoring dan Alerting

def forecastwithmonitoring(df, h, thresholdmape=10):

# Cross-validation check

cv = nixtlaclient.crossvalidation(

df=df, h=h, nwindows=3,

timecol='timestamp', targetcol='value'

)

mape = np.mean(np.abs(

(cv['value'] - cv['TimeGPT']) / cv['value']

)) 100

if mape > thresholdmape:

print(f"WARNING: MAPE {mape:.1f}% melebihi threshold {thresholdmape}%")

print("Pertimbangkan fine-tuning atau tambahkan exogenous variables")

# Actual forecast

forecast = nixtlaclient.forecast(

df=df, h=h,

timecol='timestamp', targetcol='value',

level=[90]

)

# Anomaly check pada data terbaru

anomalies = nixtlaclient.detectanomalies(

df=df.tail(90),

timecol='timestamp', targetcol='value'

)

nanomalies = anomalies['anomaly'].sum()

if nanomalies > 0:

print(f"INFO: {nanomalies} anomali terdeteksi dalam 90 data point terakhir")

return forecast, mape

forecast, mape = forecastwithmonitoring(df, h=30)

Use Case: Demand Forecasting untuk E-Commerce

Berikut contoh lengkap end-to-end untuk demand forecasting:

import pandas as pd

import numpy as np

from nixtla import NixtlaClient

nixtlaclient = NixtlaClient()

Simulasi data e-commerce

np.random.seed(42)

dates = pd.daterange('2024-01-01', '2026-09-28', freq='D')

products = ['ProductA', 'ProductB', 'ProductC']

data = []

for product in products:

base = np.random.uniform(100, 500)

trend = np.linspace(0, base 0.3, len(dates))

weekly = base 0.2 np.sin(2 np.pi np.arange(len(dates)) / 7)

yearly = base 0.15 np.sin(2 np.pi np.arange(len(dates)) / 365.25)

noise = np.random.normal(0, base * 0.05, len(dates))

sales = np.maximum(0, base + trend + weekly + yearly + noise)

for date, val in zip(dates, sales):

data.append({

'uniqueid': product,

'timestamp': date,

'sales': round(val, 2)

})

dfecommerce = pd.DataFrame(data)

Forecast 14 hari ke depan untuk semua produk

forecast = nixtlaclient.forecast(

df=dfecommerce,

h=14,

timecol='timestamp',

targetcol='sales',

idcol='uniqueid',

level=[80, 95]

)

Summary per produk

for product in products:

productforecast = forecast[forecast['uniqueid'] == product]

avgforecast = productforecast['TimeGPT'].mean()

lo95 = productforecast['TimeGPT-lo-95'].mean()

hi95 = productforecast['TimeGPT-hi-95'].mean()

print(f"{product}: Avg forecast = {avgforecast:.0f} "

f"(95% CI: {lo95:.0f} - {hi95:.0f})")

Perbandingan dengan Pendekatan Tradisional

| Aspek | TimeGPT | ARIMA/Prophet | Custom Deep Learning |

|-------|---------|---------------|---------------------|

| Setup time | Menit | Jam | Hari-Minggu |

| Training data diperlukan | Tidak (zero-shot) | Ya | Ya (banyak) |

| Expertise diperlukan | Minimal | Moderate | Tinggi |

| Multi-series | Native support | Per-series | Perlu arsitektur khusus |

| Anomaly detection | Built-in | Terpisah | Perlu implementasi |

| Scalability | API-based, auto-scale | Tergantung infra | Tergantung infra |

| Cost | Per API call | Compute sendiri | Compute sendiri |

| Customization | Fine-tuning | Full control | Full control |

Kesimpulan

Nixtla TimeGPT membawa paradigma baru dalam time series forecasting. Dengan pendekatan foundation model, TimeGPT menghilangkan kebutuhan untuk training model dari nol, memungkinkan data scientist dan engineer untuk langsung mendapatkan forecast berkualitas tinggi.

Poin-poin penting yang perlu diingat:

  • Mulai dengan zero-shot: Coba TimeGPT tanpa fine-tuning terlebih dahulu. Sering kali hasilnya sudah cukup baik.
  • Gunakan cross-validation: Selalu evaluasi performa sebelum deploy ke production.
  • Fine-tune jika diperlukan: Untuk domain yang sangat spesifik, fine-tuning bisa meningkatkan akurasi secara signifikan.
  • Manfaatkan fitur lengkap: Prediction intervals, anomaly detection, dan exogenous variables adalah fitur yang membedakan TimeGPT dari solusi sederhana.
  • Pertimbangkan cost: TimeGPT berbasis API, jadi perhatikan volume API call untuk use case high-frequency.
  • TimeGPT sangat cocok untuk rapid prototyping, baseline forecasting, dan use case di mana kecepatan delivery lebih penting daripada kontrol penuh atas model. Untuk production system yang membutuhkan volume tinggi, pertimbangkan untuk mengkombinasikan TimeGPT dengan solusi on-premise.

    Artikel Terkait

    Tutorial Time Series Forecasting: Prophet, NeuralProphet, dan LSTM

    Peramalan Deret Waktu dengan Prophet, NeuralProphet, dan LSTM Daftar Isi Pendahuluan Prasyarat Dasar-Dasar Deret Waktu [...

    Tutorial MergeKit: Menggabungkan Model LLM untuk Membuat Model AI Kustom

    Tutorial MergeKit: Menggabungkan Model LLM untuk Membuat Model AI Kustom Model bahasa besar (LLM) open-source terus berk...

    Tutorial LlamaParse: Parsing Dokumen Kompleks untuk RAG Pipeline

    Tutorial LlamaParse: Parsing Dokumen Kompleks untuk RAG Pipeline Membangun aplikasi Retrieval-Augmented Generation (RAG)...

    Tutorial Semantic Router: Routing Cerdas untuk Aplikasi LLM

    Tutorial Semantic Router: Routing Cerdas untuk Aplikasi LLM Semantic Router adalah library Python yang memungkinkan Anda...