Data Mining: Indução de Regras de Associação Leonardo Cole Neto
Download
Report
Transcript Data Mining: Indução de Regras de Associação Leonardo Cole Neto
Data Mining:
Indução de Regras de
Associação
Leonardo Cole Neto
Rodrigo Teixeira Ramos
May 25, 2016
1
Minerando Regras de Associação
em Grandes Bases de Dados
Minerando regras de associação
Minerando regras de associação booleana unidimensionais a partir de bancos transacionais
Minerando regras de associação multi-nível a partir de
bancos transacionais
Minerando regras de associação multi-dimencionais a
partir de bancos transacionais e data warehouses
Da mineração de associações à análise de correlação
Mineração de associações baseada em restrições
Resumo
May 25, 2016
2
Mineração de Regras de Associação
Definição:
Achar padrões, associações, correlações frequentes em
conjuntos de itens ou objetos em um banco de dados
transacional, relacional ou outros tipo de repositórios
de informação.
Aplicações:
Análise de compras, cross-marketing, design de
catálogos de produtos, clustering, classificação, etc.
Exemplos.
Regra: “Body ead [support, confidence]”.
buys(x, “diapers”) buys(x, “beers”) [0.5%, 60%]
major(x, “CS”) ^ takes(x, “DB”) grade(x, “A”) [1%,
75%]
May 25, 2016
3
Regras de Associação: Conceitos
Básicos
Dados: (1) conjunto de transações, (2) cada transação é
uma lista de itens (comprados por um cliente em uma
visita)
Achar: todas as regras que correlacionam a presença de
um conjunto de itens com a presença de outro conjunto de
itens em uma mesma transação
E.g., 98% das pessoas que compram pneus e auto-
acessórios, também fazem algum serviço automotivo.
Achar: todas as regras X & Y Z com um mínimo de
support e confidence
Suporte (support), s, probabilidade que uma transação
contenha {X Y Z}
Confidência (confidence), c, probabilidade condicional
que uma transação que contenha {X Y} também
May 25, 2016
4
Minerando Regras de Associação
em Grandes Bases de Dados
Minerando regras de associação
Minerando regras de associação booleana unidimensionais a partir de bancos transacionais
Minerando regras de associação multi-nível a partir de
bancos transacionais
Minerando regras de associação multi-dimencionais a
partir de bancos transacionais e data warehouses
Da mineração de associações à análise de correlação
Mineração de associações baseada em restrições
Resumo
May 25, 2016
5
Mineração de Regras de Associação
Associações booleanas vs. quantitativas (Baseadas nos tipos
de valores manuseados)
buys(x, “SQLServer”) ^ buys(x, “DMBook”) buys(x,
“DBMiner”) [0.2%, 60%]
age(x, “30..39”) ^ income(x, “42..48K”) buys(x, “PC”)
[1%, 75%]
Associações Uni-dimensionais vs. Multi-dimensionais
(Baseadas nas dimensões dos dados envolvidos)
Análise de Nível único vs. Múltiplos níveis (Baseadas nos
níveis de abstração)
age(x, “30..39”) buys(x, “laptop computer”)
age(x, “30..39”) buys(x, “computer”)
May 25, 2016
6
Mineração de conjuntos de itens
frequentes: O passo chave
Achar os conjuntos de itens frequentes (itemsets
frequentes): o conjunto de itens que tem um mínimo
de support
Um subconjunto de um itemset frequente, também
deve ser um itemset frequente
Se {AB} é um itemset frequente, ambos {A} e {B} devem
ser itemsets frequentes
Achar iterativamente itemsets frequentes com
cardinalidade de 1 à k (k-itemset)
Usar os itemsets frequentes para gerar as regras de
associação.
May 25, 2016
7
O algoritmo Apriori
Passo de união(join): Ck é gerado, unindo Lk-1com ele mesmo
Passo de poda(prune): Qualquer (k-1)-itemset que não seja
Pseudo-código:
frequente, não pode ser um subconjunto de um k-itemset
frequente
Ck: itemset candidato de tamanho k
Lk : itemset frequente de tamanho k
L1 = {items frequentes de tamanho 1};
for (k = 1; Lk !=; k++) do begin
Ck+1 = candidatos gerados a partir de Lk;
for each transaction t in database do
incremente o contador de todos os candidatos em Ck+1
que estão contidos em t
Lk+1 = candidatos em Ck+1 com min_support
end
return k Lk;
May 25, 2016
8
O algoritmo Apriori - Exemplo
Database D
TID
100
200
300
400
itemset sup.
C1
{1}
2
{2}
3
Scan D
{3}
3
{4}
1
{5}
3
Items
134
235
1235
25
C2 itemset sup
L2 itemset sup
2
2
3
2
{1
{1
{1
{2
{2
{3
C3 itemset
{2 3 5}
Scan D
{1 3}
{2 3}
{2 5}
{3 5}
May 25, 2016
2}
3}
5}
3}
5}
5}
1
2
1
2
3
2
L1 itemset sup.
{1}
{2}
{3}
{5}
2
3
3
3
C2 itemset
{1 2}
Scan D
{1
{1
{2
{2
{3
3}
5}
3}
5}
5}
L3 itemset sup
{2 3 5} 2
9
Como gerar os candidatos?
Suponha que os itens em Lk-1 são listados em uma ordem
Passo 1: auto-união Lk-1 (joining step)
insert into Ck
select p.item1, p.item2, …, p.itemk-1, q.itemk-1
from Lk-1 p, Lk-1 q
where p.item1=q.item1, …, p.itemk-2=q.itemk-2, p.itemk-1 < q.itemk1
Passo 2: poda (prune step)
forall itemsets c in Ck do
forall (k-1)-subsets s of c do
if (s is not in Lk-1) then delete c from Ck
May 25, 2016
10
Exemplo da geração dos candidatos
L3={abc, abd, acd, ace, bcd}
Auto-união: L3*L3
abcd de abc e abd
acde de acd e ace
Poda:
acde é removido pois ade não está em L3
C4={abcd}
May 25, 2016
11
Gargalos de performance no Apriori
O núcleo do algoritmo:
Usa (k – 1)-itemsets frequentes para gerar k-itemsets candidatos
Usa iterações pelo BD e casamento de padrões para coletar
contadores para os itemsets candidatos
O gargalo do Apriori: geração dos candidatos
Grandes conjuntos de candidatos:
104 1-itemset frequentes gerarão 107 2-itemsets candidatos
Para descobrir um padrão frequente de tamanho 100, é
necessária a geração de 2100 1030 candidatos.
Múltiplas iterações pelo BD:
May 25, 2016
Necessita (n +1 ) iterações, onde n é o tamanho do maior
padrão
12
Métodos para melhorar a eficiência do
Apriori
Contagem dos itemsets baseada em Hashes: Um k-itemset que tenha o
contador do hashing bucket abaixo de um limite, não pode ser frequente
Redução de transações: Uma transação que não contenha nenhum kitemset frequente, é inútil para as próximas iterações do algoritmo
Particionamento: Qualquer itemset que é potencialmente frequente no BD
deve ser frequente em pelo menos uma partição do mesmo
Amostragem: Mineração em um subconjunto dos dados, menor limite de
support + um método para determinar a completude
Contagem dinâmica de itemsets: Adicionar um novo candidato somente
quando todos os seus subconjuntos são estimados como frequentes
May 25, 2016
13
Mineração de padrões frequentes
sem a geração de candidatos
Compactar uma grande base de dados na estrutura
compacta de uma árvore FP, Frequent-Pattern tree (FPtree)
Altamente condensada, mas completa para mineração
de padrões frequentes
Evita iterações custosas com o BD
Desenvolver um método eficiente, baseado em FP-tree,
para mineração de padrões frequentes
May 25, 2016
Dividir para conquistar: decompor tarefas de
mineração
Evitar geração de candidatos
14
Construindo uma FP-tree a partir
de um BD transacional
TID
100
200
300
400
500
Items bought
(ordered) frequent items
{f, a, c, d, g, i, m, p}
{f, c, a, m, p}
{a, b, c, f, l, m, o}
{f, c, a, b, m}
{b, f, h, j, o}
{f, b}
{b, c, k, s, p}
{c, b, p}
{a, f, c, e, l, p, m, n}
{f, c, a, m, p}
Steps:
1. Na primeira iteração com o
BD, achar os 1-itemset
frequentes
2. Ordenar os itens frequentes
em ordem descendente
3. Numa ova iteração com o
banco, construir a árvore
May 25, 2016
min_support = 0.5
{}
Header Table
Item frequency head
f
4
c
4
a
3
b
3
m
3
p
3
f:4
c:3
c:1
b:1
a:3
b:1
p:1
m:2
b:1
p:2
m:1
15
Benefícios da FP-tree
Completude:
Nunca quebra padrões longos em uma transação
Preserva completamente a informação para mineração
de padrões frequentes
Tamanho compacto
Reduz informação irrelevante — itens infrequentes
somem
Ordenação descendente da frequencia: quanto mais
frequentes, mais compartilhados ficam os itens
Nunca é maior que a base de dados original
May 25, 2016
16
Mineração de padrões frequentes
usando FP-tree
Dividir para conquistar
Recursivamente, aumentar os padrões frequentes
usando FP-tree
Método
Para cada item, construir seu pattern-base condicional,
e então sua FP-tree condicional
Repetir o processo para cada nova FP-tree condicional
Até que a FP-tree resultante seja vazia, ou contenha
somente um caminho (caminhos únicos gerarão todas as
combinações de seus sub-caminhos, cada um dos quais é um
padrão frequente)
May 25, 2016
17
Passo 1: Da FP-tree para o PatternBase Condicional
Começando pela tabela de frequencia da FP-tree
Atravessar a FP-tree seguindo o link de cada item frequente
Acumular todos os prefixos de caminhos transformados deste
item apartir de um pattern-base condicional
Header Table
Item frequency head
f
4
c
4
a
3
b
3
m
3
p
3
{}
f:4
c:3
p:2
May 25, 2016
c:1
b:1
a:3
m:2
Pattern-bases condicionais
b:1
p:1
b:1
item
pattern-base cond.
c
f:3
a
fc:3
b
fca:1, f:1, c:1
m
fca:2, fcab:1
p
fcam:2, cb:1
m:1
18
Passo 2: Construir a FP-tree
Condicional
Para cada pattern-base
Construir a FP-tree para os itens frequentes do
pattern-base
Header Table
Item frequency head
f
4
c
4
a
3
b
3
m
3
p
3
{}
f:4
c:3
c:1
b:1
a:3
m-conditional pattern
base:
fca:2, fcab:1
b:1
{}
p:1
f:3
m:2
b:1
c:3
p:2
m:1
a:3
Todos os padrões
frequentes
relacionados com m
m,
fm, cm, am,
fcm, fam, cam,
fcam
m-conditional FP-tree
May 25, 2016
19
Mineração de Padrões Frequentes
Criando Pattern-Bases Condicionais
Item
Conditional pattern-base
Conditional FP-tree
p
{(fcam:2), (cb:1)}
{(c:3)}|p
m
{(fca:2), (fcab:1)}
{(f:3, c:3, a:3)}|m
b
{(fca:1), (f:1), (c:1)}
Empty
a
{(fc:3)}
{(f:3, c:3)}|a
c
{(f:3)}
{(f:3)}|c
f
Empty
Empty
May 25, 2016
20
Geração de caminhos únicos na
FP-tree
Suponha que uma FP-tree T tenha um caminho único P
O conjunto completo dos padrões frequentes de T podem
ser gerados através da enumeração de todas as
combinações dos sub-caminhos de P
{}
f:3
c:3
a:3
Todos os padrões
frequentes
relacionados com m
m,
fm, cm, am,
fcm, fam, cam,
fcam
m-conditional FP-tree
May 25, 2016
21
Por que o crescimento do padrões
frequentes é rápido?
Estudos de performance mostram que
O crescimento FP é uma ordem de
magnetude mais rápido que o Apriori
Motivos
May 25, 2016
Não há geração ou teste de candidatos
Estrutura de dados compacta
Elimina iterações repetidas com o banco
22
Iceberg Queries
Icerberg query: Computar agregações sobre um atributo
ou um conjunto de atributos somente para aquelas com
valor de agregação maior que um certo limite
Exemplo:
select P.custID, P.itemID, sum(P.qty)
from purchase P
group by P.custID, P.itemID
having sum(P.qty) >= 10
Computar iceberg queries eficientemente com Apriori:
Primeiro, computar as menores dimensões
Então computar as maiores dimensões somente
quando todas as menores estiverem acima do limite
May 25, 2016
23
Regras de associação de multiplos
níveis
Itens sempre em hierarquias.
Itens em níveis mais baixos
são esperados como tendo o
support mais baixo
Regras dizendo respeito a
itemsets de um determinado
nível são muito úteis
BD`s transacionais podem
ser codificados, baseados em
dimensões e níveis
Podemos explorar mineração
de múltiplos níveis
compartilhada
May 25, 2016
Food
bread
milk
skim
Fraser
TID
T1
T2
T3
T4
T5
2%
wheat
white
Sunset
Items
{111, 121, 211, 221}
{111, 211, 222, 323}
{112, 122, 221, 411}
{111, 121}
{111, 122, 211, 221, 413}
24
Minerando Regras de Associação
em Grandes Bases de Dados
Minerando regras de associação
Minerando regras de associação booleana unidimensionais a partir de bancos transacionais
Minerando regras de associação multi-nível a partir de
bancos transacionais
Minerando regras de associação multi-dimencionais a
partir de bancos transacionais e data warehouses
Da mineração de associações à análise de correlação
Mineração de associações baseada em restrições
Resumo
May 25, 2016
25
Associações de Multiplos Níveis:
Suporte Uniforme vs. Suporte Reduzido
Suporte uniforme: mesmo valor de suporte mínimo para todos os
níveis
+ Um limite de suporte mínimo. Não há necessidade de examinar
itemsets contendo qualquer item cujos antecessores não tenham o
mínimo suporte.
– Itens de níveis baixos não ocorrem com muita frequencia. Se o
limite do suporte é:
Muito alto perda de associações em níveis baixos
Muito baixo gera muitas associações de alto-nível
Suporte reduzido: reduz o míni,mo suporte em níveis mais baixos
Existem 4 estratégias de busca:
May 25, 2016
Independente nível-por-nível
Filtragem de níveis cruzados por k-itemset
Filtragem de níveis cruzados por item
Filtragem controlada de níveis cruzados por item
26
Suporte Uniforme
Mineração múltiplos níveis com suporte uniforme
Nível 1
min_sup = 5%
Nível 2
min_sup = 5%
May 25, 2016
Milk
[support = 10%]
2% Milk
Skim Milk
[support = 6%]
[support = 4%]
27
Suporte Reduzido
Mineração de multiplos níveis com suporte reduzido
Nível 1
min_sup = 5%
Nível 2
min_sup = 3%
May 25, 2016
Milk
[support = 10%]
2% Milk
Skim Milk
[support = 6%]
[support = 4%]
28
Associações de Multiplos Níveis :
Filtragem de Redundâncias
Algumas regras podem ser redundantes devido à relações
“antecessoras” entre itens.
Exemplo
milk wheat bread
[support = 8%, confidence = 70%]
2% milk wheat bread [support = 2%, confidence = 72%]
Dizemos que a primeira regra é uma antecessora da
segunda.
Uma regra é redundante se seu suporte é próximo do
valor esperado, baseado na regra antecessora.
May 25, 2016
29
Minerando Regras de Associação
em Grandes Bases de Dados
Minerando regras de associação
Minerando regras de associação booleana unidimensionais a partir de bancos transacionais
Minerando regras de associação multi-nível a partir de
bancos transacionais
Minerando regras de associação multi-dimencionais a
partir de bancos transacionais e data warehouses
Da mineração de associações à análise de correlação
Mineração de associações baseada em restrições
May 25, 2016
30
Associação Multi-Dimensional:
Conceitos
Regras Uni-dimensionais ou Intra-dimensionais:
buys(X, “milk”) buys(X, “bread”)
Regras Multi-dimensionais :
Regras e Associação Inter-dimensionais (sem repetencia de
predicados)
age(X,”19-25”) occupation(X,“student”) buys(X,“coke”)
Regras e Associação hibrido-dimensionais (repetencia de
predicados)
age(X,”19-25”) buys(X, “popcorn”) buys(X, “coke”)
Atributos Categoricos
numero finito de possibilidade de valores, sem ordenação.
Atributos Quantitativos
numericos, com ordem de valores implicitos
May 25, 2016
31
Técnicas para minerar
Associações Multi-Dimensionais
Busca pelo conjunto mais frequente de k-predicados:
Exemplo: {age, occupation, buys} é um conjunto de 3predicados.
Técnicas podem ser categorizadas por como tratam cada
predicado. ex: age.
1. Usando discretização estática de atributos quantitativos
Atributos quantitativos são discretizados estaticamente usando
conceitos hierárquicos pré-definidos.
2. Regras de associação quantitativas
Atributos quantitativos são discretizados dinamicamente em
grupos baseados na distribuição dos dados.
3. Regras de associação baseados em distancia
Processo de discretização dinâmica considerando a distancia
entre pontos de dados.
May 25, 2016
32
Discretização estática de atributos
quantitativos
Discretização prévia na mineração usando conceitos hierárquicos.
Valores numéricos são substituídos por intervalos de valores (ranges).
Como em BDs relacionais, esta busca requer k varreduras em suas
tabelas, Cubos de dados são preferíveis para mineração.
()
(age)
(age, income)
(income
)
(buys)
(age,buys)(income,buys)
(age,income,buys)
May 25, 2016
33
Regras de Associação
Quantitativas
Atributos numéricos são dinamicamente discretizados para satisfazer
algum critério de mineração.
como a confiança (confidence) ou a coesão (compactness) das
regras mineradas serem maximizadas.
Regras de associação quantitativas 2-D: Aquan1 Aquan2 Acat
Exemplo:
age(X,”30-34”) income(X,”24K 48K”)
buys(X,”high resolution TV”)
May 25, 2016
34
Uma abordagem - ARCS (Association Rule
Clustering System)
Como o ARCS trabalha?
1. Particionar (Binning)
2. Encontrar conjuntos
de predicados
mais freqüentes
3. Clustering
4. Otimizar
May 25, 2016
35
Minerando regras de associação
baseadas em distancia
Métodos de Particionamento (Binning) não capturam a semântica dos
intervalos de dados
Price($)
Equi-width
(width $10)
Equi-depth
(depth 2)
Distancebased
7
20
22
50
51
53
[0,10]
[11,20]
[21,30]
[31,40]
[41,50]
[51,60]
[7,20]
[22,50]
[51,53]
[7,7]
[20,22]
[50,53]
Particionamento baseado em distancia, criam descretizações mais
significantes considerando:
densidade/numero de ponto em um intervalo
coesão (“closeness”) dos pontos em um intervalo
May 25, 2016
36
Minerando Regras de Associação
em Grandes Bases de Dados
Minerando regras de associação
Minerando regras de associação booleana unidimensionais a partir de bancos transacionais
Minerando regras de associação multi-nível a partir de
bancos transacionais
Minerando regras de associação multi-dimencionais a
partir de bancos transacionais e data warehouses
Da mineração de associações à análise de correlação
Mineração de associações baseada em restrições
May 25, 2016
37
Medidas de Interesse
Medidas Objetivas
Medidas subjetivas (Silberschatz & Tuzhilin, KDD95)
Uma regra (pattern) é interessante se
ela é inesperada (unexpected) ; e/ou
May 25, 2016
suporte (support); e confidencia (confidence)
utilizável (actionable)
Medidas subjetivas variam de usuário para usuário, assim
medidas objetivas baseadas na estatística
38
Critica ao Suporte e Confidencia
Exemplo 1:
Entre 5000 estudantes
3000 jogam basquete
3750 comem cereal
2000 jogam basquete e comem cereal
joga basquete come cereal [40%, 66.7%] é equivocado
porque a porcetagem total de estudante que comem cereal é
75% que é maior que 66.7%.
jogam basquete não come cereal [20%, 33.3%] é bem mais
preciso, embora com menor suporte (support) e confidencia
(confidence)
basketball not basketball sum(row)
cereal
2000
1750
3750
not cereal
1000
250
1250
sum(col.)
3000
2000
5000
May 25, 2016
39
Crítica ao Suporte e Confidência
(Cont.)
Exemplo 2:
X e Y: positivamente correlacionado,
X e Z, negativamente relacionando
suporte e confidencia de
X=>Z domina
É necessária uma medida de
dependência ou correlação
corrA, B
P( A B)
=
P( A) P( B)
X 1 1 1 1 0 0 0 0
Y 1 1 0 0 0 0 0 0
Z 0 1 1 1 1 1 1 1
Rule Support Confidence
X=>Y 25%
50%
X=>Z 37.50%
75%
P(B|A)/P(B) é também chamada de lift
da regra A => B
May 25, 2016
40
Outra medida de interesse
Interesse (correlação, lift)
P( A B)
P( A) P( B)
Colocando ambos P(A) e P(B) em consideração
P(A^B)=P(B)*P(A), se A e B são eventos independentes
A e B são negativamente correlacionados, se o valor e menor que 1;
caso contrário A e B são positivamente correlacionados
X 1 1 1 1 0 0 0 0
Y 1 1 0 0 0 0 0 0
Z 0 1 1 1 1 1 1 1
May 25, 2016
Itemset
Support
Interest
X,Y
X,Z
Y,Z
25%
37.50%
12.50%
2
0.9
0.57
41
Minerando Regras de Associação
em Grandes Bases de Dados
Minerando regras de associação
Minerando regras de associação booleana unidimensionais a partir de bancos transacionais
Minerando regras de associação multi-nível a partir de
bancos transacionais
Minerando regras de associação multi-dimencionais a
partir de bancos transacionais e data warehouses
Da mineração de associações à análise de correlação
Mineração de associações baseada em restrições
May 25, 2016
42
Mineração Baseada em Restrições
Mineração é executada sob a orientação de varias
restrições do usuário.
Tipos de restrições que podem ser usadas na mineração:
Knowledge type constraint: classificação, associação,
etc.
Data constraint: SQL-like queries
Dimension/level constraints:
small sales (price < $10) triggers big sales (sum > $200).
Interestingness constraints:
May 25, 2016
in relevance to region, price, brand, customer category.
Rule constraints
Find product pairs sold together in Vancouver in Dec.’98.
strong rules (min_support 3%, min_confidence 60%).
43
Regras de Restrição
Dois tipos de regras de restrição:
Regra de restrição sintática (Rule form constraints): meta-rule
guided mining.
P(x, y) ^ Q(x, w) takes(x, “database systems”).
Regra de restrição por contexto (Rule content constraint):
constraint-based query optimization (Ng, et al., SIGMOD’98).
sum(LHS) < 100 ^ min(LHS) > 20 ^ count(LHS) > 3 ^
sum(RHS) > 1000
Restrições com 1-variável vs. 2-:
1-var: Uma restrição confinada somente a um lado (Dir/Esq) da
regras, ex. como mostrada acima.
2-var: Uma restrição confinada em ambos os lados.
sum(LHS) < min(RHS) ^ max(RHS) < 5* sum(LHS)
May 25, 2016
44
Restrições Anti-monotonica and
Monotonica
Uma restrição Ca é anti-monotonica, caso um conjunto S violar a
restrição Ca, nenhum super-conjunto de S viola a restrição.
Uma restrição Ca é monotonica, caso um conjunto S satisfaça a
restrição Ca, todo super-conjunto de S satisfaz restrição.
Exemplos:
sum(S.Price) v é anti-monotonica
sum(S.Price) v é monotonica
May 25, 2016
45
Restrições Succinct
Uma restrição Ca é succinct, caso seja possível enumerar todos os
conjuntos que satisfazem a restrição.
Exemplo :
sum(S.Price ) v não é succinct
min(S.Price ) v é succinct
May 25, 2016
46
Restrições Convertiveis
Restrições que podem variar de acordo com a ordenamento dos
itemset.
Ex.: Tendo R um conjunto de itens
Se o valores forem ordenados decrescentemente,
I={9, 8, 6, 4, 3, 1}, Avg(S) v é monotonica
Se o valores forem ordenados crescentemente,
I={1, 2, 4, 6, 8, 9}, Avg(S) v é anti-monotonica
May 25, 2016
47
Relação entre categorias de
restrições
Succinctness
Anti-monotonicity
Monotonicity
Convertible constraints
Inconvertible constraints
May 25, 2016
48
Caracterização de restrições
Constraint
Anti-Monotonicity
S v, { =, , }
yes
vS
no
SV
no
SV
yes
S=V
partly
min(S) v
no
min(S) v
yes
min(S) = v
partly
max(S) v
yes
max(S) v
no
max(S) = v
partly
count(S) v
yes
count(S) v
no
count(S) = v
partly
sum(S) v
yes
sum(S) v
no
sum(S) = v
partly
avg(S) v, { =, , }
convertible
(frequent constraint)
(yes)
May 25, 2016
Succinct
Yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
yes
weakly
weakly
weakly
no
no
no
no
(no)
49