How Our CS2 Price Prediction Model Works
A plain-English explanation of the machine learning model behind CS2 Skin Predictor โ what data it uses, how it generates forecasts, and what its limitations are.
Every price forecast on this site is generated by a machine learning model trained on historical CS2 skin trading data. This page explains how that model works, what inputs it uses, how confident you should be in its outputs, and where it's likely to struggle. We think transparency about methodology matters โ especially when people might use these forecasts to make real financial decisions.
The Data
The model is trained exclusively on Steam Community Market data. We collect daily price history for every active weapon skin โ the median sale price and total volume for each day, going back as far as the Steam API provides. This gives us a time series of daily observations for each of the roughly 10,000 skins we track.
We use only Steam data because it's the most reliable source with no lag. Some third-party market APIs exist, but they can carry delays of weeks or reporting inconsistencies that would introduce noise into the training data. Consistent, timely data is more valuable than broader coverage.
Feature Engineering
Raw price and volume numbers aren't fed directly into the model. Instead, we derive a set of features that capture patterns in the data โ things the model can use to understand context. These include lagged prices (what the price was 1, 7, 14, and 30 days ago), rolling averages and standard deviations over 7, 14, and 30 day windows, and momentum indicators measuring percentage change over different lookback periods.
Volume features follow a similar pattern โ rolling averages and a volume trend indicator comparing recent 7-day activity to the 30-day baseline. We also include seasonality features (day of week, month) because CS2 prices follow weekly and annual rhythms. Skin metadata like weapon type, wear grade, and StatTrak status are encoded as additional inputs.
The Model: LightGBM Quantile Regression
We use LightGBM, a gradient boosting algorithm known for handling tabular data efficiently. Rather than predicting a single price point, we use quantile regression โ the model simultaneously predicts three outcomes: a lower bound (25th percentile), a median (50th percentile), and an upper bound (75th percentile). The median is shown as the forecast line; the two bounds form the confidence band.
This approach is more honest than a single point estimate. Instead of saying 'the price will be $1.50', the model says 'there's roughly a 50% chance the price lands between $1.20 and $1.80, with the median expectation around $1.50'. Wider bands reflect more uncertainty; narrower bands reflect more predictable price behaviour.
Four Separate Models
We train independent models for each forecast horizon: 7 days, 30 days, 60 days, and 90 days. The same features are used for each, but they're trained on different targets โ the log return over the respective horizon. Log returns are used rather than raw price changes because they're better behaved statistically and scale more consistently across skins with very different price levels.
The target for classification into Bullish, Bearish, or Neutral is derived from the 50th percentile prediction. A forecasted log return above +5% produces a Bullish signal; below -5% produces Bearish; everything in between is Neutral. These thresholds filter out noise โ small predicted moves are too uncertain to act on.
Accuracy and Backtesting
We backtest the models on held-out historical data across all skins with sufficient price history. Directional accuracy โ whether the model correctly called the direction of the price move โ is the primary metric we report. Our current models achieve 57% directional accuracy at the 7-day horizon, rising to 73% at 90 days.
These numbers are better than a 50/50 coin flip, but they're not close to perfect. In financial markets, even modest predictive edges can be valuable, but they come with real uncertainty. We report these figures prominently because we think it's important users understand the model's actual track record rather than an idealised version of it.
What the Model Doesn't Know
The model has no access to information outside of Steam price and volume history. It doesn't know about upcoming case releases, doesn't read patch notes, can't see what streamers are playing, and has no awareness of real-world events. Any price move driven by information the model hasn't seen in historical patterns will catch it off guard.
Predictions for very sparse skins โ souvenirs, rare knives, skins with only a few sales per month โ are noisier and less reliable. The model needs a reasonable volume of historical observations to find meaningful patterns. When data is thin, confidence bands are wide and signals should be treated with extra scepticism. The forecasts are updated nightly, so they incorporate the most recent trading data available, but they're always a model estimate, not a guarantee.