The test our own advice failed
We built a buy-or-wait rule, tested it against 1,252 past decisions with no hindsight, and it was wrong more often than a coin toss. Here is the whole result, including the caveat we hold against ourselves.
What the test covered
1,252 decision points were tested across 11 monthly Bureau of Labor Statistics index series. The observations run from January 2017 through June 2026. The files were retrieved from the BLS Public Data API on July 25, 2026. No retailer, marketplace, Amazon-derived history, or per-SKU retail price entered the test.
At each observed month, the calculation described the price state using only the history available through that month. It then returned one of three candidate labels: Wait if flexible, Buy if needed, or No recommendation. Across the full test it produced 51 wait signals, 120 buy signals, and 1,081 decisions with no recommendation.
The state calculation used no more than 365 normalized days of history. It required at least 14 days, at least 10 observations, and at least 60% coverage. If any minimum was missed, it gave no recommendation. Position was the current index value's empirical percentile within its observed window, with tied values assigned their midpoint rank. That tie rule matters because a flat series belongs at the 50th percentile, not at zero.
The candidate thresholds were numerical and fixed before the outcomes were examined:
- Wait if flexible required position at or above the 75th percentile and a normalized 30-day trend below 0%.
- Buy if needed required position at or below the 25th percentile, a normalized 30-day trend at or above 0%, and confirmation that no better substitute was available.
- Every other combination gave no recommendation.
- The declared limit required the three-month contradiction rate for Wait if flexible to be no more than 40%.
The displayed direction labels use separate thresholds. A 30-day trend above 3% per 30 days is rising, below -3% is falling, and everything between those values is stable. The candidate recommendation rule did not use those direction labels. It used the 30-day trend crossing 0%. This distinction prevents the 3% display threshold from being mistaken for the recommendation threshold.
For this BLS test, each real calendar month was represented as one 30-day step so the daily calculation could read monthly observations. Thirteen consecutive monthly readings therefore span 360 normalized days and fit inside the 365-day window. A BLS category has no obsolete individual SKU, so every candidate buy decision was treated as though no better substitute existed. That isolates the numerical state rule, but it does not validate the substitute check used for a real product.
The limitation that governs the result
The test ran on BLS indexes, not retail prices. These are monthly category and manufacturing series. They are smoother and more autocorrelated than the daily, promotion-heavy, stock-sensitive price of a particular CPU, GPU, RAM kit, SSD, motherboard, or power supply. They also collapse differences among sellers and products into a category-level measure.
That proxy weakens the result in both directions. The 60.4% failure rate does not establish that a retail per-SKU rule would fail at the same rate. Retail behavior could make the rule better or worse. Smoother series may preserve direction longer, while individual retail prices may jump, reverse, disappear from stock, or move because a product is being replaced. The test therefore rejects this candidate on the supplied proxy. It does not prove that every possible buy-or-wait rule fails.
The test also does not reproduce retailer availability, shipping, promotions, product substitution, daily timing, or the cost of acting late. Its 1,252 decision points are repeated months within 11 series, not 1,252 independent markets. Broad or weak category proxies remain broad or weak even when every month is counted.
The next relevant test is against the first-party per-SKU retail observation price record after that price record has enough history and coverage. Its rule, thresholds, horizons, error definitions, and release test must be recorded before outcomes are scored. Until then, the BLS result is evidence about a proxy and is labeled as such.
How lookahead was blocked
Each series was sorted by calendar month. For a decision at position \(i\), the state calculation received only the slice from the first observation through observation \(i\), inclusive. The decision timestamp was the timestamp assigned to that current month. The calculation independently discarded any observation later than that timestamp. Future values were not available when the candidate label was chosen.
Only after that output existed did the scorer look up the observation exactly 1, 3, or 6 calendar months later. It used calendar-month ordinals, not the next row in the file. If an exact future month was absent, that signal was not scored at that horizon. Missing months were not interpolated. In the history window, a missing calendar month remained a 60-day or longer gap and reduced coverage.
This separation matters because using a later observation to calculate the earlier percentile or trend would let the rule react to an outcome it was supposed to predict. Even one future value can change the window position, slope, data sufficiency, and resulting signal. A backtest with that leak measures access to future data, not a rule a reader could have used at the time.
There is a narrower boundary to the no-lookahead claim. The files are the BLS history retrieved on July 25, 2026, not an archive of each value as originally released month by month. The code prevents future months from entering earlier decisions, but it does not reconstruct historical release vintages. If BLS revised an older value before this retrieval, the retrieved value is the one tested. A release-vintage backtest would require archived vintages that the files we have do not include.
What counted as wrong
A Wait if flexible signal was contradicted when the exact future BLS index was higher than it was at the decision month. In reader terms, someone following the signal would have lost money by waiting, if the index had represented the price available to that reader.
A Buy if needed signal was contradicted when the exact future index was lower. In reader terms, someone following the signal would have overpaid relative to waiting, under the same proxy assumption.
| Candidate output | 1 month | 3 months | 6 months |
|---|---|---|---|
| Wait if flexible, then index rose | 25 of 51, 49.0% | 29 of 48, 60.4% | 35 of 47, 74.5% |
| Buy if needed, then index fell | 50 of 120, 41.7% | 62 of 118, 52.5% | 61 of 118, 51.7% |
The sample is smaller at longer horizons because signals near the end of a series lack an exact future observation. Those cases were excluded rather than filled or treated as successes. Equal future and current values were not contradictions: wait was wrong only on a strict increase, and buy was wrong only on a strict decrease.
The pre-declared threshold applies specifically to the three-month wait contradiction rate. It is not a combined accuracy score and it is not a threshold for the buy output. The observed rate was 29 of 48, or 60.4%, against a ceiling of 40%. The candidate failed its recorded threshold.
Why the failed result remains published
Changing 75, 25, 0%, or the 40% ceiling after reading the outcomes would answer a different question. Repeatedly adjusting thresholds against the same 1,252 points would turn the test set into training data and make the final rate look more independent than it was. The recorded candidate failed, so its failure remains the result.
Recommendations are switched off on the published site. Re-enabling them requires a new candidate whose thresholds and acceptance test are declared before scoring, followed by a test that clears that threshold without post-result tuning. The first-party retail record is also required before treating the result as evidence about per-SKU buying decisions rather than BLS indexes.
What remains publishable is retrospective: where the current trustworthy offer sits within its own observed history, the direction it has already moved, and the specific price or state condition that would change the displayed conclusion. None of those statements claims to know the next price. Until a pre-declared retail test clears its threshold, the site gives no recommendation.
Where next
More on how this works
- How this worksHow a number gets onto a page here, and what stops one.
- How we would judge a priceThe rule a price would have to pass, and the numbers behind it.
- Where the data comes fromEvery source we use, limit or refuse, and the reason for each.
- Power supply data referencesWhich power supply claim rests on which published document.
- GlossaryWhat each spec and unit measures, and what it leaves out.
- AboutWho publishes this and what it will not do.
- Report an errorTell us a number is wrong, and what we do about it.
- PrivacyWhat we measure and what leaves the site.
- TermsWhat the figures here are and are not.