O que é o sktime

Se você trabalha com dados que mudam ao longo do tempo, como vendas mensais, temperatura por hora ou métricas de sistema, você lida com series temporais. O problema e que o ecossistema Python não tinha um lugar só onde ficar: você usava statsmodels para ARIMA, Prophet para forecasting, tslearn para clustering, scikit-learn para classificação. Cada um com sua própria API, seu próprio jeito de preparar os dados.

O sktime surgiu para resolver exatamente isso. E um framework open source que unifica todas essas tarefas em uma API consistente, inspirada no scikit-learn. Lançado originalmente pela equipe da Universidade College London em 2019, hoje e mantido por uma comunidade ativa com mais de 300 colaboradores.

A ideia central e simples: se você sabe usar o scikit-learn, você já sabe usar o sktime. O mesmo padrão de fit(), predict() e transform() se aplica para forecasting, classificação de series temporais, detecção de anomalias e mais.

Como funciona

O sktime organiza tudo em torno de tarefas de aprendizado com series temporais. Cada tarefa tem uma interface própria que herda dos padrões do scikit-learn. Isso significa que você pode usar os mesmos pipelines, cross-validation e grid search que já conhece.

Por baixo dos panos, o framework usa o pandas Series e DataFrame como estrutura de dados principal. Series temporais são representadas como objetos pandas, o que facilita a integração com o resto do ecossistema Python. O sktime cuida da validação do formato dos dados, do alinhamento temporal e das transformações necessárias antes de alimentar os modelos.

O ponto forte e a composição de pipelines. Você pode encadear transformadores (como remoção de sazonalidade ou normalização) com estimadores (modelos de previsão ou classificação) usando a mesma sintaxe do scikit-learn. Isso torna o código mais limpo e reutilizável.

Principais recursos

O sktime cobre um espectro amplo de tarefas:

  • Forecasting (previsão): suporte a ARIMA, ETS, Prophet, modelos de redução baseados em scikit-learn, redes neurais (via plugins) e muito mais. Você pode comparar vários modelos com o mesmo código.
  • Classificação e regressão de series: algoritmos especializados como Rocket, InceptionTime e KNN para classificar ou prever com base em series inteiras.
  • Clustering: agrupamento de series temporais usando DTW e outras métricas especializadas.
  • Detecção de anomalias: identificar pontos ou períodos fora do padrão em series temporais.
  • Transformação: decomposição temporal, diferenciação, extração de features e mais, todos no formato de transformadores componíveis.

Tudo isso com suporte nativo a validação cruzada temporal, onde o teste sempre fica no futuro em relação ao treino.

💡
Dica

Use o ForecastingPipeline do sktime para encadear pre-processamento e modelo de previsão em um só objeto. Assim você avalia tudo junto no cross-validation e evita data leakage.

Como começar: instalação passo a passo

O sktime esta disponível no PyPI e no conda-forge. A instalação básica e rápida:

pip install sktime

Para instalar todas as dependências opcionais (modelos de deep learning, Prophet, etc.):

pip install sktime[all_extras]

No ambiente conda:

conda install -c conda-forge sktime
⚠️
Atenção

A instalação completa com [all_extras] pode demorar alguns minutos e instalar varias dependências pesadas. Para uso inicial, a instalação básica já traz os modelos classicosc como ARIMA, ETS e Theta.

Requisitos mínimos: Python 3.8+, pandas 1.1+ e numpy 1.21+. O sktime funciona bem em notebooks Jupyter, scripts Python e pipelines de dados.

Exemplo prático

Vamos prever as vendas mensais de um produto usando o ARIMA via sktime:

import pandas as pd
from sktime.forecasting.arima import AutoARIMA
from sktime.forecasting.model_selection import temporal_train_test_split

# Dados de exemplo: serie mensal de vendas
vendas = pd.Series(
    [120, 135, 128, 142, 159, 167, 180, 175, 168, 185, 192, 210],
    índex=pd.period_range('2024-01', periods=12, freq='M')
)

# Dividir em treino e teste respeitando a ordem temporal
treino, teste = temporal_train_test_split(vendas, test_size=3)

# Treinar o modelo
modelo = AutoARIMA(sp=12)  # sp=12 para sazonalidade mensal
modelo.fit(treino)

# Prever os próximos 3 meses
previsão = modelo.predict(fh=[1, 2, 3])
print(previsão)

O resultado e uma Serie pandas com os valores previstos para os próximos 3 períodos. O AutoARIMA já escolhe automaticamente os melhores parâmetros p, d, q. Você não precisa testar manualmente.

Para um pipeline com pre-processamento, basta encadear transformadores. Por exemplo, remover a tendência antes de modelar: use Detrender junto com AutoARIMA dentro de um ForecastingPipeline.

Comparação com alternativas

Antes do sktime, os pacotes mais usados para series temporais no Python eram o statsmodels, o Prophet (Meta) e o tslearn. Cada um tem seu nicho:

  • statsmodels: ótimo para modelos estatísticos clássicos (ARIMA, VAR, SARIMAX), mas com API verbosa e sem suporte a pipelines. Melhor quando você precisa de inferência estatística detalhada.
  • Prophet: fácil de usar para forecasting com sazonalidades múltiplas, especialmente em dados de negócios. Mas e limitado a uma tarefa só.
  • tslearn: foca em clustering e classificação com DTW. Não faz forecasting.
  • sktime: cobre tudo em uma API unificada, compatível com scikit-learn. A escolha quando você precisa de flexibilidade ou quer comparar varias abordagens rapidamente.
🚀
Pro tip

O sktime tem integração com PyTorch e Keras via pacotes opcionais. Se quiser usar modelos como N-BEATS ou Temporal Fusion Transformer, instale sktime[dl] e use os estimadores na pasta sktime.forecasting.pytorch.

Pontos positivos e limitações

Pontos positivos: API consistente que reduz drasticamente o código boilerplate; compatibilidade total com scikit-learn permite usar GridSearchCV, pipelines e outros utilitários; comunidade ativa com atualizações frequentes; documentação excelente com muitos tutoriais.

Limitações reais: a instalação completa e pesada e pode gerar conflitos de dependências em ambientes existentes. Alguns modelos mais novos estão disponibilos apenas como plugins externos que precisam de instalação separada.

Outra limitação: o suporte a series temporais múltiplas (multivariate) ainda esta em desenvolvimento para algumas tarefas. Para series univariadas, o sktime e maduro. Para multivariate forecasting complexo, pode ser necessário combinar com outras ferramentas.

Casos de uso reais

O sktime e utilizado em cenários como:

  • Previsão de demanda no varejo: modelar vendas futuras por produto e loja, levando em conta sazonalidade e eventos especiais.
  • Monitoramento de sistemas: detectar anomalias em métricas de infraestrutura como CPU, latência e throughput antes que virem incidentes.
  • Classificação de sinais: identificar padrões em eletroencefalogramas, sensores IoT ou dados financeiros usando algoritmos especializados.
  • Energia e utilities: prever consumo elétrico por hora ou dia para otimizar distribuição e reduzir custos.
💡
Dica

Para quem trabalha em data science aplicado a negócios, o sktime com AutoARIMA ou AutoETS já resolve a maioria dos casos de forecasting sem necessidade de ajuste fino de hiperparametros.

Dicas e boas práticas

💡
Dica

Sempre use o ExpandingWindowSplitter ou SlidingWindowSplitter do sktime para cross-validation. Eles garantem que o dado de teste sempre fica no futuro em relação ao treino, o que é fundamental para series temporais.

⚠️
Atenção

Não use o train_test_split do scikit-learn para series temporais. Ele embaralha os dados aleatoriamente, o que cria data leakage e da resultados enganosamente bons na validação.

🚀
Pro tip

Combine o sktime com o optuna para otimização bayesiana de hiperparametros. Crie um objetivo que usa cross_val_score do sktime e deixe o optuna encontrar os melhores parâmetros automaticamente.

Vale a pena?

Se você trabalha com series temporais com alguma regularidade, sim. O sktime elimina a necessidade de aprender APIs diferentes para cada tarefa e reduz o código repetitivo de preparação de dados.

Para quem esta começando com series temporais, o sktime e um ótimo ponto de entrada: a documentação e rica em exemplos e a consistência com scikit-learn acelera o aprendizado. Para quem já usa statsmodels ou Prophet, vale experimentar o sktime em projetos novos para comparar a experiência.

O próximo passo: instale com pip install sktime, acesse o repositório de exemplos na documentação oficial e escolha um dataset de series temporais que você já conhece para testar.