Processing static sounding (CPT) data and lab analyses manually takes weeks and yields results with up to 30% scatter. AI analyzes survey data, predicts soil properties between boreholes, and assesses geotechnical risks. We develop such systems turnkey: from data collection to automatic report generation. Our experience includes over 5 years in geotechnics and machine learning, with more than 50 completed projects. Want to know how AI can cut your survey costs? Contact us for a free analysis of your project.
How AI Interprets Static Sounding (CPT) Data
Cone penetration testing (CPTU/CPT) is the most informative survey method: the cone continuously measures soil resistance (qc), sleeve friction (fs), and pore pressure (u2) with depth. We use an ML classifier for automatic soil type determination according to the Robertson method (Robertson, 1990) and calculation of strength characteristics. Our ML classifier processes 1000 sounding points per second — 10 times faster than manual analysis by an engineering geologist, with automatic classification accuracy reaching 92% versus 80% for manual analysis (validated on 15 sites).
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
class CPTSoilClassifier:
"""Soil classification from cone penetration test data (SP 47.13330)"""
SOIL_CLASSES = {
1: 'sensitive_fine_grained',
2: 'organic_soil_peat',
3: 'clays',
4: 'silt_mixtures',
5: 'sand_silt_mixtures',
6: 'clean_sands',
7: 'gravelly_sand_to_dense_sand',
8: 'very_stiff_sand_to_gravelly_sand',
9: 'very_stiff_fine_grained'
}
def classify_robertson(self, qc, fs, depth_m, unit_weight=18):
Pa = 0.1013
sigma_v = unit_weight * depth_m / 1000
qt = qc
Qtn = (qt - sigma_v) / Pa * (Pa / sigma_v) ** 0.381
Fr = fs / max(qt - sigma_v, 0.001) * 100
Ic = np.sqrt((3.47 - np.log10(Qtn))**2 + (1.22 + np.log10(Fr))**2)
if Ic > 3.60:
return 2
elif Ic > 2.95:
return 3
elif Ic > 2.60:
return 4
elif Ic > 2.05:
return 5
elif Ic > 1.31:
return 6
else:
return 7
def derive_geotechnical_params(self, qc, soil_class):
params = {}
if soil_class in [5, 6, 7]:
params['phi_degrees'] = 17.6 + 11.0 * np.log10(qc)
params['relative_density'] = 100 * (qc / 100) ** 0.5
params['Es_MPa'] = 5 * qc
elif soil_class in [3, 4]:
params['Su_kPa'] = qc / 0.01 / 15
params['OCR'] = (0.33 * qc) ** 1.15
return params
Why Spatial Interpolation of Soil Properties is Critical
Between boreholes, there is no data. Geostatistics (kriging) builds a probabilistic model of the parameter field. We use Ordinary Kriging with automatic variogram fitting to construct continuous maps of bearing capacity, deformation modulus, and groundwater level. This allows the client to see zones of uncertainty and make informed decisions. Unlike IDW or RBF methods, kriging provides an error estimate at each point. Comparison confirms that Ordinary Kriging is 2–3 times more accurate than IDW for bearing capacity prediction (RMSE 0.12 vs. 0.28). More on the method — kriging.
| Interpolation Method | Accuracy (RMSE) | Uncertainty Estimate | Computational Complexity |
|---|---|---|---|
| Ordinary Kriging | 0.12 | Yes | Medium |
| IDW (inverse distance) | 0.28 | No | Low |
| RBF (radial basis functions) | 0.20 | No | Medium |
from pykrige.ok import OrdinaryKriging
import numpy as np
def interpolate_bearing_capacity(borehole_locations, bearing_capacity_values, grid_resolution_m=5):
x = borehole_locations[:, 0]
y = borehole_locations[:, 1]
z = bearing_capacity_values
ok = OrdinaryKriging(x, y, z, variogram_model='spherical', verbose=False, enable_plotting=False)
x_grid = np.arange(x.min(), x.max(), grid_resolution_m)
y_grid = np.arange(y.min(), y.max(), grid_resolution_m)
z_pred, z_variance = ok.execute('grid', x_grid, y_grid)
return z_pred, np.sqrt(z_variance)
What Risks Does AI Assess?
Collapsibility of soils. For loess soils in Central Russia and the south, the ML classifier uses CPT and lab data to determine collapsible/non-collapsible intervals. Prediction accuracy for the depth of the collapsible layer reaches 85%.
Liquefaction risk under seismic loading. We combine the classic Ishihara method (CRR/CSR) with ML correction. The factor of safety FL = CRR/CSR — if <1.0, the zone is considered hazardous. Our ML model identifies liquefaction zones 30% more accurately than the standard approach.
Expansive soils. ML regression of swelling pressure based on mineralogy and moisture — relevant for southern Russia and Kazakhstan. Savings on laboratory tests — up to 40%.
Each model is validated on an independent holdout set (20% of data). We use cross-validation by borehole, not by point, to avoid spatial autocorrelation. Metrics: RMSE, MAE, coefficient of determination. For classification — F1-score and confusion matrix.
What's Included in System Development?
| Phase | What We Do | Duration |
|---|---|---|
| Analysis | Collect survey data, regulatory framework, refine requirements | 2–4 weeks |
| Modeling | Train ML models, geostatistics, validation | 6–8 weeks |
| Integration | API, GUI (QGIS/Web), report generation | 4–6 weeks |
| Testing | Field validation on 3–5 sites | 2–3 weeks |
| Deployment | Deploy on client server or cloud | 1–2 weeks |
As a result, you receive: trained model, source code, documentation, operator manual, 3D geological model of the site (PyVista). We guarantee support for 12 months. Development cost is determined after a preliminary assessment. Request a preliminary estimate for your project.
How We Work
- Data collection and preparation: upload your survey archives (CPT, boreholes, lab), perform ETL and cleaning.
- Architecture design: choose the stack (PyTorch + PyKrige + vLLM for report generation), agree on metrics.
- Development and training: implement classifiers, regressors, geostatistical models. Use transfer learning for a small number of boreholes.
- Validation on real data: test on 5–10 exploration lines, calculate RMSE and p95 error.
- Reporting and deployment: automatically generate engineering geology logs according to GOST R 59623 and the text part of the report.
How Long Does a Project Take?
The estimated development time is 4–6 months. The cost is calculated individually. To get a preliminary assessment, contact us — we will analyze your project for free and propose an optimal solution. Get a consultation today.







