日経平均株価をLSTMを用いて予測してみた

概要 今流行りの深層学習で日経平均株価を予想してみました。 結論から言えば、全く予想できず、惨敗でした。 LSTMとは LSTMとはリカレントニューラルネットワーク(RNN)と呼ばれる機械学習手法の一つです。 RNNを用いることで、現在と過去一定時間の時系列データから、未来のデータを予測することができます。 また、RNNを改良したLSTMでは、長期のトレンドが反映されやすいとされています。 詳しくはこちらのサイトをご覧ください。 学習データとかモデルとか こちらのサイトから、過去4ヶ月の1時間足のデータをダウンロードし、学習データとして用いました。 モデルの隠れ層のユニット数は100、過去20時間の株価から1時間先の株価を予測するモデルを用いました。学習方法はAdamを用いました。 実装 Keras(TensorFlow)を用いて実装しました。初めて使ったんですが、短く書けて便利ですね。以下、ソースコードを載せておきます。 # coding: utf-8 import numpy as np from keras.models import Sequential from keras.layers import Dense, Activation from keras.layers.recurrent import LSTM from keras.optimizers import Adam from keras.initializers import TruncatedNormal from keras.callbacks import EarlyStopping from sklearn.model_selection import train_test_split import matplotlib.pyplot as plt import seaborn import pandas as pd df = pd.read_csv('~/deep_learning/csv/nikkei4_7.csv') x = df['始値'] / df['始値'].max() f = list(x) length_of_sequences = len(f) maxlen = 20 data = [] target = [] for i in range(0, length_of_sequences - maxlen): data....

July 16, 2017

一色正彦ら著『理系のための交渉学入門』を読みました

交渉というと、心理的駆け引きがものをいう、才能が支配する活動であり、自分のような口下手には縁遠いものだという印象がありました。 しかしながら、本書は「交渉には理論があり、後天的に交渉力は獲得できる」という立場のもと、その基礎的な理論を紹介しています。 もっとも基礎的なこととして、交渉は準備が8割であり、始める前につぎの3つを決めるべきだとあります。 ミッション(Mission):交渉の軸となるもの。 ゾーパ(ZOPA, Zone Of Possible Agreement)最高と最低の2段構えの幅のある目標 バトナ(Best Alternative To Negotiated Agreement):ミッションを達成できなかったときの代替選択肢。 また、これらを定める前後で、違いを取り巻く状況を把握するために、マップやツリーを書いてみることは、状況を俯瞰したり、問題点を分解したりする際に役立ちます。 交渉中、お互いの考えを把握するために、ブレイン・ストーミング、いわゆるブレストを行うことも非常に有効だとあります。 ただし、ブレストをする上で絶対に守らなければいけないこととして、 はじめに最後に行うことを決めておく アイデアの批判と評価を混在しない 取りうる選択肢を決める際は、軸を決めて比較し、決定する などがあります。 相手との長期的な関係を求めている場合、下手な交渉テクニックを使うことはあまり得策ではないそうです。 このような交渉テクニックとして フットインザドア:最初に取るに足らないような要求を提示し、小さなイエスを引き出す、その上で徐々に要求をエスカレートさせていく。 ドアインザフェイス:最初に課題な要求を出して相手にノーと言わせ、条件を下げて本来の要求を出す。 ニブリング:一旦合意に達した後、相手の気が緩んだところに追加条件を提示し、受諾させる。 タイムプレッシャー:アイスブレイクの時に相手の交通手段などを聞き出し、デットラインを把握。その上で交渉の最終条件の提示をそのデットライン近くまで遅らせ、プレッシャーを与える。 などがあります。 最後に、交渉を成功させる秘訣は、決して感情的にならず、なるべく第三者の視点から交渉に臨むことです。 これから社会人になる身として、学ぶべきことが多く書かれていた本書は、ぜひ手元に置いておきたい本だと感じました。

January 29, 2017

GPIFのデータをもとに最適ポートフォリオ問題を解いてみた(3)

GPIFによるデータ GPIF(年金積立金管理運用独立行政法人)は、厚生年金と国民年金の積立金の管理・運用を行っている団体です。 この団体は、定期的に各金融商品のリスクとリターン、相関係数について評価しており、それらをもとに積立金の運用のためのポートフォリオを決定しています。 ただし、ここでの金融商品とは、会社ごとの株式などではなく、TOPIXや日経225などに代表される、株式市場の株価指数を指すこMとに注意してください。 GPIFは、金融商品を 国内債券 国内株式 海外債権 海外株式 の4つに分けて評価をおこなっており、それぞれのリターン、リスク、相関係数の値は2016年公開のこちらの資料によると、つぎのようになっています。 リターン(リスクプレミアムなし) 国内債券 国内株式 海外債権 海外株式 2.3 5.9 3.6 6.3 リスク 国内債券 国内株式 海外債権 海外株式 4.2 25.23 11.82 26.76 相関係数 国内債券 国内株式 海外債権 海外株式 国内債券 1.000 -0.230 -0.040 -0.090 国内株式 -0.230 1.000 0.060 0.660 海外債権 -0.040 0.060 1.000 0.550 海外株式 -0.090 0.660 0.550 1.000 今回はこれらの金融商品に加えて、「定期預金」も考慮したポートフォリオを最適化したいと思います。 ここで、定期預金のリターンは0.1、リスクは0、他の金融商品との相関係数は全て0としました。 いくつかの資料によれば、ポートフォリオを最適化するにあたって、リスク資産と無リスク資産は分けて考えるのが定石のようです。 しかしながら自分には「無リスク資産をリスク0のリスク資産としてみなす」ことが、何故まずいことなのかよく理解できなかったので、今回は「定期預金」もポートフォリオに加入してみた次第です。 このあたりに詳しい方がおられましたら、ぜひご教授ください…… CVXOPTを用いた最適化 さて、以上のデータを用いて前回紹介した2次計画問題を解くために、Pythonでスクリプトを作成しました。 作成したスクリプトの中では、CVXOPTというソルバー(問題を自動で解いてくれるツール)を用いています。 CVXOPTの使い方は、こちらの記事が参考になります。 ソースコード import numpy import cvxopt from cvxopt import matrix import matplotlib....

January 9, 2017

GPIFのデータをもとに最適ポートフォリオ問題を解いてみた(2)

ポートフォリオ最適化 複数の金融商品の組み合わせのことを「ポートフォリオ」といいます。 あなたはAとBを購入する際、そのポートフォリオを調節することで、リスクをできるだけ小さくしながら、リターンをできるだけ大きくしようと思っています。 けれども、「ハイリスクハイリターンの原則」により、それらを限りなく小さくすることはできません。 しかしながら、あなたがもし「望ましいリターン」を決めたときに、「そのリターンを達成し、かつ最もリスクを小さくするポートフォリオ」を求めることは可能です。 このことを「ポートフォリオ最適化」といいます。 この問題を数学的に記述しましょう。 $n$個の金融商品を考えます。 それぞれの商品には$1,\ldots,n$とラベルが振られているとします。 それぞれの商品のリターンを$\mu_1,\ldots,\mu_n$とします。 それぞれの商品のリスクを$\sigma_1,\ldots,\sigma_n$とし、それらを対角に並べたものを$\Sigma$とします。 つまり $$ \Sigma = \begin{bmatrix} \sigma_1 & \cdots & 0\ \vdots & \ddots & \vdots\ 0 & \cdots & \sigma_n \end{bmatrix} $$ です。 商品$i$と$j$の間の相関係数を$r_{ij}$とし、それらを縱橫にならべたものを$R$としましょう。 つまり $$ R = \begin{bmatrix} r_{11} & \cdots & r_{1n}\ \vdots & \ddots & \vdots\ r_{n1} & \cdots & r_{nn} \end{bmatrix} $$ です。 それぞれの商品の購入割合(つまりポートフォリオ)を$w_1,\ldots,w_n$とし、これらを縦に並べたものを$w$とします。 あなたはポートフォリオ$w$を決めることで期待リターン$\nu$を達成したいとしましょう。 このとき、ポートフォリオ最適化問題はつぎのように定式化できます。 最小化すべき目的関数は $$ w^\mathrm{T}\Sigma R \Sigma w\ $$ です。これは全体のリスクを表します。 また、制約条件は $$ w_i \ge 0 \ \forall i = 1, \ldots, n,\ \sum_{i} w_i = 1,\ \sum_{i} w_i\mu_i \ge \nu $$ です。 一つめの不等式は、かく商品の購入割合が正の値であることを表し、2つめの等式は、購入割合の合計が1であることを表します。 また最後の不等式は、全体のリターンが期待リターン$\nu$を上回ることを意味します。...

January 8, 2017

GPIFのデータをもとに最適ポートフォリオ問題を解いてみた(1)

なぜ分散投資が有効なのか ここに2つの金融商品があったとしましょう。 それぞれの金融商品は「リスク」と「リターン」という特徴量を持っているとします。 リスクは将来予想される値動きの幅を表し、リターンは将来予想される価値の上昇率を表します。 確率の言葉を使うと、リスクは標準偏差、リターンは平均に対応しています。 経済学の言葉に、「ハイリスクハイリターンの原則」というものがあります。 これは、ローリスクかつハイリターンな商品はあり得ないということを表すものです。 例えば、銀行の定期預金などはローリスクである代わりに、リターンも小さくなります。 一方で、株式などはハイリターンが期待できますが、値動きが読めない分ハイリスクであると言えます。 また、2つの金融商品のペアは、「相関係数」という特徴量を持っているとします。 これは、2つの金融商品がどの程度連動して値動きするかを表します。 例えば相関係数が正の値なら、片方の商品が値上がりしたとき、もう片方の商品も値上がりすることが多いことを意味し、相関係数が負の値なら、片方の商品が値上がりしたとき、もう片方の商品は値下がりすることが多いことを意味します。 投資の世界には「卵は1つのカゴに盛るな」という言葉があります。 これは、金融商品を分散して買うことで、リターンを維持しつつ、トータルのリスクを減らすことを推奨する言葉です。 例えば今、2つの金融商品の片方をA、もう片方をBとしましょう。 Aのリターンは5、リスクは10であるとします。 またBのリターンは10、リスクは20であるとします。 さらに、AとBの相関係数は-0.5であるとします。 ここで、片方の金融商品を買ったときと、両方を分散して買ったときの、「リターン/リスク」を求めてみましょう。 この値は、リスクに対してリターンがどれだけ大きいかを示すもので、大きいほどお買い得ということを意味します。 まず、片方の金融商品を買ったとき、両金融商品とも、リターン/リスクは0.5です。 つぎに、AとBを半分ずつ購入したときのリターンとリスクを求めてみましょう。 ここでAとBそれぞれのリターンとリスクが$\mu_A, \mu_B, \sigma_A, \sigma_B$、相関係数が$r_{AB}$であるとし、また二つの商品を$w_A:w_B$の割合で購入したとき、合計のリターン$\mu$とリスク$\sigma$は $$ \mu = w_A \mu_A + w_B \mu_B, $$ $$ \sigma = \sqrt{ (w_A \sigma_A)^2 + 2(w_A w_B r_{AB}\sigma_A\sigma_B) + (w_B \sigma_B)^2 } $$ として求められます。 このことを用いると、分散投資したときのリターンは $$ 0.5\times 5 + 0.5\times 10 = 7.5 $$ となり、リスクは $$ \sqrt{ (0.5\times 10)^2 + 2(0.5\times 0.5\times (-0.5)\times 10\times 20) + (0....

January 5, 2017