Analysis of the mean and median value of transactions on 5 Blockchains

Comparing the daily mean and median value of on-chain transactions gives an indication of the extent of organic blockchain use. Comparing the mean-median ratio (MMR) across different Bitcoin forks shows that Bitcoin (BTC) is the least influenced by “whales”.

bitcoin
By John Mathews
Category: Data
Sep 02 2019

This analysis was prepared for Coin Metrics as part of their recruitment process. It is a short demonstration of my thought process. The additional steps required to develop this into a useful analysis are also discussed.

CoinMetrics Case Study

Objective - to evaluate skills and abilities in multiple ways:

  1. Importing data
  2. Wrangling data
  3. Exploring data
  4. Analysis
  5. Modeling
  6. Communicating results

Provide:

  1. A written explanation of how to approach the problem
  2. Present the beginning phases of implementation using coin metrics data

Of the four options made available in the case study, option 3 was chosen

Advocating for CoinMetric’s data

Produce quality research that is of value to potential clients (doesn’t have to be complete) with a particular focus on network data

Initial ideas

My first rough ideas were:

  1. Compare different Bitcoin based chains, (BTC, BCH, LTC, BSV) to test the influence of whales and compare this to their respective (evolving) claims to be a store of value (SoV) and/or alternative to cash.

  2. Develop and expand some of the research by Willy Woo. I find his research to be outstanding. In particular I think the following metrics merit further investigation:

    1. days destroyed
    2. hodl waves
    3. thermo cap
    4. average cap
  3. Tracking the number of twitter followers of various crypto-twitter thought leaders and celebrities to test the hypothesis that “an increase in follower numbers shows that new retail investors are entering crypto-markets, and an increase in price is expected soon”

    Thought leaders / crypto celebrities could be further grouped by what types of coins they speak about most - smart contracts, DeFi, privacy coins, etc.

    Weibo could be analysed as well as Twitter to understand Chinese markets, Korean twitter could be analysed for the Korean retail market,etc.

  4. I have an existing side project which has the goal of using a recurrent neural net using an LSTM architecture to predict BTC price movements. The app (model, stored data, data pipeline, visualization of results) will run autonomously on Google Cloud Platform. Candle data is consumed from CoinAPI.io and stored in BigQuery.

    Technical indicators will be calculated and used as additional factors to the model. Sentiment analysis from news outlets (Bloomberg, FT) would be added later.

    The model would be written using TensorFlow, and the BigQuery tables names would use BQ’s date format capabilites. This would make the project faster and cheaper.

Idea 1 seemed like a sensible option. Ideas 3 and 4 are interesting and worth investigating, but not possible within the scope of this exercise:

Testing the influence of whales

and “normal users” on BTC and 4 BTC forks, and discussing results in the context of each chain’s claimed technical advantages and use cases as e.g. a store of value or alternative to cash

This will be achieved by comparing daily mean USD transaction value to daily median USD transaction value. This is done by calculating the mean-median ratio of transaction value (MMR).

Hypothesis: If a chain has a much smaller median transaction size than mean transaction size, then on chain activity is dominated not by regular users making normal daily transactions, but by whales moving large amounts of currency to artificially inflate usage metrics.

This could contradict claims that a blockchain has an active user base that the blockchain is meeting user needs. We assume that:

  1. If a blockchain is functioning as digital cash, then most of its transactions would be small. e.g less than 100 USD. It should be noted that 100 USD is not a particularly small amount even in western countries and due to a blockchains borderless nature, it is even futher above a noraml ‘day-to-day’ transaction amount in large parts of the world.

  2. Conversely, if a blockchain has relatively little organic use by normal users then whales (users with large holdings) will make up a large proportion of on-chain activity and would have average transaction sizes much larger than a day-to-day transaction. An untested guess at a “whale threshold” could be 100,000USD.

  3. Where the ratio of mean to median transaction value is relatively high, we have an environment where the mean value is much higher than the median value, which shows that daily total value transacted is dominated by a few relatively large transactions, rather than many small value transactions. This would imply that whales dominate the blockchain (and likely market behavior) rather than members of the general public or retail investors.

Chains:

The chains that will be analysed here are all forks of BTC. They are:

  • BTC
  • BCH
  • BSV
  • LTC
  • DOGE

Fields

using the coinmetrics api, the following metrics will be used:

  1. TxTfrValMeanUSD

    The sum USD value of native units transferred divided by the count of transfers (i.e., the mean “size” in USD of a transfer) that interval.

  1. TxTfrValMedUSD

    The median USD value transferred per transfer (i.e., the median “size” in USD of a transfer) that interval.

In [1]:
from IPython.display import HTML
HTML('''

 This analysis was made using Python. You can toggle the code visibility by clicking here.
''')
Out[1]:
This analysis was made using Python. You can toggle the code visibility by clicking here.
In [2]:
# import and setup
import requests
import json

import pandas as pd
import plotly.graph_objs as go
import chart_studio.plotly as py
import plotly
from plotly.offline import init_notebook_mode
plotly.offline.init_notebook_mode()
init_notebook_mode(connected=True)

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

import warnings
warnings.simplefilter('ignore')