Alura > Cursos de Data Science > Cursos de Machine Learning > Conteúdos de Machine Learning > Primeiras aulas do curso Análise de componentes principais: elaboração de rankings com o PCA

Análise de componentes principais: elaboração de rankings com o PCA

Introdução ao PCA - Apresentação

Olá, eu sou o João, instrutor de ciência de dados da Alura, e gostaria de te convidar a aprender sobre a técnica Análise Fatorial por componentes principais, também conhecida como PCA.

Utilizaremos essa técnica para elaborar um ranking de distritos da cidade de São Paulo, e é importante para acompanhar esse curso, que você tenha conhecimentos da linguagem Python aplicada à ciência de dados, e conhecimentos de matemática e estatística.

Então, vem comigo, que eu vou te ajudar a desvendar o PCA.

Introdução ao PCA - Entendendo o problema

A prefeitura de São Paulo coleta diversas informações a respeito dos seus distritos, e essas informações podem ser utilizadas para tomar decisões que podem ajudar a situação de vida da população.

O intuito do nosso projeto é elaborar um ranking desses distritos, do melhor para o pior, com base em informações coletadas pela prefeitura de São Paulo. Eu tenho um arquivo em formato CSV com essas informações, e eu vou utilizar o Google Colab e a biblioteca Pandas para realizar a leitura desse arquivo.

Então, primeiramente, no meu à esquerda do Google Colab, eu vou selecionar a opção “Arquivos”, e vou selecionar o ícone de “Fazer upload para o armazenamento da sessão”, para fazer o upload do arquivo em formato CSV. Então, abrindo o diretório do meu computador, eu vou selecionar o arquivo “distritos_sp”, vou clicar duas vezes e ele vai fazer o upload para a máquina do Google.

Então, vou fechar primeiro o menu à esquerda do “Arquivos”, e vou importar a biblioteca Pandas para fazer a leitura do arquivo. Então, em uma célula eu vou escrever import pandas as pd, vou executar a célula com “Shift + Enter”.

Agora que a célula executou, em uma nova célula eu vou utilizar a função read csv, dado que o meu arquivo está em formato CSV. E vou salvar em uma variável que tem o mesmo nome do arquivo, que é distritos_sp = pd.read_csv(‘’). Eu coloco aspas porque o caminho do arquivo é uma string.

Então, vou voltar na pasta de arquivos do Google Colab, na lateral esquerda, e vou clicar em cima do arquivo “distritos_sp.csv” com o botão direito, e vou selecionar a opção “Copiar caminho”. Então, cliquei com o botão direito em cima do arquivo, selecionei a opção “Copiar caminho”, posso fechar o menu da lateral esquerda, e vou colar dentro da função esse caminho do arquivo. Ele ficou salvo na minha área de transferência, então, vou colocar dentro da função e dentro das aspas, vou dar um “Ctrl + V”, e ele vai colar o caminho do arquivo, então ficou distritos_sp = pd.read_csv(‘/content/distritos_sp.csv’).

Vou executar essa nova célula com “Shift + Enter”, e na outra célula, eu vou escrever distritos_sp, e vou executar a célula para ver quais informações eu tenho nessa tabela.

Então, eu tenho informação do código IBGE, tenho informação do nome dos distritos na segunda coluna, tenho a informação de renda na terceira coluna e assim por diante. As informações a partir da terceira coluna são informações numéricas a respeito dos distritos de São Paulo.

Para elaborar esse ranking, repara que tem muitas variáveis numéricas, e eu teria que decidir por qual variável eu ordenaria os meus distritos. Então, não seria interessante utilizar apenas uma variável, seria interessante analisar os distritos conforme todas essas informações ao mesmo tempo.

Para eu realizar esse ranking, eu vou utilizar uma técnica, que é a análise fatorial por componentes principais, que também é conhecida como PCA. Vou explicar um pouco sobre o PCA.

Ele é uma técnica de modelagem não-supervisionada, portanto, na nossa tabela não temos uma variável alvo que queremos prever, podemos ter uma tabela, uns dados sem essa variável alvo, porque a técnica é não-supervisionada, nós não estamos buscando uma previsão de valores. Ela vai ser, na verdade, uma transformação, eu vou pegar as variáveis originais, e vou transformar os dados em fatores.

Então, as variáveis vão ser transformadas em fatores, de tal forma que o primeiro fator vai explicar a maior parte do comportamento das variáveis, o segundo fator vai explicar a segunda maior parcela do comportamento das variáveis, e assim por diante. Conforme eu aumento a quantidade de fatores, eu explico menos o comportamento dessas variáveis naquele fator. Claro que os primeiros fatores vão explicar a maior parte do comportamento, enquanto os últimos vão explicar bem pouco.

A quantidade de fatores que eu posso utilizar é no máximo igual a quantidade de variáveis, então, se eu tenho quatro variáveis na nossa tabela, eu posso fazer no máximo quatro fatores, e se eu utilizar todos eles, eu vou explicar todo o comportamento das variáveis.

Onde eu posso aplicar o PCA? Ele pode ser aplicado na redução de dimensionalidade dos dados, então, como eu disse, os fatores vão explicar o comportamento dos dados, e os primeiros fatores, que são conhecidos como fatores principais, eles vão explicar a maior parte do comportamento das variáveis, então, eu poderia substituir as variáveis originais por esses fatores principais, de forma que o tamanho da tabela vai ser reduzido. Então, essa é uma das aplicações que eu posso utilizar o PCA.

Outra, é a remoção de multicolinearidade dos dados. Se eu tenho um problema onde a multicolinearidade causa uma interferência na minha análise, eu posso utilizar o PCA para remover a multicolinearidade dos dados. A multicolinearidade ocorre quando as variáveis possuem uma alta correlação entre si. Então, se, em um problema que eu estou querendo resolver, isso interferir, eu posso utilizar a técnica PCA, porque os fatores que serão gerados não vão ter correlação uns com os outros, então, essa é uma das aplicações do PCA também.

E a outra, é a elaboração de rankings, que é o caso do nosso projeto, nós vamos elaborar rankings com base naquelas variáveis.

E todas essas aplicações seguem o mesmo passo a passo, e o PCA funciona da mesma forma em todas essas aplicações, exceto na elaboração de rankings, que possui um passo a mais. Então, caso você prossiga assistindo o curso, saiba que você consegue resolver qualquer tipo de problema em que pode ser aplicado o PCA fazendo da mesma forma, só o passo extra do ranking que vai ser exigido, caso você estiver realizando um ranking.

E de onde sai? Como podemos construir o PCA? Então, temos as nossas variáveis originais, n variáveis, como eu posso sair disso para a transformação dos dados? Então, primeiro precisamos extrair uma matriz de correlação dos dados. Então, os fatores vão ser construídos com base nessa correlação, então, vai ser identificado qual é a relação das variáveis umas com as outras, e os fatores vão agrupar esse comportamento em comum.

Então, o fator 1 vai agrupar o comportamento de diversas variáveis que possuem correlação entre si. O fator 2 vai agrupar as variáveis que também possuem correlação entre si, mas diferente do comportamento do primeiro fator, e assim por diante.

Como precisamos extrair uma matriz de correlação dos dados, só podemos utilizar variáveis numéricas nesse caso, não podemos utilizar variáveis categóricas para extrair o PCA, porque não conseguimos tirar a correlação de Pearson de variáveis categóricas.

E através dessa matriz de correlação, podemos extrair valores e vetores, que vão explicar o comportamento dessas variáveis. Então, vamos tentar extrair matriz de correlação dos nossos dados.

Introdução ao PCA - Matriz de correlação

Agora que já entendemos um pouco a respeito do PCA, vamos voltar para o Colab, e vamos extrair a matriz de correlação dos dados. Então, primeiro nós precisamos identificar se as colunas numéricas estão com o tipo adequado para extrairmos a matriz de correlação, que é o formato numérico.

Então, em uma célula eu vou escrever distritos_sp.info(), info é uma função da biblioteca Pandas, que vai informar os tipos para cada uma das variáveis. Então, eu vou executar a célula e consigo ver o nome de cada uma das variáveis, e o tipo de cada uma delas.

Então, na primeira coluna eu tenho o código IBGE, está indicando que é do tipo inteiro, mas essa coluna não vamos querer na nossa análise, porque ela não traz nenhuma informação útil, vai ser um número de código para cada linha, e isso não vai ser interessante na nossa análise.

E a segunda coluna também é um nome do distrito, então, é uma variável do tipo categórica, ela não vai ser utilizada na nossa análise. De renda para frente, nós vamos utilizar os dados. E nós podemos ver que o tipo, “Dtype”, está com int ou float, então está tudo certo, podemos continuar com a análise, nós precisamos somente selecionar as variáveis de renda para frente, então, vou dropar as duas primeiras colunas, que é cod_ibge, e distritos.

Então, em uma nova célula, eu vou criar a matriz de correlação, a partir das variáveis numéricas. Então, eu vou escrever variaveis_numericas = distritos_sp.drop([‘cod_ibge’, ‘distritos’], axis = 1). Vai ser a variável que vai receber as informações numéricas, eu vou dropar as duas primeiras colunas. Vou passar uma lista com as duas colunas que eu vou remover. Depois eu vou passar um outro parâmetro para essa função drop que vai ser o axis = 1 para remover as colunas da nossa base de dados.

Além disso, eu já vou extrair a matriz de correlação a partir dessas variáveis numéricas. Então, em uma outra linha eu vou escrever variáveis_numericas.corr, corr é a função que extrai a matriz de correlação dos dados. Então, vou executar essa célula, e vou conseguir ver a matriz de correlação dos dados.

O PCA, nós já vimos que ele vai agrupar as variáveis em fatores com base nas correlações. Então, o interessante é ter correlações altas entre as variáveis, já que as correlações baixas não vão ter impacto na construção dos fatores, porque o intuito é agrupar em fatores as variáveis que possuem comportamento parecido entre si.

Então, por exemplo, entre a variável renda, nós temos uma correlação com “quota”, “escolaridade” e “idade”, valores altos e positivos. Enquanto com renda e com as outras variáveis, nós temos uma correlação negativa, e que tem um impacto mediano, a correlação em -1 e 1, quanto mais próximo de -1 e 1 mais forte é a relação entre as variáveis, e quanto mais próximo de zero, menor a relação entre as variáveis.

Só que essa tabela possui nove variáveis envolvendo a correlação, e seria muito difícil para analisarmos a matriz de correlação, olhando correlação por correlação. Então, para isso eu vou utilizar critérios que vão dizer se os nossos dados são adequados ou não para a utilização do PCA.

Então, se a correlação for baixa entre as variáveis, os nossos dados não vão ser adequados, porque não vão trazer fatores interessantes, o PCA não vai conseguir agrupar tão bem as variáveis. Então, eu vou utilizar uma biblioteca que chama Fator Analyzer para isso. Vou escrever uma célula !pip install fator_analyzer. Vou executar essa célula, que ele vai instalar essa biblioteca.

A partir dessa biblioteca, eu vou utilizar o critério de KMO e o teste de esfericidade de Bartlett, para ver se os nossos dados são adequados para utilização do PCA. Então, o primeiro deles é a estatística KMO, que é um número entre 0 e 1, e quanto mais próximo de 1, melhor a adequação dos dados, ele indica a proporção de variância dos dados, que pode ser considerada comum a todas as variáveis.

Então, vamos colocar em uma célula from fator_analyzer.factor_analyzer import calculate_kmo, e vou executar a célula, para ele importar essa função. Essa função devolve dois resultados: O primeiro deles é o KMO de todas as variáveis, e o segundo é o KMO global. Então, vou colocar em uma nova célula kmo_variaveis, kmo = calculate_kmo(variaveis_numericas), eu vou passar os dados numéricos, não preciso passar matriz de correlação, eu passo os dados brutos. Então, eu executo essa célula, e eu consigo imprimir em uma célula kmo_variaveis, e na outra eu já vou executar o kmo, e vamos analisar.

Então, o KMO, quanto mais próximo de 1, mais indica que os nossos dados são adequados, e existe um critério de base, que a partir do valor 0.5, indica que os nossos dados são adequados para a utilização do PCA. Então, podemos ver que o KMO de todas as variáveis é maior que 0.5, e o KMO global também, é um valor de 0.83, que é maior que 0.5. Então, isso indica que os nossos dados são adequados, a partir do critério de KMO.

Porém, existe um teste estatístico que é mais adequado para checar a adequação dos dados para a técnica do PCA, que é o teste de esfericidade Bartlett, ele é mais poderoso e mais indicado que a estatística KMO.

Então, ele consiste em comparar a matriz de correlação com uma matriz de identidade, que é uma matriz em que a diagonal principal é toda 1, e os outros valores são 0. Então, a hipótese nula está nos dizendo que a matriz de correlação é igual à identidade, e a hipótese alternativa está nos dizendo que a matriz de correlação é diferente da identidade. Então, esse teste busca dizer que os valores de correlação separadamente, são diferentes de 0, cada um deles. Então, se eles forem diferentes de 0, cada um dos valores de correlação entre as variáveis, vai indicar que a correlação das variáveis é alta, é diferente de 0, então, existe uma correlação entre as variáveis, e vamos poder utilizar o PCA, porque ele vai conseguir agrupar bem as variáveis.

Então, para utilizar esse teste, nós vamos importar também do from fator_analyzer.factor_analyzer import calculate_bartlett_sphericity, e vou dar um “Shift + Enter”.

E esse teste retorna também dois resultados, que vai ser a estatística qui_quadrado do teste, então vou escrever qui_quadrado, pvalor = calculate_bartlett_sphericity(variáveis_numericas), vou executar essa célula, e vou ter os dois resultados. Vou dar um print do qui_quadrado, print(qui_quadrado), e na mesma célula vou colocar print(pvalor), e vou executar.

Eu encontrei para o qui_quadrado um valor de 756.75, e para o pvalor um resultado de 9.27 vezes 10, elevado a -136, 9.27120181821801e-136, quando tem esse “e” no final do número, indica que é uma anotação científica, que é vezes 10, elevado aquele número, que é o -136. É um número muito pequeno, então, se o nosso teste, estivermos utilizando um nível de significância de 5%, nós podemos rejeitar a hipótese nula de que a matriz de correlação é igual à identidade. Então, nós ficamos com a hipótese alternativa de que a matriz de correlação é diferente da identidade.

Nós podemos checar fazendo em uma célula pvalor < 0.05, então, se executarmos isso, vamos obter o valor lógico true, isso indica que o pvalor é menor que 0.05, então, podemos rejeitar a hipótese nula de que a matriz de correlação é igual a matriz de identidade.

Então, isso indica, com uma força maior do que utilizar o critério KMO, que os nossos dados são adequados para a utilização do PCA. Agora que sabemos que os nosso dados são adequados, podemos prosseguir, e vamos entender um pouco mais quais são os valores e vetores que são extraídos a partir da matriz de correlação.

Sobre o curso Análise de componentes principais: elaboração de rankings com o PCA

O curso Análise de componentes principais: elaboração de rankings com o PCA possui 133 minutos de vídeos, em um total de 52 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