ISCTE – Instituto Universitário de Lisboa
Curso: Mestrado em Engenharia Informática
Unidade Curricular: Aprendizagem Automática
Docente: Professor Doutor Luís Nunes
David Alexandre Vieira Marques
Nº83213 [email protected]
Sandro Camilo Alpoim Ferreira
Nº83449 [email protected]
RESUMO
O presente artigo está inserido no âmbito da unidade curricular de Aprendizagem Automática. O seu objetivo é, através da revisão de literatura e interpretação do dataset da plataforma Airbnb, implementar algoritmos de aprendizagem automática que permitam a predição de características do mesmo. Tendo em consideração a constituição do conjunto de dados os mecanismos utilizados serão regressões lineares e polinomiais com recurso a python.
Palavras-chave: Airbnb, aprendizagem automática, machine learning e análise de dados.
O dataset analisado contém dados obtidos através do Airbnb[1] da cidade de Lisboa, que resulta da agregação dos múltiplos datasets disponibilizados, totalizando 147470 registos com 20 atributos. Para a agregação dos mesmos foram adicionadas as colunas inexistentes aos registos mais antigos e foram comparados os seus identificadores para garantir que não existissem registos duplicados.
- Treinar um modelo capaz de prever qual o valor de uma estadia por noite de acordo com as suas características;
- Criar um modelo capaz de recomendar uma casa de acordo com as características pretendidas;
- Verificar quais as variáveis que têm mais peso no valor de uma estadia;
- Tentar relacionar a satisfação dos hóspedes com as características da habitação.
# | Atributo | Tipo | Descrição |
---|---|---|---|
1 | room_id | int | Identificador único da publicação do Airbnb. O URL da publicação é constituído por: http://airbnb.com/rooms/{room\_id}; |
2 | survey_id | int | Identificador único do questionário do Airbnb. |
3 | host_id | int | Identificador único do anfitrião do Airbnb. O URL do anfitrião é constituído por: http://airbnb.com/users/show/{host\_id}; |
4 | room_type | string | Define o tipo do quarto, sendo as opções: "Entire home/apt", "Private room" e "Shared room". |
5 | country | string | País onde o alojamento está localizado. |
6 | city | string | Cidade onde o alojamento está localizado. |
7 | borough | nd. | Freguesia da cidade de Lisboa onde o estudo foi realizado. |
8 | neighborhood | string | Bairro onde o estudo foi realizado. |
9 | reviews | int | Número de reviews feitas ao alojamento. Segundo o Airbnb em cerca de 70% das visitas é feita uma review, podendo isto ser usado para calcular o número total de visitas. |
10 | overall satisfaction | float | Classificação média da satisfação dos clientes do alojamento. |
11 | accommodates | int | Número de visitantes que o alojamento pode acomodar. |
12 | bedrooms | int | Número de quartos do alojamento. |
13 | bathrooms | int | Número de casas de banho do alojamento. |
14 | price | float | Preço em dólares americanos para uma noite. |
15 | minstay | int | Número mínimo de dias para a estadia. |
16 | name | string | Nome do alojamento. |
17 | last_modified | date time | Data e hora em que os dados foram obtidos do site do Airbnb. |
18 | latitute | int | Latitude do alojamento. |
19 | longitude | int | Longitude do alojamento. |
20 | location | string | Localização do google__maps. |
Uma das mais importantes etapas é a limpeza dos dados para garantir a integridade e conformidade dos mesmos, para que posteriormente possam ser utilizados nos algoritmos de inteligência artificial. Na etapa de processamento dos dados foram removidas as colunas e registos com as seguintes características e ordem:
- Colunas com identificadores únicos;
- Colunas cuja totalidade do valor dos atributos é igual ou nulo;
- Coluna location e name por os atributos serem únicos em cada um dos registos;
- Substituição dos valores do atributo overall_satisfaction com os valores 0,0 por NaN, para posteriormente serem removidos;
- Substituição dos valores NaN do atributo minstay por 1;
- Remoção de todos os registos com valores nulos;
- Remoção de outliers;
- Substituição dos valores categóricos através de metodologias one hot encoding e label encoding.
A aplicação das regras reduziu o número total de colunas para 8 e de registos para 96904.
Através da análise da figura anterior observámos a existência de outliers, tendo estes sido removidos por forma a normalizar o conjunto de dados. A remoção dos outliers foi feita da seguinte forma:
- Para cada coluna, é primeiramente computado o resultado de cada valor, relativo à média dessa mesma coluna e ao seu desvio padrão;
- Posteriormente, é considerado o resultado absoluto, pois a direção não é relevante, exceto se for abaixo do limite;
- Finalmente, o resultado desta condição é usado para indexar o conjunto de dados.
Considerando que este modelo não aceita dados categóricos, foi realizada a codificação das propriedades neighborhood e room_type, em valores numéricos. Sendo que as mesmas não possuem uma ordem natural, trata-se de variáveis nominais, representativas de uma categoria.
As abordagens mais comuns para realizar esta codificação são com:
- Ordinal Encoding
Faz a codificação para valores numéricos, mas com indicação explícita da ordem das categorias (exemplo: cool, mild, hot)
- Label Encoding
Faz a codificação para valores numéricos, mas sem ordem (exemplo: hot, cool, mild)
Estas abordagens, por si só não são as mais adequadas neste caso, sendo que a importância das propriedades em questão não é medida pelo seu valor numérico, pelo que, simplesmente fazer essa associação (categoria-número incremental), poderia induzir em erro o modelo, resultando numa fraca predição ou resultados inesperados.
- One Hot Encoding:
Esta abordagem, ao contrário das anteriores, cria uma nova variável binária para cada categoria, em vez de simplesmente codificar cada categoria num número incremental. Este processo aumenta significativamente o desempenho do modelo, como se pode observar pelas matrizes de correlação abaixo. [2]
Nesta abordagem inicial foi feita a substituição dos valores do neighborhood e do room_type por valores inteiros, de forma a possibilitar a sua inserção nos algoritmos de análise. Tendo resultado a seguinte matriz de correlação entre as propriedades do dataset.
Tal como na abordagem anterior, foi feita uma substituição das mesmas variáveis, mas utilizando o mecanismo one hot encoding, resultando na seguinte matriz de correlação.
Através da análise das matrizes de correlação, é visível a diferença no atributo room_type, onde passa a existir uma maior correlação com os atributos preço (price), quartos (bedrooms) e número de hóspedes (accommodates).
A análise de correlação é uma técnica que permite identificar relações interessantes nos dados, que por sua vez nos permitem compreender a relevância dos diferentes atributos, no que diz respeito à variável de output pretendida.
Através desta análise podemos constatar que:
- A correlação de uma propriedade com ela mesma é sempre 1;
- O preço é impactado pela variação das variáveis room_type, accommodates e overhall_satisfaction;
- O room_type está associado ao accommodates, bedrooms e price;
- Constatámos também que o número de hóspedes (accommodates) que o alojamento pode acomodar está diretamente associado ao número de quartos (bedrooms).
Total | Média | Desvio Padrão | Mínimo | 25% | 50% | 75% | Máximo | |
---|---|---|---|---|---|---|---|---|
_ reviews _ | 96904 | 37,906 | 42,788 | 1 | 22 | 22 | 52 | 448 |
_ overall_statisfaction _ | 96904 | 4,598 | 0,380 | 1 | 4,5 | 4,5 | 5 | 5 |
_ accommodates _ | 96904 | 3,888 | 2,034 | 1 | 2 | 4 | 5 | 16 |
_ bedrooms _ | 96904 | 1,495 | 0,929 | 0 | 1 | 1 | 2 | 10 |
_ price _ | 96904 | 67,228 | 36,551 | 17 | 43 | 59 | 82 | 263 |
_ minstay _ | 96904 | 1,251 | 0,612 | 1 | 1 | 1 | 1 | 4 |
A visualização e análise dos dados permite obter um melhor conhecimento dos mesmos através da visualização da sua tendência, facilitando o processo de identificação de padrões. As imagens abaixo permitem descrever os múltiplos atributos que constituem o dataset.
A propriedade room_type pode assumir três valores diferentes, com a seguinte distribuição: Entire home/apt: 77150; Private room: 19198; Shared room: 556.
Podemos observar uma fraca distribuição das reviews para os vários tipos de casas, onde os shared rooms são quase inexistentes, tendo sido excluídos do algoritmo de remoção dos outliers para evitar o seu desaparecimento.
A propriedade neighborhood pode assumir vinte e quatro valores diferentes, com a seguinte distribuição: Santa Maria Maior: 24189; Misericórdia: 20319; Arroios: 10653; São Vicente: 8258; Santo António: 8118; Estrela: 6479; Avenidas Novas: 2928; Penha de França: 2264; Campo de Ourique: 2119; Belém: 1572; Alvalade: 1465; Areeiro: 1362; Alcântara: 1290; Parque das Nações: 1271; Ajuda: 827; Olivais: 672; Campolide: 619; São Domingos de Benfica: 622; Beato: 619; Lumiar: 541; Benfica: 286; Marvila: 246; Carnide: 120; Santa Clara: 87.
Pode observar uma fraca distribuição nas localizações, podendo isto afetar a capacidade de predição do algoritmo.
A satisfação média (overall_satisfaction) pode assumir nove diferentes valores, com a seguinte distribuição: 4,5: 49824; 5,0: 34747; 4,0: 9949; 3,5: 1729; 3,0: 472; 2,5: 120; 2,0: 51; 1,0: 13; 1,5: 10.
Podemos observar uma fraca distribuição nas classificações médias, onde faltam dados sobre as classificações mais baixas. Este pode ser um problema na capacidade de predição do algoritmo.
Podemos observar que a maioria dos preços estão compreendidos entre os 0 e os 100 $.
Através da análise da relação entre o preço (price) e a satisfação média (overall_satisfaction) podemos observar que a classificação mínima atinge o menor (4,5) patamar de preços, enquanto que a classificação mais elevada (5,0) está associada a preços mais elevados.
Sendo que o dataset utilizado tem dados rotulados, e temos disponíveis o conjunto de variáveis dependentes (output) e independentes (input) relacionados entre si, a abordagem escolhida foi a utilização de algoritmos supervisionados para treinar os nossos modelos de forma a aprender sobre essa relação, com o objetivo de fazer as previsões desejadas.
Modelos de regressão são utilizados para prever valores contínuos, como o preço de uma estadia num alojamento, com base em características relevantes.
Observando que a maioria das variáveis no dataset são contínuas e não categóricas, e tendo em conta os objetivos propostos, chegámos à conclusão de que a utilização de algoritmos de regressão, seria a abordagem mais adequada na resolução dos problemas que nos propusemos a resolver.
A regressão linear simples estabelece a relação entre duas variáveis, tentando desenhar uma linha que se aproxima o mais possível dos dados, localizando a inclinação e a intercetação que definem essa linha, minimizando erros de regressão. É uma das principais ferramentas na estatística, e visa prever uma variável de output dependente (Y), baseando-se nas variáveis de input independentes (X), com uma relação existente entre elas(correlação), representada por um modelo matemático. [3]
Raramente uma variável dependente é predita por apenas 1 variável independente. Nos casos da existência de múltiplas variáveis independentes, é utilizada regressão múltipla, e esta pode ser linear e não linear.
A regressão polinomial é uma forma de análise de regressão, em que a relação entre a variável independente(x) e dependente(y) é modelada como um polinómio de grau n em x. [4]
Erro Médio Absoluto (MAE): O MAE mede a magnitude média dos erros num conjunto de predições, sem considerar a sua direção. Representa a média ao longo das amostras de teste, das diferenças absolutas entre predição e observação real, onde todas as diferenças individuais têm peso igual. Não é sensível a outliers quando comparado ao MSE, sendo que não castiga grandes erros. É habitualmente utilizado quando o desempenho é medido com base em dados contínuos, e devolve um valor linear, que calcula a média das diferenças individuais, ponderadas igualmente. Quanto mais baixo o valor, melhor é o desempenho do modelo.
Erro Médio Quadrático (MSE): Calculado com a média entre o quadrado da diferença entre os dados originais e preditos. Na maioria dos problemas de regressão, esta métrica é usada para determinar o desempenho do modelo. É uma das métricas mais comummente utilizadas, mas pouco útil sendo que uma única má predição pode arruinar a capacidade de predição do modelo, isto é, quando o conjunto de dados contém demasiado ruído. É mais útil quando o conjunto de dados contém outliers, ou valores inesperados.
Raiz Quadrada do Erro-Médio (RMSE): É uma medida que calcula a raiz quadrática média dos erros entre valores observados (reais), e predições (hipóteses). No RMSE, os erros são elevados ao quadrado antes de se calcular a média. Isto significa que o RMSE atribui um maior peso a erros maiores, indicando ser mais útil aquando da presença de grandes erros, que afetem drasticamente o desempenho do modelo. Evita tomar o valor absoluto do erro, e esta característica é útil em muitos cálculos matemáticos. Nesta métrica, quanto menor o valor, melhor é o desempenho do modelo.
[MAE] ≤ [RMSE]. O resultado do RMSE será sempre maior ou igual ao do MAE. Se todos os erros tiverem a mesma magnitude, então RMSE=MAE. [5]
A divisão dos dados de teste foi feita com um rácio de 20% dos dados originais, na seguinte ordem:
Tendo sido obtidos os seguintes coeficientes:
Coeficiente | |
---|---|
room__type_ | 21.940168 |
neighborhood | -12.490831 |
reviews | -0.077593 |
overhall__satisfaction_ | 10.904467 |
accommodates | 5.616551 |
bedrooms | 10.514688 |
minstay | 1.325308 |
Através da análise da tabela dos coeficientes retiramos a seguinte informação:
- O aumento de 1 unidade nas seguintes propriedades impacta o preço em:
- Satisfação média: 10.904467$
- Número de hospedes: 5.616551$
- Número de quartos: 10.514688$
- Número de dias: 1.325308$
Erro Médio Absoluto | 18.559050026435113 |
Erro Médio Quadrático | 707.8370238932661 |
Raiz Quadrada do Erro Médio | 26.605206706456276 |
A raiz quadrada do erro médio é inferior a 25% dos valores médios do dataset, indicando que o algoritmo permite fazer boas predições apesar de pouco precisas. O facto de o erro médio absoluto ser inferior ao desvio padrão é também um bom indicador.
O conjunto de dados utilizado para a regressão quadrática é igual ao da regressão linear, com a diferença de que o mesmo é elevado ao quadrado:
Erro Médio Absoluto | 18.027945453279557 |
Erro Médio Quadrático | 677.7216969331704 |
Raiz Quadrada do Erro Médio | 26.033088501619826 |
Através da análise dos resultados obtidos vemos que a diferença para a regressão linear é bastante baixa, podendo ser retiradas as mesmas conclusões.
O objetivo do projeto foi parcialmente cumprido. Apesar de termos tido sucesso nas predições relativas ao preço da estadia por noite, bem como feito uma análise das variáveis mais impactantes na mesma, não nos foi possível criar um modelo capaz de recomendar alojamentos com base nas suas características, e concluímos também que não existia uma correlação entre as características da habitação e a satisfação dos hóspedes.
Devido à fraca representatividade de certas categorias e pela qualidade dos dados no dataset, as suas capacidades de predição poderão ter sido impactadas, como por exemplo, a variável de classificação média, ter um valor de 4.5 numa escala de 1 a 5.
Apesar disso, conseguimos criar um modelo com uma boa capacidade de predição, e considerámos que o pré-processamento realizado foi fundamental nesse sentido. A correlação entre atributos melhorou significativamente com a remoção dos outliers, e a escolha certa do tipo de codificação para as colunas categóricas, sendo notória a diferença na precisão atingida.
[1] "Airbnb Data Collection: Get the Data - Tom Slee." http://tomslee.net/airbnb-data-collection-get-the-data (accessed Jul. 11, 2020).
[2] "ONE HOT ENCODING AND LABEL ENCODING," mc.ai. https://mc.ai/one-hot-encoding-and-label-encoding-2/ (accessed Jul. 11, 2020).
[3] A. Bronshtein, "Simple and Multiple Linear Regression in Python," ards Data Science. https://towardsdatascience.com/simple-and-multiple-linear-regression-in-python-c928425168f9 (accessed Jul. 11, 2020).
[4] A. Hershy, "Simple Linear vs Polynomial Regression," Towards Data Science. https://towardsdatascience.com/linear-vs-polynomial-regression-walk-through-83ca4f2363a3 (accessed Jul. 12, 2020).
[5] "MAE and RMSE — Which Metric is Better? | Human in a Machine World," Medium. https://medium.com/human-in-a-machine-world/mae-and-rmse-which-metric-is-better-e60ac3bde13d (accessed Jul. 13, 2020).