機械学習でサザエさんと本気でじゃんけんしてみた②
本記事では機械学習の手法を用いてサザエさんのじゃんけんの手を予測します。前回の記事もご覧ください。
r-std.hatenablog.com
今回の記事では2017年までのサザエさんのじゃんけんの手のデータに基づき、2018年のじゃんけんの手を予測します。予測手法を前回からさらに高度化し、サザエさんのじゃんけんの手の予測に重要な変数を特定します。
1.予測をさらに精緻化してみる
1-1.変数の追加
前回から次の2つのデータの追加を行います。
・サザエさんが4回前に出した手
・直近で出たタイミングが最も古い手
なお、直近で出たタイミングが最も古い手については、サザエさんじゃんけん研究所の公式サイトでも「最大間隔法」として利用されており、有効性が確認されている情報と言えます。
今回予測に用いる変数は下記のとおりとなります。
X:サザエさんの出した手
X1:サザエさんが1回前に出した手
X2:サザエさんが2回前に出した手
X3:サザエさんが3回前に出した手
X4:サザエさんが4回前に出した手
Q:四半期初の場合は1、2、3、4、それ以外は0
Grate:グーチョキパーが四半期内で均等に出る前提でのグーの出やすさ
Crate:グーチョキパーが四半期内で均等に出る前提でのチョキの出やすさ
Prate:グーチョキパーが四半期内で均等に出る前提でのパーの出やすさ
last:直近で出たタイミングが最も古い手
使用したデータは下記リンク先の通りです。
github.com
1-2.勝ち負けの重みづけ
今回は予測の際に負ける確率も織り込むことを検討します。
例えば、グーチョキパーが下記のような確率で出されると予測される場合、どの手を出すのが最も合理的でしょう?
勝つ確率を最大限高めるのであれば40%出ると予想されるグーに対応してパーを出すのが正着ですが、この場合チョキを出されて負ける確率も39%という高い確率になってしまいます。負けの確率も考慮すると、チョキに勝つ確率(39%)とパーに負ける確率(21%)の差が大きい、グーを出す戦略が最適と考えられます。
従来の予測では勝つ確率のみに注目しており、負ける確率については無視していました。今回はPenalty Matrixを使用することで、負ける確率も考慮した予測を試みます。
使用するPenalty Matrixは次の通りです。行は実現値、列は予想値に対応します。例えば行がC、列がGの場合(予想ではグーだと思っていてパーを出したところ、実際にはチョキが出て負けるケース)は2の値をとることになり、予想が外れて負けたときにはペナルティが倍になるようにパラメータ設定をします。
C | G | P | |
---|---|---|---|
C | 0 | 2 | 1 |
G | 1 | 0 | 2 |
P | 2 | 1 | 0 |
2.重要度の高い特徴量を明らかにする
2-1.決定木を使ってみる
結果の解釈が分かりやすい決定木モデルを使って予測を試みます。パラメータをざっくり調整すると、次のように分類できることができました。
直近で出たタイミングが最も古い手の情報と四半期初回フラグの2つだけで分類していることがわかります。
最も出ていない手がチョキの場合はチョキを、最も出ていない手がグーの場合は、四半期初回であればチョキを、そうでなければグーを予想します。最も出ていない手がパー場合はパーを予想します。
なお、決定木を用いて2018年の手を予想した結果は次の通りです。(行は実現値、列は予想値に対応します。)
C | G | P | |
---|---|---|---|
C | 11 | 1 | 6 |
G | 4 | 9 | 4 |
P | 4 | 0 | 10 |
49戦30勝9敗10引分け(勝率61.2%、負け率18.3%)
2-2.ランダムフォレストを使ってみる
RのrandomForestパッケージでは、重要度の高い特徴量を特定するのに下記の2手法を使うことが可能です。
MeanDecreaseAccuracy
MeanDecreaseGini
前者はある特徴量をランダムにシャッフルした際の評価、後者はエントロピー(不純度)による評価が基準となっています。
こちらのサイトによるとMeanDecreaseGiniは、カテゴリーデータと連続データが混ざった場合にバイアスが生じてしまうようです。また、変数間で相関関係がある場合、MeanDecreaseGiniもMeanDecreaseAccuracyも重要度を正しく評価できない欠点があるようです。
2018年のデータに対して、それぞれを算出すると次の通りとなりました。
2手法のそれぞれで重要度が高いとされる特徴量が異なる点が気になりますが、MeanDecreaseAccuracyでは決定木と同じように、直近で出たタイミングが最も古い手の情報と四半期初回フラグの2つが重要であることが示されています。
また、決定木と同様にPenalty Matrixを使用したところ、下記の結果を得られることができました。(行は実現値、列は予想値に対応します。)
C | G | P | |
---|---|---|---|
C | 11 | 2 | 5 |
G | 2 | 10 | 5 |
P | 3 | 0 | 11 |
49戦32勝10敗7引分け(勝率65.3%、負け率20.4%)
3.2018年の結論
- サザエさんのじゃんけんで次の週の手を予測するには、①四半期初回フラグと②直近で出たタイミングが最も古い手の情報の2つが重要である
- 勝ち負けの重みづけ評価をしたrandomForestモデルでは、勝率65.3%を達成し、負け率も20.4%と低く抑えることができた。
- randomForestの特徴量の重要度と決定境界の評価については、さらなる分析が必要
4.2018年の分析の感想
予測を精緻化させるのには多くの手作業が必要になりました。四半期初回フラグや直近で出たタイミングが最も古い手などの一部の情報については、人間が手作業でフラグを追加しない限り、機械学習で変数として認識することは難しいように思われます。
囲碁のような完全情報ゲームでは試行錯誤を通じてAIを成長させることが可能と思われますが、サザエさんのじゃんけんのようなさまざまな特殊要素が絡む不完全情報ゲームでは、仮説を立てて検証する人間の力がどうしても必要になると考えます。
予測結果の説明可能性についても、特徴量の重要度や決定境界を論理的に裏付けるのは非常に困難であると感じました。今回は用いませんでしたが、DeepLearningなどより複雑な手法を選択する場合には、さらに説明困難になると思われます。
機械学習と保険数理の違い(バイアス、バリアンス分解との比較)
今回は機械学習と保険数理の違いについて、数式を用いて比較してみます。
1.機械学習の汎化誤差
まずは機械学習で扱われる汎化誤差(Test error)について数式を見てみます。汎化誤差とは訓練誤差(Training error)に対する概念で、「観測されていない新たなデータを予測した時に生じる誤差」のことを指します。
以下の数式はScott Fortmann-Roeのessayからの引用です。
scott.fortmann-roe.com
確率変数Yはによってモデル化され、は理論値、はノイズを意味しています。一方では予測値を意味しており、との推定二乗誤差である(=汎化誤差)を分解するのが上式の狙いです。
ポイントとなるのは、予測値が定数ではなく、訓練データに従って変動する確率変数として表現されることです。予測値の不確実性は最終式の第2項で示されます。
最終的に、汎化誤差=①バイアス+②バリアンス+③ノイズの3要素に分解することができました。
2.保険数理の推定二乗誤差
一方で保険数理でのリスク評価はどのように行われるでしょうか?以下の数式をマーフィーの論文から引用します。
https://www.casact.org/pubs/forum/07sforum/07s-murphy.pdf
は将来の支払保険金、はその予測値になります。との推定二乗誤差であるを分解するのが上式の狙いです。なお、およびはそれぞれとの母平均です。
最終式の各項をそれぞれ日本語に読み替えると、リスク=(1)プロセスリスク+(2)パラメータリスク+(3)バイアス(モデルリスク)と分解することができます。
プロセスリスクは確率変数が元々もっている不確実性、パラメータリスクは観測値の偏りにより、予測モデルのパラメータを読み誤る不確実性を示しています。
マーフィーの論文では将来支払う保険金の変動リスクについて、プロセスリスク、パラメータリスク(あるいはバイアスを含んだエスティメーションエラー)に分けた評価を行っています。
3.両者の数式の比較
ここで上記の2つの数式を見比べてみると、両者は本質的には同じことを表していて、3つの項がそれぞれ対応していることが分かります。
バイアス=モデルリスク
バリアンス=パラメータリスク
ノイズ=プロセスリスク
機械学習領域では、ノイズの発生はまぬかれえないもの、モデルによらずコンスタントに予測を乱すものとしてざっくり切り捨てられます。
一方で、バイアス、バリアンスについてはモデルを調整して小さくすることが可能なため、これらをどう最小化させるかが肝要となっています。バイアス、バリアンスについては下記イメージの通りです。
特に、バイアスとバリアンスにはトレードオフが存在する(下記イメージご参考)ために、モデルをどのように設定して予測性能を最大化するかが命題となっています。ここには複雑なモデルは訓練データに依存しやすい一方、単純なモデルでは精緻な結果は得にくいというジレンマがあります。
保険数理では、機械学習とは異なりノイズ(プロセスリスク)についても注目します。将来に支払いが予測される保険金の変動や株式などの価格変動リスクなどを評価するために、プロセスリスクを分析することがアクチュアリーの使命の1つになっています。また、バイアスについては実際には観測することのできないモデルリスクとして認識し、複数のモデルをブレンディングするなどして対応することがあります。バリアンスについては観測値の偏りに伴うリスクであるパラメータリスクとして認識し、リスクモデルを用いたリスク評価の対象に含めています。
機械学習ではバイアス、バリアンスのトレードオフについて注目しますが、保険数理でも共通した課題認識を持つことがあります。例えば、リスクモデルの複雑さをどの程度にするか検討する際に、同じようなトレードオフが発生します。各々の会社でリスクモデルを複雑・精緻にする場合には、個社の保有リスク実態に適したリスク評価が可能になるというメリットがあります。一方で、リスクモデルが複雑になりすぎるとモデルの頑健性や各社間の結果の比較可能性は落ちてしまうというデメリットがあります。
データサイエンティストが用いる機械学習の手法とアクチュアリーが用いる保険数理の手法はそれぞれ異なりますが、両者が優れている点を共有することでより精緻なモデルを開発したり、モデルの妥当性を高めることにつながるのではないでしょうか。
アクチュアリーが学ぶべき英語・英単語
今回は、アクチュアリーが英語を使うときに役立つかもしれないリンク集をまとめてみます。
英語力を高めたい方は参考にしてみてください。
Wikipediaの略語集
保険業界に限定されるものではないですが、ビジネス・金融関係の略語が充実しています。
List of business and finance abbreviations - Wikipedia
ABIのglossary
保険業界団体ABIのまとめている用語集です。
https://www.abi.org.uk/data-and-resources/tools-and-resources/glossary/
IRMIのglossary
International Risk Management Instituteの用語集です。
収録されている用語は多く、Googleなどで検索するとよくでてきますが、内容は難しいです。
Glossary | IRMI.com
NIBAのglossary
ブローカー団体の用語集です。用語の量はやや少なく、一般的なものが多いです。
Insurance Glossary | NIBA - National Insurance Brokers Association
Munich Reのglossary
専門的な再保険用語について解説があります。かなり細かい用語までカバーされています。
https://www.munichre.com/ca/non-life/business-and-solutions/knowledge-and-tools/reinsurance-glossary/index.html
トーア再保険の再保険用語集
Munich Reの用語集と同じく再保険の用語集ですが、こちらは日本語対日本語で詳しく解説されています。
トーア再保険株式会社:用語集
IFRS17号に関するKPMGの用語集
KPMGの用語集です。IFRS17号に登場する主要な用語が解説されています。
https://home.kpmg.com/xx/en/home/insights/2018/02/ifrs17-transition-trg-newsletter-insurance-glossary.html
Investopedia
資産運用領域の専門的な単語について詳しく解説されています。
Investopedia: Sharper insight, better investing.
英単語の内容を確認する際はできるだけ複数のソースを参照することが肝要と思われます。
Rで異常値検出してみた(MT法、One Class SVM)(スイス銀行紙幣③)
今回は初心に帰ってスイス銀行紙幣を取り扱います。使用するデータは以前の記事と同じものです。
r-std.hatenablog.com
真札と偽札が含まれるスイス銀行紙幣のデータについて、線形判別分析、二次判別分析を行って識別したところ、高い精度で識別を行うことができました。以前の記事では誤識別されたデータ(下記散布図のピンク色の点)について、「真札中の異常値である」と評価をしていました。
本記事では当該データが本当に異常値であるかを検証します。真札のデータのみが得られている状況から異常値の特定を行い、当該データが異常値として検出されることを確認します。今回は2つの方法を用いて検証します。
1.MT(マハラノビス・タグチ)法
名前のとおりマハラノビス距離を用いて群団の重心から遠いデータを異常値として判定する方法になります。手法の詳細については下記リンクが分かりやすいです。
http://heartland.geocities.jp/ecodata222/ed/edj1-2-2-4.html
スイス銀行紙幣の真札データに適用したところ次の散布図の青点のとおり異常値を検出しました。(異常値のマハラノビス距離は3以上と設定しています。)
前述の誤識別された点(既出の図ではピンクの点)が、MT法では異常値として検出されていることが確認できます。(diagonalが最小の点、つまり散布図の一番下の列でx軸に張り付いている青点が誤識別された点になります。)
2.One Class SVM法
SVMを教師なし学習として用いる方法です。カネール関数を利用してデータを高次元空間に写像し、原点からの距離を最大化するように識別境界を設定します。通常のSVMでは2群のデータの間に識別境界を描こうとしますが、One Class SVMでは原点とデータとの間に識別境界を描こうとする特徴があります。手法の詳細については下記リンクが分かりやすいです。
datachemeng.com
スイス銀行紙幣の真札データに適用したところ次の散布図の緑点のとおり異常値を検出しました。(sigma=0.01,mu=0.001)
こちらも前述の誤識別された点(散布図の一番下の列でx軸に張り付いている緑点)が、異常値として検出されていることが確認できます。
3.MT法とOne Class SVM法の違い
スイス銀行紙幣では両者の違いがいまひとつよくわからなかったので、次のような仮想のデータを作成してみました。平均100程度の2変量正規乱数を大量に用意し、ノイズデータとして平均150程度の2変量正規乱数を少量とY=250-Xとなるような関係を持つデータを追加してみました。
MT法の結果は次の通りです。愚直にデータの重心からの距離を用いて評価していることが伺えます。
マハラノビス距離の分布は次の通りです。追加したノイズデータについてマハラノビス距離が大きいことが観察できます。
一方でOne Class SVMの結果は次の通りです。
各データの類似性を捉えて異常値を評価できていることが観察されます。識別境界を引いてみたところ次のようになりました。
もうひとパターンデータを用意してみます。
MT法の場合
One Class SVM法の場合
アクチュアリー試験の勉強法(一次試験)
本記事ではアクチュアリー試験(一次試験)の勉強法をまとめます。初受験の方、勉強科目を迷っている方向けに、受験科目の選び方、勉強の進め方や参考書の情報などをまとめます。個人の主観が含まれますのでお含みおきください。
1.受験する科目の選び方、順番
一次試験の科目数は5科目あり、どの順番で受験するが非常に重要になります。
初受験者の方はまず、数学の合格を目指すべきです。手のつけやすさを考えると会計・経済・投資理論(KKT)が最も勉強しやすい科目ですが、数学を突破できないと生保数理、年金数理、損保数理に手をつけられなくなります。数学が専攻でない方、文系の方は特に、数学の攻略を最優先事項とすべきです。
数学に合格した後は生保数理または損保数理に手を付けるべきです。年金数理は難易度が高く、生保数理の知識も問われやすいため、生保数理を学習してから取り組むべき科目です。
損保数理では一部、生保数理に関連した知識を使う問題(積立保険の年金現価の計算など)がありますが、必ずしも事前に生保数理を完璧にしておく必要はありません。
(生保数理・年金数理)と(数学・損保数理)の組み合わせについては、内容の親和性が非常に高いので、同時に受験するあるいは期間を空けずに受験する戦略が適切です。会計・経済・投資理論(KKT)は他の科目との関連性が低いため、どのタイミングで受験してもかまいません。
2.各科目の勉強方法
(1)数学
数学の勉強法としては、「弱点克服大学生の確率・統計」とモデリングの教科書(日本アクチュアリー会から販売されている水色の本)を一通り勉強した後、過去問演習にあたるのがおすすめです。
「弱点克服大学生の確率・統計」は例題と解説が充実しているため、独学でも勉強を進めやすい参考書です。学部教養レベルの数学の知識があれば全く問題なく読めますが、文系数学までの方にも読みやすい内容になっています。
- 作者:藤田 岳彦
- 発売日: 2010/04/09
- メディア: 単行本
数学の試験は確率論、統計論、モデリングの3分野から構成されます。勉強の順番は、確率論→統計論→モデリングの順で進めていくことが無難です。
確率論については、代表的な確率分布の確率密度関数、分布関数、期待値、分散、積率母関数を自力で算出できることが必須となります。おのずと手が動くまで練習することをお勧めします。
統計論については、基本的な統計的検定や区間推定、検出力などの問題を押さえれば合格点の水準に達することが可能です。検定で用いる統計量は直前の暗記も重要となるので、自分なりに整理しておくことが肝要です。
モデリングについては出題量は少ないものの点差が付きやすい部分であるため、アクチュアリー会の水色の教科書や過去問を一周しておくことが必要です。
(2)生保数理
生保数理は指定教科書と過去問を中心に勉強しました。生保数理の記号にいち早く慣れることが勉強の鍵となります。
教科書は上巻と下巻がありますが、上巻の第1章、2章、4章、5章を集中的に勉強し、純保険料と責任準備金の算出を理解することが重要です。第3章は下巻の第13章の就業不能の問題と関連性が高いので、後回しにしてもかまいません。
上巻の基本的な公式を理解した後は、下巻の連合生命や多重脱退、チルメル式責準等の問題に手を付けていきやすくなります。下巻は点差の付きやすいポイントが多くあるので過去問と合わせてムラなく対策しておくことが重要です。
受験直前期には下記のサイトの予想問題も参考にしました。実践的で役に立つ問題が取り上げられているため、非常に参考になります。
ハピスマ大学 - お金の基本・運用・活用を学ぼう | アクサダイレクト生命保険
(3)年金数理
年金数理の勉強方法は生保数理に近いものになります。指定教科書と過去問を中心に勉強を進めました。
まずはトロ―ブリッジモデルの各種財政方式を理解することが重要です。財政方式の算式を暗記する際は、各記号の意味を図示しながら理解することをお勧めします。教科書の数式と図を何も見ない状態から書き出せるようにしておくと、試験本番でも迷いなく手を動かすことができます。
公式の理解が十分になってからは、過去問演習を通じて典型的な問題や応用的な問題に取り組みました。網羅的な問題演習を行うのにアクチュアリー受験研究会で提供されているワークブックの「例題で学ぶ年金数理」は非常に役立ちました。
また、受験直前には年金数理人試験の問題も参考にしました。解答には解説がついていませんが、演習パターンを増やしたい方にはおすすめです。
過去の出題例|能力判定試験について|年金数理人を目指す方へ|JSCPA
(4)損保数理
損保数理は範囲が広く、数理的にも難易度が高いため受験時には苦労しました。「例題で学ぶ損害保険数理」で問題の解き方を把握しつつ、内容が理解できていない部分については教科書に戻って数式を追い直すようにしました。
まずは、教科書第2章「クレームの分析」における集合的リスクモデルを理解することが重要です。こちらの記事もご参考ください。
第3章「経験料率」で利用するベイズ統計や第10章「リスク評価の数理」で利用するコピュラ、極値理論など、応用的な数理統計の知識が必要な領域については、自分でまとめノートを作成して理解を確認するようにしました。
一方で、第4章「クラス料率」や第5章「支払備金」、第6章「積立保険」、第7章「保険料算出原理」などは知識がないと解けない問題もあることから、過去問等から暗記すべきポイントを網羅的に洗い出して、直前に見直すようにしました。
受験中は下記の参考書を使用しました。
- 作者:岩沢 宏和
- メディア: 単行本
(5)会計・経済・投資理論(KKT)
他の科目と比較すると勉強には手を付けやすいものの、試験範囲が非常に広いため油断できない科目です。配点としては投資理論が50点、会計、経済が25点ずつとなっており、投資理論の比重が大きくなっています。
また、合格には6割以上得点するだけでなく、3つの分野でそれぞれで設定されている足切り点(※)を超える必要があります。(※各分野の配点に対して4割の得点が必要です。投資理論は20点、会計、経済はそれぞれ10点ずつ。)足切りを確実に回避するためには、配点が少ない会計、経済も含めてムラなく勉強する必要があります。
教科書、過去問を一周するだけでは試験範囲を網羅的にマスターすることは難しいです。早めに過去問に手を付けて、繰り返し練習することをおすすめします。時間に余裕のあるうちに典型的な計算問題を練習し、試験直前は正誤問題等、暗記が重要な問題を対策できるとベターです。
参考書としては、アクチュアリー受験研究会で配布されているワークブックを主に使いました。解き方が分からない問題、知識が足りていない箇所については、指定教科書「財務会計講義」「新・証券投資論」を参照して理解を深めるようにしました。
- 作者:桜井久勝
- 発売日: 2018/03/21
- メディア: 単行本
3.勉強時間
一次試験を突破するのに必要な勉強時間は一科目あたり200時間とも言われています。1日1時間程度コンスタントに勉強するとしても、一科目あたり半年くらいの時間がかかる計算です。
いつから勉強を開始するかに正解はありませんが、業務や学業の繁忙度も考慮しつつ、勉強時間を確保しなければなりません。
無理のないスケジュールを組み立て、出来るだけ前倒しで勉強することが合格の鍵になります。
4.終わりに
一次試験は限られた時間の中で大量の問題を解くことが求められます。試験当日に迷いなく問題が解けるように、早い段階から出題パターンになれておくことが肝要です。
教科書を読んで理解する勉強も大事ですが、手を動かして問題を解けるようになることも高得点を得るには不可欠です。試験を突破するためには6割の得点が必要なので、基本的な問題を計算ミスなく確実に解けるようにすることが求められます。
前記事でも書きましたが、アクチュアリー試験合格には平均8年程度かかるとも言われています。毎年複数の科目を集中的に勉強することが一次試験を早く突破するコツになります。
本記事が読者の方の受験科目の選択や勉強方法の模索の一助になれば幸いです。
アクチュアリー試験合格には何年かかるかシミュレーションしてみた
今回はアクチュアリー試験に合格するまでには何年かかるかをシミュレーションし、最適な受験戦略を考えてみました。
2019/1/11追記:続編となる記事を作成しました。本記事と同様のシミュレーションをjavascriptを用いて実装してみました。
r-std.hatenablog.com
1.アクチュアリー試験について
アクチュアリー試験は一次試験、二次試験の2部構成となっており、一次試験の5科目をすべて合格した後に、二次試験の2科目を受験することができる仕組みになっています。
一般的には正会員になる(二次試験に合格する)には約8年程度かかるものと言われていますが、Rでシミュレーションしてみるとどうなるでしょうか。
2.試算結果
(1)複数科目への分散戦略を取らない場合
モデルの前提は次の通りとします
〈一次試験の受験中〉
・毎年、未取得になっている全科目を受験する。
・各科目の合格率はp1_low,p1_highの間の一様乱数で設定される。
・毎年一科目だけは合格率をstudyだけ高めることができる。
〈二次試験の受験中〉
・毎年、未取得になっている全科目を受験する。
・各科目の合格率はp2_low,p2_highの間の一様乱数で設定される。
・毎年一科目だけは合格率をstudyだけ高めることができる。
①毎年1科目を集中して勉強した場合
まず、毎年1科目を集中して勉強して、50%合格率を高めるケースを考えてみます。
p1_low=10%,p1_high=30%,
p2_low=10%,p2_high=20%,
study=50%として、1万回シミュレーションした結果は次の通りです。
> summary(test_50)
V1 V2
Min. : 1.000 Min. : 2.00
1st Qu.: 4.000 1st Qu.: 7.00
Median : 5.000 Median :10.00
Mean : 5.776 Mean :10.26
3rd Qu.: 7.000 3rd Qu.:12.00
Max. :24.000 Max. :40.00
V1は準会員になる年数、V2は正会員になる年数を表しています。平均すると正会員になるまでには10.26年かかる計算になります。
正会員になる年数の分布をヒストグラム化すると次の通りになります。
②人並みの努力しかしなかった場合
次に、毎年人並みにしか勉強しないケースを考えてみます。
p1_low=10%,p1_high=30%,
p2_low=10%,p2_high=20%,
study=0%として、1万回シミュレーションした結果は次の通りです。
> summary(test_0)
V1 V2
Min. : 1.000 Min. : 3.00
1st Qu.: 6.000 1st Qu.:11.00
Median : 8.000 Median :15.00
Mean : 8.771 Mean :15.35
3rd Qu.:11.000 3rd Qu.:19.00
Max. :32.000 Max. :65.00
正会員になる年数は期待値ベースで15.35年となり、1科目人並み以上に勉強したケースと比較すると5年程度の差がつくことが分かります。人並みの努力しかしない場合にはかなりの時間がかかるようです。
(2)複数科目への分散戦略をとった場合
次にモデルをさらに複雑にしてみます。一科目だけ集中して合格率を上げるのではなく、二科目に分散して合格率を引き上げる戦略を取った場合、正会員になるまでの必要年数はどうなるでしょうか。モデルの変更点は下記の赤字の通りです。
〈一次試験の受験中〉
・毎年、未取得になっている全科目を受験する。
・各科目の合格率はp1_low,p1_highの間の一様乱数で設定される。
・毎年2科目については合格率をそれぞれstudy1,study2だけ高めることができる。(残り1科目の場合は合格率をstudy1+study2だけ高めることができる。)
〈二次試験の受験中〉
・毎年、未取得になっている全科目を受験する。
・各科目の合格率はp2_low,p2_highの間の一様乱数で設定される。
・毎年2科目については合格率をそれぞれstudy1,study2だけ高めることができる。(残り1科目の場合は合格率をstudy1+study2だけ高めることができる。)
毎年2科目を集中して勉強して、合格率をそれぞれ25%ずつ引き上げた場合を考えてみます。
p1_low=10%,p1_high=30%,
p2_low=10%,p2_high=20%,
study1=25%,study2=25%として、1万回シミュレーションした結果は次の通りです。
> summary(test_50)
V1 V2
Min. : 1.000 Min. : 2.00
1st Qu.: 3.000 1st Qu.: 6.00
Median : 4.000 Median : 7.00
Mean : 4.691 Mean : 7.38
3rd Qu.: 6.000 3rd Qu.: 9.00
Max. :14.000 Max. :19.00
正会員になるまでの平均年数は7.38年となりました。1科目集中の戦略をとるよりも、複数科目を勉強する戦略の方が期待値ベースで必要年数が減らせることが分かります。また、合格に必要な年数のばらつきも複数科目を勉強する戦略の方が少ないことが示唆されます。
まとめ
アクチュアリー試験攻略においては、できるだけ複数科目に集中的に勉強に取り組むことが肝要であるようです。
2019/1/11追記:続編となる記事を作成しました。本記事と同様のシミュレーションをjavascriptを用いて実装してみました。
r-std.hatenablog.com
今回使用したソースコードは以下の通りです。
gist96cb267dc3df03f1144783cf38b6baa3
gista6770c9662958d15a5d652e3e708cd43
機械学習でサザエさんと本気でじゃんけんしてみた①
本記事は以下のサイトに掲載されている知見およびデータを参考に執筆しています。
サザエさんじゃんけん研究所公式ウェブサイト(Sazaesan-janken laboratory official website)
1.はじめに
本記事では機械学習の手法を用いて、アニメ「サザエさん」の次回予告で行われるじゃんけんの手を予測してみます。
「2017年冬版サザエさんじゃんけん白書」によれば、サザエさんのじゃんけんには必勝法まではいかなくとも、経験則に基づき勝率を高められるセオリーが存在するようです。
過去の実績データを踏まえると、サザエさんの出す手は毎回ランダムではなく、グー、チョキ、パーがそれぞれ均等に近い割合になるようなバイアスがかかっていることが伺えます。また、四半期初にはチョキが出やすいという傾向もみられます。
人間の経験則で得られているこのような知見について、機械学習がどのような評価を行い、どのくらいの予測精度を出せるのかに注目です。今回用いる手法は次の通りです。
2.使用データ
2017年6月25日分までをサザエさんの過去の手 一覧からスクレイピングさせていただきました。過去に出た手の時系列データに、四半期内でのグーチョキパーの偏りの情報や四半期初のフラグを手で追加したものを使用しています。(なお、放送中止の回は集計から除いています。)
使用するデータは「2017sze.csv」になります。各列の内容は次の通りです。
X:サザエさんの出した手
X1:サザエさんが1回前に出した手
X2:サザエさんが2回前に出した手
X3:サザエさんが3回前に出した手
Q:四半期初の場合は1、それ以外は0
Grate:グーチョキパーが四半期内で均等に出ると仮定した場合のグーの出やすさ
Crate:グーチョキパーが四半期内で均等に出ると仮定した場合のチョキの出やすさ
Prate:グーチョキパーが四半期内で均等に出ると仮定した場合のパーの出やすさ
3.使用する手法
1992年~2016年までの1254回のじゃんけんのデータから学習し、2017年の48回のじゃんけんを予想してみます。使用する手法は以下のとおりです。なお、乱数のシードは3383(サザエさん)とします。
・線形SVM
・randomForest
・決定木
・naive bayes
4.結果
・線形SVM
C | G | P | |
---|---|---|---|
C | 13 | 2 | 2 |
G | 2 | 9 | 4 |
P | 5 | 1 | 10 |
32勝11敗5分
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が最も識別率が高くなりました。誤識別したパターンを個別に分析すれば、より識別率を上げられる可能性がありますが、今回はここまでにしておきます。
2018/12/30追記:続編となる記事を作成しました。
今回使用したソースコードは次の通りです。