bittensor en license:mit region:us
---
license: mit
language:
- en
tags:
- bittensor
---
```text
---
Copyright (c) 2023 Taoshi Inc

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
---
```

# Background

```text
The models provided here were created using open source modeling techniques 
provided in https://github.com/taoshidev/time-series-prediction-subnet (TSPS). 
They were achieved using the runnable/miner_training.py, and tested against 
existing models and dummy models in runnable/miner_testing.py.
```

# Build Strategy

```text
This section outlines the strategy used to build the models.
```

## Understanding Dataset Used
```text
The dataset used to build the models can be generated using the 
runnable/generate_historical_data.py. A lookback period between June 2022 and 
July 2023 on the 5m interval was used to train the model. Through analysis, the 
reason this dataset was used is because historical data beyond June 2022 provides 
strongly trending price movement or data movement that is from a period where 
Bitcoin's market cap was too small to be relevant to where Bitcoin is now.

Therefore, using more recent data was used which correlates to the current market 
cap and macroeconomic conditions where its uncertain we'll continue to get highly 
trending Bitcoin data.

Testing data was used between June 2023 and Nov 2023 to determine performance of 
the models. This was tested using the runnable/miner_testing.py file with a 
separately generated test dataset from runnable/generate_historical_data.py.
```

## Understanding Model Creation
```text
As of now, the TSPS infrastructure only provides close, high, low, and volume. It 
also provides financial indicators such as RSI, MACD, and Bollinger Bands but they 
were not used for the purposes of training these models.

The models were derived using a variety of windows and iterations through the June 
2022 to June 2023 dataset. The strategy to derive the model was the following:

base_mining_model = BaseMiningModel(len(prep_dataset.T)) \
                            .set_neurons([[1024, 0]]) \
                            .set_window_size(100) \
                            .set_learning_rate(0.0000001) \
                            .set_batch_size(500) \
                            .set_model_dir(f'mining_models/model1.h5')
                        base_mining_model.train(prep_dataset, epochs=25)

where an LSTM model was created by using a few or no stacked layers. Most of the 
v4 models are actually not stacked as they performed better not being stacked for 
the most part. This could very likely change as more feature inputs are added (this 
is being worked on as part of the open source infra in TSPS). The window size of 
100 helped best predict the outcome, derived in mining_objects/base_mining_model.py
```

## Understanding Training Decisions
```text
Training the model used the previous 601 rows of data as an input. This is because 
500 rows were used to batch, and we are looking to predict 100 rows into the future 
(the challenge presented in the Time Series Prediction Subnet). Measures were taken 
to ensure all data was trained on in the training data.

Each set of 601 rows was trained on 25 times, inside another loop which iterated on 
the entirety of the dataset from 6/22 to 6/23 50 times. This provided the model the 
ability to get granular with details yet not overfit to any single set of rows at 
once. Therefore, a multi-layered looping infrastructure was used to derive the models.

for x in range(50):
    for i in range(25):
        train_model()
```

## Strategy to Predict
```text
The strategy to predict 100 closes of data into the future was to use a 1 step 
methodology of predicting 1 step at 100 intervals into the future and connect the 
information by generating a line from the last close to the prediction 100 closes 
into the future. By doing so, the model could learn to predict a single step rather 
than all 100 where loss could continue to increase with each misstep.
```

# Model V5
```text
Here's the text spaced out for readability in a README file:

Recommendations on how to perform better than V4 and what Model V5 will look like 
are outlined below:

1. Concentrate on more difficult moves
2. Get more granular data (1m)
3. Get more data sources
4. Use more predicted steps

-- Concentrate on more difficult moves

The Time Series Prediction Subnet will reward models that are capable of predicting 
more "difficult" movements in the market more than those that are less difficult. 
Therefore, taking a strategy to train your model on larger movements or bigger 
magnitude movements would be a good consideration. Some additional details on how 
difficulty is calculated will be released soon but it is a combination of the 
magnitude of the movement with the std dev of the movement in the predicted interval.

-- Get more granular data (1m)

With these larger magnitude movements, a strategy to get more granular with the data 
would be recommended. Using 1m data to train rather than 5m would help the models 
better predict information.

-- Get more data sources

Beyond using financial market indicators like RSI, MACD, and Bollinger Bands, the 
TSPS open source infra will gather information for miners to help train.

The TSPS infrastructure will be adding data scrapers and using those data scrapers 
to automatically gather information for you. The following pieces of information will 
be gathered & accessible through the open source infra:

- Bitcoin open interest
- Bitcoin OHLCV data
- Bitcoin funding rate
- DXY OHLCV data
- Gold OHLCV data
- S&P 500 OHLCV data
- Bitcoin dominance
- Historical news data (sentiment analysis)

Using this information will provide models with information they can use to better 
predict prices as markets correlate in movement and Bitcoin responds to other markets.

-- Use more predicted steps

Rather than only predicting a single step at the 100th predicted close in the future, 
predict more steps. This can be achieved by training multiple models, for example, 
10 models each at 10 closes into the future (10, 20, 30, 40, 50, 60, 70, 80, 90, 100), 
or by using a multi-step model with 10 steps. Both will achieve more granularity when 
it comes to predictions and therefore can achieve a much greater RMSE score.

```