michaelml.dev / Michael_Portfolio.ipynb
Kaggle competition for predicting pasture biomass from images using a 4-model stacking ensemble. Achieved 21% MAE improvement over the best individual model with R² of 0.9998.
[ ]
code · CSIRO Image2Biomass Prediction
project = load_project("csiro-image2biomass")
project.summary()Output

CSIRO Image2Biomass Prediction
Kaggle competition for predicting pasture biomass from images using a 4-model stacking ensemble. Achieved 21% MAE improvement over the best individual model with R² of 0.9998.
PyTorchDINOv2ConvNeXtSigLIPStacking EnsembleCatBoostComputer VisionRegressionKaggleAgricultural AI
[ ]
code · Problem definition
project = load_project("csiro-image2biomass")
project.problem()Output
ProblemPasture biomass traditionally requires destructive sampling; the competition asked models to estimate five biomass targets from images and metadata.
ApproachStack DINOv2, ConvNeXt, SigLIP/boosting, and DINOv2-Giant/Lasso pipelines with image augmentation, metadata features, TTA, and grouped cross-validation.
OutcomeRecorded MAE 10.03, a 21.37% improvement over the best individual model in the project evaluation, with weighted R² 0.9998.
[ ]
code · Constraints
project = load_project("csiro-image2biomass")
project.constraints()Output
Constraints
- Five related regression targets had different error profiles.
- Repeated image paths made leakage-safe grouping essential.
- The solution had to combine image and structured metadata features.
[ ]
code · Role and implementation
project = load_project("csiro-image2biomass")
project.implementation()Output
Role and implementation
My role: Designed and evaluated the four-model vision ensemble, feature pipeline, grouped validation strategy, and Lasso stacking meta-model.
- Combined DINOv2, ConvNeXt, SigLIP, boosting models, and Lasso in a stacking ensemble.
- Used Albumentations, Mixup/CutMix, test-time augmentation, and metadata encoders.
- Grouped five-fold validation by image path.
[ ]
code · Architecture
project = load_project("csiro-image2biomass")
project.show_architecture()Output
Architecture overview
Stack DINOv2, ConvNeXt, SigLIP/boosting, and DINOv2-Giant/Lasso pipelines with image augmentation, metadata features, TTA, and grouped cross-validation.
The documented project does not claim a separate architecture artifact.
[ ]
code · Demo and media
project = load_project("csiro-image2biomass")
project.media()Output

[ ]
code · Evaluation
project = load_project("csiro-image2biomass")
project.evaluation()Output
Evaluation
- Compared all four base models against the stacking meta-model.
- Tracked MAE and per-target as well as weighted R².
[ ]
code · Results
project = load_project("csiro-image2biomass")
project.results()Output
Results
- Stacking MAE: 10.03 versus 12.76 for the best individual model.
- Weighted R²: 0.9998 in the documented project evaluation.
[ ]
code · Tradeoffs and failures
project = load_project("csiro-image2biomass")
project.tradeoffs()Output
Tradeoffs
- The ensemble improves aggregate error while increasing inference cost and operational complexity.
- Aggregate R² can obscure weaker performance on individual biomass targets.
[ ]
code · What I would improve
project = load_project("csiro-image2biomass")
project.improvements()Output
Improvements
- Report uncertainty and additional held-out robustness checks by geography and species.
- Distill the ensemble for more practical field inference.
[ ]
code · Links and repository
project = load_project("csiro-image2biomass")
project.links()Output