Baixe o app para aproveitar ainda mais
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 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 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/
Compartilhar