難易度:★★★★☆
株取引は金融機関などの機関投資家だけでなく、一般の人々も参加できるものも多く、身近な経済活動の1つと言うことができるでしょう。一方、この株取引は多様な思惑が交差する場となっているために、株価予測は非常に難しい課題です。しかしながらまた、近年の株取引においては、プログラムで作成したモデルによる機械取引が大きな割合を占めるようになっています。こうしたモデルは株価の推移はもちろんのこと、経済指標やSNSなどの情報を活用しているものも珍しくはありません。本クエストでは、深層学習を用いてこのような機械取引のモデルの作成にチャレンジします。ただし、課題としては「株取引」ではなく、「株価予測」というように簡略化したものに取組みます。クエストを通じて、時系列情報の分析や可視化、深層学習を用いた予測モデルの作成方法を学びます。
近頃、機械学習に興味を持ち始めたS氏は、モチベーションを高く学び続けるために、実生活への活用を考えていました。検討を重ねた結果、かねてから気になっていた株式投機をサポートするツールとして、機械学習による予測モデルの作成を目標に定めました。ただし、株式の自動売買をいきなり実現することは難しく、損失リスクも許容できないと判断しました。そこで、まずは問題を単純化させて、「将来の株価の上下を予測する」といったモデルの作成に取り組むことにしました。このモデルは、株式の自動売買モデルと比べると素朴なものにはなりますが、もし精度高く予測することが可能であれば、安く仕入れて高く売る、といった投機活動の目安として利用することができそうです。
Mission 1
機械学習モデルを作成するには、適切なデータが必要ということで、まずは信頼性の十分なウェブサイトから株価データを取得しました。ただし、データを取得すればそれで終わりではありません。手に入れた生のデータがそのままモデル学習に使えることは非常にまれであり、また、そもそもデータ内容をきちんと確認しないままにモデルを作成することは、誤認識や不備の検知漏れといったリスクを伴います。このため、データの確認は非常に重要な作業の1つです。本ミッションでは、ライブラリを使ったデータの読み込み方、データ量や種別の確認、用途に応じたデータの並び替え方法などを学びます。
このタスクでは下記を学びます。
データフレームに格納したデータの中身を確認してみましょう。
Mission 2
取得した生の株価データを変数として読み込み、さらに、扱いやすいようにデータの整形を行いました。次は、この株価がどのような傾向や特徴を持っているのかということを、多角的に眺めながら理解を深めます。本ミッションでは、データを俯瞰して見ることや、データの示唆する情報を多面的に捉える方法(探索的分析やEDAと呼ぶ)を、時系列データのグラフ描画方法と合わせて学びます。
このタスクでは以下の内容を学びます。
Mission 3
取得した株価データの内容については、その特徴も含め、一通り確認することができました。ところで、株価予測を成功させるためには、その予測に役立つ情報がデータに含まれている必要があります。株価データそのものも、将来の株価を予測するための立派な情報の1つですが、株取引にはこの他にも様々な予測に役立つ指標が提案されています。本ミッションでは、モデル予測に役立つデータを、ドメイン知識を活用して作成する方法を学びます。
特徴量の生成方法には様々な方針がありますが、ここではドメイン知識を利用した特徴量生成を行います。
Mission 4
いよいよモデル作成に移ります。これまでに準備したデータを元に、直近の5日間分のデータから、翌取引日の株価の上下を予測するモデルを作成します。本ミッションでは、モデルに学習させるためのデータ構造の変形や、データのスケールの依存性を除くための標準化を学びます。加えて、時系列データに対して効果的な深層学習モデルとして、LSTMネットワークの作成方法を学びます。
まずは、データを説明変数と目的変数に分割します。その後、モデルを作成するために使う学習データ、学習時の汎化性の確認用の検証データ、そして作成したモデルの精度を評価するために使う評価データの計3つに、データを分割します。
Kerasの LSTM ネットワークでモデルを学習するためにデータ構造の変形を行います。このため、学習データ、検証データ、評価データそれぞれを、5日間ごとのデータのまとまりを積み重ねた形へと、データ構造を変形します。
また、学習データ、検証データ、評価データにおけるスケールの違いを解消するために、標準化と呼ばれるデータ変換も実施します。
Kerasを用いてLSTMネットワークを作成して、株価の上昇の有無の予測を行います。まずネットワークの構造の定義を行い、つづけて学習データを与えてモデルの学習を実施します。また、学習時には検証データを用いた汎化性能の評価も同時に行います。最後に評価データを用いて予測した結果を元に、未知のデータに対するモデルの精度を測定します。
なお、モデルの予測結果と、正解の値となる目的変数との一致具合については、正解率を用いて計算します。これは、すべての予測対象の内で、株価が上昇、あるいは下降について当てられた割合を示します。たとえば、予測対象が100件あった時に、上昇予測の正解が30件、下降予測の正解が35件であった場合に、正解率は65%となります。
Mission 5
作成したモデルは一定程度の精度が得られたものの、学習に使われたデータとそうでないデータにおける精度の差が大きくなっていました。将来の株価を予想するという、モデルの有用性という観点で見れば、未知のデータに対する精度も高くあるべきです。そこで本ミッションでは、学習データへの過剰な適合を防ぎながら、モデルの学習を行う正則化のテクニックについて学びます。
本クエストは将来の株価の上下を予測するといったもので、株価の時系列のふるまいを学習できるものとしてLSTMネットワークを採用しました。ただし、時系列のふるまいについては、LSTMネットワークが学習してくれることを期待するだけでなく、有用な特徴量を用意してあげると、より学習がしやすくなる場合があります。そこで、本タスクでは、時系列のふるまいを表す特徴量を追加することで、モデルの精度向上をめざします。
本タスクでは、モデルの学習に制限をかける方法として、モデルのネットワークにDropoutを導入します。
本クエストでは、株式投機に役立つ機械学習の活用として、将来の株価の上下を予測するモデルの作成に取り組みました。クエスト全編を通じて学んだことをおさらいしましょう。