野村総合研究所データサイエンティストによる
情報発信サイト

NRIのデータサイエンティストがNFT価格推定に挑戦(第1回)

NFT価格推定への挑戦(デジタルアートの"鑑定士"を目指して)

みなさんはじめまして、NRIのデータサイエンティストからなるNFT分析チーム(眞鍋尚大、吉川龍一、平原一輝、中井亮)です。

最近、「NFT」というキーワードが話題を集めており、気になっている方も多いのではないでしょうか。 後段にて詳しく解説しますが、NFTというのは、ブロックチェーンの技術を活用することで唯一無二性を担保したデジタル作品です。

これまでリアルの作品では、ゴッホの「ひまわり」のように一点ものにプレミア価格がつくことがありましたが、デジタル作品は、簡単に複製が可能なことから、(音楽業界に代表されるように)無料に近い形で提供せざるを得ず、アーティストに適切な報酬を還元することが難しい状況がありました。しかし、NFTはその状況を打開する可能性を秘めています。

有名なところでは、海外アーティストのBeeple氏が描いたデジタルアート「Everydays - The First 5000 Days」が、日本円にして約70億円の価格で落札されたことが話題になりました。また、日本のVRアーティスト関口あいみさんが描いた「Alternate dimension 幻想絢爛」は、約1,300万円で即日落札されました。NFTとしてデジタル作品が提供されることで、リアルな作品と同じように所有することに価値を感じる人が増えています。

(参考記事)

ブロックチェーン活用のデジタルアート、75億円で落札: 日本経済新聞 デジタルコンテンツ、市場化に道 「ひとつだけ」証明、新規参入呼ぶ: 日本経済新聞

我々も、NFTに大きな可能性を感じていましたが、アートに関する知見はほとんどありません。しかし、自分たちの得意なデータサイエンスの観点から、何か面白い試みができないかと考えました。

そこで、データサイエンスの力で、NFTの価格推定に挑戦することにしました。NFTの過去の取引価格のデータを分析し、統計学や機械学習の技術を使って、価格算定のメカニズムを明らかにしたいと思います。
リアルのアートの世界では鑑定士という仕事があります。その作品の真偽を確かめるだけでなく、デザインの希少性や歴史的な意義などさまざまな観点からアートにどれだけの価値があるかを鑑定します。今回は、いわば、NFT世界の"鑑定士"を目指します。

第1回では、NFTのマーケットプレイスからAPIを使って、データを抽出する方法と簡単な分析方法を共有します。NFTに興味がある方やデータサイエンスに興味がある方に、ぜひ、この記事を読んでいただきたいと思います。

そもそもNFTって何?

NFTは、Non-Fungible Tokenの略です。

Non-Fungibleとは、代替不可能で唯一の価値を持つということです。 例えば、ビットコインなどの仮想通貨や日本円はFungible(代替可能)です。2枚の1万円を区別して扱うことはなく、2枚とも1万円として同じ価値を持ちます。 一方で、野球ボールはどうでしょうか。例えば、大谷翔平選手のサイン入り野球ボールは普通の野球ボールとは異なり、代替不可能で唯一の価値を持ちます。一方で、唯一無二でも価値がないものもあります。一般人が書いたサイン入りボールは普通のボールと同じかそれ以下の価格になるでしょう。

Token(トークン)とは、既存のブロックチェーンを用いて発行されたデジタルコンテンツの一種です。 ブロックチェーンを用いて発行されたデジタルコンテンツの中でも、「コイン」と呼ばれるものがありますが、これは独自のブロックチェーンを用いて発行され、原理的には発行者が存在しないものです。例えば、ビットコインは、発行枚数の上限があらかじめ2,100万枚と決められており、プルーフ・オブ・ワークという仕組みに基づいて、新規にブロック生成に成功した人にのみビットコインが発行されます。 一方、トークンは、イーサリアムなどの既存のブロックチェーンを用いて発行され、発行数をコントロールすることができます。さらに、通貨としての性質だけでなく、トークンを持っている人にコミュニティにおける意思決定の議決権を与えるなど発行者が独自の付加価値を設定することもできます。

NFTは、Non-FungibleなTokenですが、アートをNFT化すると、どういうメリットがあるのでしょうか? NFTは、イーサリアムなどのスマートコントラクトと呼ばれる仕組みを使って、ブロックチェーン上に、作品情報やオリジナルの所有者、誰が買ったかといった情報を記録することができます。これによって、NFT化されたデジタルアートが、コピーではなく、オリジナルであることが保証されます。 また、ブロックチェーンによって、全ての取引がトレースできるため、例えば、NFTが取引されるたびに20%の利益が制作者に配分される仕組みを作ることができます。(実際、OpenSeaなどの主要なマーケットプレイスでは、このような仕組みが簡単に設定できます。)これまで、アーティストは、最初にアートを販売するプライマリー市場でしか収入を得られませんでしたが、これからは、セカンダリー市場で、作品が転売されるたびに収益を得ることもできるようになります。

NFTのマーケットプレイス

NFTのマーケットプレイスとしては、OpenSeaが最も有名で、世界シェアの9割以上を占めると言われています。OpenSeaでは、MetaMaskなどのウォレットを使い、イーサリアムなどの仮想通貨によって、商品を売買することができます。販売方式は、固定価格の他にオークション形式も選ぶことができます。

opensea.io

その他に有名なマーケットプレイスとしては、RaribleやSuperRareなどの市場があり、独自のガバナンストークンを発行していたり、出品できるクリエイターを制限していたりするなど、それぞれ特色があります。

また、国内でも既にいくつかのマーケットプレイスがオープンしており、GMOの運営するAdam byGMOやコインチェックが運営するNFT Studio、LINEが運営するLINE NFTなどが有名です。国内マーケットプレイスでは、日本円を使ってNFTを購入可能なところもいくつかあります。

コレクティブルとは?

NFTのマーケットプレイスでは、アート作品だけでなく、ゲームやメタバース内のアイテム、あるいは動画や音楽などのさまざまなNFTが取引されています。今回は、その中でも、コレクティブルと呼ばれる分野に着目したいと思います。

コレクティブルとは、あるコンセプトに基づいて制作されたNFTアートのシリーズで、トレーディングカードのように保有や収集を目的として、制作されたNFTです。有名なBored Ape Yacht Club(猿の絵柄)やCryptoPunks(人のドット絵)はアルゴリズムによって生成されており、特定のアーティストが制作しているのではなく、背後には、デザイナーやエンジニアがチームとなって存在しています。各コレクティブルは往々にして、10,000点ほどの作品を有しています。

Bored Ape Yacht Clubがローンチされたのは2021年4月で、一気にNFTのムーブメントを加速させていきました。Bored Ape Yacht ClubとCryptoPunksは、コレクティブルNFTの市場価値ランキングにおいて、トップに位置しています(ブログ執筆時点)。なおCryptoPunksはもともとLarva Labsによって開発されましたが、現在はBored Ape Yacht ClubをローンチしたYuga Labsによって運営されています。

NFTアート元年となった2021年の翌年、日本のアニメにインスパイアされた「Azuki」というコレクションが、ロサンゼルス在住の30代の男性5名によってローンチされました。8,700点のNFTは3分で完売し、2,900万ドル以上の収益をあげました。現在でも人気を維持しており、市場価値ランキングではトップ10に入っています。Azukiの保有者はThe Gardenというコミュニティに参加でき、今後メタバースの展開も期待されます。

NFT価格推定にチャレンジ

次に、実際にNFTが売買されたデータをマーケットプレイスからデータを取得し、NFTの価格を予測するモデルを構築することにチャレンジしていきます。

NFTでは、floorPriceと呼ばれる指標が重視されており、これは、特定のコレクティブルの中で、取引された最低価格を表します。floorPriceを確認できるサイトとして「NFT Price Floor」などがあります。

nftpricefloor.com

ただ、我々は、NFTの価格を予測するモデルを作成するにあたり、個々のNFTの属性データに加え、Mint(NFTの生成)、Sale(売買)、Transfer(移譲)など過去の取引すべての情報が必要であると考えます。

これらの情報を自動で取得するための方法としては、大きく「Webスクレイピング」と「APIを通じた取得」の2つの選択肢があります。 「Webスクレイピング」は、事実上どのようなサイトに対してもデータ取得が可能である一方、誤った方法で行うと「サイトに過大な負荷をかけてしまう」、「データの権利上の問題が発生する可能性がある」、「サービスによっては規約で明確に禁止されている」といった問題があります。 「APIを通じた取得」は、場合によってはAPIキーを取得するための手間がかかってしまいますが、サービス運営者が用意した公式のデータ取得手段であるため安心して使うことができます。

今回はAPIを通じてデータを取得する方法を採用し、データソースとしてはAPIが登録不要で利用できる LooksRareを利用することにしました。(マーケットプレイスとしてはOpenSeaが有名ですが、OpenSeaのAPIはAPIキーの取得が難しかったため、今回は利用しませんでした)

looksrare.org

LooksRareは、2022年1月にサービスローンチした比較的新しいNFTのマーケットプレイスで、イーサリアムのブロックチェーン上の全てのNFTを索引できるようにしてあるため、OpenSeaで売買されているNFTも含めて、全て取引可能となっています。

そのため、OpenSeaに出店されているNFTの取引履歴データも、LooksRareのAPIを使って取得することができます。

必要なデータの検討

価格推定のための分析を行うにあたり、必要なデータを検討します。

1.NFTの属性データ

NFTそのものに関する属性が必要です。画像データをモデルに入力することも可能ですが、計算量の関係から、「色」「形」といった属性が文字情報のカテゴリとして利用可能な形式の方が望ましいです。

2.取引履歴データ

ブロックチェーンの特性上、取引履歴は公開されているため、必ずしもマーケットプレイスから入手する必要はありませんが、実装の都合上、同じソースから入手できることが望ましいです。

3.取引の途中経過のデータ

マーケットプレイスでの取引はオークション形式で行われることが多いため、出品者が出品時につけた初期価格や、途中の入札者名・入札価格も重要なデータです。ブロックチェーンには最終的な取引結果しか記録されないため、こういったデータはマーケットプレイスから入手する必要があります。

データの取得

LooksRare APIを通じてデータを取得するためには、特定のURL(エンドポイントと呼びます)に対して、特定の形式でパラメータを渡す必要があります。 今回は、属性と取引履歴を取得するためのAPIエンドポイントを探していきます。

APIのドキュメント (https://docs.looksrare.org/developers/public-api-documentation) を参照すると、下記のエンドポイントが存在することが分かります。

ここで collection_id 、token_id、transaction_typeはパラメータです。collection_id は、複数のNFTを含むコレクティブルのID, token_id はその中に含まれる単一のNFTのID, transaction_type は取引の種類を表します。

今回の分析対象としては、先述のAzuki と同じチームが制作している「Beanz」というコレクティブルを選択しました。このコレクティブルを選んだ理由は、本家の「Azuki」と比較して価格水準が高すぎないことや、属性データが充実していることです。

looksrare.org

下記にAPIから、「Beanz」の情報を取得し、jsonファイルとして格納するコードを示します。

import os
import json
import glob
import requests

collection_id = '0x306b1ea3ecdf94aB739F1910bbda052Ed4A9f949'

for i in range(1000): #token_id は連番の数字となっているため、単純にrange()でループする
    print(i)
    try:
        # トークンの情報(属性など)を取得する
        api_url = 'https://api.looksrare.org/api/v1/tokens?collection=%s&tokenId=%d' % (collection_id, i)
        filename = BASEDIR+r'\looksrare_beanz\\' + str(i) + '_token.json'
        if not os.path.exists(filename):
            r = requests.get(api_url)
            data = json.loads(r.text)
            if data["success"]:
                with open(filename, 'w') as f:
                    f.write(r.text)
            else:
                # 取得に失敗していれば、次の番号に移る
                next

        # 取引履歴を取得する
        for t in ['SALE','TRANSFER','MINT']:
            api_url = 'https://api.looksrare.org/api/v1/events?collection=%s&tokenId=%d&type=%s' % (collection_id, i, t)
            filename = BASEDIR+r'\looksrare_beanz\\' + str(i) + '_'+t+'.json'
            if not os.path.exists(filename):
                r = requests.get(api_url)
                data = json.loads(r.text)
                if data["success"]:
                    with open(filename, 'w') as f:
                        f.write(r.text)
                else: 
                    next  
    except:
        pass

取得したデータの加工

次にAPIから取得した情報をもとに分析用のデータマートを作成します。

アイテムごとに「NFTの属性データ」、「取引履歴データ」、「取引の途中経過のデータ」のJSONファイルが存在するため、 それぞれのJSONファイルからデータ解析に必要な項目だけ抜き出し、1つのデータフレームに集約していきます。以下に「NFTの属性データ」のデータフレームを作成するコードの例を記載しています。

まずアイテムごとにJSONファイルに記載の属性データのうち、 アイテムユニークなID(tokenId)や各アイテムの特徴量(attributes)など分析に必要な属性情報だけを抽出し、個別のデータフレームを生成します。 最終的には、それらを結合することで、すべてのアイテムの情報が集約されたデータフレームを作成しています。 同様の方法で、「取引履歴データ」、「取引の途中経過のデータ」に関してもアイテムユニークなIDを含めた上でデータフレームを作成することで、 各アイテムの属性データと取引に関するデータを突合して解析用データマートの構築が可能となります。

import pandas as pd
from tqdm import tqdm
import joblib

#指定のフォルダに保存している「NFTの属性データ」のJSONファイルのパスを取得
paths_token = glob.glob(BASEDIR + r'\looksrare_beanz\\*_token.json')
 
dfs = []
#アイテムごとの属性データフレームを作成
for path_token in tqdm(paths_token):
    try:
        df = pd.read_json(path_token)
        #idリストの取得
        id_columns = ["id"]
        id_values = []
        id_values.append(df.loc["id"].data)
 
        #imageURIリストの取得
        image_columns = ["imageURI"]
        image_values = []
        image_values.append(df.loc["imageURI"].data)
 
        #tokenIdリストの取得
        token_columns = ["tokenId"]
        token_values = []
        token_values.append(df.loc["tokenId"].data)
 
        #attributesリスト取得
        attribute_columns = list(pd.DataFrame(df.data.iloc[0]).T.loc["traitType", :])
        attribute_values = list(pd.DataFrame(df.data.iloc[0]).T.loc["value", :])
 
        # DataFrame columns リスト
        columns = id_columns + token_columns + image_columns + attribute_columns
 
        # DataFrame value リスト
        values = id_values + token_values + image_values + attribute_values
       
        #個別アイテムのデータフレームの作成
        df_token = pd.DataFrame(columns=columns)
        df_token.loc[0] = values
 
        dfs.append(df_token)
 
    except:
        pass

#すべてのアイテムのデータフレームを結合して保存
token_df = pd.concat(dfs, axis=0).reset_index(drop=True)
joblib.dump(token_df,OUTPUTDIR+r"\token_df.pkl")

取引価格の分析

分析用のデータマートの作成が完了したのでさっそくAPIにて取得したAzuki 「Beanz」の取引価格に関して傾向を確認してみましょう。 

今回APIにて取得した「Beanz」の全NFT画像19,932個のうち実際に取引がなされたのは1,653個、 全体の約8%が過去1度は売買されているようです。 では実際に取引が行われたNFTはどれぐらいの価格で取引されているのでしょうか? 取引価格を日本円に換算して分布を確認すると1万円-10万円程度で取引されるものが最も多く、 次に10-30万円程度で取引されているものが多そうです(可視化においては外れ値を除いていますが、最高額ではなんと200万円近くで取引されているものもあります!)。

この取引価格の二峰性はイーサリアムの価格変動に起因すると想定されます。 実際に2022年5月初旬にはアメリカの金融引き締め政策等に起因し、仮想通貨全体の市場として価格が下落したため、 その前後にて取引価格を分けて可視化するときれいに取引価格分布を分けることができます。

市場変動による影響をできる限り取り除き、NFT画像自体が持つ価値をより深く考察するために以降の分析では2022年5月初旬以前の取引データを用いるものとします。

各NFT画像が持つ特徴量と取引価格の関係

今回対象として取り扱っているAzuki 「Beanz」では各画像の特徴量が「Properties」項目にてタグ付されています。 以下のサンプルにあるように画像が大きなメガネを掛けていれば「FACE」という「Properties」項目で「Big Glasses」と記載されていると行った形です。

BEANZ #17601

出所:https://opensea.io/assets/ethereum/0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949/17601

これら「Properties」の特徴量は「Beanz」内で共通のタグとして管理されているため、 それぞれの画像の取引価格と特徴量の関係を確認するために、この共通タグの項目を利用して分析を進めます。

まずは、「Properties」項目のうち、画像の大枠の種別を示す「Type」項目別にアイテムの個数と売買価格の平均を確認してみます。 「Type」項目では「Red Bean」、「Blue Bean」など画像のキャラクラーの特徴を色などで区分けしています。 分析結果を見ると「Golden Bean」、「Sprit Bean」など全体のうち数十個しか存在しないTypeを持つアイテムが高価で取引されている傾向がわかります。この結果だけを見れば希少なものほど高価になる市場原理に従って取引されている様子が伺えます。

「Golden Bean」、「Sprit Bean」アイテムの一例を示しますが、いかにも”レア”なアイテムの風格があります。

BEANZ #11515 Type: Golden Bean

出所:https://opensea.io/assets/ethereum/0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949/11515

BEANZ #19740 Type: Sprit Bean

出所:https://opensea.io/assets/ethereum/0x306b1ea3ecdf94ab739f1910bbda052ed4a9f949/19740

次に「Properties」項目のうち、目のタイプを示す「Eyes」項目別にアイテムの個数と売買価格の平均を確認してみます。 分析結果を見ると「Lightning」、「Sprit - Determind」など希少な「Eyes」特徴を持つアイテムが高価で取引されている傾向がありますが、 同じく希少な「Sprit - Dots」、「Sprit - Closed」、「Fire」などを持つアイテムはその他の複数存在する「Eyes」特徴を持つアイテムと大きく取引価格が変わりません。

この結果からも希少な特徴量を持っていれば必ず高価で取引されるかといえばそうではないようです。 希少な特徴の中でも特に取引価格に優位に働くものがあるようです。もしくは希少な特徴量の組み合わせが取引価格に大きく寄与することもあり、更に詳しく分析を進める必要がありそうです。



記事を最後まで読んでいただき、ありがとうございました。 今回は、NFTの概要とマーケットプレイスからのデータ取得、簡単な可視化まで解説しました。ぜひ、みなさんも記事を参考に実際に手を動かして遊んでみてください。

今後は、NFTの価格推定モデルの構築に取り組んでいきます。

参考文献

NFTの教科書 ビジネス・ブロックチェーン・法律・会計まで デジタルデータが資産になる未来 | 天羽健介, 増田雅史 | 社会・政治 | Kindleストア | Amazon

現役シリコンバレーエンジニアが教える次世代インターネットWEB3.0 NFT DeFi 入門講座 | Udemy