Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Divisão Treino/Teste & Validação Cruzada | Processamento de Dados de Séries Temporais
Pré-processamento de Dados
course content

Conteúdo do Curso

Pré-processamento de Dados

Pré-processamento de Dados

1. Breve Introdução
2. Processamento de Dados Quantitativos
3. Processamento de Dados Categóricos
4. Processamento de Dados de Séries Temporais
5. Engenharia de Recursos
6. Passando para as Tarefas

bookDivisão Treino/Teste & Validação Cruzada

O último tópico sobre séries temporais será a preparação de dados para treinar e testar modelos de aprendizado de máquina: divisão treino/teste e validação cruzada.

Ao dividir os dados de séries temporais em conjuntos de treino e teste, é importante considerar o aspecto temporal dos dados. Diferentemente de outros tipos de conjuntos de dados, a amostragem aleatória para divisão não é apropriada para dados de séries temporais, pois isso pode levar a vazamento de dados e avaliação tendenciosa do desempenho do modelo.

O método mais comum para dividir dados de séries temporais é usar um ponto fixo no tempo como o ponto de divisão entre os conjuntos de treino e teste. O conjunto de treino inclui todas as observações antes do ponto de divisão, enquanto o conjunto de teste inclui todas as observações após o ponto de divisão.

Por exemplo, pode parecer assim:

12345678910111213
import statsmodels.api as sm import pandas as pd # Load the dataset df = sm.datasets.get_rdataset('weather', 'nycflights13').data df['observation_time'] = pd.to_datetime(df.time_hour) df.drop(columns=['year', 'month', 'day', 'hour', 'time_hour'], inplace=True) print(df.head(10)) # Split data into training and test sets based on time train = df.loc[df['observation_time'] < '2013-08-01'] test = df.loc[df['observation_time'] >= '2013-08-01']
copy

A validação cruzada funciona com a mesma ideia - dividir o conjunto de treinamento em duas partes (como antes) em cada iteração, lembrando que o conjunto de validação está sempre à frente do conjunto de treinamento. Na primeira iteração, treina-se o modelo candidato com os dados meteorológicos de janeiro a março e valida-se com os dados de abril, na iteração seguinte, treina-se com os dados de janeiro a abril e valida-se com os dados de maio, e assim por diante até o final do conjunto de treinamento. Existem, no total, 5 dessas iterações.

Vamos analisar o validador cruzado de séries temporais da biblioteca scikit-learn:

12345678910111213141516171819
from sklearn.model_selection import TimeSeriesSplit import statsmodels.api as sm import pandas as pd # Load the dataset df = sm.datasets.get_rdataset('weather', 'nycflights13').data df['observation_time'] = pd.to_datetime(df.time_hour) df.drop(columns=['year', 'month', 'day', 'hour', 'time_hour'], inplace=True) df.head() # Create TimeSeriesSplit model tscv = TimeSeriesSplit(n_splits=5) # Split train and test sets for i, (train_index, test_index) in enumerate(tscv.split(df)): print(f'Fold {i}:') print(f' Train: index={train_index}') print(f' Test: index={test_index}')
copy
Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 5
some-alt