今回は、仕事から離れてSignateにある株価の上下を予測するコンペをやってみました。
が、、、結局ファイル提出するのがやっと。。。今回は提出までの奮闘を紹介したいともいます。
日本取引所グループファンダメンタルズ分析チャレンジとは?
まず最初に、Signateとはデータサイエンスのコンペ(精度を競い合う)を行うサイトです。
世界的にはKaggleが有名ですが、Signateは日本のサイトなのでオール日本語対応で嬉しい!
それでは、本題に移りたいと思います。
今回、チャレンジしたテーマはこれです。
簡単なルールを説明すると、過去の株取引データや財務諸表を使って未来の株価を予測しようというものです。
用意されているデータは次の通りです。
- 銘柄データ
- 株価データ
- ファンダメンタルデータ(財務諸表)
- 目的変数データ
これらのデータを使って各企業の決算短信開示後、20営業日以内における株価の最高値と最低値の予測を行います。
実はこのコンペ、チュートリアルがものすごく充実してて、データの取り扱いや可視化からモデル作成、そして予測までをPythonのコード付きでかなり親切丁寧に説明してくれます。
そしてなにより、コンペの題材となっている株の勉強としても非常に優秀なチュートリアルです。
一例として、株価予測を行う基本的な手法であるボラティリティや移動平均線といった変数を作成しています。いわゆるドメイン知識を活かした特徴量エンジニアリングです。
株価予測…億万長者になれちゃうじゃん!会社辞めなきゃ!
もう、このコンペで勉強しているだけで得るものがありまくる素晴らしいコンペです。
しかも株価の上下予測できるようになれば…夢も広がリングですよね。
慣れないPythonの提出方法
以下、Pythonの提出時に必要となる作業を説明します。
とくにPythonの提出方法が複雑うううっぅぅぅ
自分のモデルを提出するために必要なもの
最近のSignateでは、予測結果だけでなくPythonのコード自体を提出させるスタイルが流行っているようです。
コーディングアイディアや予測実行時間などを考慮するためと思われますが、このPythonコードの提出手順がなかなか複雑なのです。
提出に必要な最低限必要なファイルは、
- モデルを保存したpickleファイルを格納した”model”フォルダ
- メインのコードが記載された.py形式のファイルを書くのンした”src”フォルダ
- ”requirements.txt”に必要なモジュールを列挙する(任意)
自分がつまづいてしまった点をいくつか挙げていきます。
躓きポイント① srcフォルダのPythonを記述するルールがよくわからん
私のような情報に踊らされているようなデータサイエンティストは先代の偉い人が使っていたJupyter Notebookのみを妄信して使っています。
ところが最近のSignateのコンペでは、Jupyter Notebook等で書いたPythonコードを指定された.py形式のファイル(predictor.py)に記述し直す必要があります。
Pythonをpredictor.pyに記述するときに次のルールがあります。
ScoringService 推論実行のためのクラスです。 以下のメソッドを実装してください。 get_model モデルを取得するメソッドです。以下の条件があります。 - クラスメソッドであること - 引数 model_path (str 型) を指定すること - 正常終了時は返り値を true (bool 型) とすること predict 推論を実行するメソッドです。以下の条件があります。 - クラスメソッドであること - 引数 input (dict[str] 型) を指定すること
ふーん、よくわかんないじゃん。
・・・・・・・
・・・・・
・・・
チュートリアル通りにやろうとすると、余計混乱するかもしれません。
ここは、基本に立ち戻ってRuntime投稿方法を見てみましょう
すると最低限の必要な要素は次の通りです。
- Class ScoringService(object)を作る
- @classmethodを追記してget_model()を作る
- @classmethodを追記してpredict()
あとはここにデータの取り込み、特徴量生成、モデルの生成(またはpickleファイルの読込み)の要素を加える必要がります。
まずは超簡単なプログラムを作って、(Jupyter Notebookではなく)ターミナルやコマンドプロンプトからPythonを実行して試してみましょう。
上手くいったら、Jupyter Notebookで生成したコードを転記・修正していきます。
躓きポイント② 必要なライブラリとバージョンをテキストに記述しておく
“requirements.txt”は任意なのでなくても良いファイルなのですが、何も考えずに実行すると”
LightTBGMなんか知らない”、とエラーになったので記載が必要となりました。
これも最初は悩みました。
純然たる自分のアホな勘違いミスなのですが、以下のようにライブラリをインポートするPythonのお作法で書いてしまうと動作しません。
【ダメな例】
from lightgbm import LGBMRegressor
【OKな例】
tensorflow==2.4.0
この【OKな例】ように、必要なライブラリとバージョンを指定してやる必要があります。
バージョンの記載が必要な理由は、予測に必要なライブラリが思わぬタイミングでバージョンアップされてしまった場合に変更の影響を避けるためです。
以上、Signate 株価予測の提出編でした!
コメント