Skip to main content

Um pacote para previsão de séries temporais usando modelos de linguagem.

Project description

📊 LLM4Time

Uma biblioteca para previsão de séries temporais com modelos de linguagem

Open in Colab PyPI version Python versions License Docs

Get StartedDocumentaçãoReferênciasContato

🧩 Get Started

LLM4Time é uma biblioteca Python para previsão de séries temporais com modelos de linguagem (LLMs). Ela fornece uma arquitetura modular que abrange:

Instalação

pip install llm4time

Rodando a interface Streamlit

Além disso, disponibilizamos uma interface via Streamlit, proporcionando uma interação mais intuitiva e prática com a biblioteca.

Siga os passos abaixo para clonar o repositório, configurar o ambiente e executar a aplicação.

1. Clone o repositório

git clone https://github.com/zairobastos/LLM4Time.git
cd LLM4Time

2. Crie e ative um ambiente virtual (Opcional)

python -m venv venv
source venv/bin/activate      # Bash/Zsh
source venv/bin/activate.fish # Fish Shell

3. Instale as dependências

python -m pip install --upgrade pip
pip install -r requirements.txt -r requirements-streamlit.txt

4. Execute a aplicação

Usando python 🐍

python app/main.py

Acesse a aplicação em http://localhost:8501

Ou usando docker 🐋

docker compose up

Pré-processamento e tratamento de dados

1. Carregamento dos dados

from llm4time.core.data import loader
from llm4time.visualization import plots

# Carrega os dados CSV, XLSX, JSON ou Parquet
df = loader.load_data("etth2.csv")

# Estatísticas descritivas
stats = Statistics(df["value"])
print(f"Média: {stats.mean}")
print(f"Mediana: {stats.median}")
print(f"1º Quartil: {stats.first_quartile}")
print(f"3º Quartil: {stats.third_quartile}")
print(f"Desvio padrão: {stats.std}")
print(f"Mínimo: {stats.min}")
print(f"Máximo: {stats.max}")
print(f"Valores ausentes: {stats.missing_count}")
print(f"Percentual ausente: {stats.missing_percentage}%")

# Gráfico da série temporal
plots.plot_time_series('Série Temporal - ETTh2', df)

2. Pré-processamento

from llm4time.core.data import preprocessor

# Padroniza para o formato de série temporal
df = preprocessor.standardize(
  df,
  date_col='date',    # Nome da coluna que contém as datas/timestamps
  value_col='OT',     # Nome da coluna que contém os valores da série temporal
  duplicates='first'  # Como tratar linhas duplicadas: 'first' mantém a primeira ocorrência
)

# Garante que todas as datas/horas estejam presentes.
df = preprocessor.normalize(df, freq='h')

3. Imputação de dados ausentes

from llm4time.core.data import imputation

# Substitui os valores ausentes pela média da coluna 'value'.
df = imputation.mean(df)

4. Divisão dos dados

from llm4time.core.data import preprocessor

# Divide o conjunto de dados em treinamento e validação
train, y_val = preprocessor.split(
  df,
  start_date='2016-06-01 00:00:00', # Início do conjunto de treinamento
  end_date='2016-12-01 00:00:00',   # Fim do conjunto de treinamento
  periods=24                        # Número de períodos para previsão
)

Geração de prompts

5. Gerando prompt zero-shot

from llm4time.core import prompt
from llm4time.core import PromptType, TSFormat, TSType

content = prompt.generate(
    train,       # Conjunto de treino [(date, value), ...]
    periods=24,  # Número de períodos que queremos prever
    prompt_type=PromptType.ZERO_SHOT,  # Tipo de prompt: ZERO_SHOT (sem exemplos)
    ts_format=TSFormat.ARRAY,          # Formato da série temporal
    ts_type=TSType.NUMERIC             # Tipo de codificação dos valores da série
)

Previsão com LLMs

6. Instanciando um modelo OpenAI

from llm4time.core.models import OpenAI

model = OpenAI(
  model='gpt-4o',  # Nome do modelo OpenAI a ser utilizado.
  api_key='...',   # Chave de API para autenticação no serviço OpenAI.
  base_url='..'    # URL base do endpoint OpenAI.
)

7. Gerando uma previsão

# Gera a previsão
response, prompt_tokens, response_tokens, time_sec = model.predict(
    content,          # Prompt previamente gerado
    temperature=0.7,  # Grau de aleatoriedade da resposta
    max_tokens=1000   # Número máximo de tokens na resposta
)

print("Resposta do modelo:", response)
print("Número de tokens do prompt:", prompt_tokens)
print("Número de tokens da resposta:", response_tokens)
print("Tempo de execução (s):", time_sec)

Avaliação de métricas

8. Métricas de erro

from llm4time.core import formatter
from llm4time.core.evaluate.metrics import Metrics

# Converte a string da resposta em uma lista numérica.
y_pred = formatter.parse(
  response,
  ts_format=TSFormat.ARRAY,
  ts_type=TSType.NUMERIC
)

metrics = Metrics(y_val, y_pred)

# Métricas de erro
print(f"sMAPE: {metrics.smape}") # Erro percentual simétrico médio
print(f"MAE: {metrics.mae}")     # Erro absoluto médio
print(f"RMSE: {metrics.rmse}")   # Raiz do erro quadrático médio

Visualização interativa

9. Gráficos comparativos entre valores reais e previstos

from llm4time.visualization import plots

# Gera um gráfico comparativo entre valores reais e previstos.
plots.plot_forecast("Comparação entre valores reais e previstos", y_val, y_pred)

# Gera um gráfico de barras comparando estatísticas descritivas.
plots.plot_forecast_statistics("Comparação estatística", y_val, y_pred)

🔍 Referências

@article{zairo2025prompt,
  title={Prompt-Driven Time Series Forecasting with Large Language Models},
  author={Zairo Bastos and João David Freitas and José Wellington Franco and Carlos Caminha},
  journal={Proceedings of the 27th International Conference on Enterprise Information Systems - Volume 1: ICEIS},
  year={2025}
}

👥 Equipe

Zairo Bastos
Zairo Bastos
Mestrando - UFC
📧 🔗
Wesley Barbosa
Wesley Barbosa
Graduando - UFC
📧 🔗
Fernanda Scarcela
Fernanda Scarcela
Graduanda - UFC
📧 🔗
Carlos Caminha
Carlos Caminha
Professor Orientador - UFC
📧 🔗
José Wellington Franco
José Wellington Franco
Professor Orientador - UFC
📧 🔗

📄 Licença

Este projeto está licenciado sob a MIT License.

📬 Contato

Em caso de dúvidas, sugestões ou feedback:

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm4time-0.2.1.tar.gz (37.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm4time-0.2.1-py3-none-any.whl (57.5 kB view details)

Uploaded Python 3

File details

Details for the file llm4time-0.2.1.tar.gz.

File metadata

  • Download URL: llm4time-0.2.1.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for llm4time-0.2.1.tar.gz
Algorithm Hash digest
SHA256 cb46a7113983a284e914e61f62022289ade55239752baf46848dc1bf5d4f5379
MD5 2a24cabe05a66b1ea9b226a2964ec388
BLAKE2b-256 343db4d4bb55b25eb0190cc3962bae54a5279bd2398fa2605d44f7161916f3db

See more details on using hashes here.

File details

Details for the file llm4time-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: llm4time-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 57.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for llm4time-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bf0d8ef7fd9ca2ea5aac69afd7e980683fb21b7d9989cc1366cda1adebd34aca
MD5 d37e24d51f20c3fcd05d0f2be5405520
BLAKE2b-256 154dd2d2f0a29285c860cbb4b28e26f1c560f46115def315770999bf929b620c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page