|
--- |
|
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. |
|
|
|
``` |