Spread Footing Bending Check — Random Forest Surrogate Model

A machine learning surrogate model that instantly predicts whether a concrete spread footing passes the bending check per CSA A23.3-19 (Canadian concrete design standard). It replaces iterative structural calculations with a near-instant classification, making it suitable for design optimization loops, preliminary sizing tools, and educational applications.


Model Description

This is a RandomForestClassifier trained on synthetically generated data produced by a physics-based spread footing calculator implementing CSA A23.3-19. Given the geometric, loading, and material properties of a footing, the model predicts whether the footing will pass or fail the bending design check in both directions.

  • Model type: Random Forest Classifier (scikit-learn)
  • Design standard: CSA A23.3-19
  • Task: Binary classification (bending_ok: pass / fail)
  • Training data: Synthetically generated using a validated Python calculator

Intended Use

  • Rapid preliminary sizing of spread footings
  • Design space exploration and optimization
  • Integration into structural engineering tools as a fast surrogate
  • Educational demonstration of ML in structural engineering

Inputs

The model takes the following features as input:

Parameter Description Unit
Ps Specified (SLS) axial load kN
Pf Factored (ULS) axial load kN
Pup Uplift load kN
qss Allowable SLS bearing pressure kPa
qsf ULS bearing pressure kPa
lf Footing length m
wf Footing width m
df Footing depth mm
fc Footing concrete strength MPa
cover Bottom cover mm
dUSF Depth to underside of footing m
tslab Slab-on-grade thickness mm
column_shape Column shape (rectangular = 0, circular = 1) encoded int
lc Column length (rectangular) m
wc Column width (rectangular) m
dc Column diameter (circular) m
fcCol Column concrete strength MPa
lambda_ Concrete density factor —
phiC Concrete resistance factor —
phiS Steel resistance factor —
fy Steel yield strength MPa
gammaConc Concrete unit weight kN/m³
gammaSoil Soil unit weight kN/m³
gammaFill Fill unit weight kN/m³
bar_size_bot Bottom bar size (10/15/20/25/30/35) —
bar_size_top Top bar size —

Output

Label Meaning
1 Footing passes the bending check
0 Footing fails the bending check

How to Use

1. Download the model

from huggingface_hub import hf_hub_download
import pickle

model_path = hf_hub_download(
    repo_id="siavashhabibi1993/spread-footing-surrogate",
    filename="spread_footing_random_forest_model.pkl"
)

with open(model_path, "rb") as f:
    model = pickle.load(f)

2. Prepare your input and predict

import numpy as np

# Example footing input — must match the training feature order
# column_shape: 0 = rectangular, 1 = circular (LabelEncoded)
X = np.array([[
    500,    # Ps (kN)
    700,    # Pf (kN)
    0,      # Pup (kN)
    150,    # qss (kPa)
    200,    # qsf (kPa)
    2.5,    # lf (m)
    2.5,    # wf (m)
    500,    # df (mm)
    25,     # fc (MPa)
    75,     # cover (mm)
    1.5,    # dUSF (m)
    100,    # tslab (mm)
    0,      # column_shape (0 = rectangular)
    0.4,    # lc (m)
    0.4,    # wc (m)
    0.4,    # dc (m)
    25,     # fcCol (MPa)
    1.0,    # lambda_
    0.65,   # phiC
    0.85,   # phiS
    400,    # fy (MPa)
    24,     # gammaConc (kN/m³)
    18,     # gammaSoil (kN/m³)
    18,     # gammaFill (kN/m³)
    20,     # bar_size_bot
    15      # bar_size_top
]])

prediction = model.predict(X)
print("Bending OK:" if prediction[0] == 1 else "Bending FAILS")

Important Notes

  • The column_shape column must be label encoded before prediction: rectangular = 0, circular = 1
  • A SimpleImputer (mean strategy) was applied to training data. If your inputs contain missing values, apply the same imputation before predicting.
  • Feature order must exactly match the input table above.

Training Details

  • Algorithm: RandomForestClassifier (scikit-learn)
  • Hyperparameter tuning: n_estimators swept from 10 to 90
  • Validation: Cross-validation (5-fold) used during tuning
  • Training data: Synthetically generated from a CSA A23.3-19 physics-based calculator

Limitations

  • This model predicts only the bending check (bending_ok). It does not predict one-way shear, punching shear, bearing, or uplift checks.
  • Trained on synthetic data — real-world edge cases may not be fully represented.
  • Not intended as a replacement for a licensed engineer's judgement.

Environment

scikit-learn == 0.22.1
numpy        == 2.3.5
pandas       == 2.3.3
python       == 3.11.14

Citation

If you use this model in your work, please credit the repository:

@misc{spread-footing-surrogate,
  author = {Siavash},
  title  = {Spread Footing Bending Check — Random Forest Surrogate Model},
  year   = {2026},
  url    = {https://huggingface.co/siavashhabibi1993/spread-footing-surrogate}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support