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.
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.
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.
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:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.