-
Pipeline completo de Machine Learning em R
-
Este repositório apresenta um pipeline para prever a produtividade de arroz (paddy yield) usando o ecossistema tidymodels.
-
O projeto inclui pré-processamento, engenharia de atributos, tuning, comparação de modelos, retreinamento e diagnóstico completo dos resíduos.
Leia o relatório com todas as etapas e explicações: https://jenniferlopes.quarto.pub/previsao-produtividade-tidymodels/
Construir um fluxo completo de modelagem para prever produtividade de arroz (kg/ha) a partir de variáveis agronômicas, climáticas e operacionais do Paddy Dataset (UCI, 2023).
Trabalhei com arroz desde a graduação até o doutorado, sempre na área de melhoramento genético. Eu nunca havia trabalhado com variáveis operacionais e ambientais como as deste dataset, e buscava um banco rico para aplicar técnicas modernas de Machine Learning. O Paddy Dataset foi a escolha ideal para essa exploração.
- 2789 observações
- 45 variáveis preditoras completas (sem NA)
- Talhões do estado de Tamil Nadu (Índia)
- Variáveis de clima, irrigação, adubação, manejo, temperatura e produtividade
Fonte: Subramaniyan (2023), UCI Machine Learning Repository.
O pipeline inclui:
- Carregamento e limpeza dos dados
- Estatística descritiva e identificação da escala da resposta
- Split estratificado (80/20)
- Validação cruzada (5-Fold)
- Recipe completa com engenharia de atributos
- fertilizante/ha
- densidade de semeadura
- efeitos de chuva por janelas
- água total e água por hectare
- médias e amplitudes térmicas
- métricas de investimento
- imputação, normalização, dummies e Yeo-Johnson
- Modelos utilizados
- Random Forest (ranger)
- XGBoost
- Tuning com grid regular
- Comparação Random Forest vs XGBoost
- Treino Final com hiperparâmetros ótimos
- Avaliação no conjunto de teste
- Função de previsão para novos dados
- Função de retreinamento
- Análise completa de resíduos e gráficos de diagnóstico
Modelo vencedor: Random Forest
Desempenho no teste:
-
RMSE ~ 796.72 kg/ha
-
R² ~ 0.9921
-
MAE ~ 569.86 kg/ha
Esses valores indicam excelente capacidade de generalização e baixa taxa de erro considerando a escala dos dados.
├── data
│ ├── data_example.xlsx
│ ├── new_data.xlsx
│ ├── novos_api.csv
│ ├── novos_dados_paddy.csv
│ └── paddydataset.csv
├── estilo.css
├── imagens
│ ├── artigo.JPG
│ └── etapas.png
├── machine_learning_portifólio.Rproj
├── outputs
│ ├── modelo_paddy_final.rds
│ ├── modelo_paddy_retreinado.rds
│ ├── model_comparison.csv
│ ├── receita_preprocessamento.rds
│ ├── test_metrics.csv
│ └── test_predictions.csv
├── paddy_ml.qmd
├── README.md
└── scripts
└── paddy_ml.r
if (!requireNamespace("pacman")) install.packages("pacman")
pacman::p_load(tidymodels, tidyverse, skimr, janitor, ranger, xgboost,
doParallel, glue, vip, patchwork)df_raw <- read_csv("data/paddydataset.csv") |> clean_names()O script segue a ordem lógica do processo, por exemplo:
1. 01_preprocessamento
2. 02_treinamento
3. 03_avaliacao
4. 04_retreinamento
previsoes <- predict_yield(novos_dados)modelo_atualizado <- retrain_model(novos_dados, original_data = train_data)Foram gerados:
-
Gráfico Predito vs Observado
-
Distribuição dos Resíduos
-
Resíduos vs Preditos
-
Q-Q Plot
-
Painel combinado (patchwork)
Esses gráficos confirmam ausência de viés, normalidade aproximada dos resíduos e bom ajuste geral.
@misc{paddy_dataset_1186,
author = {Subramaniyan, Muthukumaran},
title = {Paddy Dataset},
year = {2023},
howpublished = {UCI Machine Learning Repository},
note = {DOI: https://doi.org/10.24432/C55W3J}
}
MIT.
{width="100"}