51
Você não precisa estar 100% certo o tempo todo! Algoritmos para consultar terabytes de dados Fabiane Bizinella Nardon TailTarget @fabianenardon

TDC2016SP - Trilha Data Science

Embed Size (px)

Citation preview

Page 1: TDC2016SP - Trilha Data Science

Você não precisa estar 100% certo

o tempo todo!

Algoritmos para consultar terabytes de dados

Fabiane Bizinella NardonTailTarget

@fabianenardon

Page 2: TDC2016SP - Trilha Data Science

SUAS RESPOSTAS DEVEM ESTAR SEMPRE CERTAS

Page 3: TDC2016SP - Trilha Data Science

ÀS VEZES 100% CERTAS

Page 4: TDC2016SP - Trilha Data Science

ÀS VEZES 98% CERTAS

Page 5: TDC2016SP - Trilha Data Science

2 Bilhões de tuplas / 71min 31 Milhões de tuplas / 3 seg

Fonte: http://highscalability.com/blog/2016/2/25/when-should-approximate-query-processing-be-used.html

Page 6: TDC2016SP - Trilha Data Science

QUAL O TAMANHO DA AMOSTRA QUE EU

PRECISO?

Page 7: TDC2016SP - Trilha Data Science

DEPENDE DE QUANTO VOCÊ ACEITA ERRAR

Page 8: TDC2016SP - Trilha Data Science

MARGEM DE ERRO:INTERVALO NO QUAL

ESPERO ENCONTRAR O DADO QUE QUERO MEDIR.

Page 9: TDC2016SP - Trilha Data Science

EXEMPLO:NÚMERO DE MULHERES NA INTERNET

COM 5% DE MARGEM DE ERRO. SE O NÚMERO ESTIMADO É DE 100 MILHÕES, ESPERO QUE O NÚMERO

REAL ESTEJA ENTRE 100 MILHÕES +/- 5%

Page 10: TDC2016SP - Trilha Data Science

NÍVEL DE CONFIANÇA:CERTEZA QUE O DADO QUE BUSCAMOS ESTÁ DENTRO

DA MARGEM DE ERRO

Page 11: TDC2016SP - Trilha Data Science

EXEMPLO:95% DE FATOR DE CERTEZA SIGNIFICA QUE EM 95% DOS

CASOS, O NÚMERO DE MULHERES ESTARÁ DENTRO

DE 100 MILHÕES +/- 5%

Page 12: TDC2016SP - Trilha Data Science

MARGEM DE ERRO

NÍVEL DE CONFIANÇA

TAMANHODA AMOSTRA

Page 13: TDC2016SP - Trilha Data Science

MARGEM DE ERRO NÍVEL DE

CONFIANÇA

TAMANHODA AMOSTRA

Page 14: TDC2016SP - Trilha Data Science

MARGEM DE ERRO

NÍVEL DE CONFIANÇ

A

TAMANHODA AMOSTRA

Page 15: TDC2016SP - Trilha Data Science

n = (z * stddev /mde)2

n = tamanho da amostrastddev = desvio padrão da população

mde = margem de erroz = Z-score

Page 16: TDC2016SP - Trilha Data Science

nreal = (n * p) / (n + p – 1)

n = tamanho da amostranreal= tamanho real da amostra

P = tamanho da população

Page 17: TDC2016SP - Trilha Data Science

n = (z * stddev /mde)2

Z-Score:

90% = 1.64595% = 1.9699% = 2.576

Page 18: TDC2016SP - Trilha Data Science

n = (z * stddev /mde)2

n = (2.576 * 0.5 / 0.01)2

n = 16.590

n = tamanho da amostrastddev = desvio padrão da população

mde = margem de erroz = Z-score

Page 19: TDC2016SP - Trilha Data Science

nreal = (n * p) / (n + p – 1)

nreal = (16590 * 100000) / (16590 + 100000 -1)

nreal = 14.229

n = tamanho da amostranreal= tamanho real da amostra

P = tamanho da população

Page 20: TDC2016SP - Trilha Data Science

P = 100.000 -> nreal = 14.229

P = 200.000 -> nreal = 15.317 P = 400.000 -> nreal = 15.927

P = 1.000.000 -> nreal = 16.317P = 10.000.000 -> nreal = 16.560

P = 200.000.000 -> nreal = 16.586P = 400.000.000 -> nreal = 16.587

P = 1.000.000.000 -> nreal = 16.587

Page 21: TDC2016SP - Trilha Data Science

POPULAÇÃO: 488.333.067

PROPORÇÃO POR GÊNERO:

AMOSTRA: 32.000M: 156.556.529 (32.05%)H: 95.148.646 (19.48%)

AMOSTRA: 16.000M: 158.036.788 (32.36%)H: 96.018.489 (19.66%)

Page 22: TDC2016SP - Trilha Data Science

COMO ESCOLHER OS ITENS DA AMOSTRA

Page 23: TDC2016SP - Trilha Data Science

SAMPLING WITH REPLACEMENT: ESCOLHE UM ITEM ALEATÓRIO

SUCESSIVAMENTE. MESMO ITEM PODE APARECER MAIS DE UMA

VEZ

Page 24: TDC2016SP - Trilha Data Science

SAMPLING WITHOUT REPLACEMENT:

ESCOLHE UM ITEM ALEATÓRIO E GARANTE QUE ELE SÓ APARECE

UMA VEZ NA AMOSTRA.

Page 25: TDC2016SP - Trilha Data Science

Random Sampling: Escolhe amostras aleatórias,

todas com o mesmo peso

Page 26: TDC2016SP - Trilha Data Science

Stratified Sampling: Divide a população em stratas

e faz uma amostra de cada strata separadamente

Page 27: TDC2016SP - Trilha Data Science

AMOSTRA RANDÔMICA

Page 28: TDC2016SP - Trilha Data Science

PARA CADA GRUPO AMOSTRAL, GUARDE:

TAMANHO DA AMOSTRATAMANHO REAL

IDENTIFICADOR DO GRUPO AMOSTRAL

Page 29: TDC2016SP - Trilha Data Science

EXTRAINDO AMOSTRAS DA BASE DE DADOS

Page 30: TDC2016SP - Trilha Data Science

ESTRATÉGIA 1: GRAVE NÚMERO RANDÔMICO

INDEXADO NO BANCO DE DADOS

{"_id": 1,"gender": "f","age": 24,"selector": 0.12412423

}

* MongoDB

Page 31: TDC2016SP - Trilha Data Science

int selector = 0;int sampleCount = 0;List<User> sample = new ArrayList<>();double prevSelector = -1;while (sampleCount < SAMPLE_SIZE) { /* Add to sample result of db.Users.find({ selector: { $gt: prevSelector}

}).limit(100);

Set last selector found to prevSelector */

sampleCount += sample.size();}

Page 32: TDC2016SP - Trilha Data Science

ESTRATÉGIA 2: USE MECANISMO DE

SAMPLING DO SEU BD

Page 33: TDC2016SP - Trilha Data Science

{"aggregations": { "sample": { "sampler": { "shard_size": 16000 }, "aggregations": { "views": { "terms": { "field": "gender“ }, "aggregations": { "unique_users": { "cardinality": { "field": "uid" } } } } } } }} * ElasticSearch

Page 34: TDC2016SP - Trilha Data Science

ESTRATÉGIA 3: USANDO SHARDING

Page 35: TDC2016SP - Trilha Data Science

SHARDING 1 SHARDING 2 SHARDING 3

ITEMS POR SHARDING = TAMANHO DA AMOSTRA / NÚMERO DE SHARDINGS

RANDOMKEYs RANDOMKEYs RANDOMKEYs

* Redis

Page 36: TDC2016SP - Trilha Data Science

PARA CADA GRUPO AMOSTRAL, GUARDE:

TAMANHO DA AMOSTRATAMANHO REAL

IDENTIFICADOR DO GRUPO AMOSTRAL

Page 37: TDC2016SP - Trilha Data Science

Ta = Tamanho da AmostraTp = Tamanho da PopulaçãoNa = Número de Itens na AmostraNp = Número de Itens na população

Np = Na * Tp / Ta

Exemplo:Ta = 1000Tp = 100.000Na = 400 Mulheres

Np = 400 * 100.000 / 1000 = 40.000

Page 38: TDC2016SP - Trilha Data Science

NÃO SEI O TAMANHO DA POPULAÇÃO.

E AGORA?

Page 39: TDC2016SP - Trilha Data Science

RESERVOIR SAMPLING

Page 40: TDC2016SP - Trilha Data Science

1 2 3 4 5

A B C D E

F

Random (0..1): 0.7K = Ta / i K = 5 / 6 = 0.83Se K > Random => TROCA!

Page 41: TDC2016SP - Trilha Data Science

RESERVOIR SAMPLINGDISTRIBUÍDO

Page 42: TDC2016SP - Trilha Data Science

1 2 3 4 5

A B C D E F G H I J K L M N O P Q R S T U V X Y W Z

Page 43: TDC2016SP - Trilha Data Science

1 2 3 4 5

A B C D E F G H I J K L M N O P Q R S T U V X Y W Z

Page 44: TDC2016SP - Trilha Data Science

1 2 3 4 5

A:0.1 B:0.3 C:0.2 D:0.7 E:0.9 F:0.11 G:0.4 H:0.6 I:0.76

J:0.8 K:0.2 L:0.54 M:0.4 N:0.21 O:0.33 P:0.56 Q:0.32 R:0.23

S:0.21 T:0.32 U:0.22 V:0.7 X:0.12 Y:0.23 W:0.3 Z:0.76

private SortedMap<Double, MyObject> reservoir;

...if (reservoir.size() < SAMPLE_SIZE) { reservoir.put(score, myObject);} else if (score > reservoir.firstKey()) { reservoir.remove(reservoir.firstKey()); reservoir.put(score, myObject);}

Page 45: TDC2016SP - Trilha Data Science

O L P I Z

1 2 3 4 5

A:0.1 B:0.3 C:0.2 D:0.7 E:0.9 F:0.11 G:0.4 H:0.6 I:0.76

J:0.8 K:0.2 L:0.54 M:0.4 N:0.21 O:0.33 P:0.56 Q:0.32 R:0.23

S:0.21 T:0.32 U:0.22 V:0.7 X:0.12 Y:0.23 W:0.3 Z:0.76

H:0.6 D:0.7 E:0.9 F:0.11 I:0.76 R:0.23 Q:0.32 O:0.33 L:0.54 P:0.56 S:0.21 U:0.22 Y:0.23 T:0.32 Z:0.76

COMBINER

Page 46: TDC2016SP - Trilha Data Science

import org.apache.crunch.lib.Sample;

Sample.reservoirSample(PCollection<T> input, int sampleSize)

Apache Crunch:

Page 47: TDC2016SP - Trilha Data Science

CONSULTAS APROXIMADAS

AGREGAÇÕESPROPORÇÕES

Page 48: TDC2016SP - Trilha Data Science

COUNT

Np = Na * Tp / Ta

400 * 100.000 / 1000=

40.000

Page 49: TDC2016SP - Trilha Data Science

SUM

Sp = Sa * Tp / Ta

600 * 100.000 / 1000=

60.000

Page 50: TDC2016SP - Trilha Data Science

AVERAGE

Ap = (Sa * Tp / Ta) / (Na * Tp / Ta)

(600 * 100.000 / 1000) /

(400 * 100.000 / 1000)=

1.5

Page 51: TDC2016SP - Trilha Data Science

Você não precisa estar 100% certo

o tempo todo!

Algoritmos em Java para consultar terabytes de dados

Fabiane Bizinella NardonTailTarget

@fabianenardon