Rで学ぶ損保数理①(クレームモデルとは?)
ネット麻雀「天鳳」を統計的に分析してみた(後編)
今回は主成分分析、因子分析を用いて、プレーヤーを打ち筋の観点から分類することを試みます。
1.主成分分析、因子分析
主成分分析は多くの変数を少ない変数に要約する手法の1つです。因子分析も主成分分析に類似した手法ですが、因子分析は多くの変数の背後に隠れているいくつかの因子を抽出する手法になります。
主成分分析、因子分析を用いる例として、期末テストのデータがあります。
期末テストの全科目の点数データに、主成分分析、因子分析を用いると
「文系科目が得意」⇔「理系科目が得意」
「美術・技術系の科目が得意」⇔「筆記試験系の科目が得意」
といった隠れた評価軸を明らかにすることができます。
今回は麻雀における各種成績指標をより少ない変数に落とし込むことで、麻雀の成績における隠れた評価軸を分析し、プレーヤーたちの打ち筋を抽象的に評価することを試みます。
2.結果
主成分分析の結果は次の通りです。
第一主成分は前回の多重回帰分析に用いた説明変数と成績データによって大きく動く成分であることが分かります。第二主成分は和了率や放銃率、副露率など、勝負に出れば出るほど小さくなる成分といえます。第三主成分はドラや役を使いこなして点数を稼ぐことによって大きくなる成分であると考えられます。
結果を分かりやすくするため、因子分析の結果についても見てみます。(varimax法を使った結果になります)
3.考察
第一因子は優秀⇔平凡の因子であると評価できます。第一因子得点が高いほど平凡なプレーヤーであることを意味します。因子負荷量の結果と重回帰分析の結果が一致していることからも、この評価は適切だと考えられます。
第二因子はリスク愛好派⇔ベタオリ派の因子であると評価できます。第二因子得点が高いほど、巡目が深い和了が多く、放銃率、ラス率も高いです。経験からの“読み“に頼って勝負するタイプであると考えられます。
第三因子は手作り重視⇔手数重視の因子であると評価できます。第三因子得点が高いほどドラや高い役をからめた大きな手を狙う傾向が強いです。逆に第三因子得点が低いほど安手を連発して和了を量産し、相手を牽制する傾向が強いと評価できます。
第三因子までの累積負荷量が0.706となったので、全変数の概ねの情報は要約できていると判断し、第三因子までの因子得点を散布図に描いてみます。
(Factor1が低いほど優秀、Factor2が高いほどリスク愛好派)
(Factor1が低いほど優秀、Factor3が高いほど手作り重視派)
(Factor2が高いほどリスク愛好派、Factor3が高いほど手作り重視派)
散布図のとおり、強者たちにはっきりしたクラスタリングは見られず、一様に散らばっていることが分かります。強者たちを打ち筋によってグループ化することは難しそうです。大体の人が同じような打ち方をしており、一部の人が個性の強い打ち方をしていることが伺えます。(見方を変えれば特徴がない打ち筋の人でも良い成績を出しうるといえるかもしれません)
たとえば、「断幺ドラ3」氏の戦績データに注目すると、因子分析の結果からは成績は標準、リスク愛好派、手作り重視の傾向があると評価できます。実際に氏の戦績データを見ると1位率(28.5%)と4位率(25.6%)が突出して高く、まずまずの成績(安定レート:1984.74)を出されています。またリーチを多用しており(立直率:23.2)、先制立直にこだわらずに勝負に臨んている姿勢が読み取れます。
一方「長村ビッグ」氏は成績は優秀、ベタオリ派、手作り重視のタイプと評価できます。実績データから高い和了率(23.5%)と極端に低い放銃率(11.4%)が見て取れ、因子分析の評価に近いと言えます。
また、データが2件あった「超ヒモロリ」氏は第三主成分で評価が大きく変わっていることにも注目です。2件のデータの観測期間の間で、「手数重視⇔手作り重視」の打ち筋が変化があったとも読めるかもしれません。
4.総論
多重回帰分析の結果から、オンライン麻雀ゲーム「天鳳」における成績は、
の4つによって大部分を説明でき、立直率や平均和了巡目の説明能力は相対的に低いと考えられます。
また、主成分分析、因子分析の結果から、プレーヤーの打ち筋のタイプを見る因子として、
- 優秀⇔平凡
- リスク愛好派⇔ベタオリ派
- 手作り重視派⇔手数重視派
の3つの因子が考えられます。
(関連記事)
ネット麻雀「天鳳」を統計的に分析してみた(前編)
本記事では、オンライン麻雀ゲーム「天鳳」の成績データを分析し、良い戦績をあげているプレーヤーの特徴を明らかにします。
1.天鳳について
天鳳はネット麻雀の中で最も流行っているサービスの一つです。全国の猛者と自動で対戦できる手軽さが人気で、十数万ものプレーヤーがいると言われています。その中で優秀な成績をあげている強者たちの多くは、自分の対局をデジタル形式で記録し、データ分析を行ってさらなる高みを目指しています。
今回は、天鳳強者たちの牌譜解析データを分析し、彼らの成績から1.良い戦績をあげているプレーヤーの特徴を明らかにし、2.強者の打ち筋についてどのようなタイプがあるのかを探ってみます。
2.用いたデータ
http://tenhou7.s350.xrea.com/で公開されている(リンク切れしているようです)データを利用します。csv化したデータは下記の通りです。
・ルールは東風戦のみを分析対象とします。
・対戦回数が500戦以下の戦績データに関しては信頼性が低いと判断し、除外します。
よって今回は、全25プレーヤーのデータ(以下敬称略、有栖、長村ビッグ、おっおっおVIΡ、コハク、さくらこ、芝村矜侍、寂夜霽月、女子更衣室、小鳥遊夜々、断幺ドラ3、超獣GIGA、超ヒモリロ1、超ヒモリロ2、てんぽいんと、長岡大明神、なんぞこれ~、ヒゲロング、メタルクウラ、理想雀士、六分儀ゲンドウ、ロリータな焼肉、bakase、kuboowy、HGST、@馬杉寧香)について分析します。
ただし、超ヒモリロ氏については2件に分かれてデータがあったため、それぞれ別に分析することとします。同じプレーヤーのデータにどのような違いが出るのかに注目です。
各プレーヤーの成績データとして、以下の11種のデータを用います。(平均順位、予想安定レート、ラス率、和了率、和素点、平均和了巡目、和了時ドラ枚数、放銃率、放素点、立直率、副露率)これらのデータは4つに大きく分類できます。
2-1.成績データ
①平均順位、②予想安定レート、③ラス率の3つが成績データです。
①平均順位は1東風戦ごとの最終着順を対戦数で平均したもので、小さいほど実力があることを示します。平均順位は同卓してきた相手の強さを考慮に含められない欠点もあります。(強い人同士がマッチングしやすいため)
②予想安定レートは平均順位と同卓する相手のレートを考慮したデータなので、予想安定レートをもっとも信頼できる成績データとします。予想安定レートは高ければ高いほど実力があることを示します。
③ラス率は全対戦数のうち4位(ビリ)で終わった対戦の割合を示します。4位率の低さは「段位」と呼ばれるレートとは異なる成績指標を上げるのに必須だと言われており、今回はラス率も成績データとして考慮に含めることにしました。ラス率は高ければ高いほど実力がないことを示します。
2-2.和了データ
④和了率、⑤和素点、⑥平均和了巡目、⑦和了時ドラ枚数の4つを和了データとします。
④和了率は全局中でプレーヤーの和了で終了した割合を指します。⑤和素点は供託や積棒を除いた素点で見た、和了時の平均点です。⑥平均和了巡目はプレーヤーが和了したときの巡目の平均値です。⑦和了時ドラ枚数は和了時にドラを平均何枚利用しているかを示します。和素点や立直率(裏ドラ発生のため)と相関が高い数字であることに留意が必要です。
2-3.放銃データ
⑧放銃率、⑨放素点の2つを放銃データとします。
⑧放銃率は全局中、プレーヤーの振込で終了した局の割合を示します。⑨放素点は和素点と同様、供託、積棒を除いた素点での放銃時の平均点です。この二つから守備的な打ち回しをする度合いをみます。
2-4.打ち回しデータ
⑩立直率、⑪副露率の2つを打ち回しデータとする。⑩立直率は全局中でリーチをした局、⑪副露率は全局中で副露した局の割合を示します。リーチを多用するか、副露を多用するかの度合いをみます。
3.重回帰分析
まず、端的にネット麻雀で強くなるにはどの指標を重視したら良いかを探るため、予想安定レートを被説明変数とする重回帰分析を行います。多重共線性を考慮して、予想安定レート以外の成績データは説明変数から除外しました。また和了時ドラ枚数も和素点との相関が高いと予想されるため、前者を説明変数から除外しました。
よって、被説明変数を予想安定レートとし、説明変数を和了率(対数値)、和素点、平均和了巡目、放銃率(対数値)、放素点、立直率(対数値)、副露率(対数値)とする回帰分析を試みます。回帰の結果を見たあとで、説明変数を減らしていく、減少法によって適切なモデルを求めていきます。
自由度調整済み決定係数(補正R2)が0.82とかなり大きな値をとっている一方で、立直率、平均和了巡目、放素点のP値が高いです。これらは説明変数として適切でないとみなし、3つの変数を除外して再度回帰分析を行います。
自由度調整済み決定係数は0.81であり、説明変数のP値は低い値に収まっています。説明変数としてはこれらの4つが適切だと判断します。次にこの場合の回帰の残差を検証し、モデルの妥当性について確認します。
観測値と残差にはあまり偏りがないようですが、2σを超える残差も1点見受けられます。QQプロットもいささかいびつではありますが、モデルが大きく外れていないと判断します。
4.結論
予想安定レートは放銃率、和了率、和了素点、副露率によって大部分を説明できるといえます。オリる技術、和了る技術だけでなく、高い手を作るスキルや効率的に副露するスキルについても、優秀な成績を出すために重要であると分かります。
逆に、成績優秀者の中では、リーチするしない、和了の早い遅いについてはさほど成績に大きな影響を与えていないようです。この点は一般の戦術書で言及されていないので意外に思われました。(無論、プレーヤー総体で比較すると圧倒的に和了へ向かう速度は速いのでしょうが、巡目が深くなっても和了できることによって、強者の平均和了巡目が低くなっていない可能性があります。)
今回導いた予想安定レートの推定式は次の通りです。
予想安定レート推定値 =
1,976 + 762 × ln和了率 + 0.111 × 和了素点 - 348 × ln放銃率 + 186 × ln副露率
次回は主成分分析、因子分析を行い、各プレーヤーの打ち筋にどのようなタイプがあるかを探っていきます。
統計検定準1級に合格しました
先日、統計検定準1級の合格発表がありました。大変うれしいことに評価Sをいただいて合格することができました。引き続き1級の受験も目指して勉強していきたいです。
試験の難易度としては、アクチュアリー基礎科目の数学をやや難しくしたものに、多変量解析などの専門的なトピックや論述問題が加わったイメージです。直近の2016年6月19日試験での合格率自体は22%となっています。
対策としては、公式問題集と公式サイトの例題集を一周しました。
日本統計学会公式認定 統計検定 1級・準1級 公式問題集[2016〜2017年]
- 作者: 日本統計学会
- 出版社/メーカー: 実務教育出版
- 発売日: 2018/03/14
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
アクチュアリー試験とあまり関連性のない機械学習分野については、はじめてのパターン認識を読んで知識を補完しました。
2016年度の試験では、当ブログでとりあげている線形判別分析や、台風の上陸数のモデリングなどが論述問題で出題されたことから、自分にとってはラッキーな出題でした。
試験の開催は年1回6月のようですので、アクチュアリー試験で中だるみを感じている方にはもってこいの試験だと思われます。今年も12月の試験まで150日を切ったようなので、これを皮切りにスパートをかけていきたいと思います。
追記:統計検定準1級の勉強方法についてまとめました。
アクチュアリー試験 損保数理の問題をRで解いてみる①
今回は、アクチュアリー試験の問題をRで解きます。
取り上げるのはH25年度の損保数理の第二問Ⅲ 非斉次ポアソン過程の問題です。
(1)の答えはオペレーショナルタイムの定義通りなので、上記の通りとなります。tが1/3乗されているため、時間が経過するほど事故が発生しにくくなる設定のようですが、シミュレーションを行うとどのような結果になるでしょうか。
逆関数法を用いて非斉次ポアソン過程Ntをシミュレーションした一例は次の通りです。題意のパラメータλは3で仮置きしています。t=100までシミュレーションを行ってみます。
Ntの期待値はt=27で3×27^(1/3)=9回、t=64で3×64^(1/3)=12回なので、シミュレーションは適切にできているようです。
>||
nhp=function(Tmax,lambda){
u=rep(0,10000)
tau=rep(0,10000)
T=rep(0,10000)
u[1]=runif(1)
tau[1]=-log(u[1])
T[1]=(tau[1]/lambda)^3
u[2]=runif(1)
tau[2]=-log(u[2])+tau[1]
T[2]=(tau[2]/lambda)^3
u[3:10000]=runif(9998)
for(i in 3:100){
tau[i]=-log(u[i])+tau[i-1]
T[i]=(tau[i]/lambda)^3
if(T[i]>Tmax){
T[i]=0
break
}
}
Ti=T[T>0]
N=c(0:length(Ti))
Ti=c(0,Ti)
plot(Ti, N,type = "s",xlab="time",ylab="Nt")
}
nhp(100,3)
||<
数値解を求めてみます。
>||
##n件目の事故がある時刻の平均
ETN=function(m,n,lambda){
result=rep(0,m)
for(j in 1:m){
u=rep(0,n)
tau=rep(0,n)
T=rep(0,n)
u[1]=runif(1)
tau[1]=-log(u[1])
T[1]=(tau[1]/lambda)^3
u[2]=runif(1)
tau[2]=-log(u[2])+tau[1]
T[2]=(tau[2]/lambda)^3
u[3:n]=runif(n-2)
for(i in 3:n){
tau[i]=-log(u[i])+tau[i-1]
T[i]=(tau[i]/lambda)^3
}
result[j]=T[n]
}
kekka=mean(result)
return(kekka)
}
ETN(100,5,3)
||<
n=6の場合、5万回シミュレーションした実行結果は次の通りです。
> ETN(50000,6,3)
[1] 12.42624
6*7*8/3^3=12.444…
(I)が正答だと確認できます。
2次判別分析をRでやってみた(スイス銀行紙幣②)
本記事では2次判別分析を用いてスイス銀行紙幣の分類を行います。
1.2次判別分析とは
2次判別分析(QDA, Quadratic Discriminant Analysis)は古典的な機械学習の手法の一つであり、前回の記事で解説した線形判別(LDA, Linear Discriminant Analysis)から派生したものになります。
統計ソフトRではMASSパッケージのqda関数を用いることで2次判別分析を簡単に行うことができます。
2.2次判別分析と線形判別分析の違い
線形判別分析には「全群団で分散が等しい」という前提を用いる弱点があります。一方で、2次判別分析では「群団間で分散が異なる」場合にも対応することができます。
前回の記事で取り上げているスイス銀行紙幣の例では、偽札群の分布の分散が真札群よりも大きく、裾が厚くなっていることから2次判別分析の利用が適していると考えられます。
3.2次判別分析の利用例
前回と同じスイス銀行紙幣のデータについて、2次判別分析を実行していきます。まずは、下部マージン(bottom)と対角線の長さ(diagonal)の2変数に絞って2次判別分析を行った結果を見てみます。
赤色で示した真札群よりも、緑色で示した偽札群の方が分散が大きいことを反映して、青線の通り凸型の識別境界を描くことができました。真札群と偽札群の重心と等高線を描くと下図の通りとなります。等高線の交わるところを識別境界が通っていることが確認できます。
4.2次判別分析の結果
データセットの全変数を用いて2次判別分析を実行した結果は次の通りです。
> table(test_qda$class,test_y)
test_y
真札 | 偽札 | |
---|---|---|
真札 | 49 | 0 |
偽札 | 1 | 50 |
識別率は99%となり、線形判別と変わらない結果となりました。誤識別されたデータを調べてみます。
ピンク色で示された点が誤識別されたデータになります。真札に含まれる1件の外れ値に対応できなかったようです。
5.2次判別分析の長所・短所
線形判別、2次判別に共通する弱点として、データが正規分布に従うことを前提とする点が挙げられます。スイス銀行紙幣のデータでは各群団がまとまって分布していたため、非常に精度の高い結果を得ることができましたが、データが正規分布に従わず、一様に分布しているケースなどでは、狙い通りの境界を引けない危険性があります。
契約者から取得したデータを保険料率に織り込むことを考える場合、判別分析は汎化能力に優れ、かつ契約者の理解を得られやすいと考えられるものの、コストやプライバシーの観点からどの変数を取得・利用するかが論点になると予想されます。
6.関連記事・参考書籍・ソースコード
続編として、以下の記事を作成しました。
今回は下記の書籍を参考に執筆しています。
今回使用したソースコードは次の通りです。
線形判別分析をRでやってみた(スイス銀行紙幣①)
はじめまして。
当ブログでは小生の独学した内容(主に機械学習)などについて備忘録をかねてまとめていきたいと考えています。多分に誤りが含まれることが予想されますので、お含みおきください。また、先人の皆様にとっては稚拙な内容にはなりますが、至らぬ点についてはご指導頂ければ幸いです。
今回は線形判別分析を用いて、偽札と本物のお札(真札)の分類をやってみます。
1.使用するデータ
使用するデータとしては、次の論文で取りあげられているものを以下のサイトから孫引きします。
Flury, B. and Riedwyl, H. (1988). Multivariate Statistics, A Practical Approach, Cambridge University Press
http://mo161.soci.ous.ac.jp/@d/DoDStat/MethodsList/MultivariateAnalysis_allj.html
上記リンク先の「スイス銀行紙幣データ」を使用します。データの内容は下表のとおりとなっています。
No | 変数名 | 変数ラベル | 説 明 | 型 |
---|---|---|---|---|
1 | length | 横幅長 | 紙幣の横の長さ | numerical |
2 | left | 左縦幅長 | 紙幣の縦の長さ(左側) | numerical |
3 | right | 右縦幅長 | 紙幣の縦の長さ(右側) | numerical |
4 | bottom | 下枠内長 |
紙幣の下端から内側の枠までの長さ(下部マージン) |
numerical |
5 | top | 上枠内長 |
紙幣の上端から内側の枠までの長さ(上部マージン) |
numerical |
6 | diagonal | 対角長 | 対角線の長さ | numerical |
7 | class | 真偽 | 札の真偽(0: 真札, 1:偽札) | categorical |
データの散布図を図示すると次のとおりになります。
赤色が真札、緑色が偽札を示しています。さて、このデータを基にスイス銀行紙幣の真偽を定量的に判別するにはどうしたらよいでしょうか?
2.線形判別分析とは?
今回取り上げるFisherの線形判別分析は、古典的な機械学習の手法の一つになります。統計ソフトRではMASSパッケージのlda関数を用いることで簡単に行うことができます。
線形判別分析は各群団の中心からの距離(マハラノビス距離)を基準に判別を行う手法です。
今回は線形判別分析を用いて、スイス銀行紙幣のデータを真札群と偽札群の2群に分類します。真札の平均からの距離と偽札の平均からの距離を比較して、距離が小さい方に判別を行います。
次の図は下部マージン(bottom)と対角線の長さ(diagonal)の2変数に絞った場合の線形判別を図示した例になります。
上図の黒線のとおり、識別境界を直線で描くことができました。なお、真札群と偽札群の分布の等高線を描いた場合、下図のとおりとなります。
3.線形判別分析の注意点
線形判別分析は次の2つの前提に基づいている点に注意が必要です。
①各群団が正規分布に従うこと
②全群団が同じ共分散行列を持つこと(等分散性)
②の等分散性を仮定することから、群団ごとの分布の裾の厚薄には対応できないことが線形判別の弱点です。上の散布図でも、真札群と偽札群の分布の等高線が同じ幅、同じ形になっており、等分散性の仮定を用いていることが分かります。
スイス銀行紙幣のデータについては、①の正規分布に従う仮定は問題なさそうですが、②の等分散性についてはやや難があるかもしれません。一般的には偽札の方が製造精度が低く、分散が大きいとが考えられるため、線形判別分析はフィットしづらいのではないかという予想のもと実行してみます。
4.線形判別分析の結果
200件のデータを100件ずつ学習用、テスト用に分けて実行したところ、テスト結果は次の通りとなりました。
> table(test_lda$class,test_y)
test_y
真札 | 偽札 | |
---|---|---|
真札 | 49 | 0 |
偽札 | 1 | 50 |
等分散の前提に基づく線形判別分析でも、予想に反して判別率99%という良い結果が出ました。 1件だけ真札のデータを偽札であると誤識別してしまっているようです。
5.参考記事・書籍
続編として以下の記事を作成しました。二次判別分析や異常値検出の方法を取り上げています。
今回は下記の書籍を参考にしています。
6.ソースコード
今回使用したソースコードは次の通りです。