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_shapecolumn 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_estimatorsswept 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}
}