Get Started • Documentação • Referências • Contato
LLM4Time é uma biblioteca Python para previsão de séries temporais com modelos de linguagem (LLMs). Ela fornece uma arquitetura modular que abrange:
- Pré-processamento e tratamento de dados
- Geração de prompts
- Previsão com LLMs
- Avaliação de métricas
- Visualização interativa
pip install llm4timeAlé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.
git clone https://github.com/zairobastos/LLM4Time.git
cd LLM4Timepython -m venv .venv
source .venv/bin/activate # Bash/Zsh
source .venv/bin/activate.fish # Fish Shellpip install -e .
pip install -r requirements.txt -r requirements-streamlit.txtUsando python 🐍
python app/main.pyAcesse a aplicação em
http://localhost:8501
Ou usando docker 🐋
docker compose upfrom llm4time.core.data import loader
from llm4time.core.evaluate import Statistics
# Carrega os dados CSV, XLSX, JSON ou Parquet
df = loader.load_data("etth2.csv")
# Estatísticas descritivas
stats = Statistics(df['OT'])
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"Quantidade de dados ausentes: {stats.missing_count}")
print(f"Percentual de dados ausentes: {stats.missing_percentage}")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')from llm4time.core.data import imputation
# Substitui os valores ausentes pela média da coluna 'value'.
df = imputation.mean(df)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
)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
)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.
)# 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)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édiofrom 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)@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}
}|
Zairo Bastos Mestrando - UFC 📧 🔗 |
Wesley Barbosa Graduando - UFC 📧 🔗 |
Fernanda Scarcela Graduanda - UFC 📧 🔗 |
Carlos Caminha Professor Orientador - UFC 📧 🔗 |
José Wellington Franco Professor Orientador - UFC 📧 🔗 |
Este projeto está licenciado sob a MIT License.
Em caso de dúvidas, sugestões ou feedback:
- 📧 Email: [email protected]
- 🔗 LinkedIn: Zairo Bastos