O facto de a base de dados utilizada permanecer estática fez com que a criação do dataset se tornasse mais fácil numa primeira fase, na medida em que nunca foi preciso ter em conta dados que estivessem constantemente a ser recebidos, nomeadamente no que toca à informação relativa aos veículos. Apesar disso, os desafios para que, no final, os dados nesse mesmo dataset tivessem uma qualidade suficientemente boa para que pudesse ser implementado o método de deteção dos outliers foram muitos. Desde logo, impôs-se o problema de a informação necessária estar dividida entre duas tabelas, especificamente as duas maiores da base de dados, tendo sido preciso fazer uma junção das mesmas. Devido ao seu grande volume, este fator levou a que o conjunto de operações para efetuar essa junção se tivesse tornado extremamente moroso. Aliás, os longos tempos de execução foram a norma em todas as operações e interrogações que foram feitas, a princípio à base de dados e posteriormente ao dataset, para poder reduzi-lo ao máximo.
Outro grande fator que limitou uma célere construção do dataset foi o facto de alguns dos atributos necessários possuírem dados inconsistentes devido, maioritariamente, a erros de equipa- mento, como é, de todo, comum em grandes bases de dados de empresas, mormente quando as fontes de dados são muitas e heterogéneas. Devido às várias inconsistências existentes, tornou-se imprescindível o emprego de um conjunto de operações de pré-processamento dos dados, caso contrário os resultados obtidos no final seriam totalmente inconclusivos.
Assim sendo, a criação do melhor dataset possível envolveu várias etapas que vão ser agora explicadas em detalhe.
4.2.1 Junção das tabelas tabela1 e tabela2
Numa primeira fase, os dados necessários encontram-se, como já foi explicado, em duas ta- belas diferentes, mas semelhantes na sua estrutura e função. Assim sendo, a primeira tarefa foi fazer uma junção das duas tabelas. Esta junção apenas foi possível porque os equipamentos dos veículos can bus recolhem e enviam toda a informação precisa, que é armazenada nas duas tabelas.
Construção do dataset e deteção de consumos excessivos
Ao contrário destes, os veículos standard apenas enviam informação para a tabela tabela1, pelo que tiveram de ser ignorados. O maior problema nesta junção foi o facto de o volume de dados de ambas as tabelas ser enorme, o que tornaria o tempo de execução incomportável, pelo que obrigou a que primeiro fosse reduzido o tamanho de tabela1. Para isso foi criada uma tabela com apenas os tuplos de tabela1 cujo valor do atributo que representa o id está presente em tabela2 e retirando aqueles em que o valor do atributo que indica o endereço não termina em "Portugal", para limitar a pesquisa a registos feitos em território nacional e reduzir ainda mais o tempo de execução. Apesar de clara, esta operação teve um tempo de execução de 7h59, tendo reduzido o número de tuplos em aproximadamente 89% para pouco mais de 300 milhões. Desta forma tornou-se possível juntar esta nova tabela reduzida com a tabela tabela2 igualando os valores de ambas as chaves primárias, numa operação que demorou 8h41 a ser executada e da qual resultou uma nova tabela com perto de 161 milhões de linhas. Alguns dos atributos presentes nestas tabelas não têm relevância para o problema em mãos, pelo que foram ignorados, fazendo com que esta nova tabela possua apenas 5 atributos, relativos ao id e à data e hora, que foram capitais para a junção das duas tabelas, e os atributos relativos à quantidade de combustível consumida, à distância percorrida e ao ende- reço, pois estes possuem sempre valor em todos os registos, não sendo, por isso, necessário retirar tuplos por essa razão, o que fez com que o dataset se mantivesse com uma quantidade de dados bastante grande. Na Tabela 4.3 é possível ver um exemplo dos registos existentes nesta nova tabela.
id data e hora combustível distância endereço
31 2016-09-23 17:59:54 57372 239026620 Avenida da Boavista 31 2015-09-23 18:00:24 57372 239027036 Avenida da Boavista 92 2015-09-23 18:01:02 116207,5 36822089 A24
31 2015-09-23 18:01:08 57372,5 239027452 Avenida da Boavista Tabela 4.3: Exemplo de registos da nova tabela do dataset
4.2.2 Redução da nova tabela
Apesar de, nesta fase, o conjunto de dados ser já bastante mais reduzido, de entre os 1212 veículos restantes alguns possuem valores que estão, claramente, incorretos e que tiveram de ser retirados do dataset. O primeiro conjunto de veículos que foram retirados foi aquele em que foi percorrida uma determinada distância, mas o consumo de combustível desde o primeiro até ao último registo foi de 0 litros o que, não sendo possível, se explica como consequência de um problema na leitura dos valores de consumo por parte do equipamento. Os veículos em que se verifica esta situação possuem um gráfico de consumo em função da distância semelhante ao que se pode encontrar na Figura 4.1.
Outro conjunto de veículos que teve de ser retirado foi aquele em que não houve registo de ter sido percorrida qualquer distância, mas houve consumo de combustível, o que leva a que tenham
Construção do dataset e deteção de consumos excessivos
Figura 4.1: Gráfico exemplo de veículo cujo consumo foi de 0 litros
de ser descartados para a análise em questão. Os veículos pertencentes a este conjunto têm gráficos semelhantes aos da Figura 4.2. Depois destas primeiras operações de filtragem foram eliminados 115 veículos, reduzindo então o número para 1097.
Existem também 48 veículos que tiveram de ser afastados porque o seu consumo de com- bustível não era único de entre todos os veículos existentes, e aqueles que possuíam um consumo exatamente igual tinham também percorrido a mesma distância, o que permite inferir que os dados sobre a distância percorrida e/ou o combustível consumido não estavam corretos.
Por fim, existem alguns veículos cujos registos possuem, claramente, erros. Este facto pode ser confirmado analisando os valores do consumo de combustível através do valor médio dos quilómetros percorridos por litro de combustível, dado pela Fórmula 4.1:
k pl=
max(dist ˆancia)−min(dist ˆancia) 1000
max(combust ´ıvel) − min(combust´ıvel) (4.1) Os valores registados de cada veículo dos atributos alusivos ao combustível consumido e à distância percorrida têm, forçosamente, de seguir uma tendência crescente em função do tempo. Assim sendo, a diferença entre o valor máximo registado e o mínimo em ambos os atributos vai representar, respetivamente, o consumo total de combustível e a distância total percorrida entre o primeiro e o último registos. A divisão deste último por 1000 justifica-se pelo facto de os valores estarem expressos em metros e não em quilómetros. Nalguns casos, este valor de quilómetros percorridos por litro encontrava-se numa ordem de grandeza demasiado elevada ou demasiado baixa, razão que motivou a sua eliminação. A visualização de alguns dos gráficos produzidos por
Construção do dataset e deteção de consumos excessivos
Figura 4.2: Gráfico exemplo de veículo cuja distância percorrida foi de 0 quilómetros
estes veículos são esclarecedores dos erros inerentes aos dados que foram registados, como se pode ver na Figura 4.3.
Figura 4.3: Gráficos exemplo de veículos eliminados da análise
Depois destas operações de pré-processamento dos dados, o resultado foi um dataset com 715 veículos e, sensivelmente, 152 milhões de tuplos. Estes veículos possuem um conjunto de dados com um crescimento aproximadamente linear do consumo de combustível em função da distância percorrida. Um gráfico exemplo destes veículos é apresentado na Figura 4.4.
Construção do dataset e deteção de consumos excessivos
Figura 4.4: Gráfico de veículo com dados normais
4.2.3 Divisão em duas tabelas
Para se poder fazer uma análise mais personalizada e que permita obter resultados com um grau de confiança maior, os dados foram divididos em duas tabelas distintas tendo em conta o tipo de via em que cada registo foi recolhido. Esta divisão foi feita recorrendo ao atributo referente ao endereço, que permite saber qual o nome e endereço da via em que foi registado cada tuplo e, assim, fazer uma divisão entre 2 tipos de vias:
• Dentro de localidades: neste conjunto foram colocados registos cujo endereço principiava por "Rua", "Avenida", "Travessa", ou por estadas nacionais, municipais e regionais, entre outros;
• Autoestradas: neste conjunto foram colocados registos cujo endereço principia por "Auto- estrada"ou por itinerário principal ou complementar, entre outros.
A divisão foi motivada pelo facto de estes dois tipos de vias exigirem formas de condução substancialmente diferentes e, desta forma, terem consumos de combustível também eles bastante diferentes. Apesar dos valores presentes neste atributo serem aproximados, o que leva a um au- mento no erro associado aos resultados obtidos, permite fornecer uma análise mais realista dos consumos em dois tipos de vias distintas.
Esta divisão levou a que, novamente, alguns tuplos tivessem de ser afastados da análise, uma vez que não apresentavam uma valor de endereço suficientemente claro para que pudesse ser classificado num destes dois tipos, nomeadamente aqueles cujo valor apenas possuía, por exemplo, o código postal e o concelho ou somente o concelho. Esta dubiedade levou, então, à eliminação de mais de 16 milhões de linhas.
Construção do dataset e deteção de consumos excessivos