SlideShare ist ein Scribd-Unternehmen logo
1 von 49
@timotta
Machine learning e
experimentos online para
evitar cancelamentos no
Globoplay
@timotta
@timotta
Globoplay,
Novos assinantes,
Cancelamentos
@timotta
Churn rate
@timotta
Usuários e seu viés de propensão de cancelar
@timotta
Churners!
Quem são?
Onde vivem?
Do que se alimentam?
@timotta
Let's get the data
Usuários
retidos
Usuários que
cancelaram
Julho
Consumo nas X últimas semanas
Histórico da assinatura
Dados
cadastrais
@timotta
Dados desbalanceados
Apenas 2%
de churners
@timotta
Dados desbalanceados
Previsto
Churn Não churn
Atual Churn 0 20
Não churn 0 980
accuraccy: 0,98
precision: 0
recall: 0
@timotta
Lidando com desbalanceamento
Oversampling
Undersampling
Smote
Class weights
Class Weight
Churn 60
Não churn 1
@timotta
Lidando com desbalanceamento
Oversampling
Undersampling
Smote
Class weights
Class Weight
Churn 60
Não churn 1
@timotta
Comunicação de resultados
Balanceados
Previsto
Churn Não churn
Atual Churn 445 50
Não churn 30 475
accuraccy: 0,92
precision: 0,94
recall: 0,90
Desbalanceados
Previsto
Churn Não churn
Atual Churn 436 59
Não churn 402 103
accuraccy: 0,54
precision: 0,52
recall: 0,88
@timotta
eventos de
usuários
Assinaturas
Vídeos
e titulos
Dados
crus
Limpeza
dos dados
Split treino e teste
desbalanceado
Balanceamento
Split treino e
teste
treino do
modelo (k-fold)
Validar no teste
balanceado
Troca algoritmo
Mais informações
Validar no teste
desbalanceado
Processo completo
@timotta
- Random forest
- 41 features
- Dados demográficos
- 17 semanas de
consumo
- Histórico de assinaturas
- Balanceamento Smote
Modelo final
Depois de muitas iterações
@timotta
Modelo final: Resultado
Melhor F1:
- Precision: 33%
- Recall: 88%
@timotta
Modelo final: Possíveis usos
E-mail, push notification
- Precision: 10%
- Recall: 98%
Desconto:
- Precision: 84%
- Recall: 12%
@timotta
Primeiro experimento AB com o modelo
ControleAlvo
@timotta
sem diferença
11% x 10,6%
de cancelamento
Primeiro experimento AB com o modelo
ControleAlvo
@timotta
Churn é uma métrica
influenciável em
curto prazo?
@timotta
Explicando o modelo: Variáveis mais relevantes
- Idade da assinatura: Recente
- Tipo de cobrança: Boleto
- Sexo: Sem preencher
@timotta
Quais outros fatores?
- Idade da assinatura: Recente
- Tipo de cobrança: Boleto
- Sexo: Sem preencher
- Muito tempo sem retornar ao produto
- Poucos diferentes títulos consumidos
- Pouco tempo gasto em conteúdo pago
- Pouca quantidade de vídeos assistidos
@timotta
Quais outros fatores?
- Idade da assinatura: Recente
- Tipo de cobrança: Boleto
- Sexo: Sem preencher
- Muito tempo sem retornar ao produto
- Poucos diferentes títulos consumidos
- Pouco tempo gasto em conteúdo pago
- Pouca quantidade de vídeos assistidos
@timotta
De vídeos
avulsos a
títulos
Mudança de foco
De vídeos avulsos
Para programas e filmes
@timotta
Hipóteses para
influenciar esses
fatores
@timotta
Muito tempo
sem retornar
hipótese
Dificuldade de encontrar
no produto o programa
que está acompanhando.
@timotta
Proposta: Prever títulos que assistirá no dia
@timotta
Bag of entity
V: Matriz de preferências
de usuários para cada
título
Z: Matriz com a soma do
tempo de vídeo de cada
usuário em cada título no
último dia
ƛ: Redutor temporal
with time reduction
@timotta
Métrica de ranking vs métrica de classificação
Preferência
Algoritmo 1
Algoritmo 2
1
1 2 3
32 Classificação:
Empate
Ranking:
Algoritmo 2
@timotta
MRR constante em diversas datas
@timotta
Melhor que top: ƛ = 0,95
ƛ = 0.95
MRR: 0.51
Top
MRR: 0.35
@timotta
Retorno semanal
Ui
Ui+1
usuários
ativos na
semana i
usuários
ativos na
semana i+1
@timotta
Experimento AB
+3,61% de retorno semanal
@timotta
Poucos títulos
consumidos
hipótese
- Usuário não conhece a
enorme variedade de
títulos que o Globoplay
oferece
- Produto não exibe de
forma clara essa
variedade ao usuário
@timotta
Propostas: Oferecer títulos relevantes e novos
@timotta
Filtragem colaborativa
@timotta
Memory based: KNN
@timotta
Memory based: Enorme matriz
@timotta
Model based: SVD
@timotta
Model based: ALS
@timotta
Aumento de programas consumidos
AuBu
títulos
consumidos
antes
títulos
consumidos
Depois
@timotta
Concentração de usuários em títulos: Gini
@timotta
Concentração de usuários em títulos: Gini
gini = 0,22 gini = 0,09 gini = 0,13
@timotta
Experimento AB
+2,75 de programas consumidos
-1,2% de concentração de programas
AlvoControle
@timotta
Mais de 20
experimentos AB
(sem contar dos
outros times)
@timotta
Sem isolamento
Experimento 1 Experimento 2 Experimento 3
Sorteio
A B
Sorteio
A B
Sorteio
A B
@timotta
Experimentos isolados
Sorteio
Experimento 1 Experimento 2 Slot vazio Experimento 3
Sorteio
A B
Sorteio
A B
Sorteio
A B
@timotta
Experimentos Multi Variados
Experimento 1 Experimento 2 Experimento 3
Sorteio
A B
Sorteio
A B
Sorteio
A B
E1 E2 E3 R
A A A 10%
A A B 12%
A B B 8%
B B B 10%
B B A 14%
B A A 8%
B A B 10%
A B A 11%
@timotta
- Machine learning lidando com dados desbalanceados
- Mudanças de rumo influenciadas pela análise de dados
- Diferentes algoritmos para diferentes objetivos
- Experimentos AB online paralelos e concorrentes
Resumão pra prova
@timotta
Recomendação
Featuring
Segmentação
Cluster
Pipeline
Experimentação
Growth
@timotta
@timotta

Weitere ähnliche Inhalte

Mehr von Tiago Albineli Motta (11)

xCLiMF
xCLiMFxCLiMF
xCLiMF
 
Rastros digitais
Rastros digitaisRastros digitais
Rastros digitais
 
Big data
Big dataBig data
Big data
 
Recomendação de ponta a ponta na Globo.com
Recomendação de ponta a ponta na Globo.comRecomendação de ponta a ponta na Globo.com
Recomendação de ponta a ponta na Globo.com
 
Recomendação na Globo.com
Recomendação na Globo.comRecomendação na Globo.com
Recomendação na Globo.com
 
Otimizando seu projeto Rails
Otimizando seu projeto RailsOtimizando seu projeto Rails
Otimizando seu projeto Rails
 
Meta-programacao em python
Meta-programacao em pythonMeta-programacao em python
Meta-programacao em python
 
Testes unitários e de integração: Quando e Porque
Testes unitários e de integração: Quando e PorqueTestes unitários e de integração: Quando e Porque
Testes unitários e de integração: Quando e Porque
 
Redis na Prática
Redis na PráticaRedis na Prática
Redis na Prática
 
Dinamizando Sites Estáticos
Dinamizando Sites EstáticosDinamizando Sites Estáticos
Dinamizando Sites Estáticos
 
Escalando Sites com Nginx
Escalando Sites com NginxEscalando Sites com Nginx
Escalando Sites com Nginx
 

Machine Learning e experimentos online para evitar o cancelamento no GloboPlay

Hinweis der Redaktion

  1. Globoplay é o produto de vídeos da Globo.com que foi lançado em 2015. Desde março de 2017 foi formado o time de Growth com o objetivo de alavancar a base de assinantes do Globoplay Somos um time multidisciplinar composto de um desenvolvedor web, um engenheiro de dados, um engenheiro de machine learning, um estatístico e um pessoa de negócios. O nosso objetivo principal é aumentar a base de assinantes. Para isso nós passamos por duas métricas: Novas assinaturas Evitar o abandono A venda de novas assinaturas não é um problema para o Globoplay, basta uma campanha na TV, uma nova novela ou um novo programa que as assinaturas crescem sem dificuldade. O problema é que o abandono é altissimo.
  2. De qualquer forma, nosso primeiro trabalho foi implementar um modelo para identificar os usuários que têm maior probabilidade de abandonar o produto. Já havia na área de marketing algumas rotinas "rule based" com envio de e-mail para potenciais churners. Por exemplo, havia um alto numero de abandono nas primeiras semanas, então havia um disparo de e-mail automático para esses usuários. Contudo, essas regras não eram a solução ótima, e nossa hipótese é que poderíamos obter resultados melhores utilizando a combinação de diversos fatores.
  3. O primeiro problema que encontramos foi o desbalanceamento da base. A porcentagem de churners em relação a usuários retidos era em torno de 2%. Muito baixa de forma que o resultado do modelo ficava ruim.
  4. Os nossos primeiros modelos acabavam por otimizar a classe negativa, o que dava uma ótima acurácia. Mas o que queríamos mesmo era prever a classe churn. Por isso a métrica que escolhemos foi precision e recall.
  5. Pesquisamos três: Oversampling Undersampling Smote (Oversampling) https://jair.org/index.php/jair/article/view/10302 Synthetic Minority Over-sampling Technique
  6. Pesquisamos três: Oversampling Undersampling Smote (Oversampling) https://jair.org/index.php/jair/article/view/10302 Synthetic Minority Over-sampling Technique
  7. Os nossos primeiros modelos acabavam por otimizar a classe negativa, o que dava uma ótima acurácia. Mas o que queríamos mesmo era prever a classe churn. Por isso a métrica que escolhemos foi precision e recall.
  8. O modelo que se saiu melhor é o random forest utilizando 41 diferentes parâmetros (features), dentre eles dados demográficos, histórico de assinatura e consumo segmentado de diversas formas das ultimas 17 semanas do titular e seus dependentes.
  9. Fizemos um experimento de envio de e-mail Dividimos o grupo de pessoas assinantes com alta probabilidade de cancelar em pessoas que receberiam o e-mail e pessoas que não receberiam. Não houve diferença significativa.
  10. Fizemos um experimento de envio de e-mail Dividimos o grupo de pessoas assinantes com alta probabilidade de cancelar em pessoas que receberiam o e-mail e pessoas que não receberiam. Não houve diferença significativa.
  11. É fácil em um experimento online obter diferença em métricas diretas como clique, compra ou tempo online. Mas uma métrica como o "não abandono" que depende de tantos fatores, um só experimento é pouco. Neste momento a gente ficou um pouco desanimado, mas não nos abatemos. Resolvemos então explorar um pouco mais desse modelo que teve resultado tão bom. Será que conseguimos extrair algo quantificavel?
  12. Resolvemos então explicar o modelo pra entender melhor e os três fatores principais que determinam o churn do usuário são as seguintes variaveis categóricas. Idade mostra que os usuários mais antigos são os que já são fiéis ao produto (ou esqueceram que assinaram) Tipo de cobrança mostra duas possibilidades: O esquecimento de pagar ou um perfil sócio economico que não pode se manter assinante E sexo sem preencher também é um legado de assinaturas antigas, quando não havia esse campo (embora o campo atualmente não seja obrigatório)
  13. Um vez que os primeiros fatores referiam-se a usuários novos, resolvemos olhar os fatores que faziam com que esses usuários novos desistissem do produto.
  14. Dois desses nos mostrou que o Globoplay estava em um caminho ruim até então. Ele nasceu com uma proposta meio youtube, de oferecer gratuitamente vídeos relevantes dos programas, mas o que percebemos com é que o assinante que se mantém é aquele que consome mais diferentes programas e seus conteúdos pagos (episódios na íntegra). Faz total sentido né, é este usuário que vê valor no produto.
  15. Então houve uma grande mudança de mindset e foco no produto. Ao invés de ofertarmos vídeos, passamos gradualmente a ofertar títulos, sejam eles programas ou filmes. Esse processo ainda está ocorrendo. Essa mudança está acontecendo ainda.
  16. Mas, mais que isso, nós levantamos algumas hipóteses olhando mais a fundo o que poderia estar causando cada um dos fatores.
  17. http://www.hostmath.com/Show.aspx?Code=V_%7Bm%2Cn%7D%20%3D%20V_%7Bm%2Cn%7D%20*%20%5Clambda%20%2B%20Z_%7Bm%2Cn%7D
  18. Testamos diversos parâmetro para a técnica de "bag of word" com fator de reduçao temporal
  19. Testamos diversos parâmetro para a técnica de "bag of word" com redução temporal
  20. http://www.hostmath.com/Show.aspx?Code=%5Cfrac%7B%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7D%7Bcard(U_i)%20%5Ccap%20card(U_%7Bi%2B1%7D)%7D%7D%7B%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7Dcard(U_i)%7D
  21. Fizemos 6 testes AB até chegar a uma versão combinando algoritmos, layout e posição de entrega. Chegando na solução final que obteve +3,61% de retorno semanal a mais que o antigo layout É interessante notar, que mantivemos o teste AB por mais tempo depois para verificar se no longo prazo o retorno semanal continuaria igual ou degradaria. Ele manteve-se acima da versão anterior, mas com uma diferença menor (+1%). Isso demonstra que o efeito surpresa ajudou nas métricas.
  22. O outro fator notado no modelo de churn é a baixa quantidade de titulos consumidos. Notamos que existe um grupo grande de usuários que nào assina realmente o Globoplay, assina um programa. Assim que termina o programa ele não volta mais ao produto (uma das possiveis causas não retorno) ou então cancela.
  23. http://www.hostmath.com/Show.aspx?Code=%5Cfrac%7B%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7D%7Bcard(U_i)%20%5Ccap%20card(U_%7Bi%2B1%7D)%7D%7D%7B%5Csum_%7Bi%3D0%7D%5E%7Bn-1%7Dcard(U_i)%7D
  24. Com essa métrica, baseada no índice de desigualdade Gini, a gente consegue verificar se não houve uma concentração de usuários em um só grupo de usuários e comparar em um experimento AB qual alternativa teve a menor concentração. Obviamente essa métrica só tem validade se houver um empate na métrica de aumento de programas consumidos. Porque se eu criar uma feature que esconda por exemplo o programa blockbuster do momento eu consigo diminuir a concentração em programas, mas eu desagradei o usuário final. É o mesmo dilema do indice de desigualdade Gini. Etiópia tem um Gini melhor que Luxemburgo. http://www.hostmath.com/Show.aspx?Code=%0A%5Cfrac%7B1-2*%5Csum_%7Bi%3D1%7D%5En%7Bi%20*%20W_i%7D%7D%7Bn%7D%20%2B%201 http://www.hostmath.com/Show.aspx?Code=%0AW_k%20%3D%20%5Cfrac%7BP_k%7D%7B%5Csum_%7Bi%3D1%7D%5En%7BP_i%7D%7D%0A https://github.com/open-risk/concentration_library/issues/4
  25. +2,75 por assinante