Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Estou confusa pq em outros lugares o CountVectorizer é usado após a divisão de treino e teste, e é aplicado apenas na parte de treino. Pq nas aulas foi ensinado o contrário?

1 resposta

Eii, Laís! Tudo bem?

Obrigada por trazer essa observação, que faz muito sentido. Quando estamos treinando e avaliando um modelo de Machine Learning, a prática recomendada é separar os dados em treino e teste antes de ajustar (fit) qualquer etapa de pré-processamento que aprenda informações a partir dos dados.

No caso do CountVectorizer, o fit é responsável por aprender o vocabulário a partir dos textos. Por isso, o fluxo recomendado seria:

X_treino, X_teste, y_treino, y_teste = train_test_split(
    texto[coluna_texto],
    texto[coluna_classificacao],
    random_state=4978
)

vetorizar = CountVectorizer(lowercase=False, max_features=50)

X_treino = vetorizar.fit_transform(X_treino)
X_teste = vetorizar.transform(X_teste)

Assim, o vocabulário é aprendido somente com os dados de treinamento. Depois, o mesmo vocabulário é utilizado para transformar o conjunto de teste, sem que o CountVectorizer seja ajustado novamente.

No código da aula, a ordem é diferente:

bag_of_words = vetorizar.fit_transform(texto[coluna_texto])

X_treino, X_teste, y_treino, y_teste = train_test_split(
    bag_of_words,
    texto[coluna_classificacao],
    random_state=4978
)

Aqui, o CountVectorizer é ajustado utilizando toda a base antes da divisão. Então os textos que posteriormente irão compor o conjunto de teste também participam da construção do vocabulário. Isso pode ser considerado uma forma de data leakage, porque uma informação derivada do conjunto de teste (nesse caso, a construção da representação das features) participa da preparação dos dados antes da avaliação.

Existe, porém, uma questão importante sobre o contexto da atividade. O objetivo do exercício é construir uma função simples que permita acompanhar a acurácia à medida que diferentes etapas de processamento são aplicadas ao texto. Por isso, a atividade apresenta uma implementação simplificada, colocando a vetorização antes da divisão dos dados. Isso não significa que as duas abordagens sejam igualmente recomendadas para um projeto de Machine Learning. Elas funcionam tecnicamente, mas, para uma avaliação mais rigorosa da capacidade de generalização do modelo, o ideal é separar primeiro e fazer o fit do CountVectorizer somente no treino.

Ah, complementando, rs, mesmo utilizando o CountVectorizer somente no treino, o treino e teste continuarão utilizando exatamente o mesmo vocabulário. A diferença é que esse vocabulário será aprendido exclusivamente a partir dos dados de treino.

Encaminharei para a equipe responsável o seu feedback para poder dar uma olhada na atividade. E caso tenha outras dúvidas ou sugestões, conte conosco.

Conteúdos para complementar seus estudos
Esse conteúdo pode estar em inglês, para traduzi-lo utilize o tradutor automático do navegador ou clique com o botão direito do mouse sobre a página e selecione a opção Traduzir para o português.
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!