0:00:00: Boa noite! Como você está neste maravilhoso dia? Por favor, me diga se o som está ok, se o vídeo está ok,

0:00:09: para eu ter certeza que está tudo funcionando, se eu não tenho que fazer nenhum ajuste aqui,

0:00:14: para a gente poder ter essa aula incrível, maravilhosa, sobre métricas de classificação.

0:00:21: Vou esperar aí um comentário sobre o som, enquanto isso, se você quer ter um pouquinho mais de confiança

0:00:28: e quer fazer os seus projetos, quer ter um método ali, quer saber como é que eu faço os projetos,

0:00:32: entre lá, cursosidataScience.com, está aqui embaixo o endereço. Como você já sabe, a gente começa

0:00:39: oficialmente às 20h05 para dar tempo de todo mundo chegar na live, mas enquanto não começa a live,

0:00:48: eu quero te pedir uma opinião. Esses dias eu estava pensando sobre essa questão data science

0:00:56: e eu tenho uma opinião que eu queria saber se você concorda, discorda e por que. Para mim, hoje,

0:01:04: programação é um obstáculo em data science. O que significa isso? Eu acho que se eu não tivesse

0:01:14: que programar para fazer os meus modelos, se programação não fosse um pré-requisito para se

0:01:19: fazer machine learning, para se fazer data science, nós teríamos modelos melhores, nós teríamos muito

0:01:26: impacto de data science. Então, acho que na verdade a programação hoje é um obstáculo,

0:01:32: ela é um gargalo de data science. Eu queria saber a sua opinião enquanto a gente não começa

0:01:38: oficialmente a live. Deixa eu ver aqui quem já está por aqui. Boa noite, muito obrigado Tiago

0:01:44: por confirmar o som. Boa noite Alex, Rave, Rogério, Ayrton, Vinícius, Aslice. Ficam gravadas,

0:01:50: está aqui no canal. Aliás, para quem já quiser olhar o colab de hoje, aí está o endereço bit.ly

0:01:58: barra Mario tracinho live 29. Alex, Igor, Roberto, boa noite, obrigado também por dizer aí do som.

0:02:06: Luis Carlos, boa noite. Célio de Fortaleza, muito legal. Daniel, Rio Grande Sul, Luis, muito legal.

0:02:15: Engenheiro Mario, bom ver você aqui de novo. Giu, são boa noite e correu aqui. Espera aí,

0:02:22: está todo dia a mesma coisa, né? Boa noite Roberto de Belo Horizonte, Moisés, Tiago, Ramon também de

0:02:30: Fortaleza. Fortaleza em peso, duas pessoas já é estatisticamente significativo que Fortaleza está

0:02:36: em peso aqui na live. Carlos, boa noite. Boa noite Carine, muito bom ver você por aqui. Aliás,

0:02:43: estou conversando com uma colega na semana passada sobre que iniciativas que a gente pode ter para

0:02:50: fortalecer a comunidade feminina de data science. Aceito ideias, então se você está aí e tem uma

0:02:56: ideia, pode mandar para mim que eu estou procurando ideias para tentar ajudar neste ponto a nossa

0:03:03: comunidade também. Boa noite Ricardo, Henrique, Christopher, Daniel, existe o AutoML, exatamente.

0:03:09: Boa noite Alexandre, boa noite Yuri, Alberto, cadê? Cadê que eu me perdi de novo? Boa noite

0:03:17: Aristóteles, bom te ver de novo por aqui. Leandro de Aracaju, boa noite. Lívia, boa noite. Boa noite

0:03:24: Elton, Rafael, boa noite. Roberto, depende, já existem ferramentas que permitem desenvolver

0:03:30: modelos sem uma única linha de programação. Sim, problema é que pelo menos quando eu testei,

0:03:35: eles não eram muito boas. Ó o Felipe do Codi, esse rapaz aí joga comigo videogame e meu Deus,

0:03:43: a gente joga muito mal, horrível. Se você encontrar ele por aí, não chame ele para o teu time porque ele

0:03:48: joga muito mal. Fagner, programar dá flexibilidade para explorar os dados, lidar com problemas mais

0:03:54: orgânicos, não tem como prever o comportamento de qualquer cenário, para isso você tem que manipular

0:03:59: os dados. Sim, hoje a gente precisa programar, se não a gente não consegue fazer data science.

0:04:06: Boa noite Rodrigo do Rio de Janeiro, William, boa noite. Tiago, Mário, pegando um gancho nessa

0:04:13: pergunta do Orange Draw não faz modelos sem programação? Ele faz, só que assim, ele é muito,

0:04:18: muito fraquinho ainda para as coisas que a gente precisa fazer em produção. Eu sinceramente,

0:04:26: eu queria muito de clicar num panda e ele já abriu pandas e fazer tudo que eu preciso,

0:04:33: mas hoje eu ainda não conheço uma ferramenta que faça isso, né? Eu acho que vai se desenvolver,

0:04:38: né? Lucas, boa noite, de Minas Gerais, legal, William, aula mega importante, falando nisso,

0:04:43: eu estou impressionado com o número de pessoas que tá super interessado por essa aula. Eu não achei

0:04:51: que essa aula fosse tão interessante assim, sobre métrica sinceramente, mas como vocês sabem,

0:04:57: vocês pedem, o que que vocês pedem que eu não faça, né? Só desconto no curso, desconto eu não

0:05:02: dou mesmo, mas o resto eu faço tudo. Rogério, sim, estou apanhando bastante isso no momento,

0:05:08: Python, RSCL, acredito que são essenciais. Sim, sim, eu não vejo a hora de não precisar mais

0:05:14: de uma mapa de falar a verdade para fazer data science. Imagina só que legal, por que que eu tive

0:05:21: essa reflexão? Eu vi que tem um cara que criou uma dessas plataformas no-code, né? Que você

0:05:29: não precisa programar para você fazer jogos para celular e alguns dos jogos feitos nessa plataforma

0:05:36: são jogos de extremo sucesso, jogos com 60 milhões de downloads, jogos absurdamente de sucesso. Eu

0:05:45: pensei, caramba, eu tinha um certo preconceito com essas plataformas, eu achava que era mais para o

0:05:50: pessoal só ganhar dinheiro fazendo de conta que o pessoal conseguiria fazer o aplicativo sem programar,

0:05:57: mas eu comecei a pesquisar e tem bastante coisa que pelo menos começa nessas plataformas e acaba

0:06:04: com sucesso. Aí eu pensei, poxa, quando for a vez do machine learning de uma plataforma no-code,

0:06:10: né? Aí eu fiquei pensando, interessante, né? Lívia Paz de Bruski, muito legal, deve estar frio

0:06:17: para caramba aí, né? 20.05, preciso começar a live, deixa eu ver se tem mais uns comentários aqui.

0:06:23: Engenheiro, como vem da engenharia? Mecânica, codar foi bem desafiador, mas me encontrei

0:06:28: que você pode programar, muito legal. Boa noite, Cintia, boa noite, Flávio, Yuri, Brasília, Fortaleza,

0:06:34: olha só, todo mundo de Fortaleza está aqui hoje. Legal, Viviane, segunda vez na live,

0:06:40: dicas muito interessantes, muito legal. Conheci o Orange, achei muito interessante, eu já preparei

0:06:46: uma live sobre o Orange e acabei não fazendo porque eu achei alguns probleminhas nele, mas eu

0:06:51: vou preparar uma live sobre Orange aqui porque eu acho que é muito interessante, tá? Legal, pessoal,

0:06:58: eu vou começar a fazer aqui, depois eu dou uma lida novamente nos comentários sobre a programação,

0:07:04: porque eu acho bem interessante essa perspectiva de onde a gente está indo, né, com machine learning,

0:07:10: entender o que todo mundo pensa sobre isso. Então, mas vamos começar aqui com o nosso tema,

0:07:17: deixa eu tirar esse comentário daqui da frente, como é que eu faço isso? Tira esse aqui, tira esse

0:07:26: aqui, acho que eu preciso… Cintia, seja bem-vinda do Rio de Janeiro, boa noite. Vamos lá, tá, tenho que

0:07:31: tirar esse aqui também, quem quiser o notebook, tá aqui, bit.ly barra, mariotracinolive29, ele

0:07:37: também fica ali no nome do notebook, eu também deixo esse endereço para quem quiser e estiver

0:07:43: aqui depois, sei lá. Então é isso aí, hoje eu vou falar para você o seguinte, a primeira coisa que

0:07:49: você precisa saber é que existem centenas, pelo menos, talvez milhares de métricas de machine

0:07:57: learning, não existe a melhor métrica, tá? Isso não existe, cada métrica você tem que entender

0:08:04: como se fosse um óculos, tá? Imagina que você tenha um, aliás, um microscópio, né, quem já usa

0:08:15: um microscópio, me diga se isso é verdade, mas eu imagino que você tem lá um microscópio que consegue

0:08:22: enxergar os vírus lá, bem pequenininhos, outros aparelhos que têm microscópio que conseguem ver

0:08:29: um couro vermelho, outros que conseguem ver, não sei que gama de cores, tal, eu por exemplo, estou fazendo

0:08:35: uns exames de vista aí para ver se eu consigo operar miopia e tem uns aparelhos muito loucos lá, que

0:08:42: botam uma luz, enxergam dentro do teu olho e fazem, então assim, entenda cada métrica como uma forma

0:08:49: de ver uma parte do teu modelo, tá? Nenhuma métrica vai te mostrar tudo sobre o teu modelo, então

0:08:56: normalmente eu gosto de usar mais de uma métrica quando eu estou avaliando um modelo e eu recomendo

0:09:02: que você faça isso, não olhe uma métrica só, mas escolha um conjunto de métricas, duas, três que

0:09:07: seja, para você poder entender vários aspectos, isso vai ficar mais claro, eu acho, na live sobre

0:09:13: regressão, mas aqui também você vai ver que tem métricas populares que medem coisas extremamente

0:09:19: diferentes. Uma outra coisa que eu quero te dizer é o seguinte, o que eu vou te falar aqui hoje é

0:09:24: o 80-20, eu gosto muito desse conceito, eu sei que nem tudo é 80-20, que é o tal do princípio de pareto,

0:09:33: que é o seguinte, esse cara dizia, e tem lá, realmente só acontece que 20%, acho, das terras,

0:09:40: não, 80% das terras na Itália, na época dele, eram de propriedade de 20% da população, negócio

0:09:47: desse, tá? Então assim, em geral é interessante se você olhar que realmente a maior parte dos

0:09:53: aspectos acaba sendo de uma pequena porcentagem das causas, né? Então o que eu quero te mostrar

0:09:58: aqui hoje são métricas que vão resolver a maioria dos problemas, então vão ser, acho que, seis ou sete

0:10:05: métricas, tá? Das centenas, talvez milhares de métricas que existam em machine learning para

0:10:12: classificação, mas que na maioria das vezes elas já vão ser o bastante para você resolver, para você

0:10:19: ter uma ideia muito boa de como é que está o seu modelo, tá? Então vou até copiar aqui, essas métricas

0:10:25: vão resolver a maioria dos problemas, eu diria que tem duas delas que são responsáveis, assim, duas

0:10:32: ou três, vai, que são responsáveis pela maioria, maioria, maioria, sei lá, metade dos casos de data

0:10:37: science de machine learning devem usar essas métricas, tá? Então é isso aí, a primeira coisa que eu vou

0:10:44: fazer é o seguinte, eu quero gerar aqui algumas, algumas arrays para a gente entender o que está

0:10:50: acontecendo, tá? Então eu vou fazer de conta que eu tenho previsões e que eu tenho labels, né? Alvos

0:10:58: para as minhas previsões, então vou criar aqui o meu pBinary que vai ser simplesmente uma array de

0:11:05: números uniformes de tamanho 10, então se a gente olhar aqui o pBinary ele é só um monte de número,

0:11:11: ele ainda não abriu aqui, não inicializou o nosso querido Google Collab, né? Eu preciso importar o

0:11:21: Pandas e o Nampad, deixa eu ver se eu não esqueci o comentário na frente, não, não esqueci, muito bom,

0:11:27: então tá, aqui você vê, ó, finge que isso aqui são probabilidades, tá? Finge que isso aqui são

0:11:33: probabilidades geradas pelo teu modelo, no Scikit-Learn normalmente você gera probabilidades com a

0:11:39: Predict Proba, tá? Ele vai te dar pelo menos duas colunas quando for binário e vai te dar mais colunas

0:11:45: quando for multi classe e eu vou criar aqui o Pmulti que vai ser a mesma coisa daqui de cima, só que eu

0:11:51: vou criar com três colunas, então vamos colocar aqui 10,3, se a gente olhar esse Pmulti a única

0:11:58: diferença é que ele vai ser uma array de, vamos ver se a gente tem 10 exemplos, três colunas, uma para

0:12:03: uma classe, imagina que seja, que cor é esse carro, vermelho, amarelo ou azul, tá? Esse negócio,

0:12:10: é, e tá, então, e eu tenho que ter um alvo, então eu tenho a minha previsão, eu vou criar aqui um alvo

0:12:16: binário, então YBinary vai ser igual a np random uniform size igual a 10, né, precisa ser do mesmo

0:12:25: tamanho, só que aqui eu vou colocar maior do que 0.5 e S-Type Int, porque eu quero uma array binária,

0:12:33: então se eu olhar aqui o meu YBinário, 1110111, finge que isso aqui é um alvo, tá? A pessoa sobreviveu

0:12:41: ou não no Titanic, é, e eu vou fazer a mesma coisa para o Ymulti, aliás esse eu vou copiar, a única

0:12:49: diferença aqui é o seguinte, ó, em vez de fazer o maior do que alguma coisa, eu peguei a mesma coisa,

0:12:53: não são os mesmos números, tá, então aqui são números aleatórios diferentes para o P e para o Y,

0:13:00: só que aqui eu usei a função argmax, o que ela faz? Ela te retorna a coluna onde está o número

0:13:09: máximo daquela linha quando o axis é igual a 1, tá, então se a gente olhar aqui o Ymulti, ele vai ser,

0:13:19: tá, primeira coluna, ó, esse aqui no meio, né, aliás eu não normalizei, eu precisaria normalizar

0:13:26: essa aqui de cima, tá, aqui por exemplo, se eu rodar o argmax, em vez dele, se eu rodar só o ponto

0:13:35: max, ele vai me dar o ponto 61, se eu rodo argmax ele me dá coluna 1, que é a coluna 0, é a primeira,

0:13:41: coluna 1 é a segunda e a coluna 2 é a terceira, tá, então argmax ele retorna a coluna, só estou

0:13:47: fazendo isso para a gente ter classes, tá, então aqui por exemplo, ó, coluna 1 no primeiro exemplo, tá,

0:13:53: é uma coisa só para a gente ter com que trabalhar, porque eu vou te ensinar uma coisa para você

0:13:59: entender como é que funciona o AUC, o Rock AUC, que é uma das métricas mais usadas, você vai falar

0:14:05: Mário, que coisa fantástica, muito legal esse jeito, pelo menos foi o jeito que depois de muito

0:14:10: tempo eu consegui para entender o que estava acontecendo, tá, só que acontece, aí que entra

0:14:17: um passo, existem dois tipos de métrica basicamente, existem as métricas, que são as primeiras que a

0:14:23: gente vai ver, que precisam de um ponto de corte, tá, e daqui a pouco eu vou aí responder perguntas,

0:14:29: então vou colocar aqui, precisam, precisam de ponto de corte, tá, essas métricas são geradas pelo

0:14:40: methodo MDL.predict, MDL aqui no caso seria o teu modelo, tá, é pelo método predict, então você

0:14:48: pode gerá-las a partir das probabilidades ou você pode deixar que o Scikit-Learn defina qual é a

0:14:55: probabilidade, onde vai ser o ponto de corte, aqui também já para te ensinar como é que faz esse

0:15:00: processo super complicado, eu vou te mostrar, super complicado, estou sendo irônico, o que acontece,

0:15:07: então é o nosso p-binary que você lembra, é uma lista de probabilidades, é, e eu vou colocar maior

0:15:15: do que, sei lá, 0.4, tá, eu estou definindo que tudo aquilo que o meu modelo previo como probabilidade

0:15:23: maior do que 40% de pertencer à classe 1, eu vou dizer que é da classe 1, isso é um ponto de corte,

0:15:29: internamente quando você roda o MDL ou quando você roda o método predict no Scikit-Learn, ele faz

0:15:35: um 0.5, tá, então aí vai do, vai do caso que você quer e você já vai entender porque que é

0:15:42: importante você talvez avaliar sem um ponto de corte pré-definido, tá, isso vai ficar mais claro

0:15:51: depois. Realmente nesse caso eu quero ter 0 e 1 só na minha previsão, né, então vou pegar literalmente

0:15:58: um ponto de corte e aqui embaixo eu vou fazer a mesma coisa só que para a probabilidade desse,

0:16:08: essa probabilidade de multiclasse, aliás eu vou normalizar isso aqui só para a gente ter de 0 a 1

0:16:14: para fingir que realmente é uma probabilidade que a gente tem aqui, então eu preciso fazer isso aqui

0:16:20: dividido pela soma, é isso né, beleza, aí eu pego esse Pmult, faço o contor de max, axis igual 1,

0:16:32: se alguma coisa estiver confusa daqui a pouco eu vou aí nas perguntas e já esclareço, tá, vamos lá,

0:16:40: funcionou e lógico que ele tinha que me dar um problema, então deixa eu ver se usando esta

0:16:46: então ele vai, não tem, então vamos fazer o seguinte aqui, como eu não lembro neste momento talvez seja np.divide,

0:17:00: se não for essa eu vou deixar do jeito que tá mesmo. Tem uma forma de fazer isso aqui, então não lembro

0:17:11: se eu vou usar o tempo, tá, eu não vou gastar o tempo com isso nesse momento, mas finja então que só tem uma probabilidade somando de 0 a 1, tudo bonitinho, como a gente faz, como a gente aprende nas aulas de probabilidade, tá, vai dar na mesma para o que eu vou te explicar.

0:17:29: E, então tá, qual é a primeira métrica que eu vou te falar? É a mais popular de todas e a metrica que eu vou te falar que se você puder evitar você deve evitar, que é a curácia, a curácia, eu não gosto da curácia, ela tem alternativas

0:17:51: molto melhores a ela, quindi, quindi, quindi, eu vou colocarei qui, non uso oficialmente, ok? Ok? Ok? Oficialmente, entre aspas, ok? Non usa come ultima metrica, come a metrica final che vai apresentare, apenas o que eu chamo de preguiçosa, quando eu uso a curácia, quando é a prima vez

0:18:11: que eu estou criando um modelo lá, qualquer modelo só para ter alguma coisa, então, é o primeiro modelo que eu estou fazendo, eu uso a curácia para eu saber como é que está o meu modelo, quanto que ele está acertando, quanto que ele não está, isso é o que eu chamo de usar preguiçosamente, só aquela hora que você precisa colocar alguma coisa para funcionar, tá?

0:18:29: Depois você pensa numa metrica melhor, deixa eu tomar um gole de água, então tá, essa metrica é inadequada para dados desequilibrados, esse é o maior problema dela, então, exemplo clássico do machine learning, imagine que você esteja criando um classificador de spam,

0:18:52: se eu for pegar todos os e-mails do Gmail e for classificar quais que são o spam e quais que não são, provavelmente 99,76% de acordo com o Instituto de Estatística Inventada pelo Mário, provavelmente esse é o número de e-mails que não são spam, tá?

0:19:13: Então, o que acontece, se eu usar a curácia, se eu prevê nenhum e-mail a spam e usar a curácia, minha curácia vai ser de 99,76%, tá?

0:19:26: Então, ele não está dizendo muita coisa interessante para a gente, ele desconectou aqui do… ele desconectou do… caiu? Não, não caiu, tá?

0:19:41: Legal, então o que acontece? Por isso que eu não gosto da curácia, ela não te informa muita coisa, ela é uma taxa de acerto, sabe?

0:19:49: Tem as outras métricas, elas vão te informar muito mais, mas de qualquer jeito não existe aula sobre métrica se eu não te falar sobre a curácia, então, quem quer a curácia?

0:19:59: Quem já fez qualquer aula de Machine Learning conhece, gente, pega o accuracy score no Scikit-Learn, eu vou pegar aqui um print que eu fiz das nossas arrays

0:20:14: e eu quero que você diga aí no chat para mim, você consegue calcular a curácia aí e me dizer qual é a curácia desse modelo?

0:20:22: Nós temos dez elementos, nossa previsão é essa primeira linha, o Wilson é a segunda linha, eu quero que você me diga quanto é a curácia desse modelo, entre aspas, tá?

0:20:33: E aí depois eu vou calcular e vou te mostrar como funciona ela, mas deixa eu tomar uma água e ver aí o chat.

0:20:44: Então, vamos lá, deixa eu ver aqui se tem alguma pergunta.

0:20:49: Pessoal, fala de Python é mais fácil, Curitiba, boa noite Alexandre Fagner, tem a falácia da métrica também que no mundo real não tem o mesmo poder de classificação?

0:21:00: Sim, sim, você só vai saber como é que funciona um modelo quando você colocar em produção, essa é a grande verdade, tá?

0:21:07: Luiz, depois me lembra que eu falo sobre isso aí, boa noite Bruno, as duas métricas ideais para dar as desbalanceadas são Recall e RockLC, vamos ver na hora que a gente vê o RockLC,

0:21:22: como é que ele funciona para a gente ver como é que faz esse caso.

0:21:26: Alberto, esse ponto de corte seria um hiperparâmetro? Sim, é um hiperparâmetro que vai depender, quando eu falar de precision recall eu acho que vai ficar mais claro a função do ponto de corte quando a gente está modelando, tá?

0:21:40: Deixa eu ver aqui, eu defino meu threshold de forma manual, não há nenhum hiperparâmetro que eu especifico o threshold, então você pode fazer uma busca por ele,

0:21:49: você pode testar vários thresholds e ver qual que é o que resolve melhor, o que você está tentando resolver, mais uma vez no precision recall vai ficar mais claro como é que funciona.

0:22:01: Melhorou, melhorou acho que aí o som e tudo mais, né?

0:22:06: Tem gente falando aqui que é 40%, 330%, a curácia tal, bom que melhorou, legal.

0:22:14: Marcio, você vai falar de métricas que não tem a resposta? Não, hoje são só métricas de classificação, é legal.

0:22:21: Então o que acontece, deixa eu contar aqui, 1, 2, 3, 4, eu acho que é 40% também, por que que é 40%?

0:22:31: A curácia ela está simplesmente medindo quantos a gente acertou dividido por quantos a gente tem, tá?

0:22:38: Então aqui ó, o primeiro a gente errou, segundo errou, terceiro errou, quarto acertou, 0 é igual a 0, certo?

0:22:46: 0 igual a 1? Não, 1 igual a 1, 0 igual a 1, errou, 1 igual a 0, errou, 1 igual a 1, 0 igual a 0, então a gente acertou 4 previsões, né?

0:22:55: Elas são iguais nas duas arrays e a gente errou o resto, então quando eu rodo aqui accuracy score, coloco aqui y binary ip binary threshold, threshold,

0:23:13: ele vai me dar 40%, ponto 4, muito bom, essa é a mais simples é a métrica novamente, evite usar se você puder, tá?

0:23:24: Próxima métrica que a gente vai ver aqui é, cadê? Precision, tá?

0:23:32: O que é a precision? Eu costumo pensar na precision da seguinte maneira, dos casos que eu previ como positivos, se você tiver mais de uma classe, para uma classe,

0:23:48: eu não deixei nada aí na tela, né? Não, tá. Dos casos que eu previ como positivos para uma classe, quantos realmente são?

0:23:59: Tento prever assim, tento pensar nela assim, é literalmente que está escrito, tá? Então, para te dar um exemplo, imagine que você trabalha numa empresa e

0:24:11: existe um hospital, hospital não, que é muito triste, é história do hospital, vamos dizer que você trabalha numa empresa que vende alguma coisa pela internet

0:24:22: e você pode enviar alguns cupons para algumas pessoas, só que é pelo correio e aí você tem o custo de enviar o cupom, então quer dizer,

0:24:30: você quer enviar esse cupom só mesmo para quem você acha que vai comprar, ou seja, custa muito mais caro você mandar esse cupom para uma pessoa que não vai comprar,

0:24:40: ou seja, uma pessoa que você diz que vai comprar e não vai comprar, que é um falso positivo, do que você deixar de enviar para uma pessoa que iria comprar, tá?

0:24:52: Então quer dizer, o custo, a precision é mais importante que o recol, é mais importante você acertar quem vai comprar, porque você tem uma quantidade limitada de orçamento

0:25:02: para mandar esses cupons por correio, do que necessariamente você tentar mandar para todo mundo e para pegar todo mundo que iria comprar, tá?

0:25:12: Quando a gente fizer o recol talvez fique um pouco mais claro, então deixa eu copiar aqui essa incrível definição de exemplo, é, como é que a gente calcula isso?

0:25:25: Vou fazer o mesmo esqueminha, tá? Eu quero que você me diga qual que é a precision dessas arrays aqui que a gente tem, a mesma coisa de cima, tá?

0:25:35: A mesma array, só que eu quero que você me diga qual é a precision desse nosso modelo, e se eu deixar você ver, né, vai ficar bom.

0:25:46: Vamos lá, deixa eu calcular aqui já qual é a precision, então lembra, nos casos que eu previ como positivos, quantos realmente são positivos?

0:25:56: Quantos eu acertei? É isso, me diga aí qual é a precision enquanto eu escrevo aqui a função.

0:26:04: Y para o binary, binary threshold, threshold, deixa eu ver aí as respostas no chat, porque se eu só ficar falando aqui não adianta,

0:26:25: pra aprender a gente tem que fazer assim, tá? Então diga aí qual é a precision que tem aqui? Dos que eu previ como positivos, quantos realmente são?

0:26:37: Sem medo de errar, aqui ninguém vai achar que ninguém é, que alguém é burro porque errou, todo mundo aqui erra e tá todo mundo aqui pra aprender, tá?

0:26:47: Diga aí, pelo menos uma pessoa diga aí porque aí eu continuo a lá, se não ninguém participar também, né, aí fica difícil.

0:26:56: Vamos lá, deixa até copiar outro negócio aqui, se custa caro mandar promoção, se custa caro mandar promoção das pessoas que eu previ,

0:27:21: eu comprar quantas compraram, deixa eu ver que a janela do YouTube está escapando de mim aqui, legal, demora um pouquinho tá, pra eu receber os comentários,

0:27:33: porque é isso que às vezes eu acabo de mostrar.

0:28:13: Voltei, voltei, sem pânico, sem pânico, caiu aqui, o problema é que o meu cabo de rede parece que não tá muito colaborador hoje,

0:28:25: não fujam, não fujam, voltou a live, deixa eu ir aqui, vamos continuar, então dois terços, alguns dizendo dois terços, outros 20%, outros 33%, 66%, 70%, tá,

0:28:41: eu acho que agora não quero, pelo menos não vou nem chegar perto desse cabo de rede, tá, mas vamos lá, então tá, vamos ver aqui,

0:28:51: então dos que eu previ significa que eu só tenho que pegar os casos que são um aqui no P, tá, é, o meu Deus do céu, tá, tá difícil aqui hoje,

0:29:02: tá, desconectando que é uma beleza, então dos casos que tem um aqui, então eu tenho três casos que eu previ um, tá, desses casos quanto que eu acertei,

0:29:12: então acertei um, dois, tá, então de três casos eu acertei dois, então é dois terços realmente, a minha precision tem que ser 66% ao ponto esse número gigantesco aqui,

0:29:24: meia, meia, um monte, tá, é, e agora eu tô olhando toda hora pra ver se, pra ver se, se não tá caindo a live, mas beleza, essa é a precision, tá,

0:29:39: então acho que eu vi que mais pessoas tinham dúvida sobre essa, mas pense assim realmente, pegue os positivos dos positivos, quantos por cento você acertou, tá,

0:29:49: vamos para o recall então, o recall é uma outra métrica extremamente importante de entender, tá, então é, vamos lá, recall, e como é que eu penso nele?

0:30:01: Eu penso o seguinte, dos que eram realmente positivos, novamente para uma classe, quantos eu detectei, tá, por isso também que o recall é chamado de taxa de detecção,

0:30:19: porque ele vai tentar detectar dentre todos os positivos quantos eu acertei, esse é o caso inverso do que a gente tava falando, tá, é,

0:30:30: imagine que seja muito barato, por exemplo, quando eu faço anúncio no Facebook, o Facebook mostrar um anúncio para alguém,

0:30:38: pro Facebook é uma coisa barata, é uma coisa que custa fragmentos de centavos, então eles preferem mostrar para um monte de gente que eles sabem que não vai interagir,

0:30:51: mas desde que todo mundo que vai interagir esteja dentro desse grupo, tá, então por exemplo, se tem dez pessoas interessadas em participar da live,

0:31:02: ele vai mostrar para mil pessoas, mas dentro dessas mil pessoas ele vai estar ali os dez que estão interessados na live, então eu tô muito mais preocupado em detectar os positivos

0:31:15: do que tentar acertar quem é positivo, tentar limitar, vamos dizer assim, o número que eu posso tomar uma ação, tá, deixa eu ver aqui,

0:31:32: então como é que a gente faz o recall, tá, mais uma vez, já aproveita e já vai calculando quanto é o recall, porque lógico que eu vou te perguntar,

0:31:38: então tá aqui, mesmo Array, tá, me diga, dos que eram realmente positivos, quantos eu acertei, tá, é aqui,

0:31:47: recall score, recall score sobre Y binary primeiro, depois vem o P binary threshold, tá, e aí deixa eu ver se alguém falou quanto é o recall, tá,

0:32:12: dois sétimos, ponto dois oito cinco, dois sobre sete, quarenta e três por cento, ponto dois oito cinco, vamos contar aqui então, dos positivos,

0:32:22: então eu tenho um, dois, três, quatro, cinco, seis, sete positivos, dos quais dois eu acertei, quem falou dois sétimos ou acho que dá vinte e oito,

0:32:35: alguma coisa aí, provavelmente acertou, é isso aí, estamos confirmados vinte e oito, então, você vê, esse modelo, ele, a gente, se isso aqui fosse o modelo,

0:32:47: nessas previsões, a gente sabe que quando ele diz que é positivo, cerca aí de 66% do tempo, realmente, o exemplo vai acabar sendo da classe positiva,

0:33:00: só que ele só detecta vinte e oito por cento, então quer dizer, tem um monte de positivo que ele nem sabe que existe, tá, é, eu vi uma pergunta aí,

0:33:09: se isso vale também para classe negativa, tá, se você inverter, né, aqui, se em vez de você colocar o zero como negativo e um como positivo e inverter os scores,

0:33:21: você pode calcular a mesma coisa, eu não lembro, tem um nome específico para a métrica que mede o caso quando é negativo, mas eu vou te falar que eu não lembro, tá,

0:33:30: inclusive, na Wikipedia tem um artigo muito legal sobre matriz de confusão, que é, fala sobre todos esses negócios aqui, deixa eu até ver aqui, Confusion Matrix,

0:33:41: se eu escrevi tudo errado ali, o matriz, mas, tá aqui, ó, aqui tem todas as fórmulas que você puder imaginar de como é que se calcula recall, precision,

0:33:55: todos esses negócios, tá, deve ter aqui, essa matriz aqui, ó, então a gente tem precision aqui, a gente tem recall aqui, ó,

0:34:07: false positive rate parece que ele chama de fallout, e tem a false omission rate, então vale a pena também dar uma olhadinha na, deixa eu até colocar o link aqui,

0:34:19: para quem quiser saber mais na página sobre Confusion Matrix, tá, mas o que a gente mais usa realmente é precision e recall, deixa eu ver se tem alguma pergunta,

0:34:30: legal, error rate, Marcos, é 1 menos a curácia, tá, o classification report também mostra uma precision recall,

0:34:44: poderia ajudar na leitura desse relatório? Sim, é uma outra função que aí ela calcula um monte de coisas, como eu estou mais falando sobre as métricas específicas aqui,

0:34:53: então eu não vou acabar usando essa função, mas quando eu estou trabalhando com precision recall, mas eu uso essa função classification report,

0:35:02: muito obrigado por nos lembrar dessa função Daisy. Sim, Jonathan, o código está disponível no endereço que está aqui no nome do notebook, aqui em cima, tá,

0:35:15: 20.ly barra Mario tracinho live 29, legal, vamos lá, e aí quando você, assim, tem casos que a precision recall, eles não,

0:35:28: você não tem uma preferência por um ou para o outro, tá, no caso por exemplo, quando você está usando a curácia, se você realmente não sabe o que usar,

0:35:38: use o F1 score, tá, em vez da curácia, por quê? Porque ele vai ser uma coisa chamada a média harmônica, olha que nome bonito, né,

0:35:48: média harmônica entre precision e recall, então vamos lá te mostrar o F1, F1 score, tá, chama-se média harmônica, né, parece que eu até ouço uma música assim,

0:36:04: Angelical, quando eu penso na média harmônica, o que é a média harmônica? É duas vezes o precision,

0:36:12: vezes recall, e aqui eu vou colocar entre parênteses, né, para ficar bonitinho, dividido pelo precision mais, aliás,

0:36:24: duas vezes, dá na mesma, né, se eu colocar no parênteses, eu não, dois ali, então dividido por precision mais recall, tá, e para quem quiser saber mais,

0:36:34: tem aqui o, aliás, vou abrir até o link da da Wikipedia que fica mais fácil de você ver se estiver na fórmula mesmo, né, então tá aqui,

0:36:44: duas vezes precision, vezes recall, sobre precision mais recall, tá, porque a média harmônica, não me lembro agora, mas eu sei que o F1 é a média harmônica, tá,

0:36:58: então o que acontece é quando você não tem preferência por precision ou recall, usa o F1 e você vai ver muito mais sendo usado o F1 do que precision ou recall isoladamente, tá,

0:37:12: mas por que que eu falei do precision e recall antes? Justamente para quando chegar no F1 você saber o que está acontecendo, porque a minha maior dificuldade,

0:37:21: quando eu estava aprendendo o F1 score, era isso, eu falava, pô, tá, é a média harmônica entre precision e recall, mas o que é precision e o que é recall, né,

0:37:31: agora você já sabe que que esses dois estão medindo, tá, e aí o F1 é muito simples, nesse caso, né, não é tão simples de calcular, mas from sklearn.metrics.import F1 score,

0:37:47: deixa eu fazer o print aqui de novo dessas matrizes, dessa vez eu nem vou pedir para calcular, porque vão até ver, né, seria duas vezes ponto meia sete vezes ponto vinte oito cinquenta e sete,

0:38:05: e aqui dividido por ponto meia sete mais ponto vinte oito cinquenta e sete, eu esqueci o comentário aí, não, legal, que nos dá ponto quarenta cinquenta e oito, não sei o que lá,

0:38:23: vamos ver se realmente é isso, y binary, t binary threshold, ponto quatro, então é isso, você vê, a conta tá certinha, é muito legal, basicamente essas são, não,

0:38:42: tem mais uma de ponto de corte que eu vou te mostrar, não são basicamente essas, mas essas são as mais populares, essas são as que você mais vai ver quando você estiver estudando machine learning por aí,

0:38:54: quando você estiver olhando lá no Kaggle, agora o Kaggle tem umas métricas um pouco mais sofisticadas, né, mas ainda se usa muito o F1 e tudo mais, o F1 é uma métrica, é uma métrica bem legal, tá,

0:39:08: mas tem uma métrica que não é tão popular, mas em algumas competições do Kaggle eu aprendi e ela é bem legal, chama-se Kappa, tá, ou Correm Kappa, Correm Kappa,

0:39:22: que basicamente ela vai medir a concordância entre o que você previu, o alvo real, só que considerando se essa concordância pudesse ser simplesmente por aleatoriedade, tá, eu até separei o link da Wikipedia,

0:39:43: que não é esse logicamente, mas basicamente a ideia é essa, você tem duas pessoas dando opinião sobre alguma coisa, anotando os dados, então vamos dizer que você tenha lá duas pessoas dizendo de que época é uma obra de arte, tá,

0:40:02: você tem dez obras de arte lá para eles avaliarem, e aí você quer medir qual é a concordância entre essas duas pessoas, mas existe uma chance dessas duas pessoas concordarem simplesmente por aleatoriedade,

0:40:17: elas concordaram, mas não quer dizer que elas realmente estejam alinhadas nisso, tá, então o Kappa serve para isso, ele é meio que, ele mede essa concordância, mas levando em conta que essa concordância pode acontecer por simplesmente por aleatoriedade, tá,

0:40:37: eu não vou entrar nos detalhes matemáticos dela aqui, porque eles são meio complicadinhos para explicar rapidamente, tá, mas eu recomendo que você leia mais sobre ela, porque é uma métrica muito boa que nem tanta gente conhece, tá,

0:40:52: como é que você faz para usá-la? FromScalern.metrics import correm, correm KappaScore, e aí, aquela mesma ideia, e o que acontece? Eu normalmente vejo esse correm sendo usado com multi classe, tá, nesse momento eu não lembro de nenhuma vez com binária,

0:41:15: eu não sei nem se dá para usar com classe binária, provavelmente dá, tá, mas eu não lembro agora, então eu posso estar te falando uma grande besteira, mas se a gente colocar aqui o nosso YMULTI, o nosso PMULTI,

0:41:29: o nosso FragMax, que são as nossas previsões e alvos multi classe, né, o que a gente está simulando, então a gente vai ter aqui o seguinte, no caso a previsão, a primeira previsão foi que era da classe 1, lembra que aqui a gente tem três classes, 0,1 e 2,

0:41:46: primeira da classe 1 realmente era da classe 1 e assim vai e tal, a curácia também poderia ser usada nesse caso, todas as outras você pode usar o F1Score, você pode calcular para mais de uma classe também,

0:42:00: tem os ajustes que você faz, a média, tudo mais, para você ter essas métricas para multi classe também, tá, você pode estendê-las para multi classe, mas aqui você vê, por exemplo, que o Kappa deu um negativo,

0:42:13: Kappa quanto maior, melhor, tá, então você vê que foram gerados aleatoriamente essas previsões e realmente ele está te falando que foram gerados aleatoriamente, tá, baixo de zero o Kappa, tá, mas mais uma vez,

0:42:28: é mais para te mostrar, para te dar a direção de uma métrica que é importante você saber, mas que não é tão popular, não é tão óbvia quando você vê aí pelos cursos afora, por tudo.

0:42:44: Deixa eu ver se tem alguma dúvida aqui, é, existe alguma métrica além do F1Score para classes desbalanceadas? Sim, nós já vamos ver que são as métricas que não dependem de ponto de corte. Ramon, na média harmônica os denominadores são as raízes quadradas,

0:43:02: porque elas têm uma relação inversa, então muito obrigado por esclarecer aí sobre a média harmônica, né, usa ser média harmônica porque precision recall tem relação inversa, é isso aí, muito obrigado,

0:43:19: então tá explicado por que que nós, por que que a média harmônica no F1Score, realmente a relação entre precision recall geralmente é inversa, apesar de que a gente tenta muitas vezes maximizar os dois, mas realmente é uma relação inversa, então legal, muito, muito obrigado Ramon.

0:43:39: Viu alguma coisa na doc do Escalar sobre micro, macro e average para F1Score? Posso sim, vou falar rapidamente sobre esse caso do que você tá falando, então aqui quando a gente vem na documentação do F1Score,

0:43:55: gente aqui, average, né, quando você vai fazer multiclasse, você precisa determinar qual é a média, como que você quer que ele calcule o F1Score sobre as várias classes que você tem, tá?

0:44:09: A micro, ele fala aqui, calcula a métrica globalmente contando total de positivos, negativos, bá, bá, bá, né, positivos verdadeiros, tudo mais, então o que acontece, quando você usa micro, como foi o caso de uma competição que eu participei para prever classe de notícia, né,

0:44:27: e você previa a que classe pertencia aquela notícia, eles usaram a micro, então quer dizer, não importava qual classe era, eles só sabiam se você tinha, se era um exemplo positivo para aquela classe ou um exemplo negativo para aquela classe,

0:44:43: então no fim das contas, eles transformaram tudo em um e zero, né, não importava qual era a classe e calcularam tudo junto, então não há diferenciação entre classes na hora de calcular o F1, mesmo você tendo várias classes, tá?

0:44:58: Tudo pega o total de positivos verdadeiros, de falsos, negativos, tudo mais, soma tudo e calcula como se fosse uma coisa só. Já na macro, a average é diferente, ele calcula a métrica para cada alvo e encontra a média sem pesos diferentes,

0:45:21: então quer dizer, se você primeiro vai calcular qual é o F1, aliás, qual é a precision you recall para cada classe individualmente e você vai fazer a média desses números,

0:45:37: então você não vai tratar tudo como exemplos iguais, assim, não importando a classe, você vai primeiro tirar precision you recall para cada classe e depois você faz a média deles, tá?

0:45:48: Mas como você vê aqui, não tem o label em balancelha, ele não leva em conta que tem classes que, por exemplo, se você tiver três exemplos e acertou dois, você vai ter lá uma precision, você vai ter lá um recall de…

0:46:05: aliás, me confundi tudo aqui, mas ele não leva em conta que algumas classes vão ter mais exemplos do que as outras, tá? E aí o weighted, ele calcula a métrica para cada alvo, para cada classe, só que ele faz esses pesos diferentes,

0:46:24: ele faz a média ponderada de acordo com o número de positivos que tem naquela classe, tá? Então ele acaba levando em conta o desbalanceamento, tá?

0:46:37: Então é muito rapidamente essa a diferença, o que eu mais vejo usado é micro e macro, tá? Então o mais importante é saber realmente se é um micro e macro, mas lógico, dependendo do caso você vai escolher a média que seja mais adequada, tá?

0:46:52: É legal. Vamos então para as métricas que não precisam de ponto de corte, que particularmente são as minhas preferidas, tá? Então vamos aqui para avaliar a probabilidade, avaliar…

0:47:08: eu não deixei, deixei o comentário, esqueci o comentário aqui, então vamos lá, vamos tirar o comentário e deixa eu pegar aqui a janela certa, legal, então vamos lá, avalia a probabilidade,

0:47:25: probabilidade diretamente sem ponto de corte, essas são as minhas preferidas e as que eu acho que devem ser usadas na maior parte do desenvolvimento do modelo, novamente para você obter isso com a Scikit-Learn,

0:47:41: você usa o método predictProba do teu modelo de classificação, tá? A primeira delas que a gente vai ver é a LogLoss, cadê texto? LogLoss, a LogLoss ela é uma média que ela é calibrada para probabilidade

0:48:02: empírica do evento, né? Bonita essa palavra, eu também acho. Então o que acontece? Vou colocar aqui calculada para a probabilidade, probabilidade empírica do evento, tá?

0:48:18: Basicamente traduzindo eu costumo pensar nela do seguinte, proporção em que, deixa eu pegar minha colinha aqui, proporção que o evento ocorre na vida real, então exemplo clássico,

0:48:33: tem dois times que vão jogar basquete, ou futebol, seja lá o que for, duas pessoas que estão competindo campeonato de xadrez, vamos dizer que a gente tem, se o modelo previo aqui, ou então se o time A,

0:48:48: se o time A, eu até pensei em colocar times de verdade futebol, mas eu não quis perder ninguém, né? Para não falar mal de time que eu não tenho que falar mal, então se o time A jogar contra o time B e tiver 40% de chances de ganhar,

0:49:05: significa que se eles jogarem 10 vezes, se jogarem 10 vezes, 4, né? Num negocinho perfeito, 4 vezes o time A vai ganhar, concordamos nisso, né? Se é 40% de chance, se a chance são de 40%,

0:49:29: se eles jogarem 10 vezes, no mundo perfeito ele vai ganhar 4 vezes, esquece nesse momento que é um processo aleatório e lógico, pode ser que ganhe duas, a gente precisaria de uma amostra gigantesca para aproximar a probabilidade real, etc.

0:49:42: Mas pensa aqui um pouco no abstrato comigo. O que acontece? Se a gente tiver um modelo para prever isso, significa que a log loss estará na mínima quando o modelo prevê 0.4, quando o modelo realmente prevê os 40%,

0:50:03: ou seja, a log loss é minimizada quando o modelo chega próximo de prever a real probabilidade real proporção que o evento ocorre na vida real.

0:50:19: Então o que acontece? No nosso caso do spam, se existe 0.01% chance de um e-mail ser spam, a log loss vai estar minimizada quando realmente a probabilidade de um e-mail ser spam,

0:50:34: é a probabilidade de um e-mail que é spam, o modelo volta tudo. A log loss vai estar minimizada quando, mesmo que, volta de novo, a log loss vai estar minimizada quando você tem lá o e-mail que é spam

0:50:56: e o modelo prevê exatamente a probabilidade, a proporção de que um e-mail com aquelas características seja spam. Então é a probabilidade que o evento realmente ocorre na vida real.

0:51:11: Não caiu de novo não, né? Sim, Felipe, log loss é a mesma coisa que binary cross entropy, é a mesma coisa, é a cross entropy loss também que a gente chama, é legal.

0:51:28: Então, basicamente, esse é o momento que você quer usar isso. Então, se você, por exemplo, vai calcular valor esperado, o famoso expected value, você precisa de probabilidades realmente das proporções,

0:51:42: da probabilidade calibrada matematicamente para o que você está tentando prever, você precisa minimizar a log loss, mas você vai ver que tem casos que não é isso que você precisa.

0:51:54: Então, como é que a gente faz? A gente importa aqui do SciPit LearnMetrics, importas log loss, a gente vai ter aqui, novamente, as nossas matrizes, só que dessa vez, veja só, dessa vez eu vou usar a probabilidade, né?

0:52:11: Finge que isso aqui são as probabilidades da matriz, do exemplo ser positivo ou não. E aí você calcula que a log loss, y binary, e a log loss está a ponto 80.

0:52:29: Mário, como é que eu sei se essa log loss é boa ou não? Normalmente a log loss vai estar maximizada, ou ela deveria estar, maximizada é errado falar, mas você quer uma log loss que seja menor do que se você prever a proporção,

0:52:48: é uma proporção aleatória, tá? Então, nesse caso nós temos um caso binário. Se eu prevê aleatoriamente, ou seja, se eu tiver aqui uma previsão que vai ser uma matriz com 10 números, com a probabilidade ponto 5,

0:53:06: então, deixa eu te mostrar aqui o pre-random, pre-random é simplesmente uma array com 50%. Então, digamos que eu tenha aqui binário, a minha proporção realmente, meus dados estão ali 50 a 50,

0:53:19: e eu prevejo que realmente a probabilidade de ser positivo ou negativo é 50%, tá? Ou seja, não tem informação nenhuma pra mim, né? Quem tiver mais interesse nessa parte,

0:53:31: essa métrica vem da teoria da informação. Se eu colocar isso aqui na log loss, ela vai me dar ponto 69 e qualquer coisa, ó, ponto 69 e 31, tá?

0:53:43: Então, em tese, em tese não, na realidade, o teu modelo, pra ele ser melhor do que simplesmente uma previsão aleatória, ele tem que estar abaixo de ponto 69 quando ele for binário,

0:53:55: aí você pode calcular isso pra multiclasse também, né? É muito fácil você expandir isso aqui pra multiclasse, basicamente você só tem que colocar aqui as suas arrays com previsões e tudo mais, tá?

0:54:09: E aqui ele não imprimiu essas arrays porque eu não modei o no print, mas basicamente a regra que eu uso é essa. Eu vejo quanto é a log loss se eu prevê tudo como uma proporção realmente aleatória, né?

0:54:22: Uma proporção, a proporção que eles acontecem nos dados de trem, tá? E eu tenho que ir abaixo disso.

0:54:30: Normalmente você vê acontecer igual tá acontecendo aqui, da tua previsão ser pior do que você prevê 50% no caso binário, quando você tá lidando com o mercado financeiro.

0:54:41: Se você for prever se uma ação vai subir ou não, você vai ver que provavelmente a tua log loss vai ser mais de ponto 69 e 31, vai ser mais do que essa baseline aleatória, tá?

0:54:53: É, mas é basicamente isso. Log loss é uma é uma métrica extremamente importante. Lembre dela, estude ela porque ela é fantástica pra esses casos em que a gente realmente precisa de probabilidades bem calibradas, tá?

0:55:11: Então vamos lá. A outra métrica é a nossa penúltima métrica, nossa penúltima métrica, estamos quase no fim, né?

0:55:19: Nesses dias eu vi alguém colocou lá numa no anúncio que eu fiz que não é aula, é aulão que você precisa de remédio pra conseguir dormir depois de tanta informação que o Mário fala, né?

0:55:29: Então, que eu considero um elogio, mas a ideia é essa mesmo, é te dar bastante conteúdo.

0:55:36: O que acontece? RockLC, eu diria que depois da log loss deve ser a mais utilizada nesses casos em que a gente tem, tá avaliando a probabilidade.

0:55:45: Basicamente, como é que você tem que pensar no RockLC? Quantos, é, qual é a probabilidade eu diria?

0:55:55: Qual é a chance de um exemplo positivo ter um score? E aqui eu vou mudar de probabilidade pra score. Então um score, uma previsão, tá?

0:56:09: Maior do que um negativo, tá? Você já vai entender isso, pode parecer meio abstrato aqui, mas eu vou te dar um exemplo que você vai entender muito bem o AUC, que é uma coisa que muita gente não entende, tá?

0:56:23: Então vamos lá. Esse caso é bom quando eu quero garantir que os positivos sejam ranqueados acima dos negativos em vez de estar preocupado com a probabilidade real do evento, tá?

0:56:36: Então vou até escrever aqui que eu escrevi na minha colinha. Então quando eu quero garantir que os positivos sejam ranqueados acima dos negativos, é, quando eu quero que isso seja mais importante do que a probabilidade real.

0:56:49: Então aí eu vou escolher o AUC em vez da log loss. Quando isso acontece, imagine que eu esteja lá prevendo o spam novamente, só que em vez de eu querer saber a exata probabilidade de um email ser spam,

0:57:01: eu simplesmente quero que o meu modelo ordene o spam acima do que não é spam. Eu simplesmente quero que ele, que quando eu olhar, sei lá, os 100 primeiros emails, os 10% emails com maior score do meu modelo,

0:57:17: eles sejam spam, tá? Que ele coloque o spam acima do não spam. Nesse caso, ele não vai me dar a probabilidade, né? Falando calibradamente, porque vamos dizer que eu tenha lá 99% de exemplos positivos, então,

0:57:31: certamente, se eu deixar a probabilidade normal, ele vai dar 1% de ser spam, né? Mas quando eu coloco um peso diferente no meu modelo, quando eu uso um class weight, quando eu estou balanceando as classes,

0:57:45: eu quero realmente que ele ranqueie acima os exemplos positivos, o AUC mede muito bem isso, tá? E aí, primeiro eu vou colocar aqui o do scikit-learn, mas depois eu vou te mostrar exatamente como que isso aqui é calculado,

0:58:03: como é que você pode pensar nisso aqui, que foi, não fui eu que criei essa forma, tá? De pensar sobre isso, eu li no Stack Overflow e me ajudou muito a entender o que é o AUC. Então, se eu calcular o AUC

0:58:17: para isso aqui, ele dá 0.47. O AUC é uma métrica que a mínima dele deveria ser 0.5, tá? Então, quer dizer, qualquer coisa acima de 0.5, em tese, já deixa de ser completamente aleatório, né?

0:58:33: Então, se eu colocar aqui o nosso perrandom, ele vai dar 0.5, tá? Então, sempre você está tentando pegar um AUC maior do que 0.5. O que acontece? Nesse caso, ele está abaixo de 0.5,

0:58:49: então quer dizer, a nossa previsão está pior do que se fosse aleatório? Lógico, eu só estou gerando números aí como exemplo. Mas como é que a gente entende isso?

0:58:58: Eu vou criar aqui um loop, tá? Para te explicar. Então, vamos dizer que eu tenha 10 mil exemplos, tá? Aliás, se eu queira… deixa eu tirar esse total por enquanto, senão vai confundir.

0:59:13: Como é que funciona o AUC? Vou até tomar uma água. O ROC é o C, na verdade. Na verdade, AUC é só a área Under the Curve, tá? É a área sob a curva ROC.

0:59:27: Então, tem várias outras áreas sob a curva, mas a área sob a curva ROC, como é que ela funciona? Imagine que você tenha duas caixinhas. Numa caixinha só tem os exemplos positivos.

0:59:38: Então, caixa de positivos, tá? Então, nessa caixa eu vou pegar todos os exemplos positivos, então y binary igual a 1, tá? Nesse caso, ele vai me dar uma máscara lá de true false para selecionar.

0:59:54: Mas eu quero saber, para cada exemplo positivo, eu quero saber qual é a probabilidade que o meu modelo deu para ele. Então, imagine que eu tenha lá duas caixas com envelopes, tá?

1:00:06: Na caixa 1, eu sei que só tem exemplos positivos, na caixa 2 só tem exemplos negativos e dentro de cada envelope, de cada exemplo, tem a previsão do modelo.

1:00:17: Então, como é que eu faço para pegar isso? Eu vou pegar aqui o P binary e selecionar somente os exemplos positivos, tá? Dessa maneira, eu estou criando essa caixinha de envelopes.

1:00:28: E aí, eu vou também criar na minha caixa de negativos, tá? Então, P binary, mesma coisa, só que agora eu quero que só tenha as previsões para exemplos negativos, tá?

1:00:41: Então, eu tenho lá as duas caixas com os exemplos positivos e negativos, lógico, que eu já sei, porque é um dataset histórico.

1:00:50: O que acontece? Eu quero saber o seguinte, eu vou retirar dessas caixas um exemplo aleatoriamente, tá? Então, eu vou pegar um positivo da caixa de positivos.

1:01:03: Como é que eu faço isso? Com a função random choice, tá? Então, essa função simplesmente vai olhar na caixa de positivos, pegar um dos nossos envelopes, um dos nossos exemplos e vai colocar de volta.

1:01:20: Apesar de eu colocar o replace aqui igual false, é só para na hora dessa função aqui ele não me dar um problema, mas em geral, na ideia geral é com a mostra com reposição, né?

1:01:35: Então, eu pego o envelope, olho a previsão e devolvo na caixa, tá? Eu posso sortear o mesmo envelope, eu posso sortear o mesmo exemplo mais de uma vez.

1:01:44: Então, tá, peguei um positivo e eu vou pegar também um negativo. Então, np.random.choice, caixa de negativos, size igual a 1 e replace aqui no caso false também.

1:01:59: Tá, mas é a mesma ideia. Então, peguei um exemplo positivo, peguei um exemplo negativo e aí eu vou abrir os envelopes e vou olhar qual é a probabilidade que o meu modelo atribuiu para esse exemplo positivo, qual é a probabilidade que o meu exemplo atribuiu para o…

1:02:15: que o meu modelo atribuiu para o exemplo negativo. Se a probabilidade do positivo for maior que a probabilidade do negativo, eu vou falar sum over mais igual a 1, tá?

1:02:30: E se tiver confuso depois eu explico, tá? Então, quer dizer, vou falar, ó, esse exemplo, esses dois envelopes que eu tirei, o exemplo positivo tinha uma probabilidade, tinha um score maior do que o exemplo negativo, tá?

1:02:44: Então, vamos dizer que o score do exemplo positivo era 0.7 e o do negativo era 0.5, tá? Falar, ó, esse tinha. Se eu pegar o exemplo do negativo e tiver um score maior, então, por exemplo, se o negativo for 0.6 e o positivo for 0.4, eu não somo nada.

1:03:00: Eu falo, não, esse aqui eu tirei, mas a probabilidade do positivo não era maior do que o negativo e aqui eu estou usando probabilidade muito livremente, tá?

1:03:10: Legal. Se eu pegar esse procedimento e fizer isso várias vezes, então vamos dizer que eu quero fazer essa retirada e colocada de envelopes nas caixas 10 mil vezes, tá? Por isso que eu não quis colocar o total aquela hora.

1:03:25: Eu vou chegar no meu AUC do ROC, tá? Então, vou colocar aqui, for, e aí mesmo, foi, in range total, então quer dizer, eu quero repetir esse procedimento 10 mil vezes e eu quero que no fim você me diga quantas vezes eu retirei,

1:03:44: qual é a proporção, vamos dizer, desses sorteios que eu tive que o positivo era maior do que o negativo, tá? E aí a gente calcula o sum over sobre total e vejam que mágica, lógico, ele não vai dar exatamente o mesmo, porque, né, tem a aleatoriedade, talvez se eu colocar 100 mil aqui, ele chegue mais perto.

1:04:06: Ó, chegou mais perto, a gente tem um AUC aqui, o AUC tem várias maneiras de ser calculado, tá? Mas essa, eu estou te explicando essa maneira aqui, porque eu acho que intuitivamente é mais fácil de você entender o que está acontecendo, o que que ele está medindo, tá?

1:04:20: O que que é essa área sobre a curva ROC? E aí, dependendo, teve uma vez que eu rodei isso aqui, deu quase o mesmo número do 4762 aqui e tudo mais, então basicamente essa é a ideia do que é o AUC, tá?

1:04:35: Lógico que se tiver coisa mais legal, mais interessante dessa live, deve ser essa explicação do AUC, porque é uma coisa que confunde muita gente, as pessoas acham muito abstrato isso, tá?

1:04:49: Mas é basicamente essa ideia das caixinhas e outra coisa, se esquecer, vem aqui e assiste de novo essa parte, porque vale a pena lembrar disso aqui, é fantástico.

1:05:01: Antes de eu ir aí para as perguntas, eu vou te mostrar a última métrica, que é o AUPRC, que é a Área Under the Precision Recall Curve.

1:05:14: Deixa eu transformar isso aqui em texto.

1:05:19: Que que é isso? Ela é muito, muito parecida com a AUC, tá? Eu acho mais fácil de, mais estável e mais fácil de interpretar. Quem fez o curso de data science sabe que eu uso ela junto com a AUC lá no curso para avaliar o modelo que eu crio.

1:05:37: E o que que ela está fazendo? Até copiei da Wikipedia, acho, recebi.

1:05:43: É dizer, ela faz uma média ponderada da curva de precision recall. Então deixa eu até pegar a curva aqui. No scikit-learn, ela chama Average Precision.

1:06:01: Então, qual é a fórmula? Imagina que você tenha lá a curva de precision recall. Então você tem

1:06:09: no eixo X o recall, no eixo Y você tem a precision. A cada threshold, a cada ponto de corte. Então você não precisa selecionar um ponto de corte antes.

1:06:19: Você pode avaliar como o teu modelo está, independente do ponto de corte. É por isso que eu gosto dessas métricas, porque elas são independentes do ponto de corte.

1:06:29: Você pode fazer o teu modelo, otimizar o teu modelo e depois lá no final decidir qual é o ponto de corte que vai te dar o precision recall que você queira.

1:06:39: Eu confio muito mais num modelo que funciona bem em vários pontos de corte do que num modelo que vai funcionar exatamente no ponto que eu medir o meu F1 score.

1:06:49: Você pode overfitar. Então a gente está medindo a área sob essa curva. A gente está basicamente medindo a qualidade do modelo, independente do threshold.

1:06:59: E aí, se você quiser realmente ver a fórmula, né, depois dá uma olhada aqui na documentação do scikit-learn, mas é basicamente a precision aqui, né?

1:07:10: É uma soma nesse caso aqui, que vai acabar sendo uma média ponderada. Ele vai calcular a diferença em recall vezes a precision naquele threshold, naquele ponto de corte específico, tá?

1:07:23: É uma métrica que eu gosto bastante, justamente por isso que eu já falei duas vezes, que ela mede em vários pontos de corte.

1:07:33: Depois é só você selecionar qual que funciona melhor pro problema que você quer resolver. Como você faz pra usar ela no scikit-learn,

1:07:41: pra uns que a LearnMetrics, average, import, average, precision, score. Novamente ela vai funcionar com as probabilidades, tá? E aqui a gente simplesmente pega average, precision, score, entre y, y binary, t binary, e, parã, deu ponto 75, tá?

1:08:07: Ela vai de zero, deixa eu conferir aqui, mas se eu não me engano, ela vai de zero a um, tá? É, exatamente, ela vai de zero a um, e normalmente quanto maior, melhor, tá?

1:08:23: Nesse caso aqui, você vê que o ALS é, não foi bom, mas o average, precision tá bom, né? Então, não sei explicar exatamente porque o average, precision tá bom,

1:08:33: mas é por isso que a gente precisa de uma baseline, pra gente saber relativo a alguma coisa, se tá bom ou não, tá? Mas, basicamente são essas as métricas que eu uso, que vão resolver aí a maior parte dos problemas que você vai ter que resolver, tá?

1:08:52: Deixa eu ver aqui as perguntas agora, se tem alguma pergunta, eu lembro que o Luís fez uma pergunta que eu não pude responder naquele momento, pode mandar de novo aí que eu respondo, deixe seu like, se você já tá indo embora, muito obrigado aí por estar presente na live, né?

1:09:09: Aliás, deixa eu fazer um mexer antes que todo mundo vai embora, se você tá procurando um curso pra entender melhor como é que faz um projeto de data science, daí eu deploy, quer ter mais confiança na hora de fazer o projeto, na hora de ir lá na entrevista, visita o curso de data science.com, dá uma olhada lá que esse curso é ó, incrível.

1:09:29: Deixa eu ver as perguntas aqui. Deixa eu ver aqui, Mário, se eu estiver em uma validação cruzada e um problema de três classes, eu quiser saber a prisão de cada classe, teria como fazer isso através de algum comando?

1:09:48: Eu não sei, o SextleLearn, ele tá estendendo as funções pra elas poderem funcionar tanto pra classe binária quanto multiclasse, teria que ver na documentação se eles já estenderam isso, mas se você fizer com a função que a Daisy falou aqui pra gente do classification report, aliás vou colocar aqui só pra você saber que essa função existe.

1:10:15: Então, classification report, tá? E eu vou fazer um print que aí fica mais bonitinha, mas você passa o teu Y, aí o teu P, o ponto de corte aplicado, e aí ela vai te dar essa coisinha linda aqui, aliás eu vou até passar com Ymulti,

1:10:37: e o PmultiArgMax, e aí fica melhor, então ela vai te dar, pra cada classe ela vai te dar PrecisionRecallF1Score e o número de exemplos que tem ali, 5, 6, 7, 8, 9, 10, exatamente o número de exemplos que tem na classe.

1:10:56: Ela te dá macro average, weighted average, accuracy, tal, esse aqui já calcula tudo, acho que essa é uma função que chega perto do que você tá querendo fazer, tá? Aliás, que bom, o comentário não tava em cima do código.

1:11:15: Legal, Rav, faz sentido eu criar um modelo creditivo focando em recall e depois juntar os dados creditos por ele pra criação de outro modelo focado em preção? Faz, só toma cuidado com overfitting.

1:11:30: Onde que isso normalmente acontece? Quando a gente tá fazendo um sistema de busca, por exemplo, quando o Netflix quer achar filmes pra você, tem um sistema de recomendação, eu fazia isso na Upwork com freelancers,

1:11:51: então a gente tem lá, tinha lá milhões de freelancers e a gente precisava recomendar freelancers pras pessoas, mostrar lá na busca, então a gente faz dois passos, o primeiro passo é focando em recall, então a gente seleciona, sei lá, se a gente vai 10 milhões de freelancers, a gente vai selecionar 500 mil freelancers

1:12:13: com um modelo simples ou uma métrica, que seja um modelo ou uma regrinha simples, uma heurística simples, tá? A gente seleciona lá 500 mil freelancers e esses 500 mil a gente passa por um modelo que vai ser focado na precision.

1:12:30: Então a gente num primeiro momento foca em recall e depois na hora de ranquear a gente foca na precision, tem esses dois passos. Normalmente isso acontece em sistema de busca porque imagina o Google, ele tem lá trilhões de páginas, ele precisa em pouquíssimos segundos, microsegundos, milisegundos, sei lá,

1:12:51: ele precisa selecionar várias páginas que contenham ali alguma coisa que seja interessante, então ele precisa ter o recall, ele precisa ter a taxa de detecção, mas depois ele precisa ordenar essas páginas, só que pra você rodar um modelo de machine learning sobre trilhões de previsões, toda vez que a gente faz uma busca, é muito caro.

1:13:08: Então você faz uma regra simples pro recall ou um modelo simples rápido pro recall, depois você faz um modelo pra precision que você aplica só nesses exemplos que foram selecionados pelo primeiro passo, tá? É uma técnica que a gente usa assim.

1:13:23: Matheus, já fez live sobre EDA? Não fiz, na verdade eu acho que análise exploratória é um ponto fraco meu, então eu não sei se a minha live seria muito boa sobre isso, mas tem o canal do Leo Carpa, Leo Carpinski, que é sobre Power BI no caso, né?

1:13:39: No caso você não vai aprender o código, mas como é sobre BI, provavelmente em termos do conceito de como fazer análise ele deve ensinar bem legal lá, como é que funciona, tá?

1:13:52: Normalmente aqui eu foco mais na questão do machine learning.

1:13:57: É legal, deixa eu ver outra. Logos minimizados quando a frequência observada é igual a probabilidade prevista? Exatamente, essa é a ideia, tá? Essa é a ideia.

1:14:08: Roulan, top, privilégios, muito obrigado, de verdade. Mário, nas competições que participava qual métrica usava mais ou dava mais certo? Normalmente a métrica é dada pelo patrocinador, pelo organizador da competição, tá?

1:14:22: Então o próprio organizador definia de acordo com o objetivo de negócios que eles queriam resolver, o próprio time do organizador definia essa métrica, tá? É bom pra você ver onde que normalmente o pessoal usa cada métrica.

1:14:36: É…

1:14:40: How can you see the difference? Acho que ficou bem claro já. Mário, como a curva AUC é formada, ele mede taxa de falsos positivos… peraí, deixa eu pegar aqui uma curva de AUC pra gente olhar. É o tipo de coisa que a gente esquece, tá? Depois de um tempo, pelo menos eu esqueço.

1:15:06: Mas ó, taxa de falsos positivos no X e a taxa de positivos verdadeiros no Y, tá? É a área sob essa curva em vários thresholds, logicamente, né? Então, tem até… não contem pra ninguém.

1:15:28: Mas uma vez eu usei o R, porque tinha uma função lá que fazia essa curva e aí ele fazia um arco-íris, em vez de ser laranja igual a aqui, ele fazia um arco-íris com os thresholds em cada ponto da curva, tá?

1:15:43: Deve ter isso já no Python. Não contem pra ninguém que eu usei R, tá? Por favor. Legal. Deixa eu ver aqui. Mário, como a curva AUC é formada, acesso ao código SIM, ele está aqui, neste endereço, bit.ly barra mario-live29.

1:16:05: Deixa eu ver aqui. Time Series, como e quando retreino um modelo depois de colocar em produção. Coloquei em produção em 31 de dezembro de 2019, o modelo de previsão aos 10 anos de dados. Como sei quando preciso retreinar.

1:16:24: Veja o vídeo, na verdade não era nem live, mas tem um vídeo aqui no canal especificamente sobre isso. O nome dele agora me fugiu totalmente, mas é como saber se o seu modelo quebrou. Alguma coisa assim, esses nomes bem legais que eu acho, né?

1:16:45: Youtube.com, o modelo quebrou, Mário Filho. Vamos ver. Legal que eu não consigo achar o meu próprio vídeo, né? Mas ele está aqui, em algum lugar quebrou.

1:17:04: Funcionar. Como atualizar seu modelo de machine learning antes que ele pare de funcionar? Deixa eu copiar o endereço do link aqui. Esse endereço vai meu filho, posta aí.

1:17:19: O negócio está devagar aqui hoje. Legal. Tem esse aí. Legal. O problema da Classification Report é que não podemos pegar os valores, né? Como se fosse um texto, não uma matriz.

1:17:39: Eu acho, deve ter um jeito. Deve ter um jeito. Se não você pega a função ConfuseOmatrix que dá para calcular. Deve ter um jeito. Deve ter um jeito. Eu não sei. Talvez não mesmo, Alberto.

1:17:54: Deu pau aí na hora de mandar o vídeo? Foi, né? Foi. O link do vídeo. Legal. Todas essas métricas são quanto maior, melhor? O AOC e a UPRC área sob a Precision Recall Curve, sim.

1:18:13: A log loss quanto menor, melhor. A log loss quanto menor, melhor. F1, a curar, a Precision Recall e capa são quanto maior, melhor.

1:18:28: Outras duas métricas ideais para dados desbalanceados são Recall e RockOLC. Então, depende do quanto custa não detectar um desses dados, tá? Então, o Recall, por exemplo, se você pode se detectar todos os positivos, é mais importante do que acertar realmente qual é o positivo.

1:18:50: Então, Recall é isso. Em termos das que não usam Threshold, das que não usam ponto de corte, RockOLC e Average Precision são bem, bem boas, tá? Então, só um pouco de cuidado com RockOLC que, dependendo da proporção, ele pode te dar um problema, tá?

1:19:08: Não lembro agora o link onde tem material sobre isso, mas geralmente é bem seguro você usar RockOLC e Average Precision ou áreas sob a Precision Recall Curve para dados desbalanceados, tá?

1:19:24: Boa pergunta, Rafael, é isso mesmo. Quando saber quando ocorre um Overfit Métrica, é um jeito? A forma clássica de você saber quando ocorre um Overfit é se o teu score de teste está muito longe do score de treino, né?

1:19:39: Eu, particularmente, normalmente não olho muito isso, tá? Eu não me preocupo muito com a distância entre os dados de treino e de teste, a métrica nos dados de treino e de teste.

1:19:51: O que eu acabo olhando mesmo é qual é o melhor modelo que conseguiu, qual a melhor métrica que eu consegui nos meus dados de validação ou teste, né? Tanto faz nesse caso.

1:20:05: Eu, normalmente, para mim, ele está Overfitando quando eu consigo, quando ele não bate esse número. Então, quando a minha LogLoss com uma nova feature, por exemplo, é maior do que a LogLoss quando eu não tinha essa feature,

1:20:23: para mim ele provavelmente Overfitou, mas a definição tradicional do negócio é a distância entre a tua métrica nos dados de treino e nos dados de teste.

1:20:35: Mas, assim, não é uma coisa que você deve se preocupar tanto. Não existe um número específico que tem que ser esse intervalo, tá?

1:20:44: Gráfico, acho que seria legal para isso, sim, essas métricas são legais para olhar em gráfico. Valeu, Matheus, você também. Mário, desviando um pouco, mas resposta rápida, já criou um modelo de Ternic, foi diferencial para um bom resultado.

1:20:58: Normalmente, quanto tempo faz que a pessoa pagou, que acessou o serviço que ela está pretendendo cancelar? Normalmente isso é fato, tá? Mas, é…

1:21:10: Mas, dá uma olhada, eu acho que o Telcalvo fez uma live sobre Terni, tá? Tem na live sobre validação, se eu não me engano, alguém colocou um comentário lá sobre…

1:21:20: Acho que o Jonathan colocou um comentário sobre a live de Terni do Telcalvo, dá uma olhada na live dele que provavelmente deve ser boa sobre isso, tá?

1:21:28: Só toma cuidado com a validação, o mais importante no Terni é a validação. Mário é um herege, não, foi uma única vez e não é para contar para ninguém que eu usei.

1:21:36: E eu deixo aqui, boa noite Juliana, deixa eu… Provavelmente já está na hora de terminar a live, né? Preciso chutar também.

1:21:46: E deixa aqui, lembra da minha pergunta, se existe F1 para classes desbalanceadas? Não, muito pelo contrário.

1:21:56: O ROC é o C e o Área sob a Curva de Precision Recall são muito, muito bem adequados, tem várias, tem várias métricas, tem o Weighted Kappa, né?

1:22:06: Que é o Kappa ponderado, mas eu acho que as duas últimas métricas que eu falei são mais legais para as das desbalanceadas, tá?

1:22:16: E o Daniel está falando que o Classification Report retorna ao dicionário, então olha aí, Alberto, tem um jeito sim de pegar.

1:22:24: Legal, última pergunta, loop infinito. Mário, qual métrica adequada para um problema multi-label em que desejo prever de forma correta uma das classes?

1:22:32: No caso, se eu tenha três classes, desejo garantir que uma delas não seja classificada erroneamente.

1:22:37: Provavelmente você tem que medir a precision dessa classe específica, tá? Faz a Classification Report e fica de olho na precision dessa classe.

1:22:45: Então quer dizer, se eu previ que essa classe, se eu previ positivo para essa classe, quantos porcento do tempo ele realmente era positivo?

1:22:54: Então você está muito mais preocupado com o modelo ter acertado mesmo que ele não detecte muita coisa, tá?

1:23:01: Basicamente essa ideia. Muito obrigado mais uma vez pela sua presença aqui na Live.

1:23:06: Deixe seu like. Se está procurando um curso, visite lá o curso de Data Science. Recomende para os seus amigos essa Live maravilhosa, esse canal incrível.

1:23:14: Falta o Mário Filho de Data Science e eu te espero aqui na próxima quarta-feira.

1:23:21: Muito obrigado e até a próxima. Um abraço.