Numerai SignalsにGoogle Trendを予測として提出する
はじめに
Numerai Signalsは株式の予測コンペです。Numeraiとの違いは、各銘柄の予測に使う情報を参加者が自分で用意するところです。詳しくは下記ドキュメントを参照してください。
Signalsに対するアプローチは次の2つがあると考えています。
- 株価や投資指標など既存のデータセットから、機械学習を使って予測する。
- Numerai運営にとって未知のデータセットを使って予測する。
株価や投資指標など既存のデータセットから、機械学習を使って予測する
公式サンプルを始め多くの方が試みている方法です。公式サンプルでは株価からテクニカル指標のRSIを計算して機械学習を行っています。
Signalsとメイントーナメントとの違いとして、提出した予測をNeutralizationします。ありきたりな投資指標やテクニカル指標を使ったモデルではうまくスコアが伸びない可能性が高いです。
なかなか一筋縄では行きそうにないので、まだ私は手を出していません。まずはメイントーナメントでFNCが高く、Feature Exposureが低くなるような学習方法を研究してからにしようかと考えています。
Numerai運営にとって未知のデータセットを使って予測する
GME騒動があったとき、リチャードさんがErasure Bayで「Redditのr/WallStreetBetsのデータを使ったSignalsのチュートリアル」を募集したところ、Suraj Parmarさんが作成して公開してくれました。
このようなNumerai運営が持っていないオルタナティブデータを使うアプローチであれば、Neutralizationに対抗できる可能性があります。
というわけで、運営が使ってなさそうでたくさんの銘柄の情報を集められるものはないかなと探していたところ、Google Trendが使えるんじゃないかと思い当たったわけです。
Google Trendで銘柄のトレンドを見てみる
Google Trendでは各株式市場のTickerを使ってトレンドを検索することができます。たとえばアップルならNASDAQ:AAPL
、ソニーならTYO:6758
という具合です。
Tickerそのままを検索キーワードとして集計しているわけではなく、関連している検索キーワードを"トピック"として集約してくれているようです。
検索した期間の最大値を100、最小値を0として週毎に結果を返してくれます。
PythonからGoogle Trendの結果を取得するにはpytrendsを使用します。
以下の記事が参考になりました。
Tickerトピックのクエリを集める
Google TrendでNASDAQ:AAPL
を入力すると、「検索キーワード」と「トピック」がサジェストされます。
検索クエリとして"NASDAQ:AAPL"を指定すると「検索キーワード」になります。
pytrendでキーワードのサジェストをすると、トピックの検索クエリが得られます。
pytrends = TrendReq(hl='en-US', tz=360, timeout=(10,25), retries=2, backoff_factor=0.1)
pytrends.suggestions(keyword='NASDAQ:AAPL')
[{'mid': '/m/07zmbvf', 'title': 'NASDAQ:AAPL', 'type': 'Topic'}]
"NASDAQ:AAPL"のトレンド検索クエリは'/m/07zmbvf'
となります。
銘柄のトレンドをダウンロード
pytrendでトレンドデータをダウンロードするのは簡単です。
kw_list = ['/m/07zmbvf']
pytrends.build_payload(kw_list=kw_list, timeframe='today 12-m', geo='', gprop='', cat=0)
pytrends.interest_over_time()
連続ダウンロードするときは0.5秒くらいスリープを入れると弾かれにくいです。それでも1500件くらいダウンロードするとステータスコード429を返してきますので、しばらく待つ必要があります。
トレンドをSignalsに提出する
実際にトレンドをダウンロードしてSignalsに提出するNotebookをGistにアップロードしました。
今のところアメリカと日本の銘柄のみを対象にしています。対象銘柄のトレンド検索クエリはtrend_search_list.csv
にあります。他の国のクエリを追加してくださる方募集中です。
直近で注目度が上がった銘柄を"買い"とするために、13週平均からの乖離率を予測値とすることにしました。
提出結果
記事執筆時点でR261〜R265までがGoogle Trendの予測になっています。
別に良くはないですね。残念🥺
おわりに
今回はNumerai SignalsにGoogle Trendの結果をそのまま予測として提出してみました。結果はあまり芳しくはなかったですが、これを特徴量として機械学習にかけてみるのも面白いかもしれません。
皆さん思い思いの方法でNumerai Signalsにチャレンジしてみてはいかがでしょうか。
Discussion