top of page

Posts do fórum

gabriel.carvalho
25 de jan. de 2023
In A.I. e Machine Learning
Aqui vai mais um artigo que me rendeu algumas boas horas de estudos (tanto teórico quanto técnico), porém resolvi ir até o fim porque achei o tema bem interessante e que inclusive me chamou atenção. Espero que você goste! Boa leitura. No Brasil, as doenças cardiovasculares representam as principais causas de mortes. De acordo com o Ministério da Saúde, cerca de 300 mil indivíduos por ano sofrem Infarto Agudo do Miocárdio (IAM), ocorrendo óbito em 30% desses casos. Estima-se que até 2040 haverá aumento de até 250% desses eventos no país. E apesar das doenças do coração manifestarem-se, em sua grande maioria, na vida adulta, é na infância que o processo de aterosclerose tem seu início. A prática de atividades físicas regularmente e a redução do estresse, associadas ao controle do colesterol elevado e a uma alimentação saudável, tendem a reduzir em 80% esses óbitos. Alguns fatores de risco para doenças cardíacas não podem ser controlados, como sua idade ou histórico familiar. Mas você pode tomar medidas para reduzir seu risco. Os dados que foram utilizados são do CDC (Centers for Disease Control and Prevention) que realiza pesquisas anuais do estado de saudade dos americanos. No final do artigo você pode encontrar o link da pesquisa e acessar os dados. Abaixo temos um pouco dos dados disponíveis na base utilizada. São 18 variáveis, algumas extremamente relevantes como IMC da pessoa, se ela fuma com frequência, diabetes, idade, se pratica atividade física etc. Dicionário dos dados: (Variáveis utilizadas no modelo) heart disease: Tem doença Cardíaca? BMI: IMC (Indice de massa corpórea) Smoking: Tabagismo AlcoholDrinking: Bebe bebida alcoólica? Stroke: Derrame PhysicalHealth: Saúde Física MentalHealth: Saúde Mental DiffWalking: Dificuldade para andar Sex: Genero AgeCategory: Categoria de Idade Race: Raça PhysicalActivity: Pratica Atividade Física SleepTime: Tempo de sono Asthma: Asma SkinCancer: Câncer de pele KidneyDisease: Doença renal GenHealth: Saúde Geral A base utilizada possui aproximadamente 320mil linhas, sendo cada uma delas uma pessoa diferente. O próximo passo é verificar se alguma das nossas variáveis possui dados nulos. (False = Nenhum valor null). Agora podemos começar a nossa análise exploratória. Visualizando pessoas que fumam x pessoas com doenças cardíacas. Podemos observar que pessoas que fumam (fumou pelo menos 100 cigarros em toda sua vida [5 pacotes = 100 cigarros]) tem uma relação com doenças cardíacas. Outra variável interessante de analisar é “DiffWalking”. Pessoas com dificuldade para andar ou subir escadas. São pessoas que se cansam com facilidade ao praticar essas atividades. Com base nessa última relação (DiffWalking x HeartDisease), vamos olhar para as pessoas que praticam atividades físicas. E será que se uma pessoa com o IMC elevado tem chance de desenvolver alguma doença cardíaca? Podemos dizer que sim. Pessoas com doença cardíacas tem um IMC mais alto. Limpeza e Processamento de dados Para que o nosso modelo aceite receber os dados teremos que transformar as variáveis categóricas em numéricas. Deixando o dataset da seguinte forma: Além disso, teremos que padronizar as variáveis que já eram numéricas. Uma forma interessante de visualizar as variáveis que mais se correlacionam com a variáveis que queremos prever (HeartDiseasse) é plotando uma matriz de confusão. Veja que as variáveis stroke, DiffWalking, AgeCategory, Diabetic e PhysicalHealth são as que tem uma correlação forte com HeartDisease. Separação dos dados (Trieno e Teste) Após alguns tratamentos, iremos separar a base em duas. Treino e teste. Uma delas iremos treinar o modelo e a outra iremos aplicar já com o modelo treinado. Podemos ver que vamos precisar balancear os dados antes de prosseguir. Agora sim, dados balanceados. Mesma quantidade para 0 e 1 (Pessoas sem doenças cardíacas e com doenças cardíacas). Random Forest O modelo que vamos utilizar será o Random Forest. Com o resultado em mãos é possível observar algumas métricas de performance do modelo. Confira as métricas. A Precision é alta, o que significa que o modelo teve o cuidado de evitar rotular pessoas com doença cardíaca (1) que não tem doença cardíaca (0). Recall é o número de membros de uma classe que o classificador identificou corretamente dividido pelo número total de membros nessa classe. Links Link do código: https://colab.research.google.com/drive/1skALuRHIRi2574r7CETEd_4mlVSj-BRd?usp=sharing Link da base de dados: https://www.kaggle.com/datasets/kamilpytlak/personal-key-indicators-of-heart-disease
Previsão de doenças cardiovasculares com Inteligência Artificial content media
0
0
19
gabriel.carvalho
20 de jan. de 2023
In A.I. e Machine Learning
A análise RFM (Recency, Frequency and Monetary) é uma forma de segmentação da sua base de clientes com base em quão engajados com o seu negócio eles estão. Recency (Recência): quando o cliente fez a compra mais recente de um produto ou serviço. Frequency (Frequência): frequência com que os clientes fazem compras dos produtos ou serviços. Monetary (Monetário): quanto um cliente costuma gastar com produtos ou serviços. Este tipo de análise tem o objetivo de agrupar os clientes para que possamos entender quem são os clientes que mais compram e aqueles que menos compram. Para essa análise eu utilizei um conjunto de dados de e-commerce publicado no kaggle. Este conjunto de dados possui 41 variáveis e 9 tabelas, obviamente que não utilizamos todos os campos, apenas os principais como data da compra, valor, quantidade de compras e mais alguns que irei mostrar na exploração de dados (Exploratory Data Analysis ou EDA). Tabelas utilizadas: Como as variáveis estão em tabelas separadas, no modelo fato e dimensão, teremos que juntar todas elas para facilitar o desenvolvimento. Abaixo segue um exemplo da modelagem no banco de dados. Juntando as tabelas: Análise Exploratória Agora que temos todas as variáveis em uma única tabela, podemos começar a primeira fase do projeto que é explorar a base de dados, gerar algumas visualizações e entender alguns padrões. Já que estamos falando de clientes, por que não começar respondendo a seguinte pergunta: quantos porcentos dos meus clientes contribui para o faturamento? (Famoso 80/20). Com o gráfico acima podemos ver que 40mil clientes (mais ou menos 42%) da base representam 80% do faturamento. Certo, mas qual a concentração desses clientes? Onde eles estão? Por se tratar de um e-commerce eles podem estar espalhados pelo Brasil todo. Agora conseguimos entender que esses 40mil clientes estão concentrados em apenas 9% das 4mil cidades registradas. E quanto aos períodos e horários em que as compras mais acontecem? Qual horário de pico de compra? Esse pico acontece mais de manhã, tarde ou de noite? A quantidade de compras começa a aumentar a partir das 9 da manhã e até as 22h mantêm sem muita sazonalidade. Quando mudamos a visualização de horas para períodos, podemos observar que a maior quantidade de compras ocorre no período da tarde (entre 12h e 18h59) e em seguida no período da noite (entre 19h e 23h). O interessante do gráfico de vendas por dia é que a quantidade de vendas segue os dias da semana em sequência. Apenas no final de semana que a quantidade de compras passa a ser maior no domingo do que no sábado. Agora falando um pouco de produtos: quais foram os produtos com melhores e piores avaliações? Top10 categorias com melhores avaliações: Como não temos o nome de cada produto, utilizei o campo “category” e filtrei a quantidade de compras acima de 30. Books general, books imported e flowers são as categorias que mais foram bem avaliadas, mesmo não sendo as categorias com maior quantidade de compras. Top10 categorias com piores avaliações: Outro tipo de informação interessante é sobre a taxa de cancelamento das compras. Qual tipo de pagamento tem uma maior taxa de cancelamento? Podemos ver que a taxa de cancelamento (Avg Cancelation Rate) é praticamente a mesma em todos os métodos de pagamento. Mas notamos que um pequeno desvio acima da média para credit_card. Será que existe alguma relação entre o tempo de entrega com a avaliação? No conjunto de dados temos os dados de avaliação e a data de entrega. É possível ver claramente uma relação direta entre “dias de entrega” com “review_score”. À medida que o tempo de entrega diminui, a avaliação do cliente tende a ser mais alta. Neste outro gráfico também podemos ver nitidamente uma relação negativa entre o tempo que o vendedor leva para entregar os pedidos com a avaliação do cliente. Isso pode significar que a base de clientes leva em consideração não só o produto em si, mas também o serviço de entrega. Já que essa é uma informação importante para o negócio, vamos analisar como anda o tempo de entrega dos vendedores ao longo dos anos. No conjunto de dados temos apenas 3 anos, porém é possível observar que o tempo médio de entrega vem diminuindo. Com isso, podemos ver que as avaliações dos clientes vêm aumentando. Análise RFM Para fazer a análise de RFM vamos precisar construir outro conjunto de dados, baseado nas tabelas que já temos, agrupando por cliente. As variáveis que iremos construir são, recência, frequência e valor (monetário). Calculando a recência. Agora temos uma nova tabela com a data da última compra e a recência por cliente. Calculando a frequência. Armazenando em outra variável temos agora a frequência de compras por cliente. Calculando o valor(monetário) E por último temos o valor gasto por cliente. Com as 3 variáveis juntas, agrupadas por cliente, podemos visualizar a distribuição e entender o comportamento. Com essa visualização podemos ver que os dados estão bem assimétricos, principalmente nas variáveis “frequência” e “valor pago”. Antes do método de agrupamento, utilizando o K-Means, seria interessante fazer uma transformação log nos dados. A transformação log pode ser usada para lidar com dados distorcidos como esses. A transformação logarítmica fornece dados melhores ao método K-Means para que ele possa calcular e encontrar clusters para os dados, eliminando muitos dados distorcidos. Com a transformação logarítmica feita, podemos usar elbow method (Método cotovelo). Este método é usado para determinar o número ideal de clusters em agrupamento no K-Means. Podemos considerar que o nosso agrupamento terá 4 clusters. Conclusão Podemos ver que a nossa variável “frequência” não agrega tanto valor, pois a maioria dos clientes só fez uma compra. Além disso, a maioria dos clientes não faz novas compras. Cluster 0: Clientes nesse cluster tem um tempo de rencência menor, ou seja, os clientes passam menos tempo sem comprar, porém o valor gasto pelos clientes é baixo (valor pago). Cluster 1: Possui uma recência um pouco maior, mas a frequência e o valor gasto pelos clientes acaba sendo maior do que dos outros clusters. Acredito que esse seja o melhor. Cluster 2: Podemos chamar esse cluster de “Baixo valor/Clientes perdidos”. A recência é muito alta e o valor gasto pelos clientes é muito baixo, ou seja, clientes que compram uma coisa ou outra e quase nunca retornam. Cluster 3: Aparentemente este é o segundo melhor cluster. A recência é a segunda melhor, o valor gasto é o maior e a quantidade de clientes nesse cluster é relativamente grande (22.748). Com os clientes agrupados fica muito mais claro entender o comportamento e direcionar os esforços do time de marketing (qual grupo de clientes devemos investir mais? Qual grupo de clientes trará mais retorno? Qual deles devemos fidelizar? E muito mais) O código do projeto está disponível aqui, no meu GitHub :) Espero que tenha gostado e caso queira comentar alguma coisa, tanto da parte técnica quanto das análises, fique à vontade.
Qual o melhor grupo de clientes? — RFM Análise (K-Means + EDA) content media
2
0
68
gabriel.carvalho
19 de jan. de 2023
In A.I. e Machine Learning
Churn rate, ou simplesmente churn, representa a taxa de evasão da sua base de clientes. Em serviços como Spotify ou Netflix, ela representaria a taxa de cancelamento de assinaturas. Ela é de extrema importância para a administração e sua análise ao longo do tempo pode mostrar que existe algum problema que deve ser atacado. Churn também pode ser usado para identificar potenciais cancelamentos, com um tempo de antecedência, e promover ações direcionadas para tentar reter tais clientes. Essa métrica deve receber atenção pelo fato de que o Custo de Aquisição de Cliente (CAC) é normalmente mais alto que o custo para os manter. Ou seja, um alto valor para o churn rate é o que não desejamos. Neste artigo irei apresentar uma solução para este tipo de problema. Irei apresentar passo-a-passo para você ver que inteligência artificial, aprendizado de máquina pode ser útil para qualquer empresa, inclusive as menores… basta ter a matéria prima necessária, os dados. Aquisição dos Dados Os dados utilizados neste projeto foram originalmente disponibilizados na plataforma de ensino da IBM Developer, e tratam de um problema típico de uma companhia de telecomunicações. O dataset completo pode ser encontrado neste link. Apesar de não haver informações explícitas disponíveis, os nomes das colunas permitem um entendimento a respeito do problema. Porém para facilitar o entendimento eu montei um dicionário das variáveis utilizando apenas os nomes de forma intuitiva. Dicionário de Variáveis customerID : ID do cliente gender: Gênero do cliente SeniorCitizen: Indicador da “melhor idade” Partner: Possui algum parceiro Dependents: Possui algum dependente tenure: Tempo de permanência na empresa PhoneService: Possui serviço de telefone MultipleLines: Possui múltiplas linhas de telefone InternetService: Qual tipo de serviço de internet possui OnlineSecurity: Possui serviço de antivírus OnlineBackup: Possui serviço de backup online DeviceProtection: Possui serviço de proteção TechSupport: Possui serviço de suporte StreamingTV: Possui serviço de streaming de TV StreamingMovies: Possui serviço de streaming de Filmes Contract: Tipo do contrato PaperlessBilling: Fatura impressa em casa PaymentMethod: Forma de pagamento MonthlyCharges: Valor da mensalidade TotalCharges: Mensalidades totais pagas(Mensalidade * Tempo de Permanência) Churn -> Status se ocliente cancelou o serviço no final de seu contrato (YES) ou ainda está na empresa (NO) Análise Exploratória Antes de mais nada, vamos conhecer um pouco do conjunto de dados. Saber a quantidade de entradas (linhas) e a quantidade de variáveis (Colunas) do conjunto de dados analisado é muito importante para planejar os próximos passos. Agora, outra parte importante é verificar se o conjunto está completo ou se possui muitos dados faltantes. Abaixo podemos verificar que não temos nenhuma coluna sem dados… será mesmo? Para ter certeza verifiquei o tipo de dado de cada coluna. Vejam que a maioria dos dados é do tipo “object”. Porém, se olharmos com mais detalhe e compararmos os dados abaixo com os dados do dicionário no início deste artigo podemos ver que a coluna “TotalCharges” possui dados numéricos do tipo float e não object. Ao invés de tentar transformar essa coluna em float logo de primeira, vou fazer uma verificação para tentar descobrir o motivo dessa coluna não ser um float. Agora sim podemos ver acima que o menor valor é simplesmente um espaço em branco entre aspas. Para corrigir isso eu criei uma função que facilita a transformação de outas colunas com situações semelhantes. Antes de aplicar a função na coluna TotalCharges, achei melhor criar um dataset “df_clean” para fazer todos os tratamentos necessários e preservar o conjunto de dados original. Agora sim podemos ver a quantidade de entradas NaN encontradas na coluna TotalCharges. Agora iremos verificar a distribuição da variável alvo (Churn). Abaixo podemos observar que temos um certo desbalanceamento, onde valores “no” são significativamente maiores do que “yes”. Isso também precisa ser tratado pois futuramente pode prejudicar o modelo. O mesmo processo iremos fazer para a variável “gender”. Neste caso é possível verificar que os dados estão bem distribuídos. Para visualizar melhor as outras variáveis numéricas do dataset é muito útil plotar alguns gráficos de distribuição (Histogramas).Com eles é possível observar que o TotalCharges (MonthlyCharges * Tenure) diminui com o tempo devido à baixa retenção dos clientes. Outra variável interessante de ser analisada é a “tenure” que significa o tempo que os clientes ficam com o serviço contratado. Logo de cara podemos ver que a quantidade de clientes com 1 mês de serviço é bem significativa, porém essa quantidade cai drasticamente ao longo do tempo. Ou seja, realmente os novos clientes não estão ficando. Preparação dos Dados Após uma breve análise exploratória para conseguirmos entender um pouco dos dados, o que precisa ser tratado e tudo mais, chegou a hora de começar a preparação do conjunto de dados para receber o modelo e fazer algumas previsões posteriormente. Como vimos no início deste artigo, o conjunto de dados usado possui muitas variáveis categóricas inclusive a variável alvo (Churn). A maioria dos modelos para classificação aceitam somente dados numéricos, por isso se faz necessário fazer essa transformação para que o modelo escolhido possa receber os dados corretamente. Abaixo fiz primeiro a transformação da variável alvo, Churn, de No e Yes para 0 e 1. Se repararmos bem nas descrições das variáveis é possível identificar que a maioria delas são binarias (no e yes ou 0 e 1). Porém temos algumas dessas variáveis com valores redundantes. Por exemplo a coluna MultipleLines que possui 3 valores sendo um deles “No internet service” que pode ser agrupado com o valor “no”, tendo como resultado final 2 classes apenas,”yes” e “no”. Outro detalhe legal para ser considerado é a variável tenure. Se ela representa o tempo que cada cliente está consumindo o serviço da empresa, os clientes com tenure 0 significa que eles não passaram nem 30 dias com o serviço e cancelaram. Neste caso irei remover esses clientes para que o modelo possa considerar somente aqueles que passaram mais de 30 dias com o serviço. Agora iremos separar as variáveis numéricas e as categóricas. Além disso iremos remover algumas outras variáveis que não fazem sentido e não agregam para a análise. Nesta etapa irei tratar as variáveis categóricas através do ecoding e fazer uma padronização nas variáveis numéricas. Modelos de Machine Learning Após fazer todas as preparações dos dados chegou a hora de dividir nosso conjunto de dados entre treino e teste para assim fazer a aplicação dos modelos. No começo do artigo, na análise exploratória, vimos que a nossa variável alvo estava bem desbalanceada e aqui iremos aplicar o processo de balanceamento. Dados Balanceados!! Vamos partir para a próxima etapa que é a definição dos parâmetros. Essa fase melhora consideravelmente a performance dos modelos… e falando em modelos o primeiro que irei testar será o DecisionTree. DecisionTree — Arvore de Decisão E para avaliar, abaixo temos o resultado da performance que foi de 0,81 com os seguintes parâmetros: classifier__criterion’: ‘entropy’ classifier__max_depth’: 4 XGBoost Agora iremos aplicar o mesmo processo só que usando o modelo XGBoost Agora tivemos um resultado bem melhor, 0,87. Os melhores parâmetros encontrados foram: classifier__gamma’: 0 classifier__learning_rate’: 0.005 classifier__max_depth’: 2 classifier__n_estimators’: 100 classifier__subsample’: 0.5 LogisticRegression E por último o modelo de regressão hehe. Que teve um resultado de 0,80 com os seguintes parâmetros: ‘classifier__C’: 1.0 Conclusão O que podemos concluir desse pequeno estudo? De 3 modelos que utilizamos para prever o Churn o melhor em termos de performance foi o XGBoost com 87%. Isso significa que a cada 100 clientes com pretensões de cancelar o contrato o modelo previu 87 corretamente. Antes disso vimos também que outros processos são necessários e fundamentais em projetos de Machine Learning que é a limpeza e preparação da base de dados antes de receber qualquer tipo de algoritmo/modelo. E o mais importante, viu como não é nada monstruoso utilizar a inteligência artificial para solucionar um problema de negócio? Obviamente que cada empresa possui um cenário diferente da outra, alguns cenários mais simples, como este projeto e outros mais complexos, porém o principal toda empresa tem que são os dados. Espero que este artigo tenha te ajudado de alguma forma. Se gostou curte a publicação e deixa um comentário :)
Usando IA para Diminuir a Evasão de Clientes — Churn Prediction content media
1
0
176

gabriel.carvalho

Mais ações
bottom of page