今回は、集合知プログラミング の第10章にでてきます株価の因子分析を取り上げます。
NMFの計算を行うnnmf.pyを読み込んでいます。
また、銘柄コードと銘柄名をプリントするために、_plist関数を定義します。
|
|
10章では、Yahoo!ファイナンスを利用していましたが、日本の市場には対応していないみたいです。 そこで、フリーで株情報を公開化している株価データ ダウンロードサイト を利用することにします。
個別銘柄 株価時系列データから上位50個の銘柄を取り出して、銘柄コードリストtickersと銘柄辞書namesを作成します。
|
urlの部分を修正して、株価データのcsvファイルをダウンロードし、日付、出来高を取り出し、 pricesとdatesにセットします。
|
|
データが揃ったので、NMFを使って因子分析をします。
因子分析によって、銘柄の特徴ベクトルと日付の特徴ベクトルが求まります。
|
6.0597757814e+18 2.98595935813e+17 2.26123310135e+17 1.82914414094e+17 1.58774016733e+17 1.42327700527e+17 1.29312900217e+17 1.18216924728e+17 1.07471473865e+17 9.67831467802e+16 8.75826491354e+16 8.04946434703e+16 7.49706463128e+16 7.06535234912e+16 6.70519184709e+16 6.39110958831e+16 6.11406092507e+16 5.87051880091e+16 5.65939019309e+16 5.47945196125e+16 6.0597757814e+18 2.98595935813e+17 2.26123310135e+17 1.82914414094e+17 1.58774016733e+17 1.42327700527e+17 1.29312900217e+17 1.18216924728e+17 1.07471473865e+17 9.67831467802e+16 8.75826491354e+16 8.04946434703e+16 7.49706463128e+16 7.06535234912e+16 6.70519184709e+16 6.39110958831e+16 6.11406092507e+16 5.87051880091e+16 5.65939019309e+16 5.47945196125e+16 |
|
特徴ベクトルの値大きな順にソートし、上位6個の銘柄と日付の上位3個の銘柄を表示します。
特徴ベクトルの上位銘柄の内、トップの値が他の値と比べて突出している場合には、 トップの企業のスキャンダルや特別なイベントによって出来高が大きく変動したことを表し、 逆に値が揃っている場合には、株価の出来高に関するグループの候補になると考えられます。
Feature 8を例にとると、2011-11-10にオリンパスの粉飾決算で「オリンパス」が管理銘柄になり、 その翌日の2011-11-11に大量の売りがでたことに起因していると思われます。
株価の情報については、 日々の日経平均株価を記録するブログを参考にさせて頂きました。 このブログは、日々の株価の情報をきちんと記録してあるので、今回のような結果の検証にはとても助かりました。
Feature 0 [24503731.495503131, "三菱UFJ"] [21942496.698866684, "みずほ"] [14722168.773796422, "新日鉄"] [4157687.7315523904, "シャープ"] [1898085.0597432754, "パナソニック"] [1864064.8616137055, "野村HD"] [(2.4626644727394149, '2012-03-09'), (2.2899306285400796, '2012-02-15'), (2.2480437009410785, '2012-02-24')] Feature 1 [27168040.032120727, "みずほ"] [23570501.275139578, "東芝"] [8793882.8523550984, "三菱UFJ"] [4133037.6287319614, "日産自"] [3385558.7033507898, "新日鉄"] [3063942.0314624044, "グリー"] [(2.966388973066596, '2011-09-06'), (2.2940302794241605, '2011-08-09'), (1.7605915944996444, '2012-07-25')] Feature 2 [22483374.16913221, "シャープ"] [5764920.5972688748, "パナソニック"] [4718719.9261009339, "ANA"] [3826031.4570076745, "三菱UFJ"] [3599392.8615424554, "東芝"] [2796578.285746316, "ソニー"] [(4.2656715705249884, '2012-03-29'), (3.5237681491909547, '2012-07-24'), (3.4763963315000774, '2012-03-14')] Feature 3 [22327268.744900949, "オリンパス"] [6783618.1721497104, "東芝"] [4011381.1874279948, "日立"] [3763030.3278834787, "野村HD"] [2500871.7967263251, "三井物"] [2157992.1389836962, "三菱商"] [(3.6596980348316972, '2011-11-11'), (3.3883959893234081, '2011-10-18'), (3.0622136678156338, '2011-10-27')] Feature 4 [21030298.841478363, "ANA"] [19145619.39827688, "みずほ"] [15550734.471063728, "三菱UFJ"] [3650608.8318609749, "東芝"] [2627728.1886605611, "日立"] [2072028.4862695236, "日産自"] [(4.7411283281746117, '2012-07-03'), (3.1571797568669742, '2012-07-04'), (2.6690379044978814, '2012-07-26')] Feature 5 [37460566.537939727, "みずほ"] [16967989.879439618, "三菱UFJ"] [8752997.1270286962, "日産自"] [6027004.8152939938, "パナソニック"] [5534338.7011789205, "野村HD"] [3604628.406140069, "ソフトバンク"] [(2.2981950415763723, '2012-02-06'), (1.9427348447695754, '2011-08-25'), (1.9342830658758026, '2012-02-02')] Feature 6 [37426842.155204937, "野村HD"] [19645415.770484798, "みずほ"] [6695366.2084121471, "三菱UFJ"] [2101482.3396030832, "新日鉄"] [1633950.8291756455, "三井住友"] [1581154.0772207044, "DENA"] [(5.100719302072334, '2011-11-08'), (4.2140124094117493, '2011-11-09'), (2.7067470001117937, '2012-03-22')] Feature 7 [49855887.587955639, "みずほ"] [7166732.1649423679, "日立"] [6697903.567755457, "新日鉄"] [4766056.4778533829, "東芝"] [2615196.6310248198, "日産自"] [1957292.7358615058, "三井物"] [(3.9887861874876833, '2011-08-05'), (2.5066276529575675, '2011-10-27'), (2.1986428591943463, '2011-10-28')] Feature 8 [12972593.094876677, "東芝"] [12057143.922293084, "三菱UFJ"] [11887162.858139826, "日立"] [11291908.875963112, "新日鉄"] [9194990.09504476, "日産自"] [6759443.0396503471, "野村HD"] [(2.3414746977026435, '2012-06-04'), (2.2856907325104263, '2011-08-24'), (2.2798007880572251, '2012-05-18')] Feature 9 [22395069.877191965, "日立"] [16660786.457563112, "みずほ"] [9252762.5902375858, "三菱UFJ"] [6525456.9038422294, "野村HD"] [1581587.2629734608, "東芝"] [1348317.4375840703, "ソニー"] [(2.5858682521484515, '2011-08-04'), (2.5551325002251453, '2012-02-03'), (2.2971193641440077, '2012-04-19')] Feature 0 [24503731.495503131, "三菱UFJ"] [21942496.698866684, "みずほ"] [14722168.773796422, "新日鉄"] [4157687.7315523904, "シャープ"] [1898085.0597432754, "パナソニック"] [1864064.8616137055, "野村HD"] [(2.4626644727394149, '2012-03-09'), (2.2899306285400796, '2012-02-15'), (2.2480437009410785, '2012-02-24')] Feature 1 [27168040.032120727, "みずほ"] [23570501.275139578, "東芝"] [8793882.8523550984, "三菱UFJ"] [4133037.6287319614, "日産自"] [3385558.7033507898, "新日鉄"] [3063942.0314624044, "グリー"] [(2.966388973066596, '2011-09-06'), (2.2940302794241605, '2011-08-09'), (1.7605915944996444, '2012-07-25')] Feature 2 [22483374.16913221, "シャープ"] [5764920.5972688748, "パナソニック"] [4718719.9261009339, "ANA"] [3826031.4570076745, "三菱UFJ"] [3599392.8615424554, "東芝"] [2796578.285746316, "ソニー"] [(4.2656715705249884, '2012-03-29'), (3.5237681491909547, '2012-07-24'), (3.4763963315000774, '2012-03-14')] Feature 3 [22327268.744900949, "オリンパス"] [6783618.1721497104, "東芝"] [4011381.1874279948, "日立"] [3763030.3278834787, "野村HD"] [2500871.7967263251, "三井物"] [2157992.1389836962, "三菱商"] [(3.6596980348316972, '2011-11-11'), (3.3883959893234081, '2011-10-18'), (3.0622136678156338, '2011-10-27')] Feature 4 [21030298.841478363, "ANA"] [19145619.39827688, "みずほ"] [15550734.471063728, "三菱UFJ"] [3650608.8318609749, "東芝"] [2627728.1886605611, "日立"] [2072028.4862695236, "日産自"] [(4.7411283281746117, '2012-07-03'), (3.1571797568669742, '2012-07-04'), (2.6690379044978814, '2012-07-26')] Feature 5 [37460566.537939727, "みずほ"] [16967989.879439618, "三菱UFJ"] [8752997.1270286962, "日産自"] [6027004.8152939938, "パナソニック"] [5534338.7011789205, "野村HD"] [3604628.406140069, "ソフトバンク"] [(2.2981950415763723, '2012-02-06'), (1.9427348447695754, '2011-08-25'), (1.9342830658758026, '2012-02-02')] Feature 6 [37426842.155204937, "野村HD"] [19645415.770484798, "みずほ"] [6695366.2084121471, "三菱UFJ"] [2101482.3396030832, "新日鉄"] [1633950.8291756455, "三井住友"] [1581154.0772207044, "DENA"] [(5.100719302072334, '2011-11-08'), (4.2140124094117493, '2011-11-09'), (2.7067470001117937, '2012-03-22')] Feature 7 [49855887.587955639, "みずほ"] [7166732.1649423679, "日立"] [6697903.567755457, "新日鉄"] [4766056.4778533829, "東芝"] [2615196.6310248198, "日産自"] [1957292.7358615058, "三井物"] [(3.9887861874876833, '2011-08-05'), (2.5066276529575675, '2011-10-27'), (2.1986428591943463, '2011-10-28')] Feature 8 [12972593.094876677, "東芝"] [12057143.922293084, "三菱UFJ"] [11887162.858139826, "日立"] [11291908.875963112, "新日鉄"] [9194990.09504476, "日産自"] [6759443.0396503471, "野村HD"] [(2.3414746977026435, '2012-06-04'), (2.2856907325104263, '2011-08-24'), (2.2798007880572251, '2012-05-18')] Feature 9 [22395069.877191965, "日立"] [16660786.457563112, "みずほ"] [9252762.5902375858, "三菱UFJ"] [6525456.9038422294, "野村HD"] [1581587.2629734608, "東芝"] [1348317.4375840703, "ソニー"] [(2.5858682521484515, '2011-08-04'), (2.5551325002251453, '2012-02-03'), (2.2971193641440077, '2012-04-19')] |
ここで、オリンパスの株価チャートがどのように変換しているか、RのRFinanceYJパッケージを使って表示してみましょう。
RFinanceYJ、quantmodがインストールされていない場合には、コメントを外して実行してください。 RFinanceYJのインストールには、libxml2-devが必要となります。
[1] "quantmod" "TTR" "Defaults" "RFinanceYJ" "xts" "zoo" "XML" [8] "stats" "graphics" "grDevices" "utils" "datasets" "methods" "base" [1] "quantmod" "TTR" "Defaults" "RFinanceYJ" "xts" "zoo" "XML" [8] "stats" "graphics" "grDevices" "utils" "datasets" "methods" "base" |
|
NMF分析で抽出した特徴的な銘柄の株価と出来高をプロットしてみます。 ここでは、野村HD、三菱UFJ、グリー、DENAを例とします。
|
|
最後に、銘柄の特徴ベクトル(計算では$h^T$)を使って株の銘柄の クラスタリングを行います。
グリーとDENA、三井物と三菱商、パナソニックとソニー等きれいに分類できています。
株の出来高をNMFで因子分析するだけで、銘柄のクラスタリングや関連づけができることに 正直驚きました。
|
|
|