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

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

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 3.33

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

Deslize para mostrar o menu

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