アクチュアリーはデータサイエンスの夢を見るか?

Rで保険数理と機械学習をやっています

サザエさんと本気でじゃんけんしてみた①

本記事は以下のサイトに掲載されている知見およびデータを参考に執筆しています。

www.asahi-net.or.jp

サザエさんじゃんけん研究所公式ウェブサイト(Sazaesan-janken laboratory official website)

 

yaju3d.hatenablog.jp

 

*************************************

1.はじめに

本記事では機械学習の手法を用いて、アニメ「サザエさん」の次回予告で行われるじゃんけんの手を予測してみます。

 

2017年冬版サザエさんじゃんけん白書」によれば、サザエさんのじゃんけんには必勝法まではいかなくとも、経験則に基づき勝率を高められるセオリーが存在するようです。

過去の実績データを踏まえると、サザエさんの出す手は毎回ランダムではなく、グー、チョキ、パーがそれぞれ均等に近い割合になるようなバイアスがかかっていることが伺えます。また、四半期初にはチョキが出やすいという傾向もみられます。

人間の経験則で得られているこのような知見について、機械学習がどのような評価を行い、どのくらいの予測精度を出せるのかに注目です。今回用いる手法は次の通りです。

 

2.使用データ

 2017年6月25日分までをサザエさんの過去の手 一覧からスクレイピングさせていただきました。過去に出た手の時系列データに、四半期内でのグーチョキパーの偏りの情報や四半期初のフラグを手で追加したものが下記リンク先のファイルになります。(なお、放送中止の回は集計から除いています。)

http://whitecats.dip.jp/up/download/1515243657/attach/

(password:sze)

 使用するデータは「2017sze.csv」になります。各列の内容は次の通りです。

X:サザエさんの出した手

X1:サザエさんが1回前に出した手

X2:サザエさんが2回前に出した手

X3:サザエさんが3回前に出した手

Q:四半期初の場合は1、それ以外は0

Grate:グーチョキパーが四半期内で均等に出ると仮定した場合のグーの出やすさ

Crate:グーチョキパーが四半期内で均等に出ると仮定した場合のチョキの出やすさ

Prate:グーチョキパーが四半期内で均等に出ると仮定した場合のパーの出やすさ

 

3.使用する手法

1992年~2016年までの1254回のじゃんけんのデータから学習し、2017年の48回のじゃんけんを予想してみます。使用する手法は以下のとおりです。なお、乱数のシードは3383(サザエさん)とします。

・線形SVM

・RBFカーネルを用いたSVM

・randomForest

・決定木

・naive bayes

 

4.結果

・線形SVM

  C G P
C 13 2 2
G 2 9 4
P 5 1 10

 32勝11敗5分

 

・RBFカーネルを用いたSVM

  C G P
C 10 4 3
G 0 13 2
P 3 4 9

32勝9敗7分

 

・randomForest

  C G P
C 10 4 3
G 0 13 2
P 3 4 9

32勝9敗7分

 

・決定木

  C G P
C 12 3 2
G 1 12 2
P 5 3 8

32勝10敗6分

 

・naive bayes

  C G P
C 10 4 3
G 1 11 3
P 2 2 12

33勝9敗6分

 

結果だけ見ると、naive bayesが最も識別率が高くなりました。誤識別したパターンを個別に分析すれば、より識別率を上げられる可能性がありますが、今回はここまでにしておきます。

今回使用したソースコードは次の通りです。

sze_janken

株価変動を分析してみた

今回は隠れマルコフモデルを利用して、個別銘柄の株価リターンを評価してみます。隠れマルコフモデルの概要については下記などをご参照ください。

https://www.slideshare.net/thinkn1108/150719-hmm

隠れマルコフモデルでは、実際には観測できない状態があることを仮定して、説明能力の高いモデルを推定することができます。例えば、株価リターンに隠れマルコフモデルを適用するとボラティリティの高い状態と低い状態、リターンの高い状態と低い状態を分けて評価することが可能になると考えられます。

今回分析する銘柄は何でもよいのですが、野村ホールディングス【8604】を対象とします。隠れマルコフモデルを用いて野村HDの株価リターンがtopixのリターンから大きく乖離する部分を特定し、ニュースリリースなどがなかったかを検証します。

 

まずは、2016年の野村HDとtopixのチャートを重ねてみます。

f:id:r_std:20170815193525p:plain

上図は2016年中の株価変動率(対2016年1月4日終値)を示しています。赤がtopix、緑が野村HDの変動率を示しています。横軸が営業日(2016年は245日)、縦軸が変動率を示しています。(縦軸は左端で変動率0となります)赤線と緑線の推移は似通っているようですが、野村HDの方が変動率の絶対値が大きくなっているように見受けられます。

次は野村HDおよびtopixの日次対数リターンを算出し、単純にtopixリターンを説明変数として野村HDのリターンを単回帰してみます。

Call:
lm(formula = y ~ x, data = data)

Residuals:
Min 1Q Median 3Q Max
-0.092599 -0.008326 -0.000348 0.007715 0.099519

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.0001375 0.0011676 0.118 0.906
x 1.5476281 0.0702720 22.023 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.01824 on 242 degrees of freedom
Multiple R-squared: 0.6671, Adjusted R-squared: 0.6658
F-statistic: 485 on 1 and 242 DF, p-value: < 2.2e-16

単純な回帰分析でも決定係数は0.67程度とそれなりに高いことが分かります。なお、AICは次の通り-1258となりました。

> AIC(m.lm)
[1] -1257.639

次に、状態が2つの隠れマルコフモデルを適用してみます。

Markov Switching Model

Call: msmFit(object = m.lm, k = 2, sw = c(TRUE, TRUE, TRUE))

AIC BIC logLik
-1348.283 -1312.305 678.1414

Coefficients:

Regime 1
---------
Estimate Std. Error t value Pr(>|t|)
(Intercept)(S) 0.0021 0.0056 0.3750 0.7077
x(S) 2.1379 0.3910 5.4678 4.557e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.03490673
Multiple R-squared: 0.5042

Standardized Residuals:
Min Q1 Med Q3 Max
-0.1048995084 -0.0031676084 -0.0005867352 0.0025023988 0.0904901470

Regime 2
---------
Estimate Std. Error t value Pr(>|t|)
(Intercept)(S) -0.0005 0.0008 -0.625 0.532
x(S) 1.4155 0.0502 28.197 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.01026669
Multiple R-squared: 0.8402

Standardized Residuals:
Min Q1 Med Q3 Max
-0.0211668822 -0.0061988674 0.0001718118 0.0063824874 0.0202230937

Transition probabilities:
Regime 1 Regime 2
Regime 1 0.5184655 0.1063328
Regime 2 0.4815345 0.8936672

Regime 1 は決定係数が小さいことから、topixで説明できない部分が大きい状態。一方、Regime 2は決定係数も大きく、topixでほぼ説明可能な状態と言えます。AICについても単純な回帰モデルよりは改善していることが分かります。

 

f:id:r_std:20170815193952p:plain

上段が野村HDの株価リターン、下段がtopixのリターンになります。グレーの網がかかっている部分がRegime 1 の状態と予測される期間です。グレーの期間では個別要因があったことが推測されます。また、各Regime ごとの確率は次の通り予測されています。

f:id:r_std:20170815194217p:plain

Regime 1 と予測されている130~150営業日付近では、2016年7月28日の第1四半期決算発表および自社株買い発表等を受けて環境要因では説明できない株価変動が発生していたと評価できます。

 

今回使用したソースコードは次の通りです。

stock price

 

葉っぱを分類してみた②(SVM, randomForest, Naive Bayesなど)

 前回の記事からの続編になります。

r-std.hatenablog.com

 36種の葉っぱの形状データと手触り(texture)データについて、前回はk近傍法による識別を行いました。今回はSVMやRandomForest, Naive Bayesなどの手法により、識別を行います。

今回使用する ソースコードは次の通りです。

leaf2

 

各手法による識別率の結果は次の通りとなりました。

f:id:r_std:20170402193802p:plain

パラメータチューニングをだいぶ怠っておりますが、k近傍法以外の手法ではまずまずの結果を得ることができました。

前回の記事の考察の繰り返しになりますが、k近傍法での判別が難しいことから、各クラスの中でデータ距離が大きいことが示唆されます。また、各変数が独立であるとの仮定を置くNaive Bayesでも良い結果が出ており、ある程度変数間の相関を無視できることが示唆されます。

 

識別率のみを見ると線形判別が最もよい成績を出していますが、他の手法が優れている部分もあります。たとえばクラス7のデータなどはrandom Forestの方が優れています。

 

今回の記事では手法それぞれの特性と結果の違いを分析することはしませんが、それぞれの識別関数をアンサンブルする(組み合わせる)ことで、識別率は向上を図れると思われます。

 

仮にこのような多クラス分類が、葉っぱの分類ではなく、保険の料率にビックデータを織り込んでいく場合(例えばウェアラブル端末から取得した活動データを料率に反映する場合)に活用されることを考えてみます。

アクチュアリーに期待される役割として考えられることは、①多次元のデータをわかりやすく要約すること、②モデルの精緻さと簡明さのバランスをとること、③コストとリターンのバランスをとること、などでしょうか。

 

次回は株価リターンもしくはpython導入を扱う予定です。

Rで学ぶ損保数理②

 

以前の記事(Rで学ぶ損保数理① - アクチュアリーはデータサイエンスの夢を見るか

の続編になります。第2回目はクレーム総額の確率分布の導出を扱います。

 

 

 

 損害額Xを指数分布、クレーム件数Nを負の二項分布とする複合分布について、パンジャーの再帰式やフーリエ変換を使用して近似値を求めています。

 

 今回使用したコードについては次の通りです。

claim_model_2.R

 

claim_model_3.R

葉っぱを分類してみた①(k近傍法)

今回はk近傍法をRで動かしてみます。

用いるデータセットは以下のサイトから引用します。

https://archive.ics.uci.edu/ml/datasets/Leaf

UCI Machine Learning Repository: Leaf Data Set

40種の葉っぱについて、形状データと手触り(texture)データが記録されています。今回はこのデータセットを用いて、多クラス分類の手法の一つであるk近傍法を利用してみます。

 

変数1~7の形状データを用いて散布図を描いてみます。

f:id:r_std:20170122123631p:plain

 

変数8~14の手触り(texture)データは次の通りになります。f:id:r_std:20170122123955p:plain

変数とクラスが多いため、散布図で一見して評価するのは難しいように思われます。

 

今回利用するk近傍法は、直近のk点の学習データから多数決を行って最も多いクラスに分類を行う直感的に分かりやすい方法になります。

データセットを区分せず、学習データ=テストデータとすると次のような結果になりました。

k=3の場合の識別率 0.7764706

k=5の場合の識別率 0.7264706

k=10の場合の識別率 0.6588235

多数決に用いるデータ数を増やすと識別率が落ちることが分かりました。

 

参考に以前取り上げた線形判別分析も行ってみると、次の通りになりました。

線形判別分析の識別率 0.8705882

線形判別分析の方が良い結果を得られてしまいました。結果の評価の仕方は難しいですが、クラス内でのデータの距離が大きいことで、kNNが機能しにくくなっている可能性があります。

 

次回はSVMやNaiveBayesを取り上げたいと思います。

 

今回のソースコードは以下の通りです。

leaf

統計検定準1級の勉強方法

11月の統計検定も近づいてまいりました。今回は、自分が統計検定準1級を受験した際に勉強した参考書をご紹介します。

 

日本統計学会公式認定 統計検定 1級・準1級 公式問題集[2014〜2015年]

日本統計学会公式認定 統計検定 1級・準1級 公式問題集[2014〜2015年]

 

 統計検定の公式問題集は解答・解説が充実しており、本番の練習になります。収録されている年数が少ないので、来年の受験を考えている方は購入を待った方がいいかもしれません。

 

 

はじめてのパターン認識

はじめてのパターン認識

 

 機械学習分野の知識を学習するのに最適と思われます。ある程度統計の知識がある方は入門書としてスラスラ読めるかと思います。数式がきちんと解説されているのもさることながら、各手法の説明が丁寧になされており、統計検定の論述問題に回答するのに非常に参考になります。章ごとに練習問題があるのも理解につながります。

 

 

弱点克服大学生の確率・統計

弱点克服大学生の確率・統計

 

 大学の一般教養レベルの確率・統計の問題が分野別に練習できます。解説が充実しており、基礎から復習できる良書です。アクチュアリー試験の数学の際にも重宝しましたが、統計検定でも役立ちました。高校数学のレベルから導入があるため、初学者の方にも学習しやすい一冊です。

 

 

統計学入門 (基礎統計学)

統計学入門 (基礎統計学)

 

  統計学の教科書としては最もオススメな本です。統計検定の勉強の際には、忘れてしまった分布の性質などを復習するため、辞典のように参照しました。

 

統計検定準1級は問題数も多く、論述や作図問題など、問題の種類も多岐にわたることから広い範囲を満遍なく学習しておく必要があります。試験までの残り時間は少ないですが、今回受験される方は是非追い込みを頑張ってください。

Rで学ぶ損保数理①

 「Rで学ぶ損保数理」と称して記事を書いてみます。損保数理は一次試験の中では難易度も高く、過去問以外の勉強方法が確立されていませんが、学習中の方の理解の助けになれば幸いです。第一回目はクレームモデルの導入を扱います。 

 スライドの最後では、Xを指数分布、Nを負の二項分布として複合分布を作成した場合の例を取り上げています。 このSの分布について、パンジャーの再帰式やフーリエ変換を使用した場合、どのような近似値を得られるか次回取り上げる予定です。

 今回使用したコードについては次の通りです。

gistf87ae1294d92e7468eff0c432d5c0957