AutoML - Prevendo o custo do Plano de Saúde
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.
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:
- Aquisição dos dados
- Análise exploratória
- Tratamento dos dados
- Escolha do modelo
- Treinamento do modelo
- Avaliação do modelo
- 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:
- avaliar outros modelos e/ou outras métricas de desempenho
- 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: