隣のデスク覗く言語さん

unityとかc#とかの勉強・発見ログです.参考まで.

仮想通貨の『何が』Twitter上で盛り上がっているのかをトピックモデル分析

 はじめに

仮想通貨流行りすぎですよね.

個人的には仮想通貨に一体どんな価値があるのかよくわからないのです.あれ自体で何か商売をして儲けているわけじゃないのに,忽然とした需要が価値を押し上げているような…

まあ,みんなが「金の延べ棒欲しい」っていったら金の値段が上がるように,仮想通貨もそういうものなのかなと思いつつ(はっ!だから「マイニング」っていうのか!(?))分析してみました.

 ※一応ですが,仮想通貨について何か確定的な言及をするものではありません.あくまでデータ取って分析して,私なりに考察した結果であることは注釈しておきます.

目的

Twitterユーザーは仮想通貨の何に関心を持っているのか

今回はテキストマイニング手法の一つであり機械学習手法として大分一般化してきた(と思う)トピックモデル分析を行います.

トピックモデル分析

簡単に言うと,文書集合の主なトピック(話題)を半自動的に分類可能な手法です.これを仮想通貨についてつぶやいているTwitter文書に利用することで,仮想通貨に関する主な『話題』が抽出できるのではないかと考えました.

また,これに関する記事は昨日まとめてみましたので,興味のある方は是非.

gengoshori.hatenablog.com

その他,LDAで検索してみて調べてみると面白いです.

 

仮説

どんなトピックが出そうかなんとなく類推してみます.

  • 値段(相場)の上がり下がりの話
  • どの仮想通貨が良いか,悪いかの話
  • 取引所の話
  • 将来性の話
  • 仮想通貨に関する感想・意見

この辺りがトピックとして出てきて,なんか意外なトピックが出てきたら面白いかなーと思いながら分析です.

大雑把な手順

  1. Twitterから仮想通貨に関するツイートを取得
  2. トピックモデル分析してどんなトピックがあるのか分析・考察

細かい手順

以下,分析内容に関心のある人は是非ご覧ください.プログラマーとかアナリスト知識人向け.ディープな話は今後公開していく予定です.今回は概要レベル.

TwitterAPIを使ってツイートを取得
  • 言語:Python 2.7
  • ライブラリ:tweepy 他
  • 検索ワード:「仮想通貨 OR ビットコイン OR bitcoin OR BTC OR アルトコイン
  • 期間:1月31日0時0分0秒〜2月6日23時59分59秒の間約一週間分
  • ただし,RTとbotは検索対象から除く.

全部で34万3555件取得できました.34万ツイート…複数検索とは言え多いですねえ.関心の高さが伺えます.

ノイズ除去
  • 言語:R言語
  • ライブラリ:lda,topicmodel, RMeCab 他
  • URLや@〜を各文書から削除
  • 重複する文書を削除(新しい文書が残るように)
  • 名詞,動詞,形容詞,形容動詞を対象に品詞分解
  • 2品詞未満の文書を除去

最終的な分析対象は23万8133件になりました.何回も同じツイートをしている場合やいわゆるパクツイ,bot除外できない事実上のbotなどが結構含まれているみたいですね.あとは一言ツイートも除外対象ですので.

これらはTwitter自体の性質に近いので,しょうがないということにします.

今回の分析ではトピックモデル分析のLDAを用います.

解釈しやすく,精度も良い(それなりに)適切なトピック数を探索
  • Perplexityを算出
  • 5-fold out クロスバリデーション(データの80%を学習データ,残りを試験データとしてPerplexity算出
  • 各種パラメタ
  • α:50/トピック数,η(文献によってはβ):0.1
  • 方法:ギブスサンプラ,
  • 反復回数:100回

反復回数は多いほうが良いのですが,計算コストが膨大すぎたのでこの程度で留めました.1000とかにすると余裕で1日掛かります.

評価基準

このシミュレーションをクロスバリデーションのパターンを50パターン用意してPerpelexityの平均値で判断

一般に,トピック数を増やせばPeplexityは良い評価値になるが,トピック数が多すぎても解釈が難しくなるので,トピック数が少ない(30以下)中で,比較的Peplexityが良いトピック数を採用.


LDAの方法

良いトピック数で分析し,各トピックの代表的な単語からトピック名を決定

各トピック割合が大きい上位の文書などから考察


制約

Twitterのデータは過去一週間分しか取得できない.これは個人開発者レベルでのTwitter apiの制約なのでしょうがない

Perplexityの算出など各分析では違うライブラリを使っているので,もしかしたら微妙に誤差生じるかも.(手法やパラメタは一緒のはずだから許容範囲内だと信じる)

 

結果

結果としてトピック数6,10,13,18,でそれなりに良いPerpelexityと言えるものが出ました.
今回はトピック数13の結果・考察を載せます.

トピック名とトピックを代表する単語

トピック名の判断にはトピックを表す代表的な単語を算出します.ここではライブラリだよりですが,解釈としては「そのトピックに出てきやすくて,他のトピックに出にくい単語に重み付け」といったところですかね.

これと本文も参照しながら,Twitter上で仮想通貨について何が主題として語られているのかを判断します.

名付けたトピック名と代表的な単語の一部を表に示します.数字は除いています.

 

トピック名 代表的な単語
取引所ごとの相場 btc 価格 % xrp 時間
国外流出疑惑ニュース 日本 流出 韓国 nem
興味 最近 広告 やっ みたい
投資価値 する 投資 いる こと ある
価格推移 btc ドル
不信感 w 怖い
取引所 通貨 仮想 事業 参入 下落
バブル感 通貨 仮想 崩壊 信頼
下落 相場 買い 暴落 下げ
まとめ・ブログ記事 仮想 通貨 さん 税金 まとめ
仮想通貨の仕組み ブロック マイニング なる 利益 ない 理解
主要アルトコイン コイン ビット fx リップル 暴落 あり
某社の盗難ニュース チェック 仮想 取引 通貨 ニュース

 

考察

うーん広告・ニュース・ブログ記事が多い.初心者を釣ろうとする広告と煽ったようなブログ・ニュース記事が多い.普段眺めるメディア系とかよりも,遥かにお金が直接絡むからしょうがないけど,これじゃあ人間のユーザーの生の声を抽出するのも難しいです.

一方で,この「広告やブログ記事まみれであるという事実」が,Twitterから得られる仮想通貨に関する情報とも言えるかもしれません.

あとはニュースサイトが発信する文書に関するトピックですね.確かにユーザーが求める情報としては有益なのかもしれません.ニュースに対する意見などもツイートする場合もありますし,分析結果としては納得できます.

あとは分析期間の関係で,某社の盗難ニュース,仮想通貨が国外(韓国からハッキングされて北朝鮮に流れたのでは?という疑惑の)ニュースなどのトピックが出てきました.

 

まとめ

約1週間で34万件以上のデータ収集しトピックモデル分析(LDA)を行った.
主な話題(トピック)は今回13種類抽出できた結果について述べる.

  1. 取引所ごとの相場(取引所での価格について言及したトピック)
  2. 国外流出疑惑ニュース北朝鮮に流れたのでは?という記事のトピック)
  3. 興味(やってみたい,とかのトピック)
  4. 投資価値(いつ投資しよう,株みたいなもの?,とかのトピック)
  5. 価格推移(価格の推移自体について述べるトピック)
  6. 不信感(怖い,損した,などネガティブなトピック)
  7. 取引所(会社名などを挙げて述べたトピック)
  8. バブル感(年末年始の高騰・暴落について言及するトピック)
  9. 下落(時期的に価格が落ちきって,上下している事に関するトピック)
  10. まとめ・ブログ記事(記事タイトルなどのトピック)
  11. 仮想通貨の仕組みブロックチェーンの話や,よくわからん,といったトピック)
  12. 主要アルトコインリップルやリスク,モナコインなどに関するトピック)
  13. 某社のニュース(盗難された某社のニュース記事からその感想まで)

 

所見としては,ニュース記事,転載ニュース記事,広告,botらしきものが非常に多い印象です.

一方で,こういったツイートが多いこと自体が,仮想通貨の今を表しているのでは,とも思います.

また,世間を賑わす某取引会社に関するトピックがあったり,「興味あるー」といったツイートや,価格の下落に関するトピックがあったりと,仮想通貨に対する期待と不信感が入り混じったトピックが得られました.データ収集した時期の影響もあるかとは思いますが,納得の結果ではないかと思います.

また,検索対象に入れていない「リップル」「モナコイン」や「リスク」「xem」などがトピックを表す重要な単語として出現したことから,「仮想通貨」及び「アルトコイン」の中でも注目されている通貨が炙り出せたのではないかと思います.

あとは,まあ,Twitterの特性というか風潮というか,『w』とか『笑』とか絵文字とかネットスラングに近い言葉がよく出てくるという印象です.良く言えば『お気軽さ』『奥ゆかしさ』ですし,悪く言えば『煽り』『罵詈雑言』です.

例えば「自業自得だと思います」とはつぶやかず,「ざまあww」とつぶやく方が多いのではないでしょうか…日本語の文章として破綻していても,日本人はなんとなく読めますが,分析者としては扱いに困るところです.

今後は,細かいトピック数に指定して分析することや,カテゴリに分けた上でLDAすることでより詳細な話題が見える可能性も十分にあると思います.これらはまた後日行いたいところです.

 

懸念

Twitter自体単語数が少ないので変な過学習がないか心配.あとは,トピック割合が異なっても,パッと見同じような本文も散見されたので,解釈が難しい点がありました.

また,転載ニュース記事とか広告ツイートとか選択的に除く方法がわからなかったので,分析文書に含んでいます.

これが全体のトピックを歪めている可能性あるかもしれません.本当は個人ユーザーを中心とした感想・意見・所見などを収集できたらよかったのですが…どうしたら良いですかね….

 

「やったほうがよかったかな」のまとめ

  • 転載ニュース記事とか広告ツイートとか削除

→個人の意見に関するトピックの抽出可能か

  • 逆に転載ニュース記事や広告ツイートのみに限定した分析

→どんな記事タイトルが多いのか

  • 仮想通貨用の辞書作成

→【ビットコイン】という単語は形態素解析した時に【ビット】と【コイン】に分かれてしまう,などがあった


今後やってみたいこと

  • 今回の結果を仮想通貨のチャートと合わせて分析

例えばネガティブワードが多い数分後に下落していたら面白いですよね.影響力の強いユーザー・ブロガーやニュースサイトが炙り出せるかもしれません

  • 時系列を考慮した分析

今回のLDAは一週間分のデータを一括で分析しましたが,時系列を考慮したら日毎のホットワードが取り出せるかもしれません

  • 広告などを除いた分析(要は人間のユーザーの関心トピックの詳細が知りたい)

 

 

長くなるから今回避けましたが,そのうち分析の中身をソースコードとともに公開しようと思います.

プログラミングに精通した偉い人にアドバイス貰えたら嬉しいなぁ (このブログの本当の意図はこっちにある…)

 

参考まで.