Поскольку в настоящее время мы живем в эпоху блокчейна и криптовалюты, а также учитывая количество транзакций, которые происходят каждый день и которые способствуют росту каждой криптовалюты. Также известны как цифровые активы, где транзакции происходят в децентрализованных системах. Поскольку все мы знаем, что если бы мы инвестировали в Ethereum с 2015 по 2016 год, мы бы уже стали мультимиллионерами. Блокчейн как технология имеет удивительное будущее, учитывая тот факт, насколько безопасны и дешевы транзакции по сравнению с нашими старыми банковскими стандартами. Теперь, учитывая, что большинство стран и компаний переходят на блокчейн и криптовалюты, здесь я провел анализ роста Ethereum за последние 7 лет, а также выполнил прогнозный анализ временных рядов с использованием LSTM (долгая кратковременная память). ).

Долгосрочная память — это своего рода повторяющаяся нейронная сеть, в которой модель может изучать и запоминать случаи, которые произошли давным-давно, в отличие от традиционной повторяющейся нейронной сети.

Из этой модели вы можете получить представление о том, как выполнять анализ с помощью машинного обучения и глубокого обучения при рассмотрении актива.

Оглавление

  • Постановка задачи
  • Импорт библиотек
  • Импорт данных
  • Выполнить очистку данных
  • Проверка данных и анализ
  • Визуализация данных относительно цены Ethereum по сравнению с годом
  • Визуализация данных относительно цены Ethereum по сравнению с месяцем
  • Визуализация данных об объеме транзакций Ethereum с 2016 по 2022 год.
  • Свечное представление роста Eth с 2016 по 2022 год
  • Изменение процента объема Etherume по месяцам и годам
  • Ежемесячная доходность Эфириума
  • Объем Ethereum, торгуемый в среднем каждый месяц
  • Ethereum возврат инвестиций в день
  • Годовая окупаемость Эфириума
  • Прогноз временных рядов с использованием SARIMAX на 1 год
  • Прогноз временных рядов с использованием LSTM на март 2022 г.
  • Заключение

Постановка задачи

Набор данных содержит записанные данные о стоимости криптовалюты под названием Ethereum. В наборе данных есть часть цифровой валюты из сопутствующих классификаций.

  • Анализ: проведите анализ, чтобы понять рост Ethereum с 2016 года.
  • Прогноз: предскажите его будущий рост.
  • Дата: дата наблюдения.
  • Открытие: цена открытия в данный день.
  • Максимум: самая высокая цена в данный день.
  • Низкая: самая низкая цена в данный день.
  • Цена: цена закрытия в данный день.
  • Объем: объем транзакций в данный день.
  • Изменение %: рентабельность инвестиций в день

Исторические данные, использованные для анализа, относятся к периоду с 01 февраля 2016 года по 9 февраля 2022 года.

Импорт библиотек:

В этом разделе мы импортируем все необходимые библиотеки, необходимые для нашего дальнейшего анализа. Мы пойдем посмотреть на pandas, NumPy, matplotlib, seaborn и многие другие библиотеки.

import pandas as pd
 import numpy as np
 import matplotlib.pyplot as plt
 import seaborn as sns
 import warnings
 warnings.filterwarnings(‘ignore’)
 from statsmodels.tsa.stattools import adfuller
 import statsmodels.api as sm
 from pandas.tseries.offsets import DateOffset
 from sklearn.preprocessing import MinMaxScaler
 import math
 install mplfinance
 from tensorflow.keras.models import Sequential
 from tensorflow.keras.layers import Dense
 from tensorflow.keras.layers import LSTM

Во-первых, давайте просто импортируем набор данных:

df= pd.read_csv(“Eth.csv”)

Во-вторых, давайте продолжим и проверим нулевые значения. В идеале, если есть нулевые значения, нам нужно будет взять среднее, моду или медиану в отношении варианта использования в бизнесе и обратиться к данным. В этом случае, поскольку нулевых значений очень мало, мы можем удалить их, используя приведенную ниже функцию.

df.isnull().sum()
df.dropna(inplace = True)

Теперь давайте изменим тип данных на float со строки, так как тип столбцов по умолчанию — это строка. А также заменить запятые и иностранные символы на пробелы. Мы можем использовать приведенный ниже код для решения этой проблемы:

df[“Price”] = [float(str(i).replace(“,”, “”)) for i in df[“Price”]]
df[“Open”]=[float(str(i).replace(“,”, “”)) for i in df[“Open”]]
df[“High”] = [float(str(i).replace(“,”, “”)) for i in df[“High”]]
df[“Low”] = [float(str(i).replace(“,”, “”)) for i in df[“Low”]]
df[“Change %”] = [float(str(i).replace(“%”, “”)) for i in df[“Change%”]]
df[“Vol.”] = df[“Vol.”].replace(“-”, “383.91”)

Теперь давайте преобразуем столбец даты, который в настоящее время является объектом, в тип даты и времени, используя приведенный ниже код, а также создадим новые столбцы отдельно для лет, месяцев и дней.

df[‘Date’]= pd.to_datetime(df[‘Date’])
df[“year”]= df[‘Date’].dt.year
df[“Month”] = df[‘Date’].dt.month
df[“Day”] = df[“Date”].dt.day

Давайте теперь перейдем к самой захватывающей части этого анализа, а именно к визуальному анализу этого набора данных. Но перед этим сгруппируем данные по дате и цене и просуммируем их значения.

df.groupby([‘Date’])[‘Price’].sum().reset_index()

Как только это будет сделано, давайте продолжим и нанесем наши данные, используя Seaborn для цены по сравнению с годом.

pred = df.groupby([‘Date’])[‘Price’].sum().reset_index()
plt.figure(figsize = (20,8))
ax= sns.lineplot(data=pred, x = “Date”, y=”Price”, color=”dodgerblue”)
ax.patch.set_facecolor(‘black’)
ax = plt.title(‘Eth Price v/s Year’, fontsize=24, loc=’center’, fontweight=’heavy’, pad=32)

После построения данных мы получаем линейный график, показанный выше, из которого мы видим, что рост Ethereum с 2016 по 2022 год был огромным. Курс продолжает расти, и Ethereum почти близок к отметке в 5000 долларов США. Но будет ли?? следите за прогнозом.

Давайте продолжим и посмотрим, какой месяц наиболее подходит для покупки Ethereum, это может быть наиболее полезно для коротких продаж и опционов.

monthly = df.groupby([‘Month’])[‘Price’].sum().reset_index()
plt.figure(figsize = (20,8))
ax = sns.lineplot(data=monthly, x = “Month”, y=”Price”, color = ‘red’)
ax.patch.set_facecolor(‘black’)
ax = plt.title(‘Eth Price v/s Month’, fontsize=24, loc=’center’, fontweight=’heavy’, pad=32)

Как мы видим, цены обычно падают с февраля по апрель, а затем резко растут до декабря с небольшими падениями между ними.

Теперь давайте посмотрим, какой объем Ethereum претерпел транзакций с 2016 по 2022 год.

Volz = df.groupby([‘Date’])[‘Vol.’].sum().reset_index()
plt.figure(figsize = (20,8))
ax = sns.lineplot(data = Volz, x = ‘Date’, y = ‘Vol.’, color = ‘dodgerblue’)
ax.patch.set_facecolor(‘black’)
ax = plt.title(‘Vol v/s Year’, fontsize=24, loc=’center’, fontweight=’heavy’, pad=32)

Из приведенного выше рисунка видно, что с конца 2021 года было совершено огромное количество транзакций.

Теперь давайте построим график роста относительно доходности на основе одной ежедневной короткой продажи.

returns = df.groupby([“Date”])[“Open”,”Price”, “Vol.”, “Change %”].sum().reset_index()
returns[“Vol.”] = np.log(returns[“Vol.”])
plt.figure(figsize=(20,8))
sns.lineplot(data=returns, x=”Date”, y=”Price” , color=”black”, label=”Price”)
sns.lineplot(data=returns, x=”Date”, y=”Change %”, color =”red”, label=”Return”)
plt.title(‘Eth Price v/s Date’)
plt.legend()
plt.show()

Наконец, давайте проверим процент изменения объема по отношению к году и месяцу,

dailyply = sns.lineplot(x=’Year’, y=’Change %’, data=avg_vol, color=’#778899')
dailyply.patch.set_facecolor(‘black’)
dailyply.patch.set_alpha(1.0)
dailyply = plt.xticks([])
dailyply = plt.title(‘Eth Change % v/s Year’, fontsize=12, loc=’center’, fontweight=’heavy’, pad=32)
dailyply = sns.lineplot(x='Month', y='Change %', data=avg_vol, color='#778899')
dailyply.patch.set_facecolor('black')
dailyply.patch.set_alpha(1.0)
dailyply = plt.xticks([])
dailyply = plt.title('Eth Change % v/s Month', fontsize=12, loc='center', fontweight='heavy', pad=32)

Эти графики показывают нам анализ, аналогичный нашим линейным графикам, в первом случае по годам мы можем видеть рост с 2021 года в обоих аспектах.

Объем Ethereum, торгуемый в среднем каждый месяц с 2016 по 2022 год, показан ниже с использованием следующего кода.

ax = sns.barplot(x=’Month’, y=’Vol.’, hue=’Year’, data=avg_vol, palette=[‘#DC143C’,’#D2691E’,’#FF7F50',’#B8860B’,’#FF8C00',’#FF1493',’#778899'])
ax.patch.set_facecolor(‘black’)
ax.patch.set_alpha(1.0)
ax = plt.title(‘Volume of Eth Traded on a average every month ‘, fontsize=12, loc=’center’, fontweight=’heavy’, pad=32)

Из этого гистограммы мы можем собрать так много информации, поскольку мы видим, насколько огромными были объемы с 2021 года (розовый).

Теперь давайте посмотрим на максимальную отдачу от инвестиций с 2016 года,

ax = sns.barplot(x=’Month’, y=’ROI’, hue=’Year’, data=monthly, palette=[‘#DC143C’,’#D2691E’,’#FF7F50',’#B8860B’,’#FF8C00',’#FF1493',’#778899'])
ax.patch.set_facecolor(‘black’)
ax.patch.set_alpha(1.0)
ax = plt.title(‘Eth Monthly Return of Investment’, fontsize=12, loc=’center’, fontweight=’heavy’, pad=32)

Наконец, давайте посмотрим на годовой возврат инвестиций, используя приведенный ниже код:

ax = sns.barplot(x=yearly.index, y=yearly.values,palette=['#DC143C','#D2691E','#FF7F50','#B8860B','#FF8C00','#FF1493','#778899'])
ax.patch.set_facecolor('black')
ax.patch.set_alpha(1.0)
ax = plt.title('Eth Yearly ROI', fontsize=12, loc='center', fontweight='heavy', pad=32)

Мы видим, что в 2020 и 2021 годах рост был огромным, но в 2022 году падение было немного резким.

Теперь давайте выполним анализ временных рядов с использованием SARIMAX и LSTM с помощью приведенного ниже кода.

test_result=adfuller(df4[‘High’])
def adfuller_test(sales):
 result=adfuller(sales)
 labels = [‘ADF Test Statistic’,’p-value’,’#Lags Used’,’Number of Observations Used’]
 for value,label in zip(result,labels):
 print(label+’ : ‘+str(value) )
 if result[1] <= 0.05:
 print(“strong evidence against the null hypothesis(Ho), reject the null hypothesis. Data has no unit root and is stationary”)
 else:
 print(“weak evidence against null hypothesis, time series has a unit root, indicating it is non-stationary “)
adfuller_test(df4[‘High’])
ADF Test Statistic : -0.5323994428988927
p-value : 0.8855373956176518
#Lags Used : 23
Number of Observations Used : 2139
weak evidence against null hypothesis, time series has a unit root, indicating it is non-stationary
df4[‘First_year_Difference’]=df4[‘High’]-df4[‘High’].shift(12)
import statsmodels.api as sm
model=sm.tsa.statespace.SARIMAX(df4[‘High’],order=(6, 2, 3),seasonal_order=(1, 1, 1, 7))
results=model.fit(disp=0)
print(results.summary())
from pandas.tseries.offsets import DateOffset
future_dates=[df4.index[-1]+ DateOffset(months=x)for x in range(0,12)]
future_datest_df=pd.DataFrame(index=future_dates[1:],columns=df4.columns)
future_df=pd.concat([df4,future_datest_df])
future_df[‘forecast’] = results.predict(start = 2163, end = 3000, dynamic= False)
future_df[[‘High’, ‘forecast’]].plot(figsize=(10, 8))

После того, как приведенный выше код будет выполнен.

Мы видим прогнозируемый рост вверх до 2023 года, обратите внимание, что могут быть падения, которые не показаны на этом графике.

Теперь, наконец, давайте посмотрим на рост с использованием LSTM в течение следующих 30 дней, используя приведенный ниже код.

train_predict=model.predict(X_train)
test_predict=model.predict(X_test)
#converting into list
temp_input=list(x_input)
temp_input=temp_input[0].tolist()
# demonstrate prediction for next 10 days
from numpy import array
lst_output=[]
n_steps=100
i=0
while(i<0):
 
 if(len(temp_input)>100):
 #print(temp_input)
 x_input=np.array(temp_input[1:])
 print(“{} day input {}”.format(i,x_input))
 x_input=x_input.reshape(1,-1)
 x_input = x_input.reshape((1, n_steps, 1))
 #print(x_input)
 yhat = model.predict(x_input, verbose=0)
 print(“{} day output {}”.format(i,yhat))
 temp_input.extend(yhat[0].tolist())
 temp_input=temp_input[1:]
 #print(temp_input)
 lst_output.extend(yhat.tolist())
 i=i+1
 else:
 x_input = x_input.reshape((1, n_steps,1))
 yhat = model.predict(x_input, verbose=0)
 print(yhat[0])
 temp_input.extend(yhat[0].tolist())
 print(len(temp_input))
 lst_output.extend(yhat.tolist())
 i=i+1
print(lst_output)
plt.plot(day_new,scaler.inverse_transform(df1[2063:]))
plt.plot(day_pred,scaler.inverse_transform(lst_output))

После выполнения масштабирования данных, поскольку мы знаем, что LSTM принимает масштабированные данные в формате 3d, после чего данные были разделены на поезд и тест, и предсказанные данные были нанесены на график с данными тестирования, и был построен график ниже.

Как мы видим, большой разницы нет, и прогнозируемые данные (оранжевый и зеленый) довольно точны. График был построен с использованием приведенного ниже кода.

look_back=100
trainPredictPlot = numpy.empty_like(df1)
trainPredictPlot[:, :] = np.nan
trainPredictPlot[look_back:len(train_predict)+look_back, :] = train_predict
testPredictPlot = numpy.empty_like(df1)
testPredictPlot[:, :] = numpy.nan
testPredictPlot[len(train_predict)+(look_back*2)+1:len(df1)-1, :] = test_predict
plt.plot(scaler.inverse_transform(df1))
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
plt.show()

И, наконец, анализ на следующие 30 дней:

df3=df1.tolist()
df3.extend(lst_output)
plt.plot(df3[2000:])

df3=scaler.inverse_transform(df3).tolist()
plt.plot(df3)

Из этого мы можем сделать вывод, что рост Ethereum был удивительным с 2016 года, но мы можем увидеть падение еще на несколько недель, после чего Eth взлетит до 5000 долларов США.

Весь приведенный выше анализ предназначен исключительно для образовательных целей, поскольку криптовалюты очень волатильны и подвержены рыночному риску.

Спасибо за чтение,

Джошуа Нишант А