Downloads · 30 days
0
shanexf/24679-hand-middle-finger-autogluon-regressor
24679-hand-middle-finger-autogluon-regressor is a tabular regression model from shanexf. Use it for the tabular regression task on the model card, and read the license before you ship it in a product. It is set up for autogluon. The card lists the license as other.
Predicts a person's right-hand middle-finger length in centimetres from the lengths of the other four fingers and a recorded Female / Male category. Built for the 24-679 AutoML homework as an exercise in tabular AutoM…
Downloads · 30 days
0
Access
Public
Updated Sep 21, 2026
Repo size
21 MB
Likes
0
Public
Click a slice to open those files.
.zip21 MB · 100%
From the Hugging Face model README
Predicts a person's right-hand middle-finger length in centimetres from the lengths of the other four fingers and a recorded Female / Male category. Built for the 24-679 AutoML homework as an exercise in tabular AutoML, provenance-aware splitting, and model documentation. It is a classroom demonstration on a 30-person convenience sample and is not a tool for anthropometric, medical, forensic, or demographic use.
cmuchancel/hw1-tabular-hand-data (commit 511326a09c89d23a3698deccb1119f3ae3a4e066), prepared by
a classmate for Homework 1. 30 CMU students each measured their own right-hand finger lengths (fingertip to the web
between fingers) with the same ruler, in centimetres.| Female / Male | train originals | validation | test |
|---|---|---|---|
| Female | 1 | 1 | 0 |
| Male | 20 | 3 | 5 |
| Column | Role | Type / unit |
|---|---|---|
Thumb Size, Index Finger Size, Ring Finger Size, Pinky Size | predictors | float, cm |
Female / Male | predictor | categorical (2 levels) |
Middle Finger Size | target | float, cm |
Excluded from the feature matrix: source_id, parent_id, second_parent_id, augmentation, is_augmented, mix_weight.
No manual scaling or encoding. Numeric columns are cast to float64 and checked to be finite and positive; Female / Male
is passed as a pandas category. AutoGluon's AutoMLPipelineFeatureGenerator handles type inference and per-model
encoding (e.g. the two-level category becomes a boolean). Inputs to predict must use the exact column names above.
TabularPredictor 1.6.1, problem_type="regression",
eval_metric="root_mean_squared_error", presets="medium_quality", tuning_data = the published validation hands,
num_bag_folds=0, num_stack_levels=0 (no internal re-splitting of related synthetic rows).originals_only
(21 rows) and originals_plus_synthetic (525 rows), default medium_quality model zoo
(LightGBM ×3, CatBoost, XGBoost, RandomForest, ExtraTrees, KNN ×2, NeuralNetTorch, NeuralNetFastAI, weighted ensemble)
plus AutoGluon's linear model LR. Backends available in this run: {'lightgbm': '4.6.0', 'xgboost': '3.3.0', 'catboost': '1.2.10', 'torch': '2.11.0+cpu', 'fastai': '2.8.7'}.originals_plus_synthetic (the better stage-1 variant): 20 trials per
family, {'num_trials': 20, 'scheduler': 'local', 'searcher': 'random'}, 600 s budget, overGBM: num_leaves ∈ integers 4–64, learning_rate ∈ 0.01–0.3 (log scale), feature_fraction ∈ 0.5–1.0, min_data_in_leaf ∈ integers 2–30, lambda_l2 ∈ 0.001–10.0 (log scale)XGB: max_depth ∈ integers 2–8, learning_rate ∈ 0.01–0.3 (log scale), subsample ∈ 0.5–1.0, colsample_bytree ∈ 0.5–1.0, min_child_weight ∈ integers 1–10CAT: depth ∈ integers 3–8, learning_rate ∈ 0.01–0.3 (log scale), l2_leaf_reg ∈ 1.0–10.0 (log scale)LR: 5 fixed configurations: {'penalty': 'L2', 'C': 0.01}; {'penalty': 'L2', 'C': 0.1}; {'penalty': 'L2', 'C': 1.0}; {'penalty': 'L2', 'C': 10.0}; {'penalty': 'L2', 'C': 100.0}RF: 3 fixed configurations: {'n_estimators': 300, 'max_features': 0.5, 'min_samples_leaf': 1}; {'n_estimators': 300, 'max_features': 0.5, 'min_samples_leaf': 3}; {'n_estimators': 300, 'max_features': 1.0, 'min_samples_leaf': 5}hpo_originals_plus_synthetic — model: WeightedEnsemble_L2 — trained on 525 rows.{
"model": "WeightedEnsemble_L2",
"model_type": "WeightedEnsembleModel",
"val RMSE (cm)": 0.23503504300766215,
"hyperparameters": {
"ag_args_ensemble": {
"save_bag_folds": true
}
},
"ensemble_weights": {
"LightGBM/T4": 0.26666666666666666,
"LinearModelC100.0": 0.7333333333333333
},
"base_models": [
{
"model": "LightGBM/T4",
"model_type": "LGBModel",
"val RMSE (cm)": 0.4106743419165846,
"hyperparameters": {
"num_leaves": 50,
"learning_rate": 0.1477317633429356,
"feature_fraction": 0.9818313802505146,
"min_data_in_leaf": 25,
"lambda_l2": 0.03417952912061012,
"seed": 0
}
},
{
"model": "LinearModelC100.0",
"model_type": "LinearModel",
"val RMSE (cm)": 0.265527465630884,
"hyperparameters": {
"penalty": "L2",
"C": 100.0
}
}
]
}
Validation and test scores (RMSE and MAE in cm)
| val RMSE (cm) | val MAE (cm) | val R^2 | test RMSE (cm) | test MAE (cm) | test R^2 | |
|---|---|---|---|---|---|---|
| AutoML final: WeightedEnsemble_L2 [hpo_originals_plus_synthetic] | 0.235 | 0.215 | 0.932 | 0.201 | 0.171 | 0.618 |
| mean of training originals | 0.903 | 0.862 | -0.002 | 0.339 | 0.25 | -0.08 |
| linear regression (originals_only) | 0.396 | 0.345 | 0.807 | 0.158 | 0.134 | 0.766 |
| linear regression (originals_plus_synthetic) | 0.386 | 0.334 | 0.817 | 0.149 | 0.126 | 0.791 |
LinearModelC100.0, seeds [0, 1, 2, 3, 4]): test RMSE
0.278 ± 0.000 cm (mean ± sd).Per-hand test predictions
| source_id | Female / Male | actual (cm) | predicted (cm) | residual (cm) |
|---|---|---|---|---|
| hand_2026_007 | Male | 8 | 8.107 | 0.107 |
| hand_2026_022 | Male | 9 | 9.309 | 0.309 |
| hand_2026_021 | Male | 8.4 | 8.201 | -0.199 |
| hand_2026_002 | Male | 8.3 | 8.3 | -0 |
| hand_2026_026 | Male | 8.5 | 8.737 | 0.237 |
Permutation feature importance (training originals, 20 shuffles; RMSE units)
| importance | stddev | p_value | |
|---|---|---|---|
| Ring Finger Size | 0.17 | 0.033 | 0 |
| Index Finger Size | 0.147 | 0.026 | 0 |
| Pinky Size | 0.047 | 0.016 | 0 |
| Thumb Size | 0.044 | 0.016 | 0 |
| Female / Male | 0.005 | 0.006 | 0.001 |
The full validation-vs-test leaderboard for every candidate is in leaderboard_all_candidates.csv; the machine-readable
version of everything above is in metrics.json.
Female / Male is a recorded label used only as a predictor. Nothing here should be read as a claim
about biological differences, and the model must not be used to infer sex or identity from hand measurements.source_ids are provenance keys only.The underlying dataset assigns no license and is shared for 24-679 coursework; this model is released under the same
classroom-use-only terms (license: other). Check course permissions before any reuse or redistribution.
Linux-6.6.122+-x86_64-with-glibc2.39, Python 3.13.15, 2 CPU cores, 13.6 GB RAM, GPU: none (CPU runtime). Budgets: 300 s per stage-1 variant, 600 s for stage 2, 120 s per seed-check refit; actual fit times are listed above. Run started 2026-09-21T00:50:36+00:00. Library versions: AutoGluon 1.6.1, scikit-learn 1.7.2, pandas 2.2.3, NumPy 2.1.3, PyTorch 2.11.0+cpu.
import zipfile, huggingface_hub, pandas
from autogluon.tabular import TabularPredictor
path = huggingface_hub.hf_hub_download("shanexf/24679-hand-middle-finger-autogluon-regressor", "autogluon_predictor_dir.zip")
zipfile.ZipFile(path).extractall("predictor_dir")
predictor = TabularPredictor.load("predictor_dir")
hand = pandas.DataFrame([{"Thumb Size": 6.2, "Index Finger Size": 7.6, "Ring Finger Size": 7.5,
"Pinky Size": 6.0, "Female / Male": "Male"}])
print(predictor.predict(hand))
autogluon_predictor.pkl is a cloudpickle of the same predictor and depends on the files in the ZIP; use the same
AutoGluon version listed above.
Claude (Anthropic) was used to adapt the 24-679 lecture AutoML notebook to this dataset and to draft the model-card template. The author ran the notebook end to end, checked the outputs, and edited the text. The hand measurements were collected by a classmate from CMU students and were not generated by AI.
shanexf — 24-679, Carnegie Mellon University, Fall 2026.