Skip to content
All library documents

Choosing Features and Regimes for Bitcoin Return Classification

Article Quant Q&A · Author: user31078

Summary

The document considers how to classify Bitcoin’s next-day percentage change into ordered rise, near-flat, and fall categories. The questioner’s initial scheme uses fixed percentage thresholds, but asks whether a given percentage move should be classified differently at different Bitcoin price levels, given the asset’s large historical price increase.

The response recommends treating price level or market regime as predictor information for the model, rather than combining the current price and return into the target label. It also raises whether distinct regimes exist and whether one model can represent the full history. The document offers this as conceptual guidance, not as an evaluated modeling procedure: it presents no comparison of feature choices, validation results, or evidence that price-level conditioning improves forecasts. Any such approach would need testing, and the choice of regimes and target thresholds remains open.

Key ideas

  • A fixed percentage threshold assigns the same class to the same relative move at every price level.
  • Current price or regime can be considered as predictor information.
  • The response cautions against embedding both return and price state in one target label.
  • Whether one model can represent the full Bitcoin history is an unresolved modeling question.

Tags

Full text
# How to properly classify rate of change?


# How to properly classify rate of change?












I am working in a Machine Learning Model for Bitcoin Price.

I am attempting to predict how much the price changes in the next day. I am approaching this as a classification problem instead of regression problem because of better results in initial tests.

So i have created a variable called classification which groups the percentage change next day into values of [-4,4]. I am currently grouping it like this:

```
def percentage_to_classification(x):
    #returns a number y [-4,4] depending on how much it went up/down
    y = 0

    if (x > 0.2):
        y = 4
    elif (0.1 <= x <= 0.2):
        y = 3
    elif (0.05 <= x <= 0.1):
        y = 2
    elif (0.03 <= x <= 0.05):
        y = 1
    elif (-0.03 <= x <= 0.03):
        y = 0
    elif (-0.05 <= x <= -0.03):
        y = -1
    elif (-0.1 <= x <= -0.05):
        y = -2
    elif (-0.2 <= x <= -0.1):
        y = -3
    elif (x < -0.2):
        y = -4

    return y
```

As it can be seen if the percentage rise is greater than 20%, the output is 4 and so on.

Now over a long time frame the price of bitcoin has increased a lot. From 200 dollars to 20k dollars.

I want to treat a 5% rise at 200 dollar differently than a 5% rise at 10k dollar. More accurately while classifying, I want to take into account the current price along with the percentage change. How can i achieve this?

## Answer by Richi Wa (score 1)

https://quant.stackexchange.com/a/37916

If you want to incorporate the fact (is it a fact?) that it is different if BTC rises by 10% at a price of 100 USD per BTC than at 10 000 USD per BTC then you could add this information in a proper way in your model as feature/predictor.

You could model in distinct regimes or add indicators of regimes as predictors.

First thoughts that you could add this to your target in the way:

```
 "% change is x and absolute value/absolute change is y as state K"
```

lead me to the conclusion that this does not make too much sense.

I think adding it to the predictors is the way to go. But think about the general approach: are there different regimes? Can you model the whole history in one model?

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.