In [ ]:

In [ ]:

Teoria

TID Items
1 pão, leite
2 pão, fralda, cerveja, ovos
3 leite, fralda, cerveja, coca
4 pão, leite, fralda, cerveja
5 pão, leite, fralda, coca

Exemplo de Regras

ID Regras Suporte & Confiança
1 {leite,fralda} →{cerveja} (s=0.4, c=0.67)
2 {leite,cerveja} →{fralda} (s=0.4, c=1.0)
3 {fralda,cerveja} →{leite} (s=0.4, c=0.67)
4 {cerveja} →{leite,fralda} (s=0.4, c=0.67)
5 {fralda} →{leite,cerveja} (s=0.4, c=0.5)
6 {leite} →{fralda,cerveja} (s=0.4, c=0.5

Regras de associação – Uma expressão da forma X->Y, onde X e Y são conjuntos de itens

Exemplo: {Milk, Diaper} →{Beer}

Métricas de avaliação das regra

Suporte (X->Y) = número de registros contendo X e Y / Total de registros

O cálculo da taxa de confiança é calculada como a razão entre o número de registros contendo X e Y e o número de registros contendo X:

Confiança (X->Y) = Número de registros contendo X e Y / Número de registros contendo X

Cálculo do Suporte e Confiança

Regra 1:

  • Suporte(R1) =Freq({leite,fralda,cerveja})/ Tot(T)= 2/5 = 0,4 e
  • Confiança (R1)= Freq({leite,fralda,cerveja})/ Freq({leite, fralda}) = 2/3 = 0,67

Regra 2:

  • Suporte(R1) =Freq({leite,cerveja,fralda})/ Tot(T)= 2/5 = 0,4 e
  • Confiança (R1)= Freq({leite,cerveja,fralda})/ Freq({leite, cerveja}) = 2/2 = 1

Estudo de Caso 1

Simulando Transações de Compras

Instalando o pacote "arules"

In [98]:
install.packages('arules', repos='http://cran.us.r-project.org')

Caso o pacote acima já esteja instalado basta carrega-lo

In [11]:
library(arules)
Warning message:
"package 'arules' was built under R version 3.3.2"Loading required package: Matrix
Warning message:
"package 'Matrix' was built under R version 3.3.2"
Attaching package: 'arules'

The following objects are masked from 'package:base':

    abbreviate, write

Criando uma base simulada

In [12]:
df <- read.table(header=T, text="ID     milk    bread   butter  beer    diapers
1   T   T   F   F   F
2   F   F   T   F   F
3   F   F   F   T   T
4   T   T   T   F   F
5   F   T   F   F   F")
In [13]:
df
IDmilkbreadbutterbeerdiapers
1111000
2200100
3300011
4411100
5501000

Convertendo a base para trasações

In [14]:
trans <- as(df[, -1], "transactions")

Extraindo as regras associadas

In [15]:
regras <- apriori(trans, list(supp = 0.01, conf = 0.5, minlen = 2))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen
        0.5    0.1    1 none FALSE            TRUE       5    0.01      2
 maxlen target   ext
     10  rules FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 0 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[5 item(s), 5 transaction(s)] done [0.00s].
sorting and recoding items ... [5 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 done [0.00s].
writing ... [10 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].

Número de regras obtidas durabte a operação anterior

In [16]:
regras
set of 10 rules 

Inspecionando as regras

In [108]:
inspect(head(regras, n = 3, by = "support")) #apresentando 3 regras filtradas pela coluna "support"
    lhs        rhs       support confidence lift    
[1] {milk}  => {bread}   0.4     1.0000000  1.666667
[2] {bread} => {milk}    0.4     0.6666667  1.666667
[3] {beer}  => {diapers} 0.2     1.0000000  5.000000

Ampliando a lista de regras

In [21]:
print(cbind(as(regras, "data.frame")), digits=2)
                      rules support confidence lift
1       {beer} => {diapers}     0.2       1.00 5.00
2       {diapers} => {beer}     0.2       1.00 5.00
3        {butter} => {milk}     0.2       0.50 1.25
4        {milk} => {butter}     0.2       0.50 1.25
5       {butter} => {bread}     0.2       0.50 0.83
6         {milk} => {bread}     0.4       1.00 1.67
7         {bread} => {milk}     0.4       0.67 1.67
8  {milk,butter} => {bread}     0.2       1.00 1.67
9  {bread,butter} => {milk}     0.2       1.00 2.50
10 {milk,bread} => {butter}     0.2       0.50 1.25

Perceba que todos que compram cerveja compram fraldas. Todos que compram fraldas compram cervejas. E 50% dos que compram manteiga compram leite.

Estudo de Caso 2

O conjunto de dados Adult contém os dados preparados como transações para uso com o pacote arules.

Carregando a base de dados de transações

In [38]:
data("Adult")

Definição das variáveis

data set contains a data frame with 48842 observations on the following 15 variables.

age a numeric vector.

workclass a factor with levels Federal-gov, Local-gov, Never-worked, Private, Self-emp-inc, Self-emp-not-inc, State-gov, and Without-pay.

education an ordered factor with levels Preschool < 1st-4th < 5th-6th < 7th-8th < 9th < 10th < 11th < 12th < HS-grad < Prof-school < Assoc-acdm < Assoc-voc < Some-college < Bachelors < Masters < Doctorate.

education-num a numeric vector.

marital-status a factor with levels Divorced, Married-AF-spouse, Married-civ-spouse, Married-spouse-absent, Never-married, Separated, and Widowed.

occupation a factor with levels Adm-clerical, Armed-Forces, Craft-repair, Exec-managerial, Farming-fishing, Handlers-cleaners, Machine-op-inspct, Other-service, Priv-house-serv, Prof-specialty, Protective-serv, Sales, Tech-support, and Transport-moving.

relationship a factor with levels Husband, Not-in-family, Other-relative, Own-child, Unmarried, and Wife.

race a factor with levels Amer-Indian-Eskimo, Asian-Pac-Islander, Black, Other, and White.

sex a factor with levels Female and Male.

capital-gain a numeric vector.

capital-loss a numeric vector.

fnlwgt a numeric vector.

hours-per-week a numeric vector.

native-country a factor with levels Cambodia, Canada, China, Columbia, Cuba, Dominican-Republic, Ecuador, El-Salvador, England, France, Germany, Greece, Guatemala, Haiti, Holand-Netherlands, Honduras, Hong, Hungary, India, Iran, Ireland, Italy, Jamaica, Japan, Laos, Mexico, Nicaragua, Outlying-US(Guam-USVI-etc), Peru, Philippines, Poland, Portugal, Puerto-Rico, Scotland, South, Taiwan, Thailand, Trinadad&Tobago, United-States, Vietnam, and Yugoslavia.

income an ordered factor with levels small < large.

Geração de Regras

Podemos agora produzir as regras de associação com o uso da função apriori.

Apriori emprega pesquisa para conjuntos de níveis freqüentes.Passamos como argumento apenas o objeto de transações, com suporte e confiança definidos em 0.5

In [39]:
regras <- apriori(Adult, parameter = list(support = 0.4, conf=0.5))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen
        0.5    0.1    1 none FALSE            TRUE       5     0.4      1
 maxlen target   ext
     10  rules FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 19536 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[115 item(s), 48842 transaction(s)] done [0.04s].
sorting and recoding items ... [11 item(s)] done [0.00s].
creating transaction tree ... done [0.02s].
checking subsets of size 1 2 3 4 5 done [0.00s].
writing ... [247 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
In [40]:
regras
set of 247 rules 

Filtrando Regras

Lista de 3 primeiras regras

In [41]:
inspect(regras[1:3])
    lhs    rhs                        support confidence lift
[1] {}  => {age=Middle-aged}          0.505   0.505      1   
[2] {}  => {income=small}             0.506   0.506      1   
[3] {}  => {hours-per-week=Full-time} 0.585   0.585      1   

A partir deste momento, regras tem o conjunto de regras de associação produzidas pelo função apriori.

Segmentando Regras

Selecionamos um subconjunto de regras usando correspondência parcial ("sex") nos itens no lado direito e uma medida de qualidade

In [42]:
regras.sub <- subset(regras, subset = rhs %pin% "sex" & lift > 1.3)

Exibir as 3 principais regras de suporte

In [43]:
regras.sub
set of 3 rules 

Inspecionando Regras

Usamos a função inspect para visualizar as regras criadas

In [40]:
inspect(head(regras.sub, n = 3, by = "support"))
    lhs                                    rhs          support confidence     lift
[1] {marital-status=Married-civ-spouse} => {sex=Male} 0.4074157  0.8891818 1.330151
[2] {relationship=Husband}              => {sex=Male} 0.4036485  0.9999493 1.495851
[3] {marital-status=Married-civ-spouse,                                            
     relationship=Husband}              => {sex=Male} 0.4034028  0.9999492 1.495851

Os parâmetros:

  • lhs(left hand side) -> itens da esquerda
  • rhs(right hand side) -> itens da direita
  • support indica a proporção de transações que contem os itens.
  • confidence indica a probabilidade de que uma transação contenha um item lhs e também um item rhs.
  • lift mede o quão frequente lhs e rhs ocorrem juntos se comparados
In [ ]:
#Lista os labels das primeiras 3 regras
In [44]:
labels(regras.sub[1:3])
  1. "{relationship=Husband} => {sex=Male}"
  2. "{marital-status=Married-civ-spouse} => {sex=Male}"
  3. "{marital-status=Married-civ-spouse,relationship=Husband} => {sex=Male}"
In [49]:
labels(regras.sub[1:3], itemSep = " + ", setStart = "", setEnd="", ruleSep = " ---> ")
  1. "relationship=Husband ---> sex=Male"
  2. "marital-status=Married-civ-spouse ---> sex=Male"
  3. "marital-status=Married-civ-spouse + relationship=Husband ---> sex=Male"
In [ ]:

Estudo de Caso 3

Instalando o Pacote aruleViz para visualização das regras

In [85]:
install.packages("arulesViz", repos="http://cran.us.r-project.org")
Warning message:
"package 'arulesViz' is in use and will not be installed"

Caso o pacote já esteja instalado, basta carregar a biblioteca como desmonstrado abaixo:

In [87]:
library("arulesViz")

Carregando a base de transações Groceries (Mercearia)

In [88]:
data("Groceries")

Lista as dimensões dos dados

In [90]:
Groceries
transactions in sparse format with
 9835 transactions (rows) and
 169 items (columns)
In [94]:
regras <- apriori(Groceries, parameter = list(supp = 0.001, conf = 0.8))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen
        0.8    0.1    1 none FALSE            TRUE       5   0.001      1
 maxlen target   ext
     10  rules FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 9 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].
sorting and recoding items ... [157 item(s)] done [0.00s].
creating transaction tree ... done [0.01s].
checking subsets of size 1 2 3 4 5 6 done [0.02s].
writing ... [410 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].
In [95]:
regras
set of 410 rules 
In [96]:
plot(regras, control=list(jitter=2))
In [79]:
regras_high_lift <- head(sort(regras, by="lift"), 3)
In [97]:
inspect(regras_high_lift)
    lhs                        rhs                   support confidence     lift
[1] {liquor,                                                                    
     red/blush wine}        => {bottled beer}    0.001931876  0.9047619 11.23527
[2] {citrus fruit,                                                              
     other vegetables,                                                          
     soda,                                                                      
     fruit/vegetable juice} => {root vegetables} 0.001016777  0.9090909  8.34040
[3] {tropical fruit,                                                            
     other vegetables,                                                          
     whole milk,                                                                
     yogurt,                                                                    
     oil}                   => {root vegetables} 0.001016777  0.9090909  8.34040

Podemos concluir que 90% dos que levaram {liquor,red/blush wine} também levaram {bottled beer}

In [81]:
plot(regras_high_lift, method="graph", control=list(type="items"))

Estudo de Caso 4

Este estudo de caso é uma adaptação do excelente trabalho realizado por Flávio Clésio a respeito do uso de Regras de Associação aplicadas na área de Segurança Pública.

Carregando a Biblioteca "arules"

In [12]:
library(arules)
Warning message:
"package 'arules' was built under R version 3.3.2"Loading required package: Matrix
Warning message:
"package 'Matrix' was built under R version 3.3.2"
Attaching package: 'arules'

The following objects are masked from 'package:base':

    abbreviate, write

Carregando o conjunto de dados. Estes dados por serem sintéticos, podem ter inconsistências

In [13]:
crimes <- read.csv("https://raw.githubusercontent.com/flaviobrito/dataudit/master/dados/Crimes.csv")

Descrevendo as variáveis

Temos uma base de dados com 780 crimes com 16 variáveis que são:

  • Crime_id: Número da ocorrência.
  • Zona: Zona da cidade que a ocorrência foi registrada.
  • Periculosidade: Nível de periculosidade da área de acordo com mapeamentos anteriores.
  • Viaturas_Apoio_Forca_Tatica: Indica se tem reforços da Força Tática disponíveis na região. A grosso modo, Força Tática é um destacamento que "flutua" na circulação e tem como objetivo atender a ocorrência mais próxima que a primeira força de atendimento não conseguir solucionar.
  • Patrulhamento: Indica se há patrulhamento pelas viaturas do batalhão mais próximo.
  • Policiamento_Ostensivo: Informa se há operações acontecendo com mais frequência. Um maior nível de policiamento aumenta também o enfrentamento policial, o que pode acarretar em mais óbitos de ambas as partes.
  • Apoio_GCM: Esse campo indica se a Guarda Civil Metropolitana circula na área da ocorrência. Diferente da PM ou da Civil; a GCM apesar das mesmas prerrogativas policiais tem uma função mais voltada à segurança patrimonial de alguns pontos da cidade e escolas.
  • Arma_Fogo: Houve arma de fogo na ocorrência.
  • Qtde_Vitimas: Número de vitimas da ocorrência.
  • Possui_DP: Tem Distrito Policial nas redondezas.
  • Tipo_Policiamento: O tipo de policiamento local influencia também na prática de crimes, em que áreas menos assistidas pelos batalhões podem ter um maior índice de violência em relação à áreas que não tem esse tipo de atendimento com um maior volume de viaturas e policiais.
  • Area_Residencial: Indica se é área residencial ou não.
  • Ocorrencia_Atendida_15_Minutos: Sabe-se que quanto mais demorado for o atendimento da ocorrência, as chances de resolução do evento criminoso em questão converge para a não solução efetiva. Esse campo indica se a ocorrência foi prontamente atendida.
  • Pericia: Informa se houve a perícia para auxiliar nas investigações.
  • Possui_UPP: Mostra se tem Unidade de Polícia Pacificadora instalada nas redondezas do evento criminoso
  • Iluminacao: Informa se o local do crime tinha iluminação ou não.

Examinando a estrutura do conjunto de dados

In [14]:
str(crimes)
'data.frame':	780 obs. of  16 variables:
 $ Crime_id                      : Factor w/ 780 levels "crime_1","crime_10",..: 1 112 223 334 445 556 667 759 770 2 ...
 $ Zona                          : Factor w/ 5 levels "Centro","Zona_Leste",..: 5 5 5 5 5 5 5 5 5 5 ...
 $ Periculosidade                : Factor w/ 5 levels "Altissimo","Baixissimo",..: 1 1 1 1 1 1 1 1 2 1 ...
 $ Viaturas_Apoio_Forca_Tatica   : Factor w/ 6 levels "0","1","2","3",..: 5 6 5 3 4 2 4 2 6 4 ...
 $ Patrulhamento                 : Factor w/ 2 levels "Nao","Sim": 2 2 2 2 2 1 2 2 2 2 ...
 $ Policiamento_Ostensivo        : Factor w/ 2 levels "Nao","Sim": 2 2 2 2 2 1 2 2 2 2 ...
 $ Apoio_GCM                     : Factor w/ 2 levels "Nao","Sim": 1 1 1 1 1 1 1 2 1 1 ...
 $ Arma_Fogo                     : Factor w/ 2 levels "Nao","Sim": 1 2 2 2 2 2 2 2 2 2 ...
 $ Qtde_Vitimas                  : Factor w/ 8 levels "0","1","2","3",..: 5 6 4 3 5 4 4 4 6 4 ...
 $ Possui_DP                     : Factor w/ 3 levels "DP_12_Horas",..: 3 2 3 3 3 1 3 3 3 3 ...
 $ Tipo_Policiamento             : Factor w/ 6 levels "Batalhao_Dedicado",..: 3 5 1 3 5 4 4 1 5 1 ...
 $ Area_Residencial              : Factor w/ 2 levels "Nao","Sim": 1 2 2 2 2 1 2 2 2 2 ...
 $ Ocorrencia_Atendida_15_Minutos: Factor w/ 2 levels "Nao","Sim": 1 2 2 2 1 1 2 1 2 2 ...
 $ Pericia                       : Factor w/ 2 levels "Nao","Sim": 1 1 1 2 1 2 1 2 2 2 ...
 $ Possui_UPP                    : Factor w/ 2 levels "Nao","Sim": 2 1 2 2 1 1 1 2 2 2 ...
 $ Iluminacao                    : Factor w/ 2 levels "Nao","Sim": 2 2 2 2 2 1 2 2 2 2 ...

Resumo estatístico

In [15]:
summary(crimes)
      Crime_id            Zona        Periculosidade
 crime_1  :  1   Centro     : 23   Altissimo :421   
 crime_10 :  1   Zona_Leste : 19   Baixissimo: 96   
 crime_100:  1   Zona_Naorte: 44   Baixo     : 94   
 crime_101:  1   Zona_Oeste : 28   Medio     : 59   
 crime_102:  1   Zona_Sul   :666   Neutro    :110   
 crime_103:  1                                      
 (Other)  :774                                      
 Viaturas_Apoio_Forca_Tatica Patrulhamento Policiamento_Ostensivo Apoio_GCM
 0 :  7                      Nao: 80       Nao:133                Nao:576  
 1 :115                      Sim:700       Sim:647                Sim:204  
 2 :153                                                                    
 3 :154                                                                    
 4 :123                                                                    
 5+:228                                                                    
                                                                           
 Arma_Fogo  Qtde_Vitimas       Possui_DP  
 Nao:278   5+     :230   DP_12_Horas: 58  
 Sim:502   3      :214   Nao        :240  
           2      :161   Sim        :482  
           4      : 89                    
           1      : 68                    
           Sim    :  8                    
           (Other): 10                    
                        Tipo_Policiamento Area_Residencial
 Batalhao_Dedicado               :229     Nao:118         
 Nao                             :  8     Sim:662         
 Patrulhamento_Batalhoes_Diversos:382                     
 Policia_Comunitaria_Escolar     : 97                     
 Policiamento_via_Companhia      : 60                     
 Sim                             :  4                     
                                                          
 Ocorrencia_Atendida_15_Minutos Pericia   Possui_UPP Iluminacao
 Nao:195                        Nao:397   Nao:352    Nao: 95   
 Sim:585                        Sim:383   Sim:428    Sim:685   
                                                               
                                                               
                                                               
                                                               
                                                               

No mundo real nem sempre torna-se fácil aumentar o valor de confiança e ter também um bom valor de suporte. Este é o desejável. Nosso primeiro movimento é trabalhar para conseguir regras com algum senso próximo a realidade. Descartaremos as regras furadas.

In [16]:
crimes_rulez <- apriori(crimes, parameter = list(minlen=4,maxlen=10, supp=0.55, conf=0.80))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen
        0.8    0.1    1 none FALSE            TRUE       5    0.55      4
 maxlen target   ext
     10  rules FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 429 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[831 item(s), 780 transaction(s)] done [0.00s].
sorting and recoding items ... [9 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 done [0.00s].
writing ... [66 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].

Reduzindo o número de dígitos nas medidas de qualidade do modelo.

In [17]:
quality(crimes_rulez) <- round(quality(crimes_rulez), digits=2)

Ordenando pela Confiança, Suporte e Lift

In [18]:
model_srt_confidence <- sort(crimes_rulez, by="confidence")

model_srt_support <- sort(crimes_rulez, by="support")

model_srt_lift <- sort(crimes_rulez, by="lift")

Verificando o Modelo

In [44]:
inspect(model_srt_confidence[1:4])
    lhs                                     rhs                 support confidence lift
[1] {Apoio_GCM=Nao,                                                                    
     Area_Residencial=Sim,                                                             
     Iluminacao=Sim}                     => {Patrulhamento=Sim}    0.57       0.98 1.09
[2] {Policiamento_Ostensivo=Sim,                                                       
     Area_Residencial=Sim,                                                             
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}       0.61       0.96 1.09
[3] {Policiamento_Ostensivo=Sim,                                                       
     Area_Residencial=Sim,                                                             
     Ocorrencia_Atendida_15_Minutos=Sim} => {Patrulhamento=Sim}    0.60       0.96 1.06
[4] {Zona=Zona_Sul,                                                                    
     Policiamento_Ostensivo=Sim,                                                       
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}       0.56       0.96 1.09
In [47]:
inspect(model_srt_support[1:4])
    lhs                             rhs                          support confidence lift
[1] {Policiamento_Ostensivo=Sim,                                                        
     Area_Residencial=Sim,                                                              
     Iluminacao=Sim}             => {Patrulhamento=Sim}             0.69       0.96 1.07
[2] {Patrulhamento=Sim,                                                                 
     Policiamento_Ostensivo=Sim,                                                        
     Area_Residencial=Sim}       => {Iluminacao=Sim}                0.69       0.95 1.08
[3] {Patrulhamento=Sim,                                                                 
     Policiamento_Ostensivo=Sim,                                                        
     Iluminacao=Sim}             => {Area_Residencial=Sim}          0.69       0.93 1.09
[4] {Patrulhamento=Sim,                                                                 
     Area_Residencial=Sim,                                                              
     Iluminacao=Sim}             => {Policiamento_Ostensivo=Sim}    0.69       0.89 1.08
In [48]:
inspect(model_srt_lift[1:4])
    lhs                                     rhs                                  support confidence lift
[1] {Zona=Zona_Sul,                                                                                     
     Ocorrencia_Atendida_15_Minutos=Sim,                                                                
     Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}            0.56       0.94 1.14
[2] {Zona=Zona_Sul,                                                                                     
     Patrulhamento=Sim,                                                                                 
     Ocorrencia_Atendida_15_Minutos=Sim} => {Policiamento_Ostensivo=Sim}            0.55       0.94 1.14
[3] {Policiamento_Ostensivo=Sim,                                                                        
     Area_Residencial=Sim,                                                                              
     Iluminacao=Sim}                     => {Ocorrencia_Atendida_15_Minutos=Sim}    0.61       0.84 1.12
[4] {Zona=Zona_Sul,                                                                                     
     Area_Residencial=Sim,                                                                              
     Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}            0.64       0.93 1.12

Listando as 10 regras no topo para cada modelo

In [19]:
inspect(crimes_rulez[1:4])
    lhs                                     rhs                    support confidence lift
[1] {Apoio_GCM=Nao,                                                                       
     Area_Residencial=Sim,                                                                
     Iluminacao=Sim}                     => {Patrulhamento=Sim}       0.57       0.98 1.09
[2] {Patrulhamento=Sim,                                                                   
     Apoio_GCM=Nao,                                                                       
     Area_Residencial=Sim}               => {Iluminacao=Sim}          0.57       0.95 1.08
[3] {Patrulhamento=Sim,                                                                   
     Apoio_GCM=Nao,                                                                       
     Iluminacao=Sim}                     => {Area_Residencial=Sim}    0.57       0.92 1.08
[4] {Policiamento_Ostensivo=Sim,                                                          
     Area_Residencial=Sim,                                                                
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}          0.61       0.96 1.09
In [20]:
inspect(model_srt_confidence[1:4])
    lhs                                     rhs                 support confidence lift
[1] {Apoio_GCM=Nao,                                                                    
     Area_Residencial=Sim,                                                             
     Iluminacao=Sim}                     => {Patrulhamento=Sim}    0.57       0.98 1.09
[2] {Policiamento_Ostensivo=Sim,                                                       
     Area_Residencial=Sim,                                                             
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}       0.61       0.96 1.09
[3] {Policiamento_Ostensivo=Sim,                                                       
     Area_Residencial=Sim,                                                             
     Ocorrencia_Atendida_15_Minutos=Sim} => {Patrulhamento=Sim}    0.60       0.96 1.06
[4] {Zona=Zona_Sul,                                                                    
     Policiamento_Ostensivo=Sim,                                                       
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}       0.56       0.96 1.09
In [126]:
inspect(model_srt_support[1:10])
     lhs                             rhs                          support confidence lift
[1]  {Policiamento_Ostensivo=Sim,                                                        
      Area_Residencial=Sim,                                                              
      Iluminacao=Sim}             => {Patrulhamento=Sim}             0.69       0.96 1.07
[2]  {Patrulhamento=Sim,                                                                 
      Policiamento_Ostensivo=Sim,                                                        
      Area_Residencial=Sim}       => {Iluminacao=Sim}                0.69       0.95 1.08
[3]  {Patrulhamento=Sim,                                                                 
      Policiamento_Ostensivo=Sim,                                                        
      Iluminacao=Sim}             => {Area_Residencial=Sim}          0.69       0.93 1.09
[4]  {Patrulhamento=Sim,                                                                 
      Area_Residencial=Sim,                                                              
      Iluminacao=Sim}             => {Policiamento_Ostensivo=Sim}    0.69       0.89 1.08
[5]  {Zona=Zona_Sul,                                                                     
      Policiamento_Ostensivo=Sim,                                                        
      Iluminacao=Sim}             => {Patrulhamento=Sim}             0.66       0.95 1.06
[6]  {Zona=Zona_Sul,                                                                     
      Patrulhamento=Sim,                                                                 
      Policiamento_Ostensivo=Sim} => {Iluminacao=Sim}                0.66       0.94 1.08
[7]  {Patrulhamento=Sim,                                                                 
      Policiamento_Ostensivo=Sim,                                                        
      Iluminacao=Sim}             => {Zona=Zona_Sul}                 0.66       0.88 1.03
[8]  {Zona=Zona_Sul,                                                                     
      Patrulhamento=Sim,                                                                 
      Iluminacao=Sim}             => {Policiamento_Ostensivo=Sim}    0.66       0.92 1.11
[9]  {Zona=Zona_Sul,                                                                     
      Area_Residencial=Sim,                                                              
      Iluminacao=Sim}             => {Patrulhamento=Sim}             0.66       0.96 1.06
[10] {Zona=Zona_Sul,                                                                     
      Patrulhamento=Sim,                                                                 
      Area_Residencial=Sim}       => {Iluminacao=Sim}                0.66       0.95 1.08
In [127]:
inspect(model_srt_lift[1:10])
     lhs                                     rhs                                  support confidence lift
[1]  {Zona=Zona_Sul,                                                                                     
      Ocorrencia_Atendida_15_Minutos=Sim,                                                                
      Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}            0.56       0.94 1.14
[2]  {Zona=Zona_Sul,                                                                                     
      Patrulhamento=Sim,                                                                                 
      Ocorrencia_Atendida_15_Minutos=Sim} => {Policiamento_Ostensivo=Sim}            0.55       0.94 1.14
[3]  {Policiamento_Ostensivo=Sim,                                                                        
      Area_Residencial=Sim,                                                                              
      Iluminacao=Sim}                     => {Ocorrencia_Atendida_15_Minutos=Sim}    0.61       0.84 1.12
[4]  {Zona=Zona_Sul,                                                                                     
      Area_Residencial=Sim,                                                                              
      Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}            0.64       0.93 1.12
[5]  {Zona=Zona_Sul,                                                                                     
      Patrulhamento=Sim,                                                                                 
      Area_Residencial=Sim}               => {Policiamento_Ostensivo=Sim}            0.64       0.93 1.12
[6]  {Zona=Zona_Sul,                                                                                     
      Patrulhamento=Sim,                                                                                 
      Area_Residencial=Sim,                                                                              
      Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}            0.61       0.93 1.12
[7]  {Patrulhamento=Sim,                                                                                 
      Policiamento_Ostensivo=Sim,                                                                        
      Area_Residencial=Sim}               => {Ocorrencia_Atendida_15_Minutos=Sim}    0.60       0.83 1.11
[8]  {Zona=Zona_Sul,                                                                                     
      Patrulhamento=Sim,                                                                                 
      Ocorrencia_Atendida_15_Minutos=Sim} => {Area_Residencial=Sim}                  0.55       0.94 1.11
[9]  {Patrulhamento=Sim,                                                                                 
      Ocorrencia_Atendida_15_Minutos=Sim,                                                                
      Iluminacao=Sim}                     => {Area_Residencial=Sim}                  0.65       0.94 1.11
[10] {Patrulhamento=Sim,                                                                                 
      Area_Residencial=Sim,                                                                              
      Iluminacao=Sim}                     => {Ocorrencia_Atendida_15_Minutos=Sim}    0.65       0.83 1.11

Criando regras específicas mineradas.

In [21]:
Zona_Sul <- subset(crimes_rulez, subset = rhs %pin% "Zona=Zona_Sul")



Iluminacao_Sim <- subset(crimes_rulez, subset = rhs %pin% "Iluminacao=Sim")



Ocorrencia_Atendida_15_Minutos_Sim <- subset(crimes_rulez, subset = rhs %pin% "Ocorrencia_Atendida_15_Minutos=Sim")



Policiamento_Ostensivo <- subset(crimes_rulez, subset = rhs %pin% "Policiamento_Ostensivo=Sim")

Regras Específicas

In [22]:
inspect(Zona_Sul[1:4])
    lhs                                     rhs             support confidence lift
[1] {Policiamento_Ostensivo=Sim,                                                   
     Ocorrencia_Atendida_15_Minutos=Sim,                                           
     Iluminacao=Sim}                     => {Zona=Zona_Sul}    0.56       0.87 1.01
[2] {Patrulhamento=Sim,                                                            
     Policiamento_Ostensivo=Sim,                                                   
     Ocorrencia_Atendida_15_Minutos=Sim} => {Zona=Zona_Sul}    0.55       0.86 1.01
[3] {Area_Residencial=Sim,                                                         
     Ocorrencia_Atendida_15_Minutos=Sim,                                           
     Iluminacao=Sim}                     => {Zona=Zona_Sul}    0.55       0.82 0.96
[4] {Patrulhamento=Sim,                                                            
     Area_Residencial=Sim,                                                         
     Ocorrencia_Atendida_15_Minutos=Sim} => {Zona=Zona_Sul}    0.55       0.82 0.96
In [23]:
inspect(Iluminacao_Sim[1:4])
    lhs                                     rhs              support confidence lift
[1] {Patrulhamento=Sim,                                                             
     Apoio_GCM=Nao,                                                                 
     Area_Residencial=Sim}               => {Iluminacao=Sim}    0.57       0.95 1.08
[2] {Policiamento_Ostensivo=Sim,                                                    
     Area_Residencial=Sim,                                                          
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}    0.61       0.96 1.09
[3] {Zona=Zona_Sul,                                                                 
     Policiamento_Ostensivo=Sim,                                                    
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}    0.56       0.96 1.09
[4] {Patrulhamento=Sim,                                                             
     Policiamento_Ostensivo=Sim,                                                    
     Ocorrencia_Atendida_15_Minutos=Sim} => {Iluminacao=Sim}    0.62       0.95 1.09
In [24]:
inspect(Ocorrencia_Atendida_15_Minutos_Sim[1:4])
    lhs                             rhs                                  support confidence lift
[1] {Policiamento_Ostensivo=Sim,                                                                
     Area_Residencial=Sim,                                                                      
     Iluminacao=Sim}             => {Ocorrencia_Atendida_15_Minutos=Sim}    0.61       0.84 1.12
[2] {Patrulhamento=Sim,                                                                         
     Policiamento_Ostensivo=Sim,                                                                
     Area_Residencial=Sim}       => {Ocorrencia_Atendida_15_Minutos=Sim}    0.60       0.83 1.11
[3] {Zona=Zona_Sul,                                                                             
     Policiamento_Ostensivo=Sim,                                                                
     Iluminacao=Sim}             => {Ocorrencia_Atendida_15_Minutos=Sim}    0.56       0.82 1.09
[4] {Patrulhamento=Sim,                                                                         
     Policiamento_Ostensivo=Sim,                                                                
     Iluminacao=Sim}             => {Ocorrencia_Atendida_15_Minutos=Sim}    0.62       0.82 1.10
In [25]:
inspect(Policiamento_Ostensivo[1:4])
    lhs                                     rhs                          support confidence lift
[1] {Area_Residencial=Sim,                                                                      
     Ocorrencia_Atendida_15_Minutos=Sim,                                                        
     Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}    0.61       0.90 1.08
[2] {Patrulhamento=Sim,                                                                         
     Area_Residencial=Sim,                                                                      
     Ocorrencia_Atendida_15_Minutos=Sim} => {Policiamento_Ostensivo=Sim}    0.60       0.90 1.08
[3] {Zona=Zona_Sul,                                                                             
     Ocorrencia_Atendida_15_Minutos=Sim,                                                        
     Iluminacao=Sim}                     => {Policiamento_Ostensivo=Sim}    0.56       0.94 1.14
[4] {Zona=Zona_Sul,                                                                             
     Patrulhamento=Sim,                                                                         
     Ocorrencia_Atendida_15_Minutos=Sim} => {Policiamento_Ostensivo=Sim}    0.55       0.94 1.14

Mais regras para exportação

In [26]:
crimes_rulez_2 <- apriori(crimes, parameter = list(minlen=4,maxlen=20, supp=0.4, conf=0.90))
Apriori

Parameter specification:
 confidence minval smax arem  aval originalSupport maxtime support minlen
        0.9    0.1    1 none FALSE            TRUE       5     0.4      4
 maxlen target   ext
     20  rules FALSE

Algorithmic control:
 filter tree heap memopt load sort verbose
    0.1 TRUE TRUE  FALSE TRUE    2    TRUE

Absolute minimum support count: 312 

set item appearances ...[0 item(s)] done [0.00s].
set transactions ...[831 item(s), 780 transaction(s)] done [0.00s].
sorting and recoding items ... [15 item(s)] done [0.00s].
creating transaction tree ... done [0.00s].
checking subsets of size 1 2 3 4 5 6 done [0.00s].
writing ... [331 rule(s)] done [0.00s].
creating S4 object  ... done [0.00s].

Criando um objeto para dar saída nas informações

In [27]:
out <- capture.output(inspect(crimes_rulez_2))

Arquivo de saída para as regras

In [33]:
cat("Regras", out, file="regras.txt", sep="n", append=TRUE)
In [35]:
library(arulesViz)
In [44]:
options(repr.plot.width=10, repr.plot.height=6)
plot(Zona_Sul, method="graph", control=list(type="items"))
In [ ]: