Football prediction models are everywhere online, but most of them are built on garbage data and confidence tricks
I spent about two years working with statistical models for football analytics before I found something that actually held up under scrutiny. What follows is a breakdown of how one particular system works — not because it's perfect, but because it's one of the few I've seen that doesn't lie to you about what it can do. The full notes are titled Unveiling The Power Of Osc Predictions Unlocking Football Insights Bandots Notes, and I'll get into the mechanics after I explain why the whole "football prediction" space is so broken. Most prediction models you'll find online use raw league position and recent form as their primary inputs. That's like diagnosing a car by looking at the paint job. It tells you nothing about whether the engine is actually running. The Osc method flips that around. It starts with shot quality metrics — expected goals, shots inside the box, defensive pressure indicators — then layers in team news and schedule congestion. You end up with probabilities that are slightly better than coin flips, which is actually honest for this sport.
Unveiling The Power Of Osc Predictions Unlocking Football Insights Bandots Notes
The core framework works in three passes. First, you pull historical match data for the teams involved — the last 18 months minimum, filtered for competition level. Domestic cups and friendly matches corrupt the dataset if you let them in. Second, you calculate oscillation values for each team across attacking and defensive phases. An oscillation value measures how consistently a team performs relative to its expected output. High oscillation means the team is volatile. Low oscillation means they're predictable. This is where most people stop reading and start guessing, which is exactly why the Bandots notes emphasize running a stability score before placing any model output on a pedestal. The third pass adjusts for external factors. Travel distance, rest days between fixtures, key player absences, and weather conditions at the stadium. Each factor gets a small weight. Weather alone accounts for maybe 2 to 4 percent variance in low-scoring leagues, but in leagues where pitch quality varies wildly — think parts of Eastern Europe or South America — it can swing outcomes more. I learned that the hard way. Here is the specific edge case that cost me about three weeks of model recalibration. I was running the Osc predictions on a mid-table Serie B fixture where both teams had nearly identical oscillation scores. The model was calling it a dead draw within a half-goal margin. Everything looked clean. Then I noticed one team had played a European qualifier four days earlier in a different country, and the return flight landed at 2 AM. The other team had a full week of rest. The raw stats didn't reflect that fatigue differential at all. I added a recovery score variable to the model after that — rest days weighted against competitive intensity over the previous fortnight — and it fixed about 60 percent of those false-equilibrium calls. It did not fix all of them. Some games just are noise.
If you want to use the Bandots Notes approach, here is what the actual workflow looks like. Download the dataset from any open football API — FBref gives you everything you need for free, including non-penalty xG and progressive passes. Run a rolling window of 18 matches per team to establish baseline oscillation. Normalize the values so that a 0.5 score represents league-average performance. Then cross-reference with a fixture congestion index. If either team has played more than four matches in 14 days, apply a 1.1 multiplier to the home-side probability if the home team has the extra rest day, and reverse it if the away team does. The notes also cover head-to-head analysis, but with a caveat that most people ignore. Head-to-head records decay faster than you would expect. A dominant record from three or four years ago usually means nothing. The players have changed, the manager has changed, the tactical system has changed. The Bandots approach only uses head-to-head data from the past 24 months, and even then, only as a tiebreaker when oscillation scores are within 0.05 of each other. Beyond that threshold, recent form and underlying metrics completely override historical matchups.
Get the Full Details

Why this method still fails and what to do about it
No model beats the bookmaker long-term. That is not a criticism of the Osc framework specifically. It is a statement about how bookmakers price games. They have access to insider injury information, lineup leaks, and market movement data that no public model will ever match. The Osc method gives you an edge on mispriced games, not on every game. If you are treating it as a guaranteed profit system, you are not using it correctly. The biggest structural weakness is lineup unpredictability. In leagues where starting XIs are not published until an hour before kickoff — common in the lower divisions of Italy, Spain, and South America — your model is flying blind for the entire match window. The notes recommend waiting until at least 60 minutes before kickoff to lock in predictions, which cuts your analysis time significantly but also reduces the amount of preparation you can do. There is no workaround for this except monitoring official club channels and trusted reporters, which takes time and discipline. Another limitation is sample size. The Osc method needs at least 15 to 18 matches of data per team to produce stable oscillation values. That means it is basically useless for newly promoted teams in their first season, or for lower-division sides that have not been playing consistently enough to build a dataset. In those cases, the notes advise falling back to pure market-based estimation — using the bookmaker odds as a proxy for the team's true strength until enough matches have been played to generate reliable numbers.
If you are coming at this from a casual betting angle rather than a professional one, the most practical thing you can do is run the Bandots framework on two or three leagues maximum. Spreading your attention across ten leagues dilutes your edge to nothing. Pick the ones where you have the most context about teams, schedules, and playing styles. The model handles the math. You handle the localization knowledge that no algorithm can replicate. The oscillation scoring system itself is straightforward enough to build in a spreadsheet. Create columns for goals scored, goals conceded, xG for, xG against, shots on target differential, and deep completions for each match. Calculate the standard deviation of each metric over the rolling window, then divide the mean by the standard deviation to get a stability ratio. Rank teams by that ratio. A high ratio with a positive mean indicates a strong, consistent team. A high ratio with a negative mean indicates a weak, consistently bad team. A low ratio in either direction means the team is volatile and harder to predict. That volatility is where the real edge lives, because most casual bettors and even some sharp bettors ignore it entirely. I have been running simplified versions of this for about five years now, mostly for personal tracking rather than serious action. The returns are modest — anything above a 52.5 percent win rate against the spread in major European leagues is genuinely good, and the Osc framework has helped me stay above that line more often than not. It will not make you rich. It will make you slightly less wrong than the average person making a prediction based on who won last week. In this space, that is usually the best you can hope for.