Knife steel is a small-data problem with a lot of domain structure. There are only a few dozen steels with standardized, published mechanical measurements, but there are more than a century of metallurgy telling you why composition drives performance. That combination — few labels, strong priors — dictates almost every modeling decision in this project.
This post walks through the whole pipeline: how raw composition becomes features, why edge retention is machine-learned while corrosion is computed straight from the chemistry, and how we validate a model trained on 48 examples without fooling ourselves.
The prediction target
For each steel we predict four base properties on a 1–10 scale:
- Edge retention — how long the edge keeps cutting
- Toughness — resistance to chipping and fracture
- Corrosion resistance — resistance to rust and pitting
- Ease of sharpening — how readily the edge is reground on normal stones
Those four are then combined into use-case scores (EDC, hard use, kitchen, bushcraft) using fixed weighting profiles. The interesting engineering is entirely in the four base properties, so that is where this post lives.
Why one model per property, not one model for all four
The four properties do not share a data regime, so they do not share a modeling approach:
| Property | Approach | Labels | Why |
|---|---|---|---|
| Edge retention | ML ensemble | 48 CATRA tests | Enough data for trees; non-linear element interactions |
| Toughness | Physics-informed Ridge | 12 Charpy tests | Too few samples for pure ML; physics features carry the load |
| Corrosion | Deterministic calculation | None (validated vs 61 ratings) | Well-understood passivation chemistry |
| Ease of sharpening | Deterministic calculation | None | Direct function of carbide volume and hardness |
This is the central design idea: use ML only where you have labels and non-linearity, and use physics everywhere else. Forcing a single multi-output model would mean inventing pseudo-labels for corrosion and sharpening, or starving them of the composition chemistry that actually governs them.
Feature engineering: where the domain knowledge lives
Raw composition — the weight percent of C, Cr, V, Mo, W, Co, N, Mn, Si, Nb, Ni plus a powder-metallurgy flag — is only 12 numbers. Trees can learn from those directly, but with 48 samples they will happily overfit. So we add 12 derived features that encode metallurgy the model would otherwise have to rediscover from almost no data:
Composition (11): C, Cr, V, Mo, W, Co, N, Mn, Si, Nb, Ni
Process (1): powder_metallurgy (binary)
Derived (12): total_carbide_formers, cr_to_c_ratio, is_stainless,
total_alloy_content, pren, cvf, c_above_eutectoid,
vc_fraction, matrix_cr, ms_temp, pm_x_cvf, pm_x_excess_c
The two that matter most for edge retention:
- CVF (carbide volume fraction) — an estimate of how much hard carbide is dispersed in the matrix. Carbides are what resist abrasion, so CVF is the first-order driver of wear resistance.
- vc_fraction — the volume fraction of vanadium carbide specifically. VC is the hardest common carbide (~2800 HV), so a steel rich in VC holds an edge far longer than one whose carbides are softer chromium carbides.
Crucially, vc_fraction is not something a tree can derive from raw V% alone — it depends on how much carbon is available to bind with vanadium after the other carbide formers take their share. Computing it up front is doing the model's hardest reasoning for it.
We also add interaction terms like pm_x_cvf (powder metallurgy × CVF). Powder metallurgy produces finer, more evenly distributed carbides, so a high-CVF PM steel behaves very differently from a high-CVF conventionally-cast steel. Encoding that interaction explicitly means the model does not need extra samples to learn it.
The edge-retention model
Data: CATRA TCC
The edge-retention model is trained on 48 steels measured on a CATRA TCC (Total Card Cut) machine — a standardized rig that reports how many millimeters of silica-impregnated cardstock a blade slices before dulling, under fixed edge angle, finish, and load. This is an objective machine measurement, not a subjective rating, which is exactly what you want as a training label. Measured values span 271 mm (simple carbon steels) to 1009 mm (Rex 121, a high-V/W tool steel).
Architecture: a three-model ensemble
Rather than bet everything on one estimator, we blend three with fixed weights:
prediction = 0.45 x XGBoost + 0.30 x RandomForest + 0.25 x Ridge
The intuition: XGBoost captures sharp non-linear interactions, RandomForest is a lower-variance bagged counterweight, and Ridge anchors the blend with a smooth linear trend that degrades gracefully when a steel sits outside the training distribution. On a 48-row dataset, that linear anchor matters — it stops the trees from extrapolating wildly on an unusual composition.
Every hyperparameter is chosen to fight overfitting on a tiny dataset: shallow trees (max_depth=3), strong regularization (reg_alpha=0.5, reg_lambda=2.0), subsampling, and a low learning rate over 200 estimators.
Validation: leave-one-out
With 48 samples, a held-out test set would be both too small to trust and too costly to give up. So we use leave-one-out cross-validation: train on 47 steels, predict the one left out, repeat 48 times.
| Metric | Value |
|---|---|
| LOOCV MAE (mm) | 34.8 mm |
| LOOCV MAE (1–10 scale) | 0.391 |
| LOOCV RMSE (mm) | ~45 mm |
An average error of 0.39 on a 10-point scale means the ranking is trustworthy even if an individual steel is occasionally off by half a point.
What the model learned
The XGBoost feature importances line up cleanly with metallurgy:
| Feature | Importance |
|---|---|
| vc_fraction | 0.406 |
| cvf | 0.265 |
| V | 0.112 |
| C | 0.097 |
| total_carbide_formers | 0.028 |
| total_alloy_content | 0.023 |
Vanadium carbide fraction alone explains ~40% of the model's edge-retention decisions. That is not a coincidence we engineered in — it is the model independently confirming the materials-science consensus that VC content drives wear resistance. When a model's learned structure matches known physics, you gain confidence it is generalizing rather than memorizing.
Toughness: physics features, tiny regression
Only 12 steels in the set have published Charpy impact data, all powder-metallurgy steels. Twelve samples is far too few for tree ensembles, so toughness uses Ridge regression over physics-derived features rather than raw composition. The key features encode carbide type, not just amount:
- vc_vol — round, coherent vanadium carbides: a mild toughness penalty
- crc_vol — angular Cr7C3 chromium carbides: severe crack-initiation sites
- pm_tool — powder metallurgy × tool-steel interaction: a large positive term
- stainless_x_cvf — the worst combination, high carbide volume in a stainless matrix
The fitted coefficients are readable, which is the point of using a linear model here:
| Feature | Coefficient | Reading |
|---|---|---|
| stainless_x_cvf | -0.85 | stainless + high carbide = worst for toughness |
| vc_vol | -0.84 | VC hurts, but less than raw volume would suggest |
| pm_tool | +0.58 | PM processing greatly helps tool steels |
| crc_vol | -0.30 | chromium carbides hurt toughness |
| intercept | 6.11 | baseline score |
Calibration correlation against Charpy is 0.96 (n=12). Because all calibration steels are PM, conventional steels receive an explicit processing penalty (−1.0 to −2.0 points depending on type) rather than a fabricated ML estimate. We would rather apply an honest, documented heuristic than pretend we measured something we did not.
Corrosion and sharpening: no ML at all
Corrosion resistance is computed, not learned, from effective matrix chromium — the Cr actually dissolved in the matrix and available to passivate, after subtracting the Cr locked up in carbides. The subtlety is carbide partition order: carbon binds vanadium, then niobium, then tungsten, then molybdenum, and only the leftover carbon consumes chromium. For a high-vanadium steel like S90V, vanadium scavenges most of the carbon, so far less chromium is depleted than a naive "carbon eats chromium" estimate would predict — which is why S90V is still stainless despite 2.3% carbon. This deterministic model correlates 0.888 with an independent set of 61 reference ratings.
Ease of sharpening is likewise a closed-form penalty driven by carbide volume and the hardness of those carbides relative to a typical alumina stone (2100 HV). A steel whose carbides are harder than the stone (high VC) is inherently hard to sharpen; the formula just encodes that.
Lessons for small-data ML
If you take one thing from this project, take this: on a 48-sample problem, the model is mostly your features and your priors, not your estimator. Concretely:
- Spend your samples where they buy the most. ML for the property with the richest labels and strongest non-linearity; physics for the rest.
- Encode interactions you already understand. Every domain interaction you compute up front is one you do not need extra data to learn.
- Keep a linear anchor in the ensemble. It is what keeps predictions sane outside the training distribution.
- Validate honestly. LOOCV, not a vanity hold-out; and check that learned importances match known physics.
- Prefer a documented heuristic over a fabricated label. The conventional-steel toughness penalty is transparent; a made-up Charpy value would not be.