BTCCryptocurrencyPython

ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの関係を分析

BTC

どうも、月見(@Suzuka14144156)です。

今回は、ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの関係を分析します。

解決するお悩み
  • ハッシュレートって結局ビットコインの価格に影響しているの?
  • 結局ビットコインの価格に影響のある指数って何なの?

ビットコインと影響のありそうな指数(仮説)

この記事では、以下7つの指標がビットコインの価格と関係があるかを分析することとします。

  • ATRCT:トランザクション確認時間
  • Volume:取引量
  • CPTRA:トランザクションあたりのビットコインのコスト
  • DIFF:ブロック探索難易度
  • HRATE:ハッシュレート
  • MIREV:マイナーの収益 
  • NADDU:使用済のユニークビットコイン アドレスの数 
月見
月見
  • 以下二つの指標はビットコインの価格と連動することが想定されますよね。
  • CPTRA:トランザクションあたりのビットコインのコスト
  • MIREV:マイナーの収益

なぜなら、そもそもビットコインの価格で算出される値だからです。

ハッシュレートとビットコインの価格の関係

一般的には、ビットコインの価格とハッシュレートは比例関係があると言われることもあります。

例えば、以下の記事です。

ハッシュレートとは?ビットコイン価格との関係性も解説|資産形成ゴールドオンライン
ハッシュレートの仕組みやビットコインとの関係性について解説します。見方や調べ方、最近の動きや過去の事例と合わせて、初心者にもわかりやすく説明します。
月見
月見
  • これって本当なの?

と疑うことが大切です。

そこで本当に比例関係があるか調べてみましょう。

分析結果と結論

先に分析結果と結論を述べます。

分析結果

以下二つは、仮説通り、強い正の相関(0.7以上)があることが分かった。

  • CPTRA:トランザクションあたりのビットコインのコスト
  • MIREV:マイナーの収益

以下の4つは、弱い正の相関(0.5以上0.7未満)があることが分かった。

  • Volume:取引量
  • DIFF:ブロック探索難易度
  • HRATE:ハッシュレート 
  • NADDU:使用済のユニークビットコイン アドレスの数 

以下は、相関なし(0.5未満)であることが分かった。

  • ATRCT:トランザクション確認時間

結論

以下4つは、ビットコインの価格を分析する上で注視する必要がパラメートであると判断します。

  • Volume:取引量
  • DIFF:ブロック探索難易度
  • HRATE:ハッシュレート 
  • NADDU:使用済のユニークビットコイン アドレスの数 

以下二つは、ビットコインの価格との因果関係が明確であり、ビットコインの価格が上がると上昇するパラメータであると言える。

つまり、トランザクションあたりのビットコインのコストが高くなるからビットコインの価格が高くなるわけではない。

なので、そこまで注視する必要がないパラメータと言えるだろう。

  • CPTRA:トランザクションあたりのビットコインのコスト
  • MIREV:マイナーの収益

ビットコインの価格とCPTRA(トランザクションあたりのビットコインのコスト)の関係

  • 縦軸:Adj Close(ビットコインの価格)
  • 横軸:CPTRA(トランザクションあたりのビットコインのコスト)
  • ビットコインの価格とCPTRA(トランザクションあたりのビットコインのコスト)には、正の相関があると言える

ビットコインの価格とMIREV(マイナーの収益)の関係

  • 縦軸:Adj Close(ビットコインの価格)
  • 横軸:MIREV(マイナーの収益
  • ビットコインの価格とMIREV(マイナーの収益)には、正の相関があると言える
月見
月見
  • ここまでは想定通り

ビットコインの価格とVolume(取引量)の関係

  • 縦軸:Adj Close(ビットコインの価格)
  • 横軸:Volume(取引量)
  • ビットコインの価格とVolume(取引量)には、弱い正の相関があると言える

ビットコインの価格とDIFF(ブロック探索難易度)の関係

  • 縦軸:Adj Close(ビットコインの価格)
  • 横軸:DIFF(ブロック探索難易度)
  • ビットコインの価格とDIFF(ブロック探索難易度)には、弱い正の相関があると言える

ビットコインの価格とHRATE(ハッシュレート)の関係

  • 縦軸:Adj Close(ビットコインの価格)
  • 横軸:HRATE(ハッシュレート)
  • ビットコインの価格とHRATE(ハッシュレート)には、弱い正の相関があると言える

ビットコインの価格とNADDU(使用済のユニークビットコイン アドレスの数)の関係

  • 縦軸:Adj Close(ビットコインの価格)
  • 横軸:NADDU(使用済のユニークビットコイン アドレスの数
  • ビットコインの価格とNADDU(使用済のユニークビットコイン アドレスの数には、弱い正の相関があると言える

ビットコインの価格とATRCT(トランザクション確認時間)の関係

  • ビットコインの価格とATRCT(トランザクション確認時間)には、相関がないと言える

相関係数

相関係数の結果は、以下です。

今回の目的変数であるAdj Closeとの相関は、以下赤枠を見ます。

月見
月見
  • Adj Closeは、ATRCT(トランザクション確認時間)以外とは、相関があることが分かります。

一応ピアソンの相関係数も見ておきます。

各特性値とピアソンの相関係数は、まとめると以下です。

  • 赤字:強い相関
  • 緑字:弱い相関
  • 青字:相関なし

では、以下にこれらの結果を得るための分析方法の詳細を解説します。

ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの分析方法

プログラミング言語Pythonで分析します。

分析環境

Anacondaをインストールし、必要なライブラリをインストールします。

Anacondaのインストール方法

Anacondaのインストール方法は、以下の記事を参考にしてみてください。

JupyterLabの起動

コマンドプロンプトから、以下のコードを入力ください。

jupyter lab

以下赤枠のアイコンをクリック。

これで起動します。

ライブラリのインストール

主に使用するライブラリ
  • pandas:データ処理
  • pandas-profiling:EDA(探索的データ分析)
  • pandas_data:仮想通貨のデータ取得
  • yfinance:Yahoo Financeからデータを取得

pandas-profilingのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install pandas-profiling

pandas_dataのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install pandas_datareader

yfinanceのインストール

コマンドプロンプトから、以下のコードを入力ください。

pip install yfinance

データ

以下のサイトからダウンロード。

Retail Trading Activity Tracker: Keep track of retail sentiment
Keep your finger not he pulse of retail investor sentiment, and tracking over B USD/day of individual investors trades.
  • 使用データの期間:2018年1月1日~2022年11月16日

約5年分のデータを用います。

ビットコインのチャート形状は、以下です。

githubからのクローン

必要なデータなどは、githubから取得ください。

私の方でアップしておきました。

git clone https://github.com/tsukimitech-blog/btc_anarysis_notebook

ディレクトリ構造

  • anarysisnote_btc.ipynb:メインのコード
  • BCHAIN-ATRCT.csvBCHAIN-CPTRA.csv:データ
  • BCHAIN-DIFF.csv:データ
  • BCHAIN-HRATE.csv:データ
  • BCHAIN-MIREV.csv:データ
  • BCHAIN-NADDU.csv:データ
  • 分析に必要なデータをCSVで用意して同じanarysisnote_btc.ipynbとディレクトリに格納することで、分析できるように作っています
  • もし、データを追加したい場合は、以下のサイトから取得可能です
Retail Trading Activity Tracker: Keep track of retail sentiment
Keep your finger not he pulse of retail investor sentiment, and tracking over B USD/day of individual investors trades.

コード

csvデータの読み込み

データの読み込み

import pandas as pd
import glob 

#データフレームの作成
btc_data = pd.DataFrame()

#CSVの読み込み
for i in glob.glob('*.csv'):
    tmp = pd.read_csv(i, index_col=0)
    #カラム名をファイル名にして余計な文字は消去
    tmp.columns = [i.replace('.csv', '').replace('BCHAIN-', '')] 
    #連結
    btc_data = pd.concat([btc_data, tmp],axis = 1)

btc_data

実行結果は、以下です。

  • 2009年のデータのみが飛んで残っている

後ほどデータの欠損処理をするタイミングで消去するのでいったん保留。

ビットコインの価格を取得

import pandas as pd  
from pandas_datareader import data as pdr 
import datetime
import yfinance as yf

#BTCのチャートを取得
tickers = ['BTC-USD']

#取得開始日を入力
start = "2018-01-01"

#取得終了日を入力
end = datetime.date.today()

#Yahoofinanceから取得するように設定
yf.pdr_override()

#データの取得を実行
crypto_data = pdr.get_data_yahoo(tickers, start, end)
crypto_data

実行結果は以下です。

連結し、欠損値を処理する

btc_data.index = pd.to_datetime(btc_data.index)
crypto_data_con = pd.concat([crypto_data,btc_data],axis=1)
crypto_data_con = crypto_data_con.dropna()
crypto_data_con
  • 欠損値を処理することで、2009年のデータなどを処理する
  • 全データが揃っている行のみを残す処理をする

Open、High、Low、Closeを消す

以下のデータは不要なので、消去します。

  • Open:始値
  • High:高値
  • Low:安値
  • Close:終値
crypto_data_con = crypto_data_con.drop(columns=['Open','High', 'Low', 'Close'])
crypto_data_con
月見
月見
  • 今回は、「Adj Close」のデータを目的変数とします

EDA(探索的データ分析)

 探索的データ分析とは?
  • 探索的データ分析(EDA)は、データ・セットを分析・および調査して主な特性を要約するためのに使用されるもの。

EDAの詳細は、以下の記事を参考にしてみてください。

EDAの時短テクニックとして、pandas_profilingというライブラリがあります。

これを使うことで、だれでも簡単に必要なEDAをわずか1行のコードで実行可能です。

pandas_profilingの詳細は、以下を参考にしてみてください。

import pandas_profiling as pdp
report = pdp.ProfileReport(crypto_data_con)
report

するとこういったレポートが出力されます。

今後の展開

対数収益率を用いた分析

今後は、ビットコインの価格を目的変数に取るのではなく、対数収益率など前日からの差を目的変数として分析する必要があるかも。

ハッシュレートなどの値も前日との差を説明変数にすることで、より明確に説明できる可能性があるかもなので、調査する必要があると言えるでしょう。

より長期間データを用いる

今回は、データが揃っている2018年~のデータを用いました。

2018年より前のデータを用いることができるデータがあれば、それを用いて分析する必要があると思います。

例えば、以下は、Adj Close(ビットコインの価格)とハッシュレートとボリューム(外れ値を除去)したもののペアプロットです。

このペアプロットの表示方法は以下の記事を参考にしてみてください。

相関係数は、以下です。

2015年~2022年のデータを用いた場合の相関係数

  • Volume:0.74
  • HRATE0.75

より強い相関があることが分かります。

なので、短期的(2018~2022)でビットコインの価格とHRATE(ハッシュレート)やVolumeは、相関関係が崩れだしたということが分かります。

Pythonでファイナンスのデータ分析の勉強方法

私は、以下の本で勉強しました。

かなり詳しく書かれており、とてもオススメの本です。

Udemy

Udemyはオンライン口座です。

一度購入すれば、ずっと閲覧できるのでオススメです。

【世界で8万人が受講:Python for Finance】Pythonを使って学ぶ現代ファイナンス理論と実践
ポートフォリオ理論、コーポレートファイナンス、資本資産評価モデル(CAPM)、デリバティブの値決め、モンテカルロシミュレーションといった内容を中心に、Pwcなどで活躍した講師が理論と実践に基づき解説します。

私の記事

私のブログでも解説していますので参考にしてみてください。

まとめ

今回は、ビットコインの価格とハッシュレート、アクティブアドレス、トランザクション時間などの関係を分析しました。

以下二つは、仮説通り、強い正の相関があることが分かった。

  • CPTRA:トランザクションあたりのビットコインのコスト
  • MIREV:マイナーの収益

以下の4つは、弱い正の相関があることが分かった。

  • Volume:取引量
  • DIFF:ブロック探索難易度
  • HRATE:ハッシュレート 
  • NADDU:使用済のユニークビットコイン アドレスの数 

以下は、相関なしであることが分かった。

  • ATRCT:トランザクション確認時間

私のブログではほかにも、仮想通貨の自動トレードの方法などを解説しているのでぜひ参考にしてみてください。

無料で閲覧可能で、コードをコピペして動かすことができます。

コメント

タイトルとURLをコピーしました