Tópicos Especiais de Estatística I
Caret
Introdução
O pacote caret (Classification And REgression Training) no R é uma das ferramentas mais versáteis e abrangentes para a construção de modelos de machine learning. Ele fornece uma interface unificada para a aplicação de diferentes técnicas de modelagem e inclui funções para pré-processamento de dados, seleção de características, avaliação de modelos, e muito mais. Este trabalho explora o uso do caret para construir e avaliar um modelo preditivo com dados de pinguins, além de fornecer exemplos práticos e interpretar os resultados.
Métodos
O pacote caret suporta uma ampla gama de métodos de machine learning para classificação, regressão e outras tarefas. Em nosso caso, utilizamos a regressão logística (glm com a função de link logit) é uma escolha apropriada para este tipo de problema, levando em consideração a variável resposta que é sex, que tem duas classes: “female” e “male”. A seguir veremos exemplos dos principais métodos usando caret:
Métodos de Classificação
Árvores de Decisão: rpart: Recursive Partitioning and Regression Trees
Floresta Aleatória: rf: Random Forest
Support Vector Machines (SVM): svmLinear: Support Vector Machines with Linear Kernel svmRadial: Support Vector Machines with Radial Kernel
K-Nearest Neighbors (KNN): knn: K-Nearest Neighbors
Redes Neurais: nnet: Neural Networks
Logistic Regression: glm: Generalized Linear Model
Métodos de Regressão
Regressão Linear: lm: Linear Model
Support Vector Machines (SVM): svmLinear: Support Vector Machines with Linear Kernel svmRadial: Support Vector Machines with Radial Kernel
Floresta Aleatória: rf: Random Forest
K-Nearest Neighbors (KNN): knn: K-Nearest Neighbors
Redes Neurais: nnet: Neural Networks
Métodos de Clustering
kmeans: K-Means Clustering
Hierarchical Clustering: hclust: Hierarchical Clustering
Aplicações
- O pacote caret (Classification And REgression Training) é amplamente aplicável em diversos campos que envolvem análise de dados e machine learning. A seguir, apresento algumas áreas e exemplos específicos onde caret pode ser aplicado:
1 . Ciências de Dados e Análise Preditiva: Previsão de Vendas: Desenvolver modelos que prevejam vendas futuras com base em dados históricos de vendas, promoções, e outras variáveis.
2 . Saúde: Diagnóstico Médico: Criar modelos que auxiliem no diagnóstico de doenças com base em sintomas, resultados de exames, e histórico médico do paciente. Predição de Internações: Estimar a probabilidade de um paciente ser internado novamente após a alta, com base em dados de saúde e histórico de internações.
3 . Finanças: Análise de Crédito: Avaliar a probabilidade de um cliente inadimplente com base em histórico financeiro, crédito passado, e outras características. Detecção de Fraude: Identificar transações fraudulentas em tempo real usando dados de transações e comportamentos de compra.
4 . Marketing: Segmentação de Clientes: Agrupar clientes em segmentos distintos com base em comportamentos de compra, demografia, e outras características. Modelos de Propensão: Prever quais clientes são mais propensos a responder positivamente a campanhas de marketing específicas.
5 . Educação: Previsão de Desempenho Acadêmico: Criar modelos que prevejam o desempenho dos alunos com base em dados anteriores, identificando aqueles que precisam de suporte adicional. Análise de Retenção de Alunos: Identificar fatores que contribuem para a desistência de alunos e desenvolver estratégias para melhorar a retenção.
Dados
# prepareção dos dados
# Remover as linhas com valores NA
palmerpenguins_extended <- na.omit(palmerpenguins_extended)
# Verificando se estao nas funções certas
str(palmerpenguins_extended)
## tibble [3,430 × 11] (S3: tbl_df/tbl/data.frame)
## $ species : chr [1:3430] "Adelie" "Adelie" "Adelie" "Adelie" ...
## $ island : chr [1:3430] "Biscoe" "Biscoe" "Biscoe" "Biscoe" ...
## $ bill_length_mm : chr [1:3430] "53.4" "49.3" "55.7" "38.0" ...
## $ bill_depth_mm : chr [1:3430] "17.8" "18.1" "16.6" "15.6" ...
## $ flipper_length_mm: chr [1:3430] "219.0" "245.0" "226.0" "221.0" ...
## $ body_mass_g : chr [1:3430] "5687.0" "6811.0" "5388.0" "6262.0" ...
## $ sex : chr [1:3430] "female" "female" "female" "female" ...
## $ diet : chr [1:3430] "fish" "fish" "fish" "fish" ...
## $ life_stage : chr [1:3430] "adult" "adult" "adult" "adult" ...
## $ health_metrics : chr [1:3430] "overweight" "overweight" "overweight" "overweight" ...
## $ year : num [1:3430] 2021 2021 2021 2021 2021 ...
# Não estão, então vamos orgaizar
palmerpenguins_extendedc <- palmerpenguins_extended %>%
mutate(
bill_length_mm = as.numeric(bill_length_mm),
bill_depth_mm = as.numeric(bill_depth_mm),
flipper_length_mm = as.numeric(flipper_length_mm),
body_mass_g = as.numeric(body_mass_g),
year = as.numeric(year) # Adicione outras colunas conforme necessário
)
Descritiva
## species island bill_length_mm bill_depth_mm
## Length:3430 Length:3430 Min. :13.60 Min. : 9.10
## Class :character Class :character 1st Qu.:28.90 1st Qu.:16.60
## Mode :character Mode :character Median :34.50 Median :18.40
## Mean :38.53 Mean :18.45
## 3rd Qu.:46.60 3rd Qu.:20.30
## Max. :88.20 Max. :27.90
## flipper_length_mm body_mass_g sex diet
## Min. :140 Min. : 2477 Length:3430 Length:3430
## 1st Qu.:185 1st Qu.: 3844 Class :character Class :character
## Median :203 Median : 4634 Mode :character Mode :character
## Mean :207 Mean : 4835
## 3rd Qu.:226 3rd Qu.: 5622
## Max. :308 Max. :10549
## life_stage health_metrics year
## Length:3430 Length:3430 Min. :2021
## Class :character Class :character 1st Qu.:2022
## Mode :character Mode :character Median :2024
## Mean :2023
## 3rd Qu.:2024
## Max. :2025
- Power bi
Gráfico de Correlação
# Selecionamos apenas as variáveis numéricas
data_numeric <- palmerpenguins_extendedc[, sapply(palmerpenguins_extendedc, is.numeric)]
# Criar o gráfico de pares
pairs.panels(data_numeric,
method = "pearson", # Correlação de Pearson
hist.col = "#00AFBB",
density = TRUE, # Adiciona curvas de densidade
ellipses = TRUE # Adiciona elipses de confiança
)
- A variável year mostra que os dados foram coletados de maneira uniforme entre 2021 e 2025. A falta de correlação significativa entre year e as outras variáveis indica que as características físicas dos pinguins medidas no estudo não variaram significativamente durante esses anos. Isso sugere que, ao longo do período de coleta dos dados, não houve mudanças ambientais ou evolutivas que impactassem essas características específicas dos pinguins.
Aplicação do Caret
- Dividimos os dados em conjuntos de treinamento e teste: 0.8 e 0.2.
set.seed(123)
indice <- createDataPartition(palmerpenguins_extendedc$sex, p = 0.8, list = FALSE)
dados_treino <- palmerpenguins_extendedc[indice, ]
dados_teste <- palmerpenguins_extendedc[-indice, ]
Treinamos o modelo de árvore de decisão usando Caret e o método ‘glm’
Avaliamos o desempenho do modelo
Matriz de Confusão
## Confusion Matrix and Statistics
##
## Reference
## Prediction female male
## female 332 25
## male 13 315
##
## Accuracy : 0.9445
## 95% CI : (0.9246, 0.9604)
## No Information Rate : 0.5036
## P-Value [Acc > NIR] : < 2e-16
##
## Kappa : 0.889
##
## Mcnemar's Test P-Value : 0.07435
##
## Sensitivity : 0.9623
## Specificity : 0.9265
## Pos Pred Value : 0.9300
## Neg Pred Value : 0.9604
## Prevalence : 0.5036
## Detection Rate : 0.4847
## Detection Prevalence : 0.5212
## Balanced Accuracy : 0.9444
##
## 'Positive' Class : female
##
Curva ROC
# Fazer previsões nos dados de teste
previsoes_prob <- predict(modelo, newdata = dados_teste, type = "prob")
# Verificar as previsões
head(previsoes_prob)
## female male
## 1 0.9999510137 4.898634e-05
## 2 0.9954516993 4.548301e-03
## 3 0.3991183770 6.008816e-01
## 4 0.0009863929 9.990136e-01
## 5 0.9007233056 9.927669e-02
## 6 0.0063457507 9.936542e-01
## Setting levels: control = female, case = male
## Setting direction: controls < cases
- Alta taxa de verdadeiros positivos e uma baixa taxa de falsos positivos. Em outras palavras, o modelo tem uma boa capacidade de discriminar entre as classes positivas e negativas.