java e data science na publicidade digital fabiane bizinella nardon @fabianenardon chief data...
TRANSCRIPT
Java e Data Science na Publicidade Digital
Fabiane Bizinella Nardon@fabianenardon
Chief Data Scientist da TailTarget
“The best minds of my generation are thinking about
how to make people click ads. That sucks.”
Jeff Hammerbacher
Publicidade Digital Moderna
Muitos Dados +
Métricas (+/- Fáceis de Medir) +
Velocidade
Publicidade Digital
Anunciante
Direct Orders
Publicidade Digital Moderna
Anunciante
AdNetwork
AdExchangeDSP SSP
Mídia Programática
Real Time Bidding
Ad Exchange
DSP DSP DSP
Real Time Bidding
Ad Exchange
DSP DSP DSP
Menos de 300ms!
Escalabilidade
Data Science
Arquiteturas Escaláveis
Arquitete para pelo menos 3
Assuma que alguma coisa irá falhar
Isole os seus serviços
Architecting for Scalability
SHARED NOTHING
Shared Nothing
App Server 1 App Server 2 App Server 3
Cache 1 Cache 2 Cache 3
DB 1 DB 2 DB 3
Shared Nothing
App Server 1 App Server 2 App Server 3
Cache 1 Cache 2 Cache 3
DB 1 DB 2 DB 3
Cache 4
- Sem server-side session
- Sem sticky sessions
Shared Nothing
Play Framework Play Framework Play Framework
Redis Shard 1/Replica 1
Redis Shard 2/Replica 1
Redis Shard 1/Replica 2
MongoDBMaster
MongoDBSlave 1
MongoDBSlave 2
Redis Shard 2/Replica 2
Escalando
Use o poder da Nuvem
mas use os seus DADOS!
Predição de Tráfego – Por que?
Pode demorar de 10 a 20 min para ter uma máquina no ar. Dá pra esperar tudo isso?
Evite falsas quedas de tráfego
Predição de Tráfego
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61700
800
900
1000
1100
1200
1300
1400
1500
1600
Requests
Requests
Predição de Tráfego
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61700
800
900
1000
1100
1200
1300
1400
1500
1600
Requests
RequestsLinear (Requests)
Predição de Tráfego
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61700
800
900
1000
1100
1200
1300
1400
Requests
RequestsLinear (Requests)
Predição de Tráfego
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61700
800
900
1000
1100
1200
1300
1400
1500
RequestsLinear (Requests)Predicted Traffic
Ad Exchange
DSP DSP DSP
Data Science
BIG DATA+
ESTATÍSTICA+
INTELIGÊNCIA ARTIFICIAL
Data Science e Java
Detectando comportamentos
Ad Exchange
DSP DSP DSP
Detectando comportamentos
4-Jan
8-Jan12-Ja
n16-Ja
n20-Ja
n24-Ja
n28-Ja
n1-Fe
b5-Fe
b9-Fe
b13-Fe
b17-Fe
b21-Fe
b25-Fe
b1-M
ar5-M
ar9-M
ar
13-Mar
17-Mar
21-Mar
25-Mar
29-Mar
2-Apr
6-Apr
10-Apr
14-Apr
18-Apr
22-Apr
26-Apr0
2000000
4000000
6000000
8000000
10000000
12000000
POLITICSSOCCERJOBSFINANCE
Taxes
Detectando comportamentosCurly Hair
Straight Hair
Detectando comportamentos
Brazilian Java Developershttp://www.tailtarget.com/blog/getting-to-know-the-java-developer-using-data-science/
Detectando comportamentos
Brazilian Java Developers
Dado comportamental funciona?
Detectando comportamento
Classifiers
Recommendation Systems
Clustering
Deep Learning
FUTEBOL
User Profile
uid=123 : [FUTEBOL: 1 view, MASCULINO: 1 view]
Detectando comportamento
FUTEBOL
User Profile
uid=123 : [FUTEBOL: 10 views, MASCULINO: 20 views]
uid=123 : [FUTEBOL, MASCULINO]
Detectando comportamento
Implementando um Classificador
Aprendizado Supervisionado
1. PREPARAÇÃO DOS DADOS SementeSegmento
FUTEBOL
http://eleicoes.uol.com.brhttp://noticias.terra.com.br/brasil/politica/http://ultimosegundo.ig.com.br/politica/
País
BRASIL
MODA BRASIL
POLÍTICA
FAMÍLIA
BRASIL
BRASIL
http://esportes.terra.com.br/futebol/http://placar.abril.com.br/materia/http://esporte.uol.com.br/futebol/
http://www.fhits.com.brhttp://www.dolcemoda.com.br
http://guiadobebe.uol.com.br/http://mdemulher.abril.com.br/familia/
1. PREPARAÇÃO DOS DADOS (CRAWLER) Páginas (3.000)Segmento
FUTEBOL
(…)
País
BRASIL
MODA BRASIL
POLÍTICA
FAMÍLIA
BRASIL
BRASIL
1. http://esportes.terra.com.br/futebol/internacional/mourinho-diz-que-rafa-benitez-destruiu-a-inter-de-milao-em-2010,3652d311ab33c95fb07b01f6ee27168ew7uvRCRD.html
2. http://esportes.terra.com.br/futebol/brasileiro-serie-a/pato-que-voltar-a-selecao-e-lamenta-nao-enfrentar-corinthians,ac2efed99a4ed4ed83198389e01961f7sih9RCRD.html
(…)
(…)
2. APRENDIZADO SUPERVISIONADO
80%
TRE
INO
20%
TES
TE
Pages (3,000)Segment
SOCCER
(…)
Country
BRAZIL
FASHION BRAZIL
POLITICS
FAMILY
BRAZIL
BRAZIL
1. http://esportes.terra.com.br/futebol/internacional/mourinho-diz-que-rafa-benitez-destruiu-a-inter-de-milao-em-2010,3652d311ab33c95fb07b01f6ee27168ew7uvRCRD.html
2. http://esportes.terra.com.br/futebol/brasileiro-serie-a/pato-que-voltar-a-selecao-e-lamenta-nao-enfrentar-corinthians,ac2efed99a4ed4ed83198389e01961f7sih9RCRD.html
(…)
(…)
3. ENCONTRANDO O MODELOTREINO
TESTE
TREINO
TESTE
MODELO C
98%
TREINO
TESTE
MODELO B
85%MODELO A
70%
4. TESTANDO O MODELO
MATRIZ DE CONFUSÃO
FUTEBOL MODA POLÍTICA FAMÍLIA
FUTEBOL 997 0 1 2
MODA 1 999 0 0
POLÍTICA 3 1 995 1
FAMÍLIA 2 1 0 997
4. MODELO EM AÇÃO
DATA SC
IENCE
Algorit
mo
MODELO C ASSUNTOPágina
RETREINO
TV
DATA SC
IENCE
TAILT
ARGET
APLICANDO O MODELO
Português
MODELO
FUTEBOL
com.cybozu.labslangdetect
DETECÇÃO DE PAÍS
Colombia: 8.999Argentina: 100
Mexico: 87Venezuela: 50
USA: 45
Muitas vezes você não precisa processar todos os seus dados
Usuários por interesse (TODOS)
FUTEBOL
EMPREGO
FINANÇAS
POLÍTICA
Usuários por interesse (1%)
FUTEBOL
EMPREGOS
FINANÇAS
POLÍTICA
Usuários por InteresseTODOS 1%
Como selecionar uma boa amostra
Tamanho tem que ser representativo
Distribuição tem que ser homogênea
Tamanho da Amostra
MAIOR A AMOSTRA = MAIOR A ACURÁCIA
Tamanho da Amostra
Encontre a amostra mínima para o seu problema.
Se o banco de dados tem menos que o mínimo, use todos os dados.
Distribuição da Amostra(Ex.: Redis)
SHARDING 1 SHARDING 2 SHARDING 3
ITEMS POR SHARDING = TAMANHO DA AMOSTRA / NÚMERO DE SHARDINGS
RANDOMKEYs RANDOMKEYs RANDOMKEYs
ITEMS POR SHARDING = TAMANHO DA AMOSTRA / NÚMERO DE SHARDINGS
Distribuição da Amostra(Ex.: Redis)
SHARDING 1 SHARDING 2 SHARDING 3
RANDOMKEYs RANDOMKEYs RANDOMKEYs
Ta = Tamanho da AmostraTt = Tamanho TotalNa = Número de itens na amostraNt = Número de itens no tt
Nt = Na * Tt / TaExample:Ta = 1000Tt = 100,000Na = 400 Women
Nt = 400 * 100,000 / 1000 = 40,000
E quando você não sabe quantos itens você tem?
Reservoir Sampling
1 2 3 4 5
A B C D E
F
Random (0..1): 0.7K = Ss / i K = 5 / 6 = 0.83Se K > Random => TROCA!
Reservoir Sampling Distribuído
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
Reservoir Sampling Distribuído
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
Reservoir Sampling Distribuído
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);}
Reservoir Sampling Distribuído
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
Reservoir Sampling Distribuído
import org.apache.crunch.lib.Sample;
Sample.reservoirSample(PCollection<T> input, int sampleSize)
Apache Crunch:
Por que Java?
Bibliotecas de machine learning
Drivers NoSQL
Perfomance
Conectores para Frameworks Distribuídos
Java e Data Science na Publicidade Digital
Fabiane Bizinella Nardon@fabianenardon
Chief Data Scientist na TailTarget