Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de Data Science > Cursos de Machine Learning > Conteúdos de Machine Learning > Primeiras aulas do curso Classificação: selecionando features

Classificação: selecionando features

Classificação geral - Apresentação

Boas-vindas a mais um curso da Alura. Meu nome é Allan Spadini e vou acompanhar você nesse curso de classificação e seleção de features.

Audiodescrição: Allan é um homem branco, tem cabelos e olhos castanho-escuros. Cabelos curtos. Está em um cenário que ao fundo tem algumas luzes de cor roxa e ciano, do lado esquerdo há um vaso com planta e do direito uma estante com livros e objetos diversos.

Dentro deste curso, trabalharemos com o problema de classificação. Mais especificamente, o problema de classificação de reservas de hotéis. Queremos saber se nossos clientes vão manter ou cancelar uma reserva de hotel.

No contexto deste problema, o que vamos tentar analisar são as colunas do nosso conjunto de dados, as features. Desta forma, vamos tentar identificar e estudar formas de análise e automação da seleção das melhores features, ou seja, das melhores colunas para o nosso conjunto de dados.

Vamos avaliar quais colunas são redundantes e quais realmente contribuem para a classificação e para o ajuste do nosso modelo de machine learning .

Pré-requisitos

Para acompanhar este curso, você já deve conhecer bem os problemas de classificação em machine learning.

Espero você nas próximas aulas!

Classificação geral - Análise de dados

Vamos começar tentando entender o problema.

Imagine que uma empresa do setor hoteleiro coletou uma série de informações dos clientes. A ideia é manter o máximo de reservas possível. Sendo assim, vamos avaliar e tentar ajustar o modelo de Machine Learning para identificar quais clientes vão manter ou cancelar sua reserva. Dessa forma, podemos realizar, por exemplo, uma ação nos clientes que possivelmente vão cancelar a reserva.

Vamos iniciar abrindo o dataset. Já estou com o Google Colab aberto e vou abrir o dataset para tentarmos identificar as tarefas necessárias para aplicar o modelo de Machine Learning e ajustá-lo.

O dataset está no GitHub. Vamos pegar o dataset de hotéis, pegar o arquivo raw (arquivo bruto) de hotel.csv e atribuí-lo à uma URL.

Vou colar a URL e atribuí-la à uma variável de nome URL.

url = 'https://raw.githubusercontent.com/allanspadini/dados-com-muitas-dimensoes/main/dados/hotel.csv'

Com isso feito, vamos começar a utilizar a biblioteca pandas, como de costume. Vou importar o pandas com o comando import pandas as pd e, em uma nova célula, vamos criar nosso dataframe df. O dataframe será criado com o comando df = pd.read_csv(url).

import pandas as pd

df = pd.read_csv(url)

Ao executar o comando "Shift + Enter" teremos o nosso df.

Agora, vou aproveitar uma nova funcionalidade do Google Colab para visualizar esse dataframe e algumas informações dele. Por isso, não farei o df.head. Vou passar o df completo e pressionar "Shift + Enter".

Dessa forma vamos dar uma olhada geral no dataset, apresentando as primeiras e as últimas linhas do dataset. Observamos que temos uma série de informações sobre a reserva vinculada aos clientes do hotel, como número de adultos, número de crianças, números de finais de semana, dias e noites de finais de semana que as pessoas vão passar.

No final do dataset temos nossa informação de interesse, a coluna booking_status. Isso especifica o status da reserva, basicamente, que pode ser 0 ou 1. Indicando se a pessoa manteve ou não a reserva depois de um tempo.

A nova funcionalidade do Google Colab que quer utilizar agora é a geração automática de gráficos. Para isso, vamos clicar no ícone de gráfico localizado à direita. Isso permitirá obter uma ideia geral do dataset.

Com a geração automática de gráficos, podemos analisar algumas features e ter uma ideia de quais informações podem ser importantes para nossa análise.

Através dos gráficos sugeridos pelo Colab, temos uma ideia de que, o número de adultos em um quarto de hotel é em torno de 2 e o número de crianças, na maior parte dos casos, é próximo de 0. Dessa forma, conseguimos ter uma ideia de quais informações são mais relevantes.

Centrando nossa atenção em ajustar o modelo de Machine Learning, um dos passos principais é verificar se existem dados nulos no dataset.

Uma das formas de fazer isso é usando o método isnull(). Ao fazer df.isnull().sum().sum(), conseguimos verificar se existem valores nulos no dataset.

df.isnull().sum().sum()

0

Vamos verificar se a soma dá algum valor. Se der algum valor diferente de zero, significa que temos pelo menos um valor nulo. No nosso caso, não temos nenhum valor nulo.

Outra informação que podemos avaliar é o tipo de dados em cada coluna, utilizado o método info(). Ao executar df.info(), avaliamos cada uma das colunas e o tipo dos dados.

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 34146 entries, 0 to 34145
Data columns (total 31 columns):
 #   Column                            	Non-Null Count  Dtype  
---  ------                            	--------------  -----  
 0   no_of_adults                      	34146 non-null  int64  
 1   no_of_children                    	34146 non-null  int64  
 2   no_of_weekend_nights              	34146 non-null  int64  
 3   no_of_week_nights                 	34146 non-null  int64  
 4   required_car_parking_space        	34146 non-null  int64  
 5   lead_time                         	34146 non-null  int64  
 6   arrival_year                      	34146 non-null  int64  
 7   arrival_month                     	34146 non-null  int64  
 8   arrival_date                      	34146 non-null  int64  
 9   repeated_guest                    	34146 non-null  int64  
 10  no_of_previous_cancellations      	34146 non-null  int64  
 11  no_of_previous_bookings_not_canceled  34146 non-null  int64  
 12  avg_price_per_room                	34146 non-null  float64
 13  no_of_special_requests            	34146 non-null  int64  
 14  type_of_meal_plan_Meal Plan 1     	34146 non-null  int64  
 15  type_of_meal_plan_Meal Plan 2     	34146 non-null  int64  
 16  type_of_meal_plan_Meal Plan 3     	34146 non-null  int64  
 17  type_of_meal_plan_Not Selected    	34146 non-null  int64  
 18  room_type_reserved_Room_Type 1    	34146 non-null  int64  
 19  room_type_reserved_Room_Type 2    	34146 non-null  int64  
 20  room_type_reserved_Room_Type 3    	34146 non-null  int64  
 21  room_type_reserved_Room_Type 4    	34146 non-null  int64  
 22  room_type_reserved_Room_Type 5    	34146 non-null  int64  
 23  room_type_reserved_Room_Type 6    	34146 non-null  int64  
 24  room_type_reserved_Room_Type 7    	34146 non-null  int64  
 25  market_segment_type_Aviation      	34146 non-null  int64  
 26  market_segment_type_Complementary 	34146 non-null  int64  
 27  market_segment_type_Corporate     	34146 non-null  int64  
 28  market_segment_type_Offline       	34146 non-null  int64  
 29  market_segment_type_Online        	34146 non-null  int64  
 30  booking_status                    	34146 non-null  int64  
dtypes: float64(1), int64(30)
memory usage: 8.1 MB

Na maioria dos casos, temos valores inteiros. Contudo, temos uma coluna específica que possui um valor contínuo relacionado ao preço dos quartos de hotel, que é do tipo float.

Um outro ponto que podemos notar é que temos várias colunas com nomes similares, como room_type4, room_type5 e room_type6. Essas são variáveis dummy, onde foram identificadas algumas features através do uso do get_dummies(). Então, em vez de termos valores em texto, na coluna room_type4 temos valor 1 quando a reserva é do tipo 4 e 0 caso contrário. As outras colunas repetem o mesmo padrão, mas o valor 1 aparece quando a reserva é do tipo 5 na coluna room_type5 ou 6 na room_type6. Esse é um detalhe que acho importante observar no nosso dataset.

Concluída a primeira análise geral do dataset, podemos partir para o Machine Learning para tentar ver como será a execução geral e como o Machine Learning está funcionando com esse dataset, sem nenhuma avaliação adicional.

Nos encontraremos no próximo vídeo, onde trabalharemos nessa próxima etapa.

Classificação geral - Treinando um modelo de ML

No vídeo anterior, analisamos o dataset. Verificamos se ele continha valores nulos, se era apropriado para a aplicação do Machine Learning.

Neste vídeo, nossa missão vai ser justamente aplicar o Machine Learning, ajustar o modelo de classificação a esse dataset, sem utilizar nenhum parâmetro específico, apenas verificando a performance do modelo de Machine Learning no dataset, da forma que ele está.

Primeiramente, vou separar os nossos dados entre as features, ou seja, as colunas do nosso dataset que contêm as informações dos clientes, e a coluna alvo, que contém a informação se a pessoa cliente cancelou ou não a reserva no hotel.

Vou criar uma variável de nome X, que será igual ao df.drop. Nele, vou excluir booking_status, ou seja, x será igual ao df.drop(booking_status, 1). Neste caso, eliminei a coluna booking_status, que é a nossa coluna alvo, e mantive apenas as colunas de informações dos clientes.

X = df.drop(['booking_status'],axis=1)

Agora, vou criar a variável y, que é a nossa coluna alvo. Para isso, passarei ao df[booking_status].

y = df['booking_status']

Temos o nosso dataset separado em X e y, e podemos ajustar o modelo de Machine Learning. Para isso, ainda vou dividir o dataset em dados de treino e dados de teste.

Vou fazer a importação do train_test_split para fazer essa divisão, então será from sklearn.model_selection import train_test_split.

from sklearn.model_selection import train_test_split

Agora vou criar X_treino, X_teste, y_treino e y_teste. Podemos invocar o train_test_split, que vai receber o X, y e random_state = 50. Vou passar também o test_size = 0.3 e o stratify = y.

X_treino,X_teste, y_treino, y_teste = train_test_split(X,y, random_state=50, test_size=0.3,stratify=y)

Utilizamos o random_state = 50 para que essa reprodução dessa divisão seja possível, e dividimos os dados sendo 30% para teste e os outros 70% para treino. Utilizamos o stratify para manter a mesma proporção dos dados de uma classe, tanto nos dados de treino quanto nos dados de teste.

Feita a divisão, o próximo passo é ajustar o modelo de Machine Learning. Para isso, preciso importar o modelo de Machine Learning que vamos usar:

from sklearn.ensemble import RandomForestClassifier

Agora precisamos instanciar o modelo, então o modelo será igual ao RandomForestClassifier(random_state=2). O random_state = 2 é utilizado porque o Random Forest também tem uma questão de aleatoriedade nele.

modelo = RandomForestClassifier(random_state=2)

Depois disso, podemos fazer o ajuste do modelo de Machine Learning:

modelo.fit(X_treino,y_treino)

Com o ajuste do modelo de Machine Learning feito, podemos verificar a qualidade do nosso ajuste nos dados de teste. Para isso, faremos:

modelo.score(X_teste,y_teste)

0.920636470128856

Tivemos um valor alto, isso quer dizer que ele está acertando cerca de 92% das vezes na classificação se a pessoa cliente vai manter a reserva ou não.

No entanto, precisamos verificar se os nossos dados estão com uma divisão proporcional, se estão balanceados.

Para isso, faremos df[booking_status].value_counts().

df['booking_status'].value_counts()

0 17073 1 17073 Name: booking_status, dtype: float64

Como retorno do value_counts, temos que para a classe 0 temos 17.073 linhas de exemplo, e para a classe 1 temos 17.073 linhas de exemplo.

Os nossos dados estão balanceados, se não estivessem, se tivéssemos, por exemplo, 90% dos dados para a classe 0, este resultado não seria muito diferente de apenas chutar na classe mais presente do dataset. No nosso caso, temos uma divisão de 50% para uma classe e 50% para outra classe. Assim, este é, aparentemente, um bom resultado de classificação para esses dados, para essa divisão em treino e teste.

Mas, será que se utilizarmos menos colunas, ou se trabalharmos um pouco nas nossas colunas do dataset, conseguiremos fazer melhor?

Veremos isso na próxima aula, onde vamos começar a analisar com mais detalhe os nossos parâmetros, as features do nosso problema. Até a próxima aula!

Sobre o curso Classificação: selecionando features

O curso Classificação: selecionando features possui 97 minutos de vídeos, em um total de 36 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Machine Learning acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas