1
resposta

Utilização do train_test_split

Olá pessoal, tudo na paz??

Estou desenvolvendo meu tcc na área de machine learning, o trabalho consiste em um modelo preditivo direcionado a fazer inferências do número total de gols em partidas de futebol nos campeonatos brasileiros de 2000 a 2019, fui questionado pelo meu professor sobre a utilização do método train_test_split para divisão do dataset em treino e teste , segundo ele eu não poderia usar esse método em um problema com correlação temporal, uma vez que ele dividi aleatoriamente o dataset.

As features de entrada (médias de gols sofridos e marcados) foram calculadas baseado-se nas rodadas passadas, agrupando os resultados por ano separadamente, logo as médias referentes a cada time é atualizada a cada nova rodada e guardada em uma das colunas do conjunto de entradas, sendo que os valores de entrada foram calculados em relação a cada time, rodada e ano, suponho então que mesmo dividindo o dataset com train_test_split, as linhas de entrada vão continuar com os valores parametrizdos de forma correta.

não sei se realmente o uso desse método nesse problema está errado, e quais outros eu poderia usar... preciso de bons argumentos ou outra forma de tratar essa parte do problema, quem poderá me salvar?? hahahah

Muito Obrigado!!!

1 resposta

Oii Breno, tudo certinho por aí?

O train_test_split realmente faz com que seus dados sejam separados aleatoriamente e não é efetivo em situações que a correlação temporal é necessária, então nesse caso a afirmação do seu professor faz sentido e caso você queira saber um pouco mais do train_test_split, pode acessar a documentação aqui. Uma das formas de você fazer essa separação é manualmente, ele dá um pouco mais de trabalho em relação ao train_test_split, mas funciona. Usualmente, é feita a separação em 70% para treino e 30% para teste, ou 75/25, fica ao seu critério esse valor. Vou utilizar um exemplo de um dataset com 100 linhas, onde quero que as primeiras 75 sejam de treino e as outras 25 sejam para teste.

treino_x = x[:75]
treino_y = y[:75]
teste_x = x[75:]
teste_y = y[75:]

Depois de fazer essa separação, você pode treinar seu modelo, no exemplo estou usando o LinearSVC da SKLearn mas pode ser qualquer outro.

from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score

modelo = LinearSVC()
modelo.fit(treino_x, treino_y)
previsoes = modelo.predict(teste_x)

acuracia = accuracy_score(teste_y, previsoes) *100
print("A acurácia foi %.2f%%" % acuracia)

Esse exemplo que passei é de um curso de Machine Learning com SKLearn que temos aqui na plataforma, e nele o instrutor explica com mais detalhes como podemos separar os dados de treino e teste, manualmente e com o train_test_split.

Há também outras formas para buscar a separação dos dados em treino e teste, mas para isso seria interessante saber qual o banco de dados você está trabalhando, visto que nem todos os métodos do SKlearn poderiam satisfazer na organização temporal dos seus dados.

E se você quiser saber mais sobre dados correlacionados pelo tempo, nós temos um Alura+ sobre Data Science e Séries Temporais e um artigo de Séries temporais e suas aplicações.

Qualquer outra dúvida, pode me chamar de novo por aqui, tudo bem?

Bons estudos ^^

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!