Buscar

MetodologiaOrientadaADados-Amaral-2018

Prévia do material em texto

Universidade Federal do Rio Grande do Norte 
Centro de Tecnologia 
Graduação em Engenharia de Computação 
Trabalho de Conclusão de Curso 
 
 
 
 
Uma Metodologia Orientada a Dados para 
Precificação de Imóveis 
 
 
 
 
 
 
 
André Sampaio do Amaral 
 
Orientador: Prof. Dr. Ivanovitch Medeiros Dantas da Silva 
 
 
 
 
 
 
Natal, RN 
Novembro de 2018. 
 
 
 
Universidade Federal do Rio Grande do Norte 
Centro de Tecnologia 
Graduação em Engenharia de Computação 
Trabalho de Conclusão de Curso 
 
 
Uma Metodologia Orientada a Dados para 
Precificação de Imóveis 
 
 
 
André Sampaio do Amaral 
 
Orientador: Prof. Dr. Ivanovitch Medeiros Dantas da Silva 
 
 
Trabalho de Conclusão de Curso 
apresentado ao Programa de Graduação em 
Engenharia de Computação da Universidade 
Federal do Rio Grande do Norte como parte 
dos requisitos para a obtenção do título de 
Engenheiro de Computação. 
 
 
 
 
Natal, RN 
Novembro de 2018. 
 
Amaral, André Sampaio do.
 Uma metodologia orientada a dados para precificação de
imóveis / André Sampaio do Amaral. - 2018.
 41 f.: il.
 Monografia (graduação) - Universidade Federal do Rio Grande
do Norte, Centro de Tecnologia, Curso de Engenharia de
Computação. Natal, RN, 2018.
 Orientador: Prof. Dr. Ivanovitch Medeiros Dantas da Silva.
 1. Aprendizado de Máquina - Monografia. 2. Python -
Monografia. 3. Web Scraping - Monografia. 4. Scikit-learn -
Monografia. 5. Regressão - Monografia. 6. Imóveis - Monografia.
I. Silva, Ivanovitch Medeiros Dantas da. II. Título.
RN/UF/BCZM CDU 004.85
Universidade Federal do Rio Grande do Norte - UFRN
Sistema de Bibliotecas - SISBI
Catalogação de Publicação na Fonte. UFRN - Biblioteca Central Zila Mamede
Elaborado por FERNANDA DE MEDEIROS FERREIRA AQUINO - CRB-15/301
 
 
 
Universidade Federal do Rio Grande do Norte 
Centro de Tecnologia 
Graduação em Engenharia de Computação 
Trabalho de Conclusão de Curso 
 
 
 
Trabalho de Conclusão de Curso apresentado à banca examinadora composta pelos seguintes 
membros: 
 
 
 
 
Prof. Dr. Ivanovitch Medeiros Dantas da Silva 
 
 
 
Aguinaldo Bezerra 
 
 
 
Marianne Diniz 
 
 
 
 
 
 
 
 
 
Resumo 
 
Este trabalho apresenta uma metodologia que, através do aprendizado de máquina, seja 
capaz de estimar preços de imóveis em Natal-RN, assim como realizar um levantamento de 
dados relativos a casas e apartamentos postos a venda na internet, em diversos sites de compra e 
venda. Os dados, que serão obtidos por meio da técnica de ​Web Scraping​, serão posteriormente 
usados para o treinamento de um algoritmo de aprendizado de máquina que faz uso de regressão. 
Todo o trabalho foi desenvolvido na linguagem Python, usando especificamente a biblioteca 
Scikit-learn​ que contém diversos algoritmos de aprendizado de máquina. 
 
Palavras-chave: Aprendizado de Máquina; Python; Dados; Web Scraping; Scikit-learn; 
Regressão; Imóveis; 
 
 
 
 
Abstract 
 
This project presents a methodology that is capable of estimating the prices of real estate 
property located in Natal - RN through a machine learning technique, as well as extracting data 
relative to these houses and apartments which are listed for sale on different websites destined 
for the real estate market. The data will be obtained through the Web Scraping approach, for 
subsequent training of a machine learning model which uses regression. All the work developed 
in this project was made using Python, more specifically with the Scikit-learn library which 
contains several different machine learning algorithms. 
 
Key-Words: Machine Learning; Python; Data; Web Scraping; Scikit-learn; Regression; Real 
Estate. 
 
 
 
Sumário 
Lista de Figuras 2 
Lista de Tabelas 3 
Lista de Abreviaturas 4 
Introdução 5 
1.1 Motivações 6 
1.2 Objetivos 7 
1.3 Organização do Trabalho 7 
Fundamentação Teórica 8 
2.1 Web Scraping 8 
2.1.1 Hyper Text Markup Language (HTML) 8 
2.1.2 Hypertext Transfer Protocol (HTTP) 9 
2.2 Aprendizado de Máquina 11 
2.2.1 Introdução 11 
2.2.2 Aprendizado Supervisionado 12 
2.2.2.1 Classificação 12 
2.2.2.2 Regressão 12 
2.2.2.3 Generalizacao, Overfitting e Underfitting 13 
2.2.2.4 Relacionamento entre Viés e Variância 14 
2.2.3 Modelos de Aprendizado de Máquina 15 
2.2.3.2 - Coeficiente de Multipla Determinação 17 
2.2.3.3 Considerações a respeito das diferenças de eficiência entre os tipos de 
modelo 17 
2.2.3.4 - Árvores de decisão 17 
2.2.3.5 - Random Forest Regressor 18 
2.2.3.6 - Gradient Boosted Regression Trees 19 
Desenvolvimento 20 
3.1 Componentes 21 
3.1.1 Python 21 
3.1.2 BeautifulSoup 21 
3.1.3 Requests 21 
3.1.4 Pandas 22 
3.1.4.1 Data Frame 22 
3.1.5 Matplotlib e Seaborn 22 
3.1.6 Scikit-learn 22 
 
 
3.1.6.1 Label Encoder 23 
3.1.6.2 Repeated K-Fold 23 
3.1.6.3 Feature Importance 24 
3.1.6.4 Learning Curve 24 
3.1.6.5 R2 score e Mean Error 25 
3.2 Métodos 26 
3.2.1 Extração de dados 26 
3.2.2 Pré-processamento 27 
Resultados 31 
4.1 Resultados adicionais para Random Forest e Gradient Booster 34 
Conclusões 37 
Referências Bibliográficas 39 
 
 
 
 
 
 
 
 
1 
 
Lista de Figuras 
Figura 2.1 -​​ Estrutura em árvore de um documento HTML 
Figura 2.2​​ - Interação entre usuário e servidor 
Figura 2.3 ​​- Modelo de uma mensagem HTTP 
Figura 2.4 ​​- ​Overfitting, Good Fit​ e ​Underfitting 
Figura 2.5​​ - Viés e Variância. 
Figura 2.6​​ - Relacionamentos de viés e variância com o erro 
Figura 2.7​​ - Exemplo de ​residuals​ de um modelo de regressão 
Figura 2.8​​ - Exemplo de uma árvore de regressão 
Figura 3.1​​ - Etapas da metodologia adotada para a precificação de imóveis 
Figura 3.2 ​​- Validação cruzada 
Figura 3.3​​ - Curvas de aprendizado 
Figura 3.4 - ​​Exibição de anúncios no site Abreu Imóveis 
Figura 3.5 ​​- Fluxograma do Web Scraper projetado. 
Figura 3.6​​ - base de dados ​data​ após pré-processamento 
Figura 3.7 ​​- Cabeçalho da tabela ​mean_data, ​de valores médios dos bairros 
Figura 4.1 ​​- Histograma da variável alvo ​salePrice 
Figura 4.2​​ - Histograma da variável ​salePrice​, para valores menores que 1 milhão 
Figura 4.3​​ - Número de imóveis por bairro 
Figura 4.4​​ - Importância de atributos para o modelo ​Random Forest Regressor 
Figura 4.5​​ - ​learning_curve​ do modelo ​Random Forest Regressor 
Figura 4.6​​ - Importância de atributos para o modelo ​Gradient Boosting Regressor 
Figura 4.7​​ - ​learning_curve​ do modelo ​Gradient Boosting Regressor 
 
2 
 
Lista de Tabelas 
Tabela 3.1​​ - Atributos da base de dados 
Tabela 4.1 ​​- Resultados de testes com validação cruzada para todos os imóveis. 
Tabela 4.2​​ - Resultados de testes com validação cruzada para imóveis do quartil 0.9. 
Tabela 4.3​​ - Resultados de testes com validação cruzada para apartamentos. 
Tabela 4.4​​ - Resultados de testes com validação cruzada para casas. 
 
 
 
3 
 
Lista de Abreviaturas 
 
HTML - ​Hyper Text Markup Language 
HTTP - ​Hypertext Transfer Protocol 
DNS - ​Domain Name System 
TCP - ​Transmission Control Protocol 
TCP/IP - ​Internet protocol suite 
IP - ​Internet Protocol 
IA - Inteligência Artificial 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4 
 
Introdução 
 
Inteligência Artificial (IA) tem sido um tópico bastante diseminado desde a última 
década. Encontrada nas mais diversas tecnologias e tornou-se uma ferramenta fundamental no 
desenvolvimento de softwares modernos. Muitas pessoas acreditam que suas aplicações ainda 
não estão inseridas no nosso cotidiano e que fazem parte de um futuro distante. Algumas outras 
acreditam que os seus resultados ainda não são satisfatórios quando comparados à capacidade da 
mente humana e quelevarão décadas de aprimoramento até se tornarem usuais. 
Um dos seus principais objetivos é replicar a capacidade racional dos seres humanos nos 
computadores, com a finalidade de otimizar a tomada de decisões. Segundo Bellman (1978), “A 
inteligência artificial é a automação de atividades associadas ao pensamento humano, atividades 
como tomada de decisão, resolução de problemas e aprendizado” [17]. 
Embora uma área de estudos nova, o campo da Inteligência Artificial herdou antigos 
conceitos de filosofia, lógica e tomada de decisão. Um dos primeiros eventos significantes na sua 
história foi a publicação do artigo ​Computing Machinery and Intelligence​, por Alan Turing em 
1950. Neste artigo, Turing elaborou um teste que poderia ser usado para determinar se um 
computador pode ser considerado inteligente ou não, assim como definiu as habilidades que uma 
máquina deveria possuir para passar no teste. Uma destas é o aprendizado de máquina, que 
permitiria ao computador aprender e usar sua experiência com a finalidade de formular respostas 
para problemas inéditos. Durante as décadas seguintes, experimentos que buscavam alcançar a 
IA, conduzidos primariamente por universidades e grandes empresas, passariam por sucessos e 
frustrações. Alguns marcos importantes incluem o robô de conversação ​ELIZA ​na década de 60 e 
a vitória do supercomputador ​Deep Blue​ sobre o campeão mundial de xadrez da época [17]. 
Distante da realidade do século passado, o aprendizado de máquina se tornou um popular 
componente de ​softwares modernos, sendo utilizado por empresas e instituições de tamanhos 
variados: multinacionais do vale do silício, universidades de ponta e microempresas. É aplicado 
na resolução de problemas variados como o reconhecimento de som e imagem, desenvolvimento 
de estratégias de mercado, diagnóstico médico e carros autônomos (​self-driving cars​). 
5 
 
Podendo ser também aplicado no mercado imobiliário, o aprendizado de máquina 
apresenta grandes oportunidades. A empresa ​Zillow recebeu bastante atenção recentemente pelo 
seu uso do algoritmo inteligente conhecido como ​Zestimate​, que consegue apresentar ao usuário 
uma estimativa de preço para o seu imóvel. Este modelo conta com dados a respeito de mais de 
100 milhões de imóveis nos Estados Unidos, muitos destes providos por usuários. Com usos que 
são benéficos tanto para compradores quanto para vendedores, existe uma tendência que 
tecnologias similares a esta apareçam no Brasil em algum momento [27]. 
Para que isto aconteça, se faz necessária a existência de dados e informações disponíveis 
em fontes abertas. As cidades de Nova Iorque e Boston, por exemplo, possuem duas bases de 
dados (​NYC Open Data e ​Boston Housing Dataset​) que reúnem informações urbanas diversas e 
já foram utilizadas no desenvolvimento de dezenas de aplicações inteligentes. Distante desta 
realidade, a cidade do Natal não possui uma fonte de informações similar, fazendo da construção 
de aplicações inteligentes para o mercado imobiliário uma tarefa complexa. 
Como já mencionado, o aprendizado de máquina somente pode ser bem sucedido quando 
adquire experiência e esta precisa vir com dados. Por estes motivos, este trabalho apresenta uma 
maneira de adquirir dados que possam representar o cenário do mercado imobiliário da capital 
potiguar. Estes serão necessários para a criação de um algoritmo inteligente capaz de usar a 
experiência adquirida por meio dos dados a respeito da cidade para, finalmente, efetuar uma 
previsão relativa ao valor dos imóveis. 
1.1 Motivações 
 
Embora existam diversos ​websites ​destinados a compra, venda e aluguel de imóveis no 
Rio Grande do Norte, todas as informações a respeito do mercado imobiliário estão disponíveis 
somente nestas páginas espalhadas pela internet. A dificuldade em obter estes dados é uma das 
motivações deste trabalho, já que estes dados imobiliários agrupados em uma única base de 
dados podem ser futuramente utilizados em pesquisas acadêmicas ou informacionais. 
Em um cenário global de aumento da produção de dados e crescimento da popularidade 
das aplicações inteligentes, é importante integrar a cidade de Natal neste novo contexto. Produzir 
6 
 
diversos tipos de dados urbanos como os relacionados a imóveis, violência ou trânsito podem 
futuramente ser uma importante ferramenta que os administradores da cidade do Natal teriam 
para avaliar a eficácia de suas políticas públicas. 
Além disso, as previsões feitas por um modelo de aprendizado de máquina podem ser 
uma ferramenta útil tanto para compradores quanto para vendedores. Os proprietários de imóveis 
poderiam utilizar uma previsão para adquirir melhor entendimento do valor de seu investimento, 
evitando a possibilidade de vendê-lo por um valor abaixo do mercado. O mesmo se aplica a 
aqueles que visam a compra, que poderiam se basear nesta previsão para pagar um preço justo. 
Um modelo eficiente poderia beneficiar também corretores de imóveis ao automatizar parte do 
seu trabalho. 
1.2 Objetivos 
 
O objetivo deste projeto é propor uma metodologia que, através de uma técnica de 
aprendizado de máquina, seja capaz de prever com acurácia preços de imóveis localizados em 
Natal, Rio Grande do Norte. Para alcançar o objetivo geral, também são necessários cumprir 
objetivos específicos, tais como: 
● Adquirir dados relativos a imóveis localizados nesta cidade; 
● Padronizar estes dados extraídos da internet, de maneira que estes sejam adequados para 
o treinamento de um modelo de aprendizado de máquina; 
● Criar visualizações que auxiliem na identificação de características particulares do 
mercado imobiliário da cidade; 
● Examinar diferentes modelos de aprendizado de máquina com os dados relevantes; 
● Verificar a precisão destes modelos e determinar o mais adequado. 
 
 
7 
 
1.3 Organização do Trabalho 
 
Este trabalho possui a seguinte estrutura: o segundo Capítulo revisa a teoria por trás dos 
conteúdos relevantes para o projeto, sendo estes a mineração de dados por meio de ​Web Scraping 
e aprendizado de máquina. O terceiro Capítulo trata do desenvolvimento, que inclui uma 
descrição detalhada de todas as bibliotecas da linguagem Python que foram usadas no projeto, 
assim como a implementação destes algoritmos. O quarto Capítulo é destinado aos resultados das 
análises e o quinto Capítulo às conclusões. 
 
 
 
 
 
8 
 
Fundamentação Teórica 
 
O capítulo a seguir aborda os fundamentos teóricos necessários para o entendimento total 
do trabalho, revisando conceitos sobre ​Web Scraping​ e aprendizado de máquina. 
2.1 ​​Web Scraping 
 
Embora ​Web Scraping não seja uma terminologia nova, há alguns anos esta prática tem 
sido mais comumente conhecida como ​screen scraping ​ou ​data mining ​assim como outras 
terminologias similares. Em tese, ​Web Scraping é a prática de coletar dados de maneira 
automatizada, fazendo requisições HTTP a um servidor da web, na finalidade de extrair páginas 
HTML ou outros tipos de arquivos encontrados em um site [1, 6]. 
2.1.1 ​​Hyper Text Markup Language ​​(​​HTML) 
É uma linguagem usada para representação visual de conteúdo na Web,inicialmente 
proposta por Tim Berners-Lee (1989). Embora esteja em constante evolução desde sua incepção, 
a gramática básica dos documentos HTML tem se mantido, fazendo com que esta linguagem seja 
um dos mais importantes padrões para o trabalho na Web [2]. 
Um arquivo HTML é essencialmente um arquivo de texto, mas o que faz com que esta 
linguagem seja poderosa é a sua estrutura em marcação, que permite definir quais partes do 
documento devem ser projetadas como cabeçalho, links, tabelas e afins. Estas definições em 
marcação acontecem por meio de sequências predefinidas de caracteres, conhecidos como ​tags​, 
que envolvem uma determinada parte do texto. A marcação diz ao navegador como o documento 
está estruturado [2]. 
A estrutura da HTML pode ser interpretada como uma árvore. Como ilustrado na Figura 
2.1, seus elementos internos seguem uma rígida regra de aninhamento: cada ​tag tem seu início e 
fim. A infração desta regra implica em uma má formação do documento [2]. 
 
9 
 
Figura 2.1 -​​ Estrutura em árvore de um documento HTML. 
 
Fonte: Dan Hitchcock Vaughan. Disponível em: <​http://gottheknack.com/​>. Acessado em 13 de novembro de 2018. 
 
O acesso visual a um documento HTML já possibilita o conhecimento de sua estrutura, o 
que implica que é possível então realizar o ​parsing do mesmo, percorrendo sua árvore e 
armazenado suas informações de maneira estruturada, na finalidade de formar uma base de dados 
[6]. 
2.1.2 ​​Hypertext Transfer Protocol​​ (HTTP) 
Para retirar dados da internet, é necessário habilitar o software para a comunicação com 
servidores e serviços web. HTTP é o protocolo mais comum para a comunicação entre um 
cliente ​Web ​(navegadores, por exemplo) e servidores. Virtualmente, qualquer página HTML, 
imagem ou vídeo que é visto por meio de um navegador é entregue por este protocolo. 
O protocolo HTTP pode requisitar praticamente qualquer tipo de recurso disponível em 
um servidor e pode também ser usado para o envio de dados para o servidor [2]. A Figura 2.2 
ilustra como ocorre a interação entre usuário e servidor. 
 
10 
http://gottheknack.com/
 
Figura 2.2​​ - Interação entre usuário e servidor. 
 
Fonte: MUNZERT (2015) 
Quando um website é acessado, o navegador se torna cliente HTTP. O servidor pergunta 
ao servidor DNS (​Domain Name System​) qual endereço IP está associado com o domínio URL 
alvo. Após receber esta resposta, o navegador estabelece uma conexão com o servidor HTTP 
requisitado via TCP/IP. A partir de então cliente e servidor podem trocar informações [2]. 
No caso do ​web scraper​, estas informações serão requisições HTTP. Como ilustrado na 
Figura 2.3, tais mensagens possuem uma estrutura definida tem três partes: linha inicial, 
cabeçalho e corpo. 
Figura 2.3​​ - Modelo de uma mensagem HTTP 
 
Fonte: MUNZERT (2015) 
 
No caso de uma requisição a linha inicial se refere ao método utilizado, caminho para o 
recurso e a última versão que pode ser entendida pelo cliente. O cabeçalho contém metadados e o 
corpo contém os dados carregados pela mensagem. 
11 
 
Existem diversos métodos de requisições HTTP, mas para um ​Web Scraper os mais 
relevantes são ​GET ​e ​POST​. Enquanto ​GET solicita documentos ao servidor, ​POST pode ser 
utilizado para enviar arquivos [2]. 
2.2 Aprendizado de Máquina 
2.2.1 Introdução 
 
O aprendizado de máquina trata da obtenção de conhecimento a partir de dados. Segundo 
Muller (2016, p. 9) “é um campo de pesquisa na interseção da estatística, inteligência artificial e 
ciência da computação, também conhecido como analítica preditiva ou aprendizado estatístico”. 
Nos últimos anos, a aplicação comercial de métodos de aprendizado de máquina tem se tornado 
comum por grandes empresas como Netflix, Amazon, Google e Facebook. As aplicações destes 
métodos abrangem problemas diversos, que variam da recomendação de filmes até a análise de 
sequências de DNA [3]. 
Tradicionalmente, aplicações consideradas como inteligentes faziam extensivo uso de 
lógica condicional para guiar o processo de tomada de decisão, exigindo que o programador 
explicitamente preparasse o algoritmo para lidar com qualquer tipo de entrada inserida pelo 
usuário. Embora tal abordagem possa solucionar diversos casos, ela falha ao lidar com dados 
mais complexos como, por exemplo, o de problemas que envolvem reconhecimento facial [3]. 
De maneira geral, os algoritmos de aprendizado de máquina tem a proposta de formular 
respostas generalizadas sem serem diretamente programados, com a finalidade de automatizar o 
processo de tomada de decisão [3,11]. A resolução de um problema por meio de aprendizado de 
máquina pode ser formulada de diferentes maneiras: o problema pode ser interpretado como 
aprendizado supervisionado, não-supervisionado ou por reforço. 
O aprendizado não-supervisionado se propõe a resolver problemas desprovidos de uma 
resposta conhecida, nos quais só estão disponíveis dados de entrada. O objetivo é de encontrar 
padrões nos dados a fim de agrupá-los, por meio de técnicas como a Clusterização. Já o 
12 
 
aprendizado por reforço é melhor aplicado quando a resposta é condicionada a uma série de 
ações que devem obedecer a regras impostas pelo ambiente [4]. 
Como a problemática tema deste trabalho é a precificação de imóveis, nenhum dos casos 
do parágrafo anterior são adequados para esta resolução em particular. Por este motivo, 
abordaremos apenas o aprendizado supervisionado. 
2.2.2 Aprendizado Supervisionado 
 
Problemas de aprendizado supervisionado são ambientados em situações que envolvem 
exemplos conhecidos. O algoritmo tem a tarefa de aprender o mapeamento de uma entrada X 
para uma saída Y que tem seus valores, considerados as “respostas”, determinados por um 
supervisor [4, 22]. 
Os tais exemplos conhecidos podem ser interpretados como um vetor de valores de 
atributos, contendo um atributo ​alvo​. O aprendizado por supervisão faz uso deste grupo de 
valores rotulados, chamados valores de treinamento​, ​para realizar o aprendizado. Tal algoritmo 
precisa em seguida receber um novo conjunto de dados que não possuam esta resposta, chamado 
conjunto de teste. Como descrito no primeiro parágrafo, seu objetivo é de estimar corretamente o 
rótulo ou valor do atributo alvo [22, 14]. 
Um atributo, podendo também ser chamado de variável ou ​feature​, descreve alguma 
característica ou aspecto de um exemplo. Os tipo mais comuns de atributos encontrados são 
categóricos e contínuos, sendo este último quando a variável ∈ R. Quando o atributo alvo, ou 
target feature do algoritmo é nominal, tem-se um problema de classificação. No caso de valores 
contínuos o problema é de regressão [14]. 
2.2.2.1 Classificação 
 
O objetivo de uma tarefa de classificação é prever rótulos associados a um determinado 
conjunto de atributos. Um problema conhecido deste tipo de tarefa é o de classificação de spam. 
Recebendo como entrada um certo número de emails, o algoritmo tem a missão de classificar 
estes emails em spam ou não-spam. Como mencionado anteriormente, também são providos as 
13 
 
respostas conhecidas para cada email. Após sertreinado com estas informações, o algoritmo irá 
então receber um email nunca visto antes para emitir uma previsão, indicando se este novo email 
é spam ou não [11]. 
2.2.2.2 Regressão 
 
Em um problema de regressão, o que desejamos obter é uma função numérica 
desconhecida que mapeie os atributos do conjunto a uma variável alvo que pertença ao conjunto 
dos números reais [4]. Esta tarefa é então a mais adequada para objetivo deste trabalho, que 
envolve a predição de um atributo alvo que descreve o valor de venda do imóvel. 
2.2.2.3 Generalizacao, ​​Overfitting ​​e ​​Underfitting 
 
Os modelos construídos por meio de aprendizado supervisionado tem como seu objetivo 
final a capacidade de generalização, isto é, realizar predições a partir de dados nunca antes vistos 
por este. 
No entanto, dependendo da situação do conjunto de dados de treinamento, é possível que 
o modelo perca a sua capacidade de generalizar. Como ilustrado na Figura 2.4, quando um 
modelo se ajusta perfeitamente aos dados de treinamento, é possível que esteja seguindo uma 
curva muito sinuosa com alta variância. O alto número de hipóteses representado por este 
modelo pode ser causado por uma proporção ruim entre a quantidade de dados de treinamento e 
variáveis, que falhem ao representar uma situação encontrada após o treinamento. Este fenômeno 
é chamado de ​overfitting e resulta em menor precisão do modelo. A mesma situação pode 
acontecer para o caso da curva pouco se ajustar ao conjunto de dados, causando ​underfitting​, 
podendo ser chamado de ​high bias ​[3, 4]. 
 
 
 
 
 
14 
 
Figura 2.4 ​​- ​Overfitting​, ​Good Fit​ e ​Underfitting​. 
 
Fonte: Grey Atom. Disponível em: <​https://medium.com/greyatom/​>. Acessado em 21 de novembro de 2018. 
2.2.2.4 Relacionamento entre Viés e Variância 
 
Viés, também conhecido como ​bias​, ​é definido como a diferença entre a predição média 
do modelo e o valor alvo correto, já a variância trata das diferenças na predição para um 
determinado dado, como pode ser visto na Figura 2.5. Nesse contexto, uma alta variância indica 
falta de capacidade de generalização do modelo, enquanto que modelos com alto viés tem uma 
tendência à simplificação, levando a um aumento de erro. 
Figura 2.5​​ - Viés e Variância. 
 
Fonte: Scott Fortmann-Roe. Disponível em: <​http://scott.fortmann-roe.com​>. Acessado em 22 de novembro de 
2018. 
15 
https://medium.com/greyatom/
http://scott.fortmann-roe.com/
 
Estes dois elementos podem ser relacionados matematicamente pela fórmula do erro 
abaixo, na qual ​x é a variável independente e 𝑓’(x) é o modelo. O termo σ é o erro irredutível, ou 
ruído, que não pode ser eliminado por nenhum modelo. 
 (2.1) 
 (2.2) 
Como ilustrado na Figura 2.6, um modelo com o mínimo de erro deve levar em 
consideração o equilíbrio entre o viés ​e a variância. Idealmente ambos deveriam ser reduzidos a 
0, mas os casos encontrados no mundo real são finitos e os modelos não são perfeitos [15]. 
Figura 2.6​​ - Relacionamentos do viés e variância com o erro. 
 
Fonte: Scott Fortmann-Roe. Disponível em: <​http://scott.fortmann-roe.com​>. Acessado em 22 de novembro de 
2018. 
2.2.3 Modelos de Aprendizado de Máquina 
 
Neste trabalho, foram abordados três algoritmos de aprendizado de máquina, sendo um 
destes linear (Regressão Linear) e dois não lineares (​Random Forest ​e ​Gradient Booster​). O 
linear foi escolhido pela sua simplicidade, enquanto que os não-lineares pela sua eficiência em 
16 
http://scott.fortmann-roe.com/
 
obter menores erros. Com estes é possível fazer uma comparação entre algoritmos lineares e 
não-lineares no que diz respeito à acurácia. 
 
2.2.3.1 - Regressão Linear 
 
Conhecido também por ​Ordinary Least Squares (OLS), regressão linear é o mais 
elementar dos métodos lineares de regressão. O relacionamento entre uma variável de resposta e 
uma variável independente pode ser linear, representado pela equação matemática: 
 (2.3) 
Na qual ∝ é o valor de Y quando X é igual a zero e β é o coeficiente de regressão que descreve a 
mudança em Y associada a variação em X. 
A eficiência deste modelo pode ser medida pela diferença de resultado entre os valores de 
treinamento e os valores de predição da equação, conhecido pelos termos desvio, ​deviance ou 
residual ​ilustrados pela Figura 2.7. A soma de todos os valores de desvio ao quadrado tem a 
denominação de RSS (​Residual Sum of Squares​), sendo um bom padrão de medição para a 
precisão do modelo [16]. 
Figura 2.7​​ - Exemplo de ​residuals​ de um modelo de regressão. 
 
Fonte: HUTCHESON, G.D.; 2011. 
17 
 
2.2.3.2 - Coeficiente de Multipla Determinação 
 
Uma métrica importante para a avaliação de um modelo é o coeficiente de múltipla 
determinação, ou ​R​2​, uma ferramenta estatística que aponta a porcentagem de variação em um 
determinado atributo alvo que pode ser explicada pelo modelo. Pode ser definido como: 
 (2.4) 
Especificamente este coeficiente expressa a quantidade de variação no alvo que pode ser 
descrita pela variação nos atributos do conjunto de dados. No entanto, a análise isolada deste 
coeficiente não pode determinar se um modelo é válido ou não, sendo possível que um modelo 
ruim possa obter uma alta pontuação de ​R​2​. Sua utilidade é a de comparar dois modelos válidos 
[16]. 
2.2.3.3 Considerações a respeito das diferenças de eficiência entre os tipos de modelo 
 
Segundo Kok (2017), para o problema da precificação imobiliária, modelos baseados em 
regressão linear simples tem uma desvantagem quando comparados aos modelos baseados em 
árvores de decisão, simplesmente porque estes fazem uso de uma fórmula global que pode falhar 
em descrever um relacionamento entre as variáveis não-lineares e o valor de previsão. No caso 
do artigo em questão, o uso de modelos baseados em árvores mostrou resultados superiores ao 
realizar precificação de imóveis [19]. 
Pela similaridade entre a situação descrita pelo artigo e a proposta por este trabalho, foi 
fundamental explorar os modelos baseados em árvores de decisão. 
 
 
 
18 
 
2.2.3.4 - Árvores de decisão 
 
Árvores de decisão são estruturas de dados hierárquicas, definidas como ​Classification 
and Regression Trees - CART por Breiman [5]. Como o próprio nome sugere, podem ser usadas 
tanto para classificação como regressão. Já que a previsão de valores de imóveis se trata de um 
problema de regressão, este trabalho só abordará as árvores de regressão. 
Esta estrutura utiliza uma hierarquia de lógica condicional “if-else” para diferentes 
perguntas, resultando em uma decisão. Este modelo tem o objetivo de realizar ​splitting​, isto é, 
dividir o conjunto de dados em regiões locais, por meio de testes com valores dos atributos. O 
processo de ​split consiste em realizar testes em cada um dos ​nós da árvore, com resultados 
discretos (sim ou não) em seus ramos. Este processo começa na raiz da árvore e é repetido de 
maneira recursiva até alcançar uma folha. Cada uma dessas folhas define uma região local do 
espaço de entradas que possuem os mesmos rótulos, no caso de árvores de classificação, ou 
resultados numéricos próximos para árvores de regressão.A Figura 2.8 ilustra um exemplo de 
uma árvore de regressão [4]. 
Figura 2.8​​ - Exemplo de uma árvore de regressão. 
 
Fonte: ALPAYDIN, E.; 2014. 
19 
 
2.2.3.5 - Random Forest Regressor 
O modelo ​Random Forest é considerado um ​ensemble​, ou seja, uma combinação de 
árvores de decisão que podem ter melhor desempenho. Quando comparadas às árvores de 
decisão tradicionais, as ​Ensemble ​tem a vantagem de não serem tão propensas a ​overfitting. 
Outros modelos se encaixam nesta categoria, mas o ​RandomForest​, assim como o 
Gradient Boosted Decision Tree tem a sua eficácia comprovada em casos de classificação e 
regressão [3]. 
O ​Random Forest se diferencia da árvore de decisão tradicional no que tange ao ​split​. O 
split é definido por uma seleção randômica dos atributos, em contraste com o ​split de uma árvore 
de decisão tradicional, que usa todos os atributos [7]. 
2.2.3.6 - Gradient Boosted Regression Trees 
 
Gradient Boosted Regression Trees​, ou BRT, é um modelo que faz uso de árvores de 
regressão e ​boosting​, um método que combina outros modelos em troca de uma melhora na 
eficiência preditiva. Este modelo computa uma sequência de árvores simplificadas, no qual uma 
sucessiva árvore é construída a partir de resultados de predição obtidos por uma árvore anterior 
[8]. 
 
20 
 
Desenvolvimento 
 
A metodologia aplicada neste trabalho, demonstrada pela Figura 3.1, consiste em quatro 
etapas: coleta de dados, pré-processamento, processamento e análise. A primeira etapa consiste 
em adquirir dados de imóveis da cidade de Natal, através de uma técnica de ​Web Scraping​; nesta 
fase foi projetado um código que efetua uma leitura de uma página da Web e armazena todas as 
informações relevantes encontradas em um anúncio de venda virtual. 
A etapa de pré-processamento precede a execução dos algoritmos de aprendizado de 
máquina, consistindo no tratamento de valores nulos, seleção de variáveis relevantes e a 
preparação necessária para processar tais dados. A fase de processamento seguinte separou o 
conjunto em dados de treinamento e teste, que foram utilizados para gerar um modelo de 
aprendizado de máquina. 
A última fase consiste na análise dos modelos resultantes, com a finalidade de 
compreender melhor o comportamento dos dados para minimizar o erro de suas previsões. Para 
isto, foi necessário retornar às etapas de pré-processamento e processamento e fazer ajustes 
adicionais. 
 
Figura 3.1​​ - Etapas da metodologia adotada para a precificação de imóveis. 
 
Fonte: Autor, 2018. 
21 
 
3.1 Componentes 
 
O projeto foi feito exclusivamente na linguagem Python, usando diversas bibliotecas para 
concluir o objetivo final. No caso da extração de dados da internet, foram utilizadas as 
bibliotecas ​BeautifulSoup e ​Requests​. Para processar e padronizar os dados foi usada ​Pandas​; A 
representação visual dos dados foi feita com ​Matplotlib e, por final, ​Scikit-Learn ​foi usada para a 
criação de modelos de predição, treinamento e avaliação. 
3.1.1 Python 
 
Python é uma linguagem interpretada, multi-paradigma e de alto nível [12]. A linguagem 
foi escolhida para este trabalho pela sua flexibilidade e constante integração com a ciência de 
dados, possuindo um grande número de bibliotecas que continuam a crescer. Também é capaz de 
executar os códigos de ​Web Scraping​ exigidos, usando as bibliotecas ​BeautifulSoup​ e ​Requests​. 
Todos os códigos relacionados ao pré-processamento, análise e modelagem dos dados 
foram feitos em ambiente ​Jupyter Notebook​, uma aplicação ​open-source que permite separar a 
execução de códigos Python em partes, além de possuir a capacidade de renderizar gráficos [18]. 
3.1.2 ​​BeautifulSoup 
 
Beautiful Soup é uma biblioteca Python concebida para a extração de dados de arquivos 
HTML e XML. Ela possui funções e métodos específicos para navegação e realização de buscas 
em um documento aninhado, como é o caso de uma página da Web [13]. 
A ​Beautiful Soup foi empregada neste trabalho para realizar o armazenamento de 
informações relativas a imóveis em sítios da internet que não possuíam uma ferramenta 
formalmente implementada para a obtenção de dados, como por exemplo uma ​Application 
Programming Interface​ (API). 
 
22 
 
3.1.3 ​​Requests 
 
Requests ​é uma biblioteca que facilita a tarefa de enviar requisições HTTP, reduzindo o 
trabalho manual ao mínimo. Suas funções permitem codificar requisições automatizadas de 
páginas inteiras da Web, utilizando uma única linha de código [25]. 
3.1.4 ​​Pandas 
 
Pandas ​é uma biblioteca ​open-source da linguagem ​Python​, criada para facilitar o uso de 
estruturas de dados e análise de dados. O seu objeto ​Data Frame facilita a tarefa de implementar 
modelos estatísticos, combinar ou manipular grupos de dados, tratar dados nulos e relacionar 
diferentes tabelas. Foi concebida para a integração com diversas extensões de arquivo como .xlsx 
e .csv [23]. Foi usada neste trabalho para realizar transformações e manipulações na base de 
dados, por meio do objeto ​Data Frame​. 
3.1.4.1 ​​Data Frame 
 
Data Frame é o principal objeto da biblioteca ​Pandas​. O seu conceito vem dos dados 
“tabulares” amplamente difundidos pelo MS Excel: uma estrutura de dados composta por linhas, 
que descrevem uma devida informação, assim como colunas que determinam certas 
características destes dados. O ​Data Frame permite a realização de operações diversas, como a 
seleção de colunas e linhas, permitindo a rápida manipulação de largas quantias de dados [21]. 
3.1.5 ​​Matplotlib ​​e ​​Seaborn 
 
Seaborn ​e ​Matplotlib são bibliotecas destinadas a criação de gráficos em ambientes 
Python. Ambas provêm imagens de qualidade, possuindo integração com ​Jupyter notebooks e 
também aplicações web [10]. Estas ferramentas foram responsáveis pela plotagem de todos os 
gráficos de barras, histogramas e visualizações utilizadas para realizar as análises presentes neste 
trabalho. 
23 
 
3.1.6 ​​Scikit-learn 
 
Scikit-learn é um módulo Python que contém várias implementações de algoritmos 
supervisionados como ​Random Forest​, ​Linear Regression e ​Gradient Boosting Regressor​. Ele 
busca facilitar o acesso ao aprendizado de máquina utilizando uma sintaxe simplificada, podendo 
ser usado tanto para fins acadêmicos quanto para uso comercial [24]. 
Além de prover os algoritmos usados neste trabalho, esta biblioteca também possui 
importantes componentes para o aprendizado de máquina, no que diz respeito ao 
pré-processamento e análise. 
3.1.6.1 ​​Label Encoder 
 
O componente ​Label Encoder transforma variáveis categóricas em numéricas. Codificar 
os atributos do conjunto de dados utilizado neste trabalho foi crucial, pois algoritmos de 
regressão só conseguem fazer uso de dados que contenham valores numéricos [3]. 
No entanto, o ​label encoder cria um cenário de ordinalidade nas variáveis 
multicategóricas que pode resultar em erros de interpretação pelos modelos lineares se não forem 
tratados adequadamente. 
No exemplo do conjunto de dados deste trabalho, existem diversos atributos que descrevem um 
imóvel. O atributo ​size​, por exemplo, é um valor numérico que representa o tamanhodo imóvel 
em metros quadrados. No entanto, um outro atributo chamado ​hasPool ​contém a informação que 
determina se o imóvel possui piscina. No caso desta coluna, o uso de ​Label Encoder transformou 
todas as entradas contendo a ​string​ ‘Yes’ no valor ‘1’ e as entradas de ‘No’ em ‘0’. 
3.1.6.2 ​​Repeated K-Fold 
 
Repeated K-Fold ​é o componente do ​Scikit-learn que implementa Validação Cruzada (ou 
Cross Validation​). Esta técnica separa o conjunto de dados em dois (treinamento ​e validação) ao 
mesmo tempo que reduz a perda de dados usados na validação. 
24 
 
Para obter os melhores resultados de treinamento é ideal que estejam disponíveis o 
máximo de dados de treinamento possíveis, assim como dados de validação. Como conjuntos de 
dados são finitos, é possível perceber a existência de um ​trade-off : cada dado retirado do 
conjunto de treinamento é um dado a menos para o conjunto de validação e vice-versa. 
Ilustrado pela Figura 3.2, o ​Cross Validation consiste na separação do conjunto em ​K 
subconjuntos, para em sequência realizar ​K iterações de treinamento e validação, nas quais são 
selecionados um destes subconjuntos como o conjunto de validação. Ao final do processo é 
retirada a média dos resultados obtidos por ​K​ experimentos [9]. 
Figura 3.2 ​​- Validação cruzada. 
 
Fonte: Karl Rosaen. Disponível em: <http://karlrosaen.com/ml/learning-log/2016-06-20/>. Acessado em 19 de 
novembro de 2018. 
3.1.6.3 ​​Feature Importance 
 
Feature Importance ​é um método do módulo ​sklearn.ensemble que pode identificar quais 
variáveis tem maior influência no modelo. Instâncias do ​sklearn possuem um atributo 
feature_importances_ ​que ao ser usado durante a construção do modelo de árvores ​ensemble​, 
armazena valores relativos ao peso que uma determinada variável teve no cálculo de um ​split 
[20]. 
25 
 
3.1.6.4 ​​Learning Curve 
 
Na finalidade de construir modelos mais precisos é importante considerar e equilibrar os 
fatores de viés e variância. A função ​learning_curve do módulo ​sklearn.model_selection tem 
como utilidade a criação de curvas de aprendizado que podem identificar estes fatores. 
Em prática, esta função realiza testes sucessivos de validação nos elementos do conjunto 
de treinamento, partindo da primeira instância dos dados. A seguir adiciona-se uma segunda 
instância no teste e o processo se repete até o número máximo de dados disponíveis [26]. 
Naturalmente o primeiro teste terá um erro de treinamento igual a 0 enquanto que o erro 
de validação será enorme. Como visto na Figura 3.3, sucessivos testes levam à criação de duas 
curvas de erro, uma para treinamento e outra para validação. 
 
Figura 3.3​​ - Curvas de aprendizado. 
 
Fonte: Dataquest. Disponível em: <​https://www.dataquest.io/blog​>. Acessado em 22 de novembro de 2018. 
 
Com estes gráficos é possível extrair diferentes informações. Podemos ter, por exemplo, 
um caso que envolve uma convergência entre as duas curvas; isso indica que o aumento do 
número de dados de treinamento não ajude a tornar o modelo mais preciso. De maneira análoga, 
uma tendência de convergência que não tenha resultado em um encontro entre as curvas indica 
que o modelo poderia aprender com um número maior de dados [26]. 
26 
https://www.dataquest.io/blog
 
3.1.6.5 ​​R2 score​​ e ​​Mean Error 
As funções ​r2_score e ​mean_error do módulo ​sklearn.metrics implementam o cálculo do 
coeficiente de determinação e o erro médio, respectivamente. Ambas são indispensáveis para a 
metodologia de avaliação de modelo implementada neste trabalho. 
3.2 Métodos 
3.2.1 Extração de dados 
 
As páginas da web exploradas por este trabalho tipicamente exibem seus imóveis em 
anúncios estruturados como os ilustrados pela Figura 3.4. Já que as informações exibidas neste 
endereço são resumidas e não expõem todos os dados disponíveis, foi necessário adquirir uma 
lista com todos os endereços URL dos imóveis presentes no site, para que uma avaliação mais 
detalhada fosse realizada posteriormente. 
Figura 3.4​​ - Exibição de anúncios no site Abreu Imóveis. 
 
Fonte: Abreu Imóveis. Disponível em: <https://abreuimoveis.com.br>. Acessado em 10 de dezembro de 2018. 
 
27 
 
O fluxograma exibido na Figura 3.5 descreve a rotina a ser seguida pelo código que 
obtém as informações relevantes. Após realizar o ​parsing da página que lista todos os imóveis, a 
função ​find é utilizada para buscar todas as ​tags ​href​, que contém os endereços URL dos 
anúncios completos, armazenando estes em uma lista. Assumindo que todos os anúncios deste 
sítio da internet tinham a mesma estrutura HTML, foi construído um laço de repetição que busca 
tags ​contendo características do imóvel e armazena os valores encontrados nestas em um arquivo 
do tipo ​comma-separated values​ (CSV). 
O processo foi repetido para cada um dos imóveis na lista, tendo como resultado um 
arquivo CSV relativo ao sítio desejado. Para repetir o mesmo processo em outros websites, foi 
necessário adaptar o código para uma tratar uma estrutura HTML diferente, embora que a mesma 
lógica descrita no parágrafo acima tenha sido usada. 
Figura 3.5​​ - Fluxograma do ​Web Scraper​ projetado. 
 
Fonte: Autor, 2018. 
 
3.2.2 Pré-processamento 
 
A partir do processo de ​Web Scraping​, foram obtidas informações a respeito de um total 
de 6163 imóveis, sendo destes 3994 apartamentos e 2169 casas, em 5 diferentes sítios. Foi criado 
um critério para a busca de atributos baseado na quantidade de informação mostrada pelo sítio 
mais completo, totalizando 19 variáveis relevantes, representadas por meio de colunas. Estes 
atributos estão descritos na Tabela 3.1: 
28 
 
Tabela 3.1​​ - Atributos da base de dados 
Atributo Descrição Tipo 
reType Tipo do imóvel Categórico 
size Tamanho (m2) Numérico 
numBedrooms Número de quartos Numérico 
numBathrooms Número de banheiros Numérico 
numParking Número de vagas de garagem Numérico 
condoFee Taxa de condomínio Numérico 
nextToMall Próximo a shopping Categórico 
nextToTrans Próximo a transporte público Categórico 
nextToSchool Próximo a escolas Categórico 
nextToAve Próximo a avenida Categórico 
nextToHosp Próximo a hospitais Categórico 
hasPool Possui piscina Categórico 
hasBBQ Possui churrasqueira Categórico 
hasBalcony Possui varanda Categórico 
safeSystem Possui sistema de segurança Categórico 
safetyStaff Possui vigia Categórico 
SprtsLeisure Possui quadra ou playground Categórico 
district Bairro Categórico 
salePrice Preço de venda Numérico 
 
Todos os dados foram obtidos da internet em formato de texto, o que dificulta o seu uso 
em um algoritmo de aprendizado de máquina. Além disto, estes algoritmos não podem funcionar 
corretamente com dados nulos ou variáveis categóricas, o que indica a necessidade de um 
pré-processamento. 
29 
 
Após converter colunas de contexto numérico para o tipo ​float64 ​ou ​int32​, foi realizado o 
tratamento dos dados categóricos. Foi verificada uma ausência de dados para mais de 80% das 
entradas nas colunas ​nextToMall​, ​nextToTrans​, ​nextToSchool​, ​nextToAve e ​nextToHosp​, o que 
resultou na exclusão destes atributos da base de dados. 
Foi utilizado o critério de que o imóvel precisa de um tipo, valor de venda e bairro. 
Qualquer imóvel comausência de dados em uma destas colunas seria excluído. Nos casos de 
ausência para as demais colunas categóricas (​hasPool​, ​hasBBQ​, ​hasBalcony​, ​safeSystem​, 
safetyStaff​, ​SprtsLeisure​), foi pressuposto que estes atributos não estão presentes no imóvel, pois 
não foram anunciados pelo vendedor. Ao final, foi atribuído o valor zero para a taxa de 
condomínio de casas. 
Possuindo valores que variam entre ‘Sim’ e ‘Não’, dados relativos a atributos categóricos 
foram transformados em valores binários, usando o ​Label Encoder​. O único atributo 
multi-categórico (​district​) foi codificado adquirindo valores que variam de 1 a 35. O uso de 
Label Encoder ​na coluna ​district seria problemático, pois estabeleceria uma ordinalidade 
indesejada (o bairro ‘1’ poderia ser considerado inferior ao bairro ‘2’), mas a coluna district não 
é de fato enviada ao modelo. 
A limpeza dos dados inválidos ou nulos resultou em uma diminuição do tamanho desta 
base de dados, que ao final deste processo passou a ter 14 colunas e 3741 linhas. A Figura 3.6 
ilustra o resultado final do ​encoding​, exibindo o cabeçalho do conjunto de dados. 
Figura 3.6​​ - base de dados ​data​ após pré-processamento. 
 
Fonte: Autor, 2018 
30 
 
Na tentativa de adquirir mais atributos que pudessem descrever os bairros de maneira 
mais detalhada foram exploradas as propriedades da coluna ​district​, que atribui um bairro ao 
imóvel. Esta abordagem buscou a criação de 13 novas colunas contendo valores médios para um 
determinado bairro. 
 
Figura 3.7 ​​- Cabeçalho da tabela ​mean_data, ​de valores médios dos bairros. 
 
Fonte: Autor, 2018 
Como visto na Figura 3.7, foi criada uma nova tabela ​mean_data​. Esta foi relacionada 
com a base de dados ​data por meio da função ​join​, usando a coluna ​district como chave. O 
resultado é um novo conjunto de dados ​joined_data com 27 colunas e 3741 linhas, que apresenta 
uma quantidade maior de informações. 
 
 
 
31 
 
Resultados 
 
Com a base de dados apta para uso em um modelo de aprendizado de máquina, 
finalmente é possível realizar o treinamento e validação usando os modelos escolhidos. A Tabela 
4.1 mostra os resultados de precificação da variável ​salePrice ​obtidos pelos três modelos usando 
validação cruzada, com ​r2_score ​e erro médio quadrático (RMSE) como resultados de avaliação. 
 
Tabela 4.1​​: Resultados de testes com validação cruzada para todos os imóveis. 
 R2 RMSE 
Random Forest 0.833102353099 203675.272228 
Gradient Booster 0.790804677166 225742.721391 
Linear Regression 0.440584969666 385044.322584 
 
O modelo com maior eficácia foi o ​Random Forest​, possuindo um resultado de erro 
médio quadrático de R$ 203.675,00. Levando em conta que o resultado obtido ainda não foi 
satisfatório, foi necessário realizar outro experimento. 
Usando o histograma da Figura 4.1 foi verificada a presença de valores que se 
diferenciam drasticamente dos demais dados. Estes podem impactar negativamente na precisão 
do modelo, fazendo com que seja necessário realizar um novo experimento excluindo-os. 
No âmbito de que um modelo de aprendizado supervisionado busca realizar a 
generalização para a maior parte dos dados, foi realizado um segundo experimento 
desconsiderando todos os dados considerados ​outliers ​acima do quartil 0.9, sendo estes todos os 
imóveis com valores de venda acima de R$ 900.000,00. A Figura 4.2 ilustra a distribuição da 
coluna ​salePrice​ neste cenário. 
 
 
 
32 
 
Figura 4.1 ​​- Histograma da variável alvo ​salePrice​. 
 
Fonte: Autor, 2018. 
 
Figura 4.2​​ - Histograma da variável ​salePrice​, para valores menores que 1 milhão. 
 
Fonte: Autor, 2018. 
 
Com estas considerações adicionais, foram obtidos os resultados presentes na Tabela 4.2, 
usando os mesmos critérios de avaliação anteriores. Observa-se que embora tenha sido obtido 
um RMSE consideravelmente menor nos três modelos, os resultados de R2 permaneceram os 
mesmos. 
 
 
33 
 
 
Tabela 4.2​​: Resultados de testes com validação cruzada para imóveis do quartil 0.9. 
 R2 RMSE 
Random Forest 0.813147937786 81693.4748049 
Gradient Booster 0.764441016354 91722.8072486 
Linear Regression 0.562578969908 124966.191419 
 
Ainda foi constatado que o conjunto de dados poderia ser separado em dois conjuntos 
distintos, um destes contendo somente casas e outro apenas com apartamentos, para a construção 
de dois modelos separados. No caso do modelo de predição de apartamentos, como mostrado na 
Tabela 4.3, houve uma redução de RMSE nos três casos. 
 
Tabela 4.3​​: Resultados de testes com validação cruzada para apartamentos. 
 R2 RMSE 
Random Forest 0.996783814323 18687.2242698 
Gradient Booster 0.924243056587 51715.6546395 
Linear Regression 0.792251007029 85717.2580883 
 
Tabela 4.4​​: Resultados de testes com validação cruzada para casas. 
 R2 RMSE 
Random Forest 0.537682154342 114593.48745 
Gradient Booster 0.591472948467 124174.99021 
Linear Regression 0.477637905915 132316.66534 
 
Experimentos seguintes não foram capazes de reduzir os erros apresentados. Com a 
finalidade de buscar respostas, foi feita uma importante observação a respeito da distribuição de 
imóveis pelos bairros. Como visto na Figura 4.3, é evidente que os dados pertinentes estão 
34 
 
concentrados em alguns poucos bairros, o que afeta diretamente no cálculo dos 13 atributos 
adicionais criados na etapa de pré-processamento. 
Figura 4.3​​ - Número de imóveis por bairro. 
 
Fonte: Autor, 2018. 
 
4.1 Resultados adicionais para ​​Random Forest​​ e ​​Gradient Booster 
 
Como demonstrado na Figura 4.4, existem atributos que têm maior influência na previsão 
correta do valor usando o modelos ​Random Forest​, com o tamanho do imóvel sendo o mais 
importante. Também é possível fazer observações a respeito do conjunto de dados de 
treinamento, como mostrado pela Figura 4.5 que descreve a curva de aprendizado deste modelo. 
35 
 
Figura 4.4​​ - Importância de atributos para o modelo ​Random Forest Regressor​.
 
Fonte: Autor, 2018. 
 
Figura 4.5​​ - ​learning_curve​ do modelo ​Random Forest Regressor​. 
 
Fonte: Autor, 2018. 
 
De maneira análoga as mesmas visualizações foram criadas para o modelo ​Gradient 
Booster, ​como visto nas Figuras 4.6 e 4.7. É observado que o seu comportamento foi diferente do 
Random Forest​, fazendo uso de mais atributos e com suas curvas de aprendizado convergindo 
antes do final do treinamento. 
 
36 
 
 
Figura 4.6​​ -Importância de atributos para o modelo ​Gradient Boosting Regressor​. 
 
Fonte: Autor, 2018 
 
Figura 4.7​​ - ​learning_curve​ do modelo ​Gradient Boosting Regressor​. 
 
Fonte: Autor, 2018. 
 
 
 
37 
 
Conclusões 
 
Para o desenvolvimento deste trabalho, foi necessário o uso de vários conceitos de 
estatística, Inteligência Artificial e desenvolvimento usando a linguagem Python. Foi criado um 
processo que envolve a identificação de um problema, extração dos dados seguido por uma 
avaliação destes e finalmente a modelagem com aprendizado de máquina. 
A respeito da mineração de dados é possível concluir que esta não foi completamente 
satisfatória, dado que não foi obtida uma quantidade de imóveis esparsamente distribuída pelos 
diferentes bairros da cidade, fazendo com que alguns destes não tenham a sua realidadeimobiliária representada corretamente por conta da ausência de dados. Este problema talvez 
pudesse ser contornado com uma mineração de dados ao longo de um período de tempo maior, já 
que os anúncios virtuais de imóveis são retirados das páginas da internet após a venda. A 
quantidade de dados de um aspecto geral poderia ter sido maior, já que muitas das informações 
foram perdidas na etapa de pré-processamento. 
Com relação aos modelos de aprendizado de máquina, pode-se afirmar que nesta base de 
dados o algoritmo ​Random Forest obteve melhor desempenho na classificação dos dados. É 
importante constatar que as variáveis mais importantes para o processo de predição foram 
identificadas, mas no caso deste modelo a maioria dos atributos coletados na internet se 
mostraram pouco influentes no resultado final. Outra observação a ser feita leva em consideração 
às curvas de aprendizado do modelo, que sinaliza para uma possível falta de atributos relevantes, 
indicando que uma maior complexidade dos dados ajudariam a reduzir o erro. 
Embora com erro médio quadrático maior, o ​Gradient Boosting Regressor também se 
mostrou adequado a este conjunto de dados específico, apresentando uma maior capacidade de 
aproveitamento dos atributos presentes. As suas curvas de aprendizado mostraram convergência, 
o que implica que a inclusão de novas entradas de treinamento não necessariamente farão com 
que o modelo seja mais preciso. 
Em relação ao modelo de regressão linear foi constatado que, nas circunstâncias impostas 
por este conjunto de dados, este tem desempenho inferior aos modelos de ​ensemble​, apesar de 
38 
 
menor custo computacional. Também podemos observar que necessita de maior esforço para 
otimizá-lo quando comparado aos modelos não-lineares. 
A linguagem Python se mostrou essencial pela facilidade em lidar com os problemas 
propostos. Foi possível desenvolver todos os aspectos do ambiente da ciência de dados, sendo 
estes a extração e padronização dos dados, visualização gráfica e a criação dos modelos de 
aprendizado supervisionado. 
O ​Scikit-learn demonstrou ser crucial para a execução do trabalho por conter todos os 
componentes necessários para a implementação e avaliação de um modelo de aprendizado de 
máquina, assim como pela sua facilidade de uso, documentação rica em detalhes e 
disponibilidade de informação. 
Existem diversas possibilidades para o desenvolvimento futuro deste trabalho, tanto no 
quesito da mineração de dados quanto para o algoritmo de aprendizado. Algumas sugestões são: 
● Melhorar o conjunto de dados realizando ​Web ​Scraping adicional buscando 
especificamente imóveis de bairros mal representados no ​dataset​ atual; 
● Criar mais ​features​ com o auxílio de ferramentas de localização geoespacial; 
● Usar técnicas de mineração de texto para extrair informações de anúncios de imóveis; 
● O uso de Redes Neurais para estimar o valor do apartamento; 
● Empregar em um sistema web de precificação de imóveis o algoritmo criado neste 
trabalho. 
Finalmente, posso concluir que este trabalho foi produtivo por reunir diferentes áreas de 
conhecimento para identificar um problema, além de cumprir com seus objetivos inicialmente 
propostos para a criação de um modelo de precificação de imóveis. 
 
 
39 
 
Referências Bibliográficas 
 
[1] MITCHELL, R​. ​Web Scraping com Python​​. São Paulo: Novatec Editora Ltda, 2016. 
[2] ​MUNZERT, S.​ ​Automated Data Collection with R a Practical Guide to Web Scraping 
and Text Mining ​​. John Wiley & Sons Inc., 2015. 
[3] ​MULLER A.C.; GUIDO, S. ​Introduction to Machine Learning with Python: a Guide for 
Data Scientists​​. O'Reilly, 2017. 
[4] ALPAYDIN​, E. ​Introduction to Machine Learning​​. The MIT Press, 2014. 
[5] BREIMAN, L; FRIEDMAN, J. H.; OLSHEN, R. A.; STONE, C. J. ​Classification and 
regression trees​​. ​Wadsworth & Brooks/Cole Advanced Books & Software, 1984. 
[6] VARGIU, E.; URRU, M. Exploiting web scraping in a collaborative filtering- based 
approach to web advertising. ​Artif. Intell. Research​​, v. 2, n. 1, p. 44 – 54, 2013. 
[7] BREIMAN, L. Random forests. ​Machine Learning​​, v. 45, n. 1, p. 5 – 32, 2001. 
[8] MOHAN, A.; CHEN, Z.; WEINBERGER, K. Q. Web-Search Ranking with Initialized 
Gradient Boosted Regression Trees. In: ​Yahoo! Learning to Rank Challenge​​. [s.n.], p. 77 – 89, 
2011. 
[9] KOHAVI, R. A Study of Cross-Validation and Bootstrap for Accuracy Estimation and Model 
Selection. ​In: International joint Conference on artificial intelligence. [S.l.: s.n.]​​, v. 14, p. 
1137 – 1145, 1995. 
[10] HUNTER, J. D. Matplotlib: A 2D Graphics Environment. ​Computing in Science and 
Engineering ​​, v. 9, n. 3, p. 90 – 95, 2007. 
[11] PANTEL; PATRICK; LIN, D. Spamcop: A spam classification & organization program​. 
Proceedings of AAAI-98 Workshop on Learning for Text Categorization​​, 1998. 
[12]​ ​​PYTHON SOFTWARE FOUNDATION. ​Python 3.6.6 documentation​​. Wilmington, 
Delaware, EUA, 2018. Disponível em: <https://www.python.org/doc/>. 
40 
 
[13] RICHARDSON, L. ​Beautiful Soup Documentation​​. 2015. Disponível em: 
<​https://www.crummy.com/software/BeautifulSoup/bs4/doc/​>. Acesso em: 20/11/2018. 
[14] MONARD, M. C.; BARANAUSKAS, J. A. Conceitos sobre aprendizado de máquina. 
Sistemas Inteligentes-Fundamentos e Aplicações​​, v. 1, n. 1, 2003. 
[15] SINGH, S. ​Understanding the Bias-Variance Tradeoff​​.​ Disponível em:< 
https://towardsdatascience.com/understanding-the-bias-variance-tradeoff-165e6942b229​ >. 
Acessado em 20 de novembro de 2018. 
[16] HUTCHESON, G.D. Ordinary Least-Squares Regression. ​The SAGE Dictionary of 
Quantitative Management Research​​. p. 224-228, 2011. 
[17] RUSSELL, S. J.; NORVIG, P. ​Artificial Intelligence​​: a modern approach. 3. ed. [S.l.]: 
Prentice-Hall, Inc., 1995. 
[18] FERNANDO PÉREZ; GRANGER, B. E. IPython: A System for Interactive Scientific 
Computing. ​Computing in Science and Engineering​​, v. 9, n. 3, p. 21 – 29, 2007. 
[19] KOK, N.; KOPONEN, E.; MARTÍNEZ-BARBOSA, C. A. Big Data in Real Estate? From 
Manual Appraisal to Automated Valuation. ​The Journal of Portfolio Management​​, v. 43, n. 6, 
p. 202 – 211, 2017. 
[20] GLUCK, C. ​Running Random Forests? Inspect the feature importance​​.​ 2017. 
Disponível em: < 
https://towardsdatascience.com/running-random-forests-inspect-the-feature-importances-with-thi
s-code​-2b00dd72b92e>. Acesso em 20/11/2018. 
[21] REYNOLDS, G. ​What is a Data Frame?​​. 2014. Disponível em: 
<​https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F​ >. Acesso em: 
20/11/2018. 
[22]​ ​​NG, A. ​Machine Learning - Lesson 2​​. ​Disponível em: 
<​https://www.coursera.org/learn/machine-learning​ > Acesso em: 20/11/2018. 
[23]​ ​​MCKINNEY, W. Data structures for statistical computing in python​.​ ​Proceedings of the 
9th Python in Science Conference​​. Vol. 445, 2010. 
41 
https://www.crummy.com/software/BeautifulSoup/bs4/doc/
https://towardsdatascience.com/understanding-the-bias-variance-tradeoff-165e6942b229
https://towardsdatascience.com/running-random-forests-inspect-the-feature-importances-with-this-code
https://towardsdatascience.com/running-random-forests-inspect-the-feature-importances-with-this-code
https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F
https://www.coursera.org/learn/machine-learning
 
[24] PEDREGOSA, F. et al. Scikit-learn: Machine Learning in Python. ​JMLR​​, JMLR, v. 12, n. 
1, p. 2825 – 2830, Outubro 2011. 
[25] REITZ, K. ​Requests: HTTP for Humans​​. Disponível em: 
<http://docs.python-requests.org/en/master/>. Acesso em: 20/11/2018. 
[26] PERLICH, C.Learning Curves in Machine Learning. In: ​Encyclopedia of Machine 
Learning. ​​[s.n.], 2010. p. 577 – 580. 
[27] FAGGELLA, D. ​Machine Learning in Real Estate–Trends and Applications​​. ​Disponível 
em:<​www.techemergence.com/machine-learning-in-real-estate-trends-and-applications/​>. 
Acesso em 20/11/2018. 
 
 
 
 
 
 
 
42 
https://www.techemergence.com/machine-learning-in-real-estate-trends-and-applications/

Continue navegando