• Nenhum resultado encontrado

PROPOSTA DE UM ALGORITMO PARA INTERPRETAR OS OUTLIERS

A partir das defini¸c˜oes apresentadas no decorrer deste trabalho foi implementado um algoritmo para encontrar e interpretar os outliers automaticamente. Como dito, este trabalho ´e uma extens˜ao do trabalho proposto em (FONTES et al., 2013). Logo, a parte inicial na qual os candidatos e outliers s˜ao descobertos ´e a mesma.

O pseudo c´odigo apresentado no Algoritmo 3.1 ilustra a extens˜ao do algoritmo de Fontes, e at´e a linha 25 ele se mant´em igual. A entrada ´

e composta pelo conjunto de trajet´orias T, o conjunto de regi˜oes R, a distˆancia m´axima para a vizinhan¸ca de um ponto maxDist, o n´umero m´ınimo de vizinhos para existir um caminho padr˜ao minSup, o compri- mento m´ınimo para que o desvio seja considerado um outlier segment minLength, o conjunto de eventos E, o tempo m´ınimo de uma parada minT ime e o timeT ol que ´e a maior diferen¸ca de tempo permitida entre um synchronized standard segment e o outlier segment correspondente. A sa´ıda ´e o conjunto de outlier segments classificados.

48

Algoritmo 3.1 – Pseudo c´odigo Principal 1 I n p u t : 2 T ; // c o n j u n t o de t r a j e t ´o r i a s 3 R ; // c o n j u n t o de r e g i ˜o e s 4 m a x D i s t ; // d i s t ˆa n c i a m´axima 5 m i n S u p ; // n´umero m´ınimo de v i z i n h o s 6 m i n L e n g t h ; // d i s t ˆa n c i a m´ınima p e r c o r r i d a no d e s v i o 7 E ; // c o n j u n t o de e v e n t o s

8 m i n T i m e ; // tempo m´ınimo para s e r c o n s i d e r a d o um s t o p 9 t i m e T o l ; // tempo para o s s y n c h r o n i z e d s t a n d a r d s e g m e n t s 10 11 Output : 12 S O ; // c o n j u n t o d o s s t o p o u t l i e r s 13 E A O ; // c o n j u n t o d o s e v e n t a v o i d i n g o u t l i e r s 14 T A O ; // c o n j u n t o d o s t r a f f i c a v o i d i n g o u t l i e r s 15 16 Method : 17 FOR EACH ( o r i g i n , d e s t i n a t i o n ) e m R { 18 o u t = ∅ ; 19 o u t S e g = ∅ ; 20 S O = ∅ ; 21 E A O = ∅ ; 22 T A O = ∅ ; 23 24 C = f i n d C a n d i d a t e s ( T , o r i g i n , d e s t i n a t i o n ) ; 25 S t a n d a r d P o i n t s = f i n d S t a n d a r d s ( C , m a x D i s t , m i n S u p ) ; 26 o u t l i e r s A n d S e g s = f i n d O u t l i e r s ( S t a n d a r d P o i n t s , m i n L e n g t h ) ; 27 o u t . a d d ( o u t l i e r s A n d S e g s . g e t O u t l i e r s ( ) ) ; 28 o u t S e g . a d d ( o u t l i e r s A n d S e g s . g e t O u t l i e r S e g m e n t s ( ) ) ; 29 s t d S e g = f i n d S t a n d a r d S e g m e n t s ( o u t S e g , s t d , m a x D i s t ) ; 30 S O = f i n d S t o p O u t l i e r ( o u t S e g , m i n t i m e ) ; 31 o u t S e g = o u t S e g − S O ; 32 E A O = f i n d E A O ( o u t S e g , s t d S e g , E , S O ) ; 33 o u t S e g = O u t S e g s − S O − E A O ; 34 T A O = f i n d T A O ( o u t S e g , s t d S e g , SO , E A O , t i m e T o l ) ; 35 } 36 37 return SO , E A O , T A O ;

Primeiramente s˜ao computados os candidatos que se movem da regi˜ao origem para a regi˜ao destino (linha 24). Isto ´e feito verificando a interse¸c˜ao de cada trajet´oria com as regi˜oes, considerando apenas a menor subtrajet´oria com um ponto em cada regi˜ao. Uma vez que os candidatos j´a s˜ao conhecidos o algoritmo procede para determinar os standards e os outliers. A fun¸c˜ao que encontra os standards (linha 25) verifica a quantidade de vizinhos de todos os pontos de cada candidato. Se nenhum ponto tiver menos que minSup vizinhos, ent˜ao o candidato ´e considerado um standard. At´e esta linha o procedimento ´e igual ao proposto em (FONTES et al., 2013), por´em nele todos os candidatos que n˜ao eram standards eram considerados outliers. Portanto a partir da linha 26 come¸ca a parte estendida com a fun¸c˜ao findOutliers(). Nela foram adicionados dois passos: a identifica¸c˜ao dos outlier segments e o teste de seu comprimento, j´a que apenas desvios com certo compri- mento (minLength)s˜ao considerados. Logo, esta fun¸c˜ao agora encontra

49

os outliers e os outlier segments, caso haja algum standard.

A fun¸c˜ao findStopOutlier() (linha 30) calcula os stop outliers ve- rificando se cada outlier segment tem um stop por pelo menos minTime. Se o outlier segment tem um stop, ele ´e adicionado `a lista de stop outli- ers. Para a obten¸c˜ao dos stop outliers utiliza-se o CB-SMoT proposto em (PALMA et al., 2008) como subrotina, que, como explicado no estado da arte, encontra stops em trajet´orias baseando-se na velocidade.

Algoritmo 3.2 – findEAO pseudo c´odigo 1 I n p u t : 2 o u t S e g ; // c o n j u n t o d o s o u t l i e r s e g m e n t s 3 s t d S e g ; // c o n j u n t o d o s s t a n d a r d s e g m e n t s de cada o u t S e g 4 E ; // c o n j u n t o d o s e v e n t s 5 6 Output : 7 E A O ; // c o n j u n t o d o s e v e n t a v o i d i n g o u t l i e r s 8 9 Method : 10 FOR EACH o i n o u t S e g { 11 S = s t d S e g . g e t S t a n d a r d S e g m e n t s ( o ) ; 12 E ’ = g e t I n t e r s e c t i o n ( S , E ) ; 13 FOR EACH e i n E ’ { 14 IF ( e != N U L L && ! h a s I n t e r s e c t ( o , e ) && t i m e O v e r l a p s ( o , e ) ) { 15 o . a d d A v o i d e d E v e n t ( e ) ; 16 IF ( o n o t i n E A O ) { 17 E A O . a d d ( o ) ; 18 } 19 } 20 } 21 } 22 23 return E A O ;

As fun¸c˜oes findEAO() (linha 32) e findTAO() (linha 34) s˜ao de- talhadas nos algoritmos 3.2 e 3.3, respectivamente. Elas consistem basicamente em encontrar os event avoiding outliers e traffic avoiding outliers, respectivamente.

Para encontrar event avoiding outliers o primeiro passo antes do algoritmo 3.2 ´e encontrar todos os outlier segments sem stop (linha 31, algoritmo 3.1), que ´e passado como entrada do algoritmo 3.2. As outras entradas s˜ao o conjunto de standard segments de cada outlier segment stdSeg e o conjunto dos eventos E.

Os event avoiding outliers s˜ao caracterizados por um evento no caminho padr˜ao desviado, ou seja, nos standard segments. Logo, para cada outlier segment, o algoritmo obt´em os standard segments (linha 11) de acordo com a defini¸c˜ao 15 e verifica a interse¸c˜ao com o conjunto de eventos (linha 12). Entretanto, o evento deve ter interse¸c˜ao apenas com os standard segments, mas n˜ao com o outlier segment. Para isso, o conjunto de eventos que tem interse¸c˜ao com os standard segments

50

s˜ao analisados um a um (linha 13). A primeira parte (linha 14) dessa an´alise ´e para verificar essas condi¸c˜oes de interse¸c˜ao com os standard segments, ausˆencia de interse¸c˜ao com o outlier segment e, al´em dessas, se o evento estava ocorrendo no momento do desvio. Se esse for o caso tem-se de fato um event avoiding outlier, e o evento ´e marcado como desviado por aquele outlier (linha 15). Caso o outlier segment ainda n˜ao tenha sido adicionado ao conjunto de event avoiding outliers devido a outro evento (linha 16), ele ´e adicionado (linha 17).

Algoritmo 3.3 – findTAO pseudo c´odigo 1 2 I n p u t : 3 o u t S e g ; // c o n j u n t o d o s o u t l i e r s e g m e n t s 4 s t d S e g ; // c o n j u n t o d o s s t a n d a r d s e g m e n t s 5 t i m e T o l ; // tempo para o s s y n c h r o n i z e d s t a n d a r d s e g m e n t s 6 7 Output : 8 T A O ; // s e t o f t r a f f i c a v o i d i n g o u t l i e r s 9 10 Method : 11 FOR EACH o i n o u t S e g { 12 s y n c = s t d S e g . g e t S y n c S t a n d a r d S e g m e n t s ( o , t i m e T o l ) ; 13 n o t S y n c = s t d S e g . g e t N o n S y n c S t a n d a r d S e g m e n t s ( o , t i m e T o l ) ; 14 IF ( a v g t i m e ( s y n c . t i m e ) < a v g t i m e ( n o t S y n c . t i m e ) ∗ 0 . 5 ) { 15 T A O . a d d ( o ) ; 16 } 17 } 18 19 return T A O ;

A fun¸c˜ao findTAO() ´e mostrada no algoritmo 3.3. Antes de sua execu¸c˜ao s˜ao removidos do conjunto de outlier segments os que foram classificados como stop outliers ou event avoiding outliers (linha 33, algoritmo 3.1) para este ser passado como entrada. Al´em do outSeg, o algoritmo tamb´em recebe o conjunto dos standard segments stdSeg e o tempo de tolerˆancia para que um standard segment esteja sincronizado com o respectivo outlier segment timeTol.

O algoritmo busca os standard segments que est˜ao sincronizados (linha 12, de acordo com a defini¸c˜ao 17) e os que n˜ao est˜ao sincro- nizados (linha 13). Para os n˜ao sincronizados o algoritmo considera 5% dos standard segments mais r´apidos. Desse modo, pode-se obter a velocidade do caminho quando n˜ao h´a trˆansito. Em seguida, o al- goritmo compara a velocidade m´edia de ambos os standard segments sincronizados e n˜ao sincronizados, e infere se h´a um congestionamento naquele momento (linha 14). Quando a dura¸c˜ao m´edia dos synchro- nized standard segments ´e no m´aximo 50% da m´edia do conjunto dos n˜ao sincronizados, diz-se que houve trˆansito ou congestionamento no caminho padr˜ao, e ent˜ao o outlier segment ´e classificado como traffic

51

avoiding outlier.

Neste cap´ıtulo foi apresentado o pseudo c´odigo do algoritmo pro- posto neste trabalho. Esse algoritmo foi utilizado para desenvolver uma s´erie de experimentos apresentados no pr´oximo cap´ıtulo.

53

4 EXPERIMENTOS

Para avaliar o m´etodo proposto foram realizados experimentos com dois conjuntos de dados distintos. Um dos conjuntos s˜ao trajet´orias reais de t´axis coletadas em S˜ao Francisco, Calif´ornia, adquirido na in- ternet (CRAWDAD, 2013) e o outro foi gerado pelos autores na cidade de Florian´opolis com a finalidade de validar o m´etodo. Desse modo, sabe-se exatamente de cada outlier do segundo conjunto.

O c´odigo do algoritmo foi desenvolvido em java atrav´es da IDE Eclipse (Eclipse Foundation, 2013). Os dados foram armazenados no banco de dados Postgres com a extens˜ao PostGIS (Refractions Research, 2013). Os resultados s˜ao apresentados usando uma variadade de softwa- res, dentre eles o Quantum GIS (Quantum GIS Development Team, 2013), sua extens˜ao para o Open Street Maps (WIKI, 2013) e o Open Jump (Ste- fan Steiniger, Landon Blake, 2013). O Google Maps (Google, INEGI, 2014) tamb´em foi bastante ´util.

Todos os experimentos foram realizados em um computador ro- dando o Mac OS 10.9.2. Ele possui um processador de 2 GHz, Intel Core i7, com 8 GB de mem´oria ram de 1600MHz.

Nas se¸c˜oes seguintes est˜ao os experimentos com essas duas bases de dados. Eles foram divididos em duas subse¸c˜oes, uma para cada conjunto de dados utilizado. Em ambos s˜ao mostrados os casos de outliers encontrados. Primeiramente, s˜ao apresentados os resultados no conjunto de dados de Florian´opolis.

Documentos relacionados