MyCryptoHeroesの全Hero時価総額を機械学習で雑に求めてみる

Tomohiro Nakamura
catabira-japan
Published in
8 min readJun 4, 2019

こんにちは。Tomo ( Twitter: HAIL )です。今回は花村さん( Twitter: naomasabit )による

の記事と同じくMyCryptoHeroesを、少し違う切り口で分析してみます。
上のブログのまとめとしては、全体の取引金額や単価は上昇傾向になる、とありますが、じゃあ果たしてHeroトークン全部でいくらぐらいの価値があるのか? というのを雑に分析してみます。
せっかくのパブリックブロックチェーンを用いたゲームなので、見えるトランザクションから全体を予想してみることで、どの程度の規模のある世界のトークンなのか、を見れたら面白そうだと思いました。

雑な結果だけ見たい! という方はサーッと下にスクロールしてくださいw

まず分析条件は上の花村さんの記事に揃えます。

【分析条件】

・分析期間は 2018/10/01~2019/4/30です。

・分析対象はOpenSeaのMCH Heroの取引です。

・バルク取引は除外しています。(OpenSeaでは複数のNFTをセットで売却する事ができます。その取引では個々の単価が不明になるので除外しています)

・分析対象としている金額はETHの取引のみであり、Wrapped Etherや独自トークンによる取引金額は含んでいません。

分析対象はOpenSeaによる取引、と書きましたが、これは機械学習を用いてこれから求める値の教師データとしてOpenSea取引を用いることを意味します。これから求める値は、

もしOpenSeaに全てのトークンが売りに出され全てが買われたら、合計でいくらの値になるのか?

を任意の日時について求めるというものです。
MyCryptoHeroesでは、各HeroごとにSupply Limit(供給量上限)を設定しています。その値Heroトークンのスマートコントラクトに実装されている getSupplyLimit(uint16 _heroType)という関数で自由に参照できます。なので、全てのHeroを集めたらいくつ存在する(し得る)のか? は算出可能です。それらが全て売りに出された場合の成立価格を予想し、全ての値を合計したものが求めるべき時価総額であるとします。

学習してみよう

説明変数は以下を用います。なるべくMyCryptoHeroesならではのmetadataは用いず、多くのゲームに共通するパラメタを用いました。

  • Hero Type: 何のHeroなのか(グリム兄弟、ベートーベン、etc…)
  • Rarity: レア度(uncommon, rare, epic, legendary)
  • Trade TimeStamp: 取引日時。同じHeroでも価格が上下することを考慮。学習データは各OpenSea取引成立のタイムスタンプを用い、テストデータは全て同じタイムスタンプを用いる
  • Estimated Supply: その取引成立時におけるマーケットへのそのHeroの供給量の予想値。同じタイミングで沢山の同Heroが出品されていればいるほど価格が下がるだろう、という仮説です。マサカリがブンブン飛んできそうなのであまり説明したくはないのですが笑 経済学には価格の供給弾力性などといった言葉もあります。また、この説明変数は、テストデータにおいては全てSupply Limitと同じ値を持つことになります。求める時価総額は、「もしOpenSeaに全てのトークンが売りに出され全てが買われたら、合計でいくらの値になるのか?」であるからです。この説明変数は、求める時価総額が高くなりすぎないように必要な変数とも言えます。
    どのように求めたかですが、取引成立したらEthereum上でtransactionが発生するのでデータが取りやすいのですが、出品したタイミングがいつか、というのを取ることができなそうだったので、「前後7日に同じ成立した取引数」を算出し、これを用いることにしました。

できあがったデータ(の一部)がこちらです。 value_as_usd とある、USD建ての取引価格が目的変数です。

このデータから機械学習のモデルを作ります。今回は現在BetaとなっているGCPのAutoML Tablesを用いました。AutoML TablesについてはいくつかQiitaなどに記事が上がっていますので良かったら参照ください。雑に言えば上のような表をcsvもしくはBigQuery Tableとして用意し、一つのカラムを目的変数として指定します。そして重視する指標や計算資源の上限などの追加パラメタをいくつか指定して実行すると機械学習のモデルができあがるといったものです。なお、今回は実験の途中で、Supply Limitが大きいものと小さいもの(それぞれ主にレア度が低いもの、高いもの)でモデルを分けた方が過学習が起きにくいことが分かってきたので2つのモデルを分けて作成しました。

Hero TypeがNumeric扱いされないよう、Categoricalにするのが大事です
Supply Limitが大きいものの学習モデル(左or上)、小さいもの(主にレア度が高いもの。右or下)

上の2つのモデルはRMSLEを重視指標として生成しました。とはいえ、モデルの出来については、あまりうるさい事は言わないようにしましょう笑 データ量がまだまだ乏しいこともありますし、テーマも「雑に」であれ求めてみると面白いよねという実験的なものなためです。逃げてるわけじゃないよ。

さて、テストデータは以下のようなものになります。

前述の通り、Estimated SupplyがSupply Limitと同じ場合の合計取引額予想値を求めます。

このテストデータについてUSD建の取引額予想値を目的変数として算出し、全Hero Typeについて全Heroが取引された場合の総額を算出します。つまり、上の表でHero Type3002 のHeroは250体存在するので、この行に対して求められた取引額(USD)を250倍したものが 3002 の総額であり、これを全てのHero Typeについて足し合わせます。

モデルを2つに分けて作成しているので、テストデータとその結果も2つに分けて生成されますが、その1つのテーブルにおける結果が以下のような感じです。

さあて気になるお値段は & まとめ

さて、気になるHero時価総額ですが、2019/4/30時点で4,674,842USD。JPYに直すと506,168,518JPY。約5億円といった結果になりました! 結構な富豪じゃないと買い占めは難しい! いいゲーム!
時系列で見るとこんな感じ。

いい感じに上がってきていますね。
MCHのトークンにはExtensionやLandもあるので、それも合わせるとさらに大きな額になります。

まあ相当に雑な実験ではあるのですが、こういった数字を出してみると、ブロックチェーンゲームが更に面白く見えてくるのではないでしょうか。ゲーム運営側の立場からしても、数字を追いかけるため一つの指標として採用するのが良さそうです。
また今度同じ式でより多くのデータを用いて求めてみて変化を見るのも面白そうですね。

それではまた!

--

--