0. Introduction
A few days ago I was reading the blog post I've linked to above. While the post itself was interesting, I also found the apparent cyclical nature of bitcoin transactions per day more intriguing, and assumed it was a data error. I checked for myself using my local bitcoind and got the same results:
This was clearly something at which it was worth having a closer look.
Note: All times are in UTC.
1. Weekly time series decomposition.
Taking the data since the start of 2014 and using a time series frequency of 1/7, I performed a decomposition which assumed a multiplicative seasonal component and which resulted in the plot below. The first part of the plot is the observed data; the next the "trend" of the data series; the third the "seasonal" (periodic) variation; and the final part is the left over and hopefully random error. Since I'm assuming a multiplicative seasonal component, the "seasonal" scale is a fraction of the average transactions per day per week.
If the assumed frequency was wrong or there was no periodicity, the "seasonal"estimate would not show periodicity, although the random and trend estimates might still show some sort of cyclic structure.
That is not the case here - the "seasonal" estimate - the weekly cycle - is very clear. Below I've focused on the last three weeks to make the periodicity more obvious, and made the scale more ... um ... percentage-y.
So, on Saturdays and Sundays' transactions are only processed at around 85 to 90% of the average daily rate, and 20 to 25 % less than the average week day rate. The weekly range is about 85% to 107% of the weekly average of the daily rate.
2. Daily time series decomposition.
This made me wonder "is there also a daily cycle hidden in the data"? This is somewhat more difficult since the number of blocks per hour varies significantly - at the moment, the 95% confidence interval is 2 to 11 blocks per hour. This could possibly hide any periodicity, or at least make it that much harder to find.
The decomposition uses only data since the start of 2014 and assumes a time series frequency of 1/24, and a multiplicative seasonal component. Interestingly the trend component shows the daily cycle quite clearly.
The "seasonal" estimate is much harder to see, so I've zoomed in on the last eight weeks' data, which allows us a much clearer view of the intra-day cycles in bitcoin transaction rates.
Zooming in further on the last thirty six hours, we see a gradual increase from 10 UTC to 19 UTC, then decreasing. If this reflects a working day, this tells me that the daily transaction cycles are probably caused by either western European companies or eastern US companies, or both.
Another interesting point is that the intra-day variation is actually greater than the the intra-week variation, which is probably due to the aforementioned stochastic nature of the bitcoin block solving process.
3. Summary
- Since the start of 2014 daily transaction rates have exhibited a weekly cycle and hourly transaction rates a daily cycle.
- The daily cycle of hourly transaction rates suggests most of the transaction action (ha!) is happening in Western Europe, Eastern US, or somewhere in the middle of the Atlantic.
Thanks to hashingit.com for pointing out interesting data.
Organofcorti lives!
organofcorti.blogspot.com is a reader supported blog:
1QC2KE4GZ4SZ8AnpwVT483D2E97SLHTGCG
Find a typo or spelling error? Email me with the details at organofcorti@organofcorti.org and if you're the first to email me I'll pay you 0.01 btc per ten errors.
Please refer to the most recent blog post for current rates or rule changes.
I'm terrible at proofreading, so some of these posts may be worth quite a bit to the keen reader.
Exceptions:
- Errors in text repeated across multiple posts: I will only pay for the most recent errors rather every single occurrence.
- Errors in chart texts: Since I can't fix the chart texts (since I don't keep the data that generated them) I can't pay for them. Still, they would be nice to know about!







I'd like to know the code you use to take the data from the blockchain directly using bitcoind, can you make a little post about it?
ReplyDeleteReally good article, I note the pattern just 2 weeks ago and now I find some answers...
Hi Giano, I use code I wrote in R to query bitcoind hourly (as a cronjob) and record a summary as a data object. I'll post a simplified version of the function at some point if readers are interested.
Delete