6 May 2026 · 5 min read
Post #1How a Dutch dredging company exposed a flaw in my system
Boskalis at the top of my global buy list, above NVIDIA and Microsoft. That's not signal. That's a category error in how I was comparing things.
Today I was looking at the top five buy signals from my trading system. At the top, again, sat BAMNB. For those who don't know it: that's Boskalis, the Dutch dredging company that builds beaches and deepens harbors.
I know Boskalis well. It's a fine company. But at the top of a list of 462 stocks worldwide, above NVIDIA, above Microsoft, above every American tech giant? That doesn't add up.
My system was seeing something fundamentally off. It took me a few hours to find out what, and the answer says something important about how to build multi-factor models.
What the system saw
My Value factor tries to measure whether a stock is cheap. One of the most important measures is EV/EBITDA: what you pay for the entire enterprise, divided by what the company makes in profit before interest, tax, and depreciation.
On June 1 2022 the system saw this:
- Boskalis EV/EBITDA: 6.0
- Global median EV/EBITDA: 14.2
Boskalis was, on the face of it, 57 percent cheaper than an average company in my universe. That sounds wonderful. The system gave him a Value z-score of +3.0, the maximum the system allows.
But there's a problem under that wonderful number.
The comparison that doesn't work
Comparing a dredging company to the global median is comparing apples and pears. My universe contains NVIDIA, with an EV/EBITDA of 50. Microsoft at 25. Snowflake at 80. The cloud, AI and software segment pulls the global average way up.
Boskalis is not a tech company. It's infrastructure. It builds physical things. An infrastructure company should be compared to other infrastructure companies, not to software companies.
When I realized that, I looked at the median within Industrials, where Boskalis sits:
- Industrials sector EV/EBITDA median: 11.8
Boskalis at 6.0, compared to a sector median of 11.8. Still cheap, but much less extreme than versus the global median. The Value z-score should be much lower.
My system was making a category error. It was comparing across all sectors at once, as if a dredging company and an AI company belonged on the same yardstick.
The refactor
Fixing that error was a day's work. I rewrote my Value factor to normalize within sectors instead of across the entire universe.
I'll skip the technical details, but the idea is simple. For each stock you look at the other stocks in the same sector, calculate the sector mean and the sector standard deviation, and use that as the reference frame for the z-score.
The effect on Boskalis was dramatic:
- Before refactor: Value z-score +3.0 (maxed out)
- After refactor: Value z-score +0.6 (just plain, reasonably cheap within sector)
A drop of nearly eighty percent. Not because Boskalis was suddenly less cheap, but because I was now making the right comparison.
Heijmans, another Dutch construction company, went from +3.0 to +2.87. Almost no change. That makes sense: Heijmans is really extremely cheap within its sector, not just globally. The refactor revealed which signals were genuine and which were exaggerated by my measurement error.
Why this matters
What happened here is a classic problem in factor models. When you measure something across a mixed population, you get distortion from structural differences between subgroups.
Tech companies have fundamentally higher multiples than dredging companies. That has nothing to do with whether a specific company is over- or undervalued. It's a property of the sector. Software has higher margins, more scale advantages, less capital intensity. Shareholders pay more per euro of profit for that, and that's rational.
If you don't correct for this, your factor scores get a sectoral bias. Industrials, Materials, and Energy always look "cheap" because they have fundamentally different multiples. Tech, Software, and Healthcare always look "expensive." Your system would constantly recommend old-economy stocks, not because they're fundamentally undervalued, but because they sit in a sector where lower multiples are normal.
That's exactly what my system did in June 2022. Boskalis at the top, BAMNB at number two, Heijmans at number three. All Dutch infrastructure and construction. No NVIDIA in sight. Not because tech was really overpriced versus the fundamental situation, but because my measuring stick was crooked.
The broader lesson
Building with data means continuously thinking about what you're comparing. Numbers in tables feel objective, but the way you relate them to each other is a choice, and that choice makes or breaks your system.
My trading system has been rewritten ten times or so to correct for thinking errors like this. Sometimes I found them myself. Sometimes Cursor, my AI that writes the code, pointed them out during the build. One time Stockopedia pointed it out, a commercial platform with different methods, drawing different conclusions about Boskalis than my system.
Three different systems looking at the same data can say three different things. That's not because one of them is wrong. It's because the assumptions are different. What comparison are you making? Which benchmark are you using? Which period? Which grouping?
For me the lesson was: there is no "natural" way to compare stocks. Every method makes implicit choices. The art is to make those choices explicit and to test whether they're logical for what you're trying to measure.
The refactor wasn't brilliant. It was correction of a thinking error that should have been there from the start. But that's how it goes. You build something, you let it run, you check if the outcomes make sense, and if they don't, you go back to the assumptions.
Boskalis at the top wasn't a buy signal. It was a signal that my measuring stick was crooked.