Uma Metodologia Orientada a Dados para Precificação de …
Transcript of Uma Metodologia Orientada a Dados para Precificação de …
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 deimóveis / André Sampaio do Amaral. - 2018. 41 f.: il.
Monografia (graduação) - Universidade Federal do Rio Grandedo Norte, Centro de Tecnologia, Curso de Engenharia deComputaçã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 - UFRNSistema 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 que levarã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
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 ser treinado 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
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
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 R2, 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 R2. 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 tamanho do 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
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 com ausê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 realidade
imobiliá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
[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