AutoML - Prevendo o custo do Plano de Saúde

Nesse projeto utilizamos técnicas de AutoML para construir um modelo de Machine Learning capaz de prever os custos do plano de saúde.

AutoML - Prevendo o custo do Plano de Saúde
Photo by National Cancer Institute on Unsplash

Nessa série utilizaremos Auto Machine Learning para realizar as análises e construir nossos modelos.

O que é Auto Machine Learning?

Auto Machine Learning (AutoML) são frameworks, ou conjunto de bibliotecas, que nos auxiliam no processo de análise dos dados e construção de modelos de machine learning, poupando tempo do cientista de dados no processo de exploração dos dados e seleção de algoritmos. As bibliotecas mais famosas de AutoML que podemos citar são PyCaret e FB Prophet.

Neste artigo iremos construir um modelo de Machine Learning para prever o custo do plano de saúde utilizando AutoML.

O problema

O papel do seguro é ser uma ferramenta para gerenciar o risco financeiro, é evidente que possuir um seguro de saúde melhora a segurança financeira conforme descrito neste artigo do The new england journal of medicine.

Photo by Bermix Studio on Unsplash
Photo by Bermix Studio on Unsplash

Ainda segundo os autores desse artigo, a expansão da cobertura por seguro aumentou, significativamente o acesso de pacientes a serviços de saúde, uso de saúde preventiva, tratamento de doenças crônicas, medicamentos e cirurgias, promovendo, portanto benefícios à saúde como detecção precoce de doenças, melhor aderência à medicamentos e gestão de condições crônicas.

Mas todos esses benefícios têm um custo: mais despesas para os órgãos estaduais, federais, locais ou privados.

Diante disso empresas que comercializam seguro de vida, com o objetivo de reduzir os potenciais prejuízos e ainda assim serem competitivas no mercado, costumam determinar o preço dos seus serviços através da avaliação de risco do cliente.

Objetivo Geral

O objetivo desse projeto é construir um modelo de Machine Learning de regressão para prever custos de seguro de vida utilizando AutoML.

Objetivos específicos

Para atingirmos o objetivo geral proposto iremos realizar as seguintes etapas de modo a conhecer nossos dados e escolher o melhor modelo para o problema proposto:

  1. Aquisição dos dados
  2. Análise exploratória
  3. Tratamento dos dados
  4. Escolha do modelo
  5. Treinamento do modelo
  6. Avaliação do modelo
  7. Teste do modelo

Aquisição dos Dados


Os dados foram obtidos do Kaggle, plataforma amplamente utilizada para competições e ensino de Data Science e Machine Learning.

Análise Exploratória

Como primeira etapa de todo projeto de Data Science, precisamos conhecer o dataset que estamos trabalhando. Verificamos que nosso conjunto de dados contém 1338 registros e 7 variáveis.

Separação dos dados

Para evitarmos contaminar nosso modelo com dados que serão utilizados para teste, primeiramente devemos separar o conjunto de dados entre treino e teste, esse último será apresentado ao modelo apenas no final do processo, ou seja quando o modelo estiver testado e validado.

Tratamento dos dados

Antes de avançarmos para o treinamento do modelo, precisaremos realizar alguns tratamentos nos dados. Pela nossa análise exploratória podemos perceber que variáveis region, sex e smoker são do tipo texto, portanto precisaremos convertê-las antes de treinar nosso modelo.

Iremos converter a variável smoker para 0 e 1 de modo que no = 0 e yes = 1 Também iremos converter as variáveis region e sex utilizando a técnica de OneHotEncoding, para esse último deixaremos o PyCaret realizar a transformação.

A etapa de tratamento dos dados é uma das mais importantes no processo de construção de um modelo de Machine Learning, apesar o PyCaret ser capaz de realizar as transformações necessárias de maneira eficiente, optamos por realizar algumas transformações manuais.

Escolha do modelo

É nessa etapa que vemos todo o poder do AutoML em ação, com um simples comando, conseguimos criar vários modelos e comparar quais possuem o melhor desempenho.

Para isso utilizamos a função setup do PyCaret, como sabemos que se trata de um problema de regressão, utilizaremos o pacote pycaret.regression:

from pycaret.regression import *

reg = setup(data = train,
            target = 'charges',
            normalize = True,
            log_experiment = False)

Passamos para a função setup nosso dataset, o nome da variável alvo e algumas flags para que o PyCaret inclua alguns passos no seu pipeline. A flag normalize indica ao PyCaret que queremos normalizar nossos dados numéricos para que fiquem numa mesma escala.

Após a realização do setup podemos verificar qual o melhor modelo utilizando o comando compare_models().

Para nosso cenário selecionamos os 3 primeiros modelos para que, após o tuning, verificarmos qual possui o melhor desempenho. Os modelos selecionados foram: Gradient Boosting Regressor (GBR), Random Forest Regressor e Light GBM.

Tunando os modelos

Quando um modelo é criado usando o create_model() ele usa os hiperparâmetros padrão para cada modelo. Para fazer o tuning desses parâmetros, usamos a função tune_model().

Essa função faz o tuning dos parâmetros automaticamente, e mais uma vez o avalia com validação cruzada.

Por padrão o tune_model() utiliza o Random Grid Search para encontrar os parâmetros otimizados.

O tuning dos modelos nos revelou algumas características interessantes:

  • o GBR com parâmetros default apresentou desempenho ligeiramente melhor do que sua versão tunada.
  • o Random Forest tunado apresentou melhor desempenho superando até a versão default GBR
  • o Light GBM tunado apresentou melhor desempenho que sua versão com parâmetros default. Mas ainda assim se mostrou inferior ao Random Forest.

Diante dos resultados e levando em consideração nossa análise, apesar do modelo de Random Forest ter apresentado desempenho ligeiramente superior ao GBR, seu tempo de execução é consideravelmente maior, não justificando, portanto o ganho de performance. Em nosso cenário escolheríamos o GBR.

Com o modelo tunado e treinado, basta finalizá-lo, utilizando o método finalize_model() e realizar um teste final com dados não vistos pelo modelo, que ele estará pronto para ser colocado em produção.

Conclusão

Construímos e comparamos alguns modelos de Machine Learning para realizar a previsão de custos de seguro de vida.

Todo esse processo de treinamento e avaliação dos modelos foi mais simples e rápido com a utilização de frameworks de Auto Machine Learning, no entanto vale ressaltar que tais técnicas não devem ser utilizadas sem que haja, primeiro, um entendimento claro do problema e dos dados que estamos lidando.

Percebemos também que, apesar de apresentar um desempenho ligeiramente superior, o algoritmo de Random Forest mostrou-se mais lento na execução do que o Gradient Boosting Regressor justificando nossa escolha por esse último.

Existem diversas melhorias que podemos fazer nesse projeto tais como:

  1. avaliar outros modelos e/ou outras métricas de desempenho
  2. realizar outros tratamentos nos dados como remoção/ajustes de outliers que podem influenciar negativamente nossas previsões - e que optamos por não fazê-lo nessa análise.

A análise completa você confere abaixo:

health-insurance-prediction/PROJETO_Prevendo_custo_de_Seguro_de_Vida_com_PyCaret.ipynb at main · virb30/health-insurance-prediction
Contribute to virb30/health-insurance-prediction development by creating an account on GitHub.