Sii Polska

SII UKRAINE

SII SWEDEN

  • Szkolenia
  • Kariera
Dołącz do nas Kontakt
Wstecz

Sii Polska

SII UKRAINE

SII SWEDEN

Wstecz

25.10.2024

Techniczne prognozowanie kursów kryptowalut z użyciem modeli szeregów czasowych

25.10.2024

Techniczne prognozowanie kursów kryptowalut z użyciem modeli szeregów czasowych

Prognozowanie kursów kryptowalut, takich jak Bitcoin (BTC), Ethereum (ETH), wymaga zaawansowanych narzędzi analitycznych. Ze względu na zmienność i specyficzne właściwości rynku kryptowalut, modele szeregów czasowych stanowią jedno z najbardziej efektywnych rozwiązań do analizy trendów oraz prognozowania przyszłych wartości. Modele takie jak ARIMA, LSTM oraz Ogólny Model Addytywny (GAM) pozwalają na dokładne przewidywanie na podstawie danych historycznych.

W artykule przedstawię różne modele szeregów czasowych i zaprezentuję prostą aplikację, która na przykładzie jednego z nich pokaże, jak działają w praktyce. Na koniec wyciągnę kluczowe wnioski.

Modele szeregów czasowych w prognozowaniu kryptowalut

Szeregi czasowe to zbiory danych uporządkowane chronologicznie, które pozwalają na przewidywanie przyszłych zmian na podstawie wcześniejszych wartości. W kontekście kryptowalut analiza szeregów czasowych umożliwia wychwytywanie cyklicznych fluktuacji oraz zmian długoterminowych, co jest kluczowe na tak dynamicznych rynkach.

W analizie kursów kryptowalut szczególne znaczenie mają modele zależności czasowej, bazujące na analizie zależności między przeszłymi i aktualnymi wartościami.

Rodzaje modeli

Do najpopularniejszych modeli należą:

  • ARIMA (Autoregressive Integrated Moving Average) – model stosowany przy danych stacjonarnych, które nie wykazują silnych trendów wzrostowych ani sezonowości. W przypadku niestacjonarnych trendów w danych konieczne jest ich odpowiednie przekształcenie.
  • SARIMA – wersja ARIMA uwzględniająca sezonowość, co sprawdza się w analizie kryptowalut, gdzie sezonowe wahania kursów mogą być związane z wydarzeniami rynkowymi.
  • LSTM (Long Short-Term Memory) – rekurencyjna sieć neuronowa doskonale radząca sobie z danymi niestacjonarnymi i dużymi wahaniami kursów. LSTM, dzięki pamięci długoterminowej, może uchwycić złożone zależności w danych, co jest szczególnie użyteczne przy kryptowalutach, gdzie kursy mogą zmieniać się gwałtownie.

Czym jest GAM?

Ogólny model addytywny (GAM) wykorzystuje ogólne trendy do prognozowania, zamiast polegać na korelacji między wartościami z podobnych znaczników czasu. Zasada działania GAM jest podobna do modelu regresji, jednak nie używa pojedynczego predyktora do przewidywania wyniku, a w zamian GAM opiera się na sumie funkcji gładkich. Funkcje gładkie obejmują komponenty trendu, sezonowości, świąteczne i inne.

GAM umożliwia izolację pojedynczej funkcji i ocenę jej wpływu na prognozy, co czyni ten model bardziej interpretowalnym. Przykładem GAM jest FbProphet, potężny pakiet do analizy szeregów czasowych stworzony przez zespół Core Data Science w Facebooku. Prophet jest prostym i łatwym w użyciu narzędziem do analizy szeregów czasowych i prognozowania na dużą skalę.

Kilka słów o Prophet

Do kluczowych cech modelu Prophet należą:

  • Wykorzystanie modelu addytywnego, który dostosowuje nieliniowe trendy do sezonowości rocznej, tygodniowej, dziennej oraz efektów świątecznych.
  • Silne efekty sezonowe – najlepiej sprawdza się w szeregach czasowych, które mają wyraźne efekty sezonowe i dostęp do wielu sezonów danych historycznych.
  • Odporność na brakujące dane – model jest odporny na brakujące dane oraz zmiany trendu, a także dobrze radzi sobie z wartościami odstającymi.
  • Prosta dostosowalność – analitycy bez doświadczenia w zakresie analizy szeregów czasowych mogą dostosować kilka interpretowalnych parametrów, co pozwala na uzyskanie dobrego modelu prognostycznego.

Zespół analityków danych w Facebooku odkrył, że łącząc automatyczne prognozowanie z prognozami analityków w pętli dla specyficznych przypadków, możliwe jest objęcie szerokiego zakresu przypadków użycia w biznesie.

Prognozowanie w modelu Prophet

Poniższy diagram ilustruje proces prognozowania wykorzystywany w modelu Prophet.

Proces prognozowania wykorzystywany w modelu Prophet
Ryc. 1 Proces prognozowania wykorzystywany w modelu Prophet

Prophet wykorzystuje rozkładalny model szeregów czasowych składający się z trzech głównych komponentów:

  • trendu,
  • sezonowości,
  • efektów świątecznych.

Równanie modelu ma postać:

y(t)=g(t)+s(t)+h(t)+e(t)

  • g(t) – funkcja trendu, która modeluje zmiany nieokresowe. Może mieć charakter liniowy lub logistyczny.
  • s(t) – oznacza sezonowe zmiany, takie jak tygodniowe, miesięczne i roczne. Roczny składnik sezonowy jest modelowany za pomocą serii Fouriera, natomiast tygodniowy składnik sezonowy za pomocą zmiennych pozorowanych.
  • h(t) – funkcja reprezentująca wpływ świąt, które występują w nieregularnych harmonogramach (np. n ≥ 1)
  • e(t) – składnik reprezentujący zmiany błędów, które nie są uwzględnione w modelu.
Prognoza cen zamknięcia (bez różnic – niestacjonarna) – opracowanie własne
Ryc. 2 Prognoza cen zamknięcia (bez różnic – niestacjonarna) – opracowanie własne
Prognoza cen zamknięcia z różnicami (stacjonarna) – opracowanie własne
Ryc. 3 Prognoza cen zamknięcia z różnicami (stacjonarna) – opracowanie własne

Ostatnia sekcja bez czarnych kropek przedstawia prognozę testu. Widać, że oba elementy znacznie się rozchodzą pod koniec analizy, co wskazuje na słabość modelu. Nawet stacjonarne szeregi czasowe wydają się bardzo płaskie.

Jednym z powodów tego stanu rzeczy może być to, że różnice obliczane codziennie usunęły wszystkie tygodniowe, miesięczne i sezonowe trendy w danych. Ponadto, korzystanie jedynie z miesięcznych danych może nie dostarczać wystarczającej ilości informacji, aby model FBProphet skutecznie przeprowadzał analizy.

Przedstawienie fragmentu kodu aplikacji umożliwiającej przewidywanie kursu

Kod tworzy aplikację w Streamlit, która umożliwia użytkownikowi prognozowanie kursów kryptowalut. Importuje niezbędne biblioteki, takie jak yfinance, do pobierania danych finansowych oraz fbprophet do analizy szeregów czasowych. Ustala datę początkową analizy oraz aktualną datę. Następnie wyświetla nagłówek aplikacji oraz pozwala użytkownikowi wybrać jedną z trzech kryptowalut (ETH, DOGE, BTC) do prognozowania. Użytkownik może także określić liczbę lat, na jakie chce prognozować kurs, przy użyciu suwaka, a program oblicza całkowitą liczbę dni dla wybranego okresu.

import streamlit as st
from datetime import date
import yfinance as yf
from fbprophet import Prophet
from fbprophet.plot import plot_plotly
from plotly import graph_objs as go

START = "2015-01-01"
TODAY = date.today().strftime("%Y-%m-%d")
st.title('Aplikacja prognozująca kurs')
stocks = ('ETH-USD', 'DOGE-USD', 'BTC-USD')
selected_stock = st.selectbox('Wybierz kurs do przewidzenia:', stocks)
n_years = st.slider('Wybierz ilość lat do przewidzenia:', 1, 4)
period = n_years * 365

Aplikacja ładuje dane historyczne dla wybranej kryptowaluty z Yahoo Finance. Funkcja load_data(ticker) używa dekoratora @st.cache, co pozwala na przechowywanie danych w pamięci podręcznej, przyspieszając ładowanie. Po załadowaniu danych, kod informuje użytkownika o stanie ładowania i wyświetla dane w formie tabeli.

Funkcja plot_raw_data() generuje wykres, ilustrując dane otwarcia i zamknięcia kryptowaluty. Używa Plotly do stworzenia figury, a następnie aktualizuje tytuł wykresu i dodaje suwak do osi x. Ostatecznie kod przygotowuje dane do prognozowania, tworząc zbiór df_train, który zawiera kolumny z datą i ceną zamknięcia, a następnie zmienia nazwy tych kolumn na wymagane przez model Prophet.

@st.cache
def load_data(ticker):
    data = yf.download(ticker, START, TODAY)
    data.reset_index(inplace=True)
    return data

data_load_state = st.text('Ładowanie danych...')
data = load_data(selected_stock)
data_load_state.text('Ładowanie danych zakończone!')
st.subheader('Pobrane dane')
st.write(data.tail())

# Plot raw data
def plot_raw_data():
    fig = go.Figure()
    fig.add_trace(go.Scatter(x=data['Date'], y=data['Open'], name="stock_open"))
    fig.add_trace(go.Scatter(x=data['Date'], y=data['Close'], name="stock_close"))
    fig.layout.update(title_text='Aktualne dane', xaxis_rangeslider_visible=True)
    st.plotly_chart(fig)

plot_raw_data()

# Predict forecast with Prophet
df_train = data[['Date', 'Close']]
df_train = df_train.rename(columns={"Date": "ds", "Close": "y"})

Prophet jest trenowany na przygotowanych danych. Po załadowaniu danych do df_train, aplikacja tworzy instancję modelu Prophet, a następnie dopasowuje model do danych za pomocą m.fit(df_train).

Następnie aplikacja generuje ramkę danych dla przyszłych prognoz, korzystając z metody make_future_dataframe(periods=period), co umożliwia przewidywanie wartości na wybrany okres. Wyniki prognozy są następnie obliczane i przechowywane w zmiennej forecast za pomocą m.predict(future).

Aplikacja prezentuje przewidywane kursy oraz odpowiedni komunikat w zależności od liczby lat, które użytkownik wybrał. Używa funkcji st.write() do wyświetlenia końcowych prognoz oraz wykresu przy użyciu plot_plotly, który wizualizuje prognozy w formacie Plotly. Dodatkowo, prezentowane są komponenty prognozy, takie jak wpływ trendów i sezonowości.

m = Prophet()
m.fit(df_train)
future = m.make_future_dataframe(periods=period)
forecast = m.predict(future)

# Show and plot forecast
st.subheader('Przepowiedziany kurs')
st.write(forecast.tail())

if n_years == 1:
    st.write(f'Przepowiednia kursu na {n_years} rok')
else:
    st.write(f'Przepowiednia kursu na {n_years} lat')

figl = plot_plotly(m, forecast)
st.plotly_chart(figl)
st.write("Elementy przewidywania kursu")
fig2 = m.plot_components(forecast)
st.write(fig2)

Działanie aplikacji

Uwaga! Aby uzyskać wnioski, celowo ograniczyłem dane modelu do historycznych wartości, co umożliwia przeprowadzenie analizy.

Aplikacja prognozująca kurs
Ryc. 4 Aplikacja prognozująca kurs

Powyżej znajduje się interfejs aplikacji, w którym użytkownik ma możliwość wyboru jednej z kryptowalut oraz określenia okresu czasowego, dla którego mają zostać wygenerowane dane. Aplikacja pobiera aktualne dane z ostatnich kilku dni, prezentując na przykład najniższą i najwyższą cenę w tych okresach dla każdego z dni.

Cena kryptowalut w ujęciu czasowym
Ryc. 5 Cena kryptowalut w ujęciu czasowym
Przepowiednia kursu
Ryc. 6 Przepowiednia kursu
Wykres długoterminowy dla ETH
Ryc. 7 Wykres długoterminowy dla ETH

Przykładowo wygenerowałem wykres długoterminowy dla jednej z kryptowalut (ETH). Czarna przerywana linia ilustruje dane pobrane bezpośrednio z giełdy. Obszar prawdopodobnego kursu waluty na dany okres został oznaczony jasno niebieską falą. Granatowa linia przedstawia najbardziej prawdopodobne prognozy notowań danej kryptowaluty.

oferty pracy

Podsumowanie

Wykorzystanie nowoczesnych narzędzi analitycznych w kontekście rynku kryptowalut można postrzegać jako interesujący aspekt technologiczny przydatny głównie w prognozach krótkoterminowych. Należy jednak pamiętać, że rynek ten charakteryzuje się niezwykłą dynamiką i nieprzewidywalnością, co ogranicza możliwości skutecznego prognozowania przyszłych ruchów cenowych.

Istotnym czynnikiem wpływającym na zmiany cen kryptowalut są tzw. „wieloryby” – podmioty posiadające znaczące ilości danej waluty. Ich decyzje dotyczące zakupu lub sprzedaży mogą w sposób drastyczny manipulować rynkiem, powodując gwałtowne zmiany wartości. Ponadto, zjawiska takie jak promowanie określonych kryptowalut przez znane osoby, jak w przypadku Elona Muska i Dogecoina, mają ogromny wpływ na sentyment inwestorów oraz dynamikę rynku.

W związku z powyższym, mimo że narzędzia analityczne mogą dostarczać cennych informacji, inwestorzy powinni podejść do nich z ostrożnością i świadomością, że wiele czynników zewnętrznych, w tym emocje rynku i nieprzewidywalne wydarzenia, mogą znacząco wpłynąć na wyniki inwestycyjne.

Źródła

  1. Forecasting at scale
  2. Prophet, Python API, Quick Start
  3. Aktualny kurs kryptowalut


***

Jeśli interesują Cię kryptowaluty, zajrzyj również do artykułu naszego specjalisty: Cyfrowe waluty a rozwój technologii Blockchain

4.9/5
Ocena
4.9/5
Avatar

O autorze

Jakub Kawalerski

Ukończył studia inżynierskie na kierunku informatyka stosowana, a swoją karierę rozpoczął w maju 2024 roku, podejmując pracę na stanowisku IT Support Specialist w Sii. W najbliższej przyszłości planuje rozwijać się jako programista. Jego zainteresowania obejmują sprzęt komputerowy, grafikę 3D, AI oraz piłkę nożną. Łączy pasję do technologii z chęcią ciągłego doskonalenia swoich umiejętności, co motywuje go do odkrywania nowych możliwości w świecie IT i realizowania coraz bardziej ambitnych projektów

Wszystkie artykuły autora

Zostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Może Cię również zainteresować

Pokaż wyniki
Dołącz do nas Kontakt

This content is available only in one language version.
You will be redirected to home page.

Are you sure you want to leave this page?