Olá, meus/minhas chapas, tudo bem com vocês? Ando bastante ocupado com meus estudos de desenvolvimento, mas estou voltando com meus estudos de DataScience e hoje resolvi fazer algo que nunca havia feito nessa rede, escrever um artigo. Aqui, vou ensinar pra vocês como criar pipelines da forma que aprendi com nosso saudoso mestre Cainã Max Couto da Silva.
Primeiramente o que são pipelines? Pipelines são estruturas de códigos criadas para facilitar nossa modelagem de machine studying. Com os pipelines podemos tratar nossos dados utilizando encoders, scalers e imputers para dummyzar, normalizar e imputar dados em datasets, respectivamente, assim como podemos rodar e treinar um modelo. Bem, como diria a bruxa do pica-pau: e la vamos nós!
Bem, primeiramente vamos falar dos módulos que iremos utilizar para gerar os pipelines, todas serão da biblioteca do scikit-learn. Primeiro, utilizaremos o módulo compose para importarmos a função ColumnTransformer. Essa função será a responsável por tratar nossas colunas para podermos rodar nossos modelos, além de transformar dados para melhorar a efficiency dos mesmos, como por exemplo, utilizar o StandardScaler para normalizar dados numéricos, e o OneHotEncoder para dummyzar dados categóricos. Essa função irá receber nossos transformadores (encoders, scalers, and many others) além de receber as colunas nas quais serão aplicados os transformadores e assim criaremos um preprocessador para realizar as transformações.
O outro módulo que iremos utilizar é ele, o astro dessa noite, que conquista o coração de garotinhas e inspira marmanjos por onde passa, nosso herói, nosso escolhido, o nosso trapézio descendente (pois é que a gente quer, é ele que a gente está buscando), o módulo pipeline. Daqui, iremos utilizar a função Pipeline, ela irá receber nossos modelos e nossos preprocessadores depois realizaremos o treinamento com base nos nossos datasets de treino e teste.
OBS: Não farei análise gráfica nesse artigo, irei direto ao ponto, ou seja, vou apenas criar pipeline e mostrar o passo a passo.
Enfim vamos ao passo a passo:
1- Primeiro importaremos nossas bibliotecas, modulos e métodos
2- Agora importaremos nosso dataset. O dataset escolhido foi um dataset de seguros que mostra quanto cada pessoa gasta (costs) de acordo com as options: idade (age), sexo (intercourse), índice de massa corporal (bmi), número de filhos (kids), se é fumante ou não (smoker) e qual região dos EUA a pessoa vive.
3- Agora nos vamos separar nossas options do goal e nossos dados de treino e teste, os dois ultimos utilizaremos nosso querido train_test_split:
4- Agora vamos instanciar nossos transformadores, nosso preprocessador e nosso pipeline. Para dados categóricos utilizamos o OneHotEncoder com os seguintes parâmetros, drop=’if_binary’ para, no caso de colunas que possuam apenas duas variáveis, ele criará apenas uma coluna contendo 0 para uma categoria e 1 para outra, por exemplo, na coluna sexo do nosso dataframe, temos apenas valores masculinos e femininos, caso não colocássemos esse parâmetro, o encoder criaria duas colunas, uma para valores masculinos e outra para feminino, sendo que na coluna masculino, 1 seria para dados masculinos e 0 para femininos e na coluna para valores femininos o inverso. O parâmetro handle_unknown=’ignore’ impede que o OneHotEncoder retorne um erro caso encontre valores desconhecidos nos dados de teste, já o sparse_output=False serve para especificar que a saída do codificador deve ser uma matriz densa (ou seja, uma numpy array
) em vez de uma matriz esparsa (ou seja, uma matriz onde a maioria dos elementos são zeros e que é armazenada de uma forma que economiza espaço).
Para o transformador numérico, utilizaremos o MinMaxScaler, lembrando que aqui eu não estou escolhendo o melhor encoder ou o melhor scaler, como estou escrevendo esse artigo apenas para fins didáticos para ajudar quem deseja aprender um pouco mais sobre pipelines e até mesmo para uso próprio futuro, não vou me ater a esses detalhes.
Emblem após, instanciaremos nosso querido preprocessador com a função ColumnTransformer. Essa função irá receber uma lista de tuplas contendo o nome do transformador ( você pode dar o nome que quiser, pode chamar de Zeca Urubu, Jubileu, Nazaré Tedesco, Coiote (do papaléguas), o que desejar), o transformador e as colunas do dataset em que cada um deles irá atuar.
Por fim, instanciaremos nosso pipeline. Nosso astro da noite, receberá como parâmetros uma lista de tuplas, assim como nosso preprocessador, só que, dessa vez, cada tupla irá conter apenas o nome que você desejar dar a cada elemento (aqui vale o mesmo que o nome dos tranformadores) e a instância do elemento ou o próprio elemento que iremos utilizar no pipeline, aqui colocamos nosso preprocessador e o modelo escolhido para a demonstração foi o GradientBoostingRegressor(). Por fim treinamos nosso pipeline com os dados de treino e teste.
5- Com nosso pipeline criado e treinado, podemos instanciar nossas previsões:
E também podemos criar um dataframe com os dados de teste para observar as previsões:
Instanciando novo dataframe com os dados de teste.
Bem, como diria o Gaguinho: Ppppppor hoje é tutututudo pessoal. Tenham uma boa semana meus/minhas chapas e espero que esse artigo ajude vocês em seus estudos futuros.
E é isso… Até mais.