Reduzindo o Tempo na Bancada de Testes da Mercedes-Benz

Blog Sobre Engenharia e IA

Reduzindo o Tempo na Bancada de Testes da Mercedes-Benz

Neste projeto vamos criar um modelo para otimizar a velocidade do sistema de testes da Mercedes-Benz. O objetivo é reduzir o tempo que os carros passam na bancada de testes. Por uma questão de privacidade dos dados a empresa não divulgou os nomes das variáveis, apenas da nossa variável target que será ‘y’. Vamos carregar 2 bases de dados para este projeto e vamos tratá-las. Os códigos foram desenvolvidos na linguagem de programação Python na plataforma Google Colab. Vamos para a implementação:

Vamos começar importando as bibliotecas.

Warnings – para avisos de alertas;

Pandas – para análise e manipulação de dados;

Numpy – para realizar operações em arrays multidimensionais;

Seaborn – para visualizar gráficos;

Matplotlib – para visualizações mais interativas;

Scikit-learn – para aplicar modelos de machine learning;

Em seguida vamos carregar os dados da variável de treino e observá-los. Utilizando o comando shape percebemos que a base de dados possui 4209 linhas e 378 colunas. Notamos que a maioria das colunas possui valores 0 e 1.

Agora vamos carregar os dados da variável de teste e observá-los. Utilizando o comando shape percebemos que a base de dados possui 4209 linhas e 377 colunas. Notamos que a maioria das colunas possui valores 0 e 1.

Vamos retirar das 2 bases de dados a coluna ‘ID’, pois não será útil para nosso modelo, mas vamos salvá-la na variável idvar.

Com a ajuda do comando info(), obtemos algumas informações informações e percebemos que existem variáveis do tipo object, que mais adiante serão tratadas.

Agora, com a ajuda do describe(), vamos observar informações estatísticas, como média, mediana e desvio padrão.

Verificando o total de valores nulos o comando isnull().sum().sum(). Podemos observar que não existem valores faltantes em nenhuma das duas base de dados.

Como os recursos numéricos são binários, o conceito de outliers não se aplica. Portando vamos apenas analisar a variável de destino para observar se existe valores discrepantes.

Vamos criar a função ‘check_ouliers’ para identificar outliers

Existem 50 valores discrepantes na variável alvo, o que corresponde a 1% do total de dados, portando vamos excluí-los com o comando drop().

Agora vamos carregar as variáveis categóricas e observar graficamente sua distribuição.

Observamos que a distribuição da variável ‘X4’ está quase toda concentrada na categoria ‘d’, portanto é um recurso que não vai fornecer muitos insights sobre os dados, então vamos excluir a variável logo mais.

Podemos notar que a maioria das variáveis possuem apenas um valor dominante, devido a isso não oferecem variabilidade e informações ao modelo podendo causar o overfitting que é o ajuste excessivo dos dados. Portanto estas variáveis serão removidas.

Vamos encontrar as colunas que possuem 99% valores 0 e 1.

Vamos apagá-las e observar o shape.

Vamos carregar novamente as variáveis categóricas para One-Hot-Encoder()

Unindo os 2 bancos de dados em uma nova variável chamada mercedes, para isto vamos usar o comando concat(), em seguida vamos carregar as variáveis categóricas e transformar para numérica. Logo após vamos dividir novamente o novo banco de dados em treino e teste.

Observando a variável de treino.

Observando a variável de teste.

Separando a base de treino e teste da base treino_enc e dropando a variável alvo ‘y’.

Observando a base de treino sem a variável alvo ‘y’.

Observando y_treino com apenas a variável alvo.

Agora vamos inicializar os modelos de machine learning que vamos testar, Ridge Regression, Lasso Regression, SVM, XGBR, Random Forest Regression e CatBooster Regression. Vamos analisar o score de cada um e treinaremos o nosso modelo com o que apresentar a melhor pontuação.

Também vamos utilizar a validação cruzada ou cross-validation, que é uma técnica fundamental em aprendizado de máquina e estatística usada para avaliar a capacidade de generalização de um modelo. Ela permite avaliar a performance do modelo de maneira mais robusta do que usando uma simples divisão de treino e teste. Para isto vamos usar o KFold().

Fazendo os testes. Percebemos que o algoritmo Ridge Regression nos deu a melhor pontuação com 0.66.

Vamos criar o modelo com o Ridge().

A variável param_grid define uma grade de parâmetros para realizar a busca pelos melhores hiperparâmetros do modelo Ridge usando GridSearchCV. O objetivo é encontrar os melhores valores para alpha e solver que maximizem a performance do modelo.

Alpha é o parâmetro de regularização para o modelo, pois controla a força da regularização. Valores mais altos aumentam a regularização e valores mais baixos a reduzem. Os valores fornecidos serão testados para encontrar qual proporciona a melhor performance.

Solver especifica o algoritmo usado para resolver a equação de regularização Ridge:

  • Auto escolhe automaticamente o melhor solver com base nas características dos dados.
  • SVD usa a decomposição em valores singulares (SVD) para resolver a equação. É eficiente para problemas com muitas features.
  • Choleski usa a decomposição de Cholesky, eficiente para problemas pequenos.
  • Isqr é um método iterativo adequado para problemas de grande escala.
  • Sparce_cg é um método de gradiente conjugado, adequado para grandes problemas esparsos.
  • Sag usa o algoritmo de gradiente estocástico com média (Stochastic Average Gradient), eficiente para problemas de grande escala.
  • Saga é Uma variação do Sag que suporta L1 e L2.

Em seguida na variável best_model vamos encontrar os melhores hiperparâmetros usando a técnica de GridSearchCV() que é uma ferramenta do scikit-learn que realiza uma busca exaustiva sobre uma grade de parâmetros especificada para encontrar a melhor combinação de hiperparâmetros para um modelo de machine learning. A busca é feita treinando o modelo com todas as combinações possíveis de parâmetros fornecidos e avaliando a performance usando validação cruzada. Foi passado como parâmetros estimator=model que é o modelo base que estamos ajustando, param_grid=param_grid é um dicionário onde as chaves são os nomes dos hiperparâmetros que desejamos ajustar e os valores são listas de valores que queremos testar para cada hiperparâmetro e CV=3 define o número de folds para a validação cruzada, neste caso significa que a validação cruzada será feita com 3 divisões (folds) dos dados, cada combinação de parâmetros será avaliada em 3 partes diferentes dos dados para garantir que a performance do modelo seja consistente.

Logo após vamos iniciar o treinamento fit() com os melhores parâmetros encontrados. O modelo nos deu um score de 62.43%.

y_pred é o array ou lista contendo as previsões do modelo para os dados de teste.

pd.Series(y_pred, x_teste) converte as previsões y_pred em uma Série do Pandas com o nome da coluna ‘y’.

Por último concatenamos a variável idvar que separamos no inicio do projeto com a variável teste_predictions que contém as previsões feitas pelo nosso modelo, assim obtemos os resultados no novo dataset mercedes_results.

Tags: , , , , ,

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *