まとめデータSalmonStatsに登録されている約40000件のデータを参考にしました。一シフト四人で行うので、16万人分のプレイヤーデータがあるわけですね。水没厳正などで正しくないデータがいくつかあるので明らかにまともにプレイしていないであろうデータは除きました。その結果、およそ15万件ほどのデータを手に入れることができました。直感的でわかりやすいのはやはり平均値でしょう。42.794これは途中で失敗したWAVEも含まれているので、正規化したい場合は2.537で割って3をかければオッケーです。分散の値が大きければ大きいほど、人によって差がでてくるという意味です。230.865これだけでは赤イクラなどの値が大きすぎてパッと見わからんので、標準偏差を取りたいと思います。標準偏差はこれらの平方根を取るだけなので簡単ですね。15.194さて、平均とこの標準偏差が求まれば馴染みの深い偏差値という値を求めることができます。偏差値を求めるよりも全サーモンランユーザの上位何%であるかを表示したほうが楽しいと思うのでそちらにしようと思います。累積確率これは自分が上位何%に位置するかを表す確率です。上位5%だとしたら20人に1人くらいのウデマエというわけですね。50%より上だと平均より上手いというわけなので、以前プレイしたぼくの記録を評価にかけてみました。46.575%うーん、微妙すぎて差が全然わからん!!!ボス討伐は平均が11くらいに対して17は稼いでいたと思うのですが、伸び悩んでしまいました。これはドスコイ大量発生などで20越えの記録がたくさんあると、正規分布が広くなってしまうことが原因だとは思うのですが。考えてみればこれは当然のことで、各バイトごとの記録と平均の記録を比べるのはおかしなことなんですよね。比べるなら、各バイトの記録と自分の各バイトの記録を比較しなければいけないわけです。多変量解析さて、ここからが本番の多変量解析に入ります。結局ここで求めたいのは、ユーザのパラメータのうちもっともクリアにつながっているパラメータは何で、どのくらい寄与しているかということが知りたいわけです。「重回帰」などがあるわけですが、今回は線形回帰モデルで試したいと思います。データ解析にあたりまして以下のサイトを参考にさせていただきました。Pythonで回帰分析できるのめっちゃ楽、R言語とか全然わからんし...一部の画像がものすごくわかりやすかったので引用させてもらっていますが、権利上問題があるようでしたらすぐに削除いたします。説明変数と偏回帰係数の積の和で目的変数を表現するので「線形回帰」と呼ばれるわけですね。線形回帰モデルでは複雑なモデルが表せないので、例えば各説明変数に強い相関関係があった場合には実際に欲しい値が得られない可能性があります。waves今回はこの10個のパラメータを利用しました。オオモノ出現数とかあんまり要らなくね?と思うかもしれないけど、いろいろ試してみればいいのだ。今回の目的関数はwavesで、要するにクリアWAVE数(0−3の値を取る)に最も寄与しているパラメータは何かということを探りたいわけですね。t_golden_eggs-7.78419962439e-17当たり前といっちゃ当たり前なんですが、チームの金イクラ納品数が最も重要であることがわかりました。次点の寄与度である、ボス出現数やチーム赤イクラ数に比べて3.5倍くらい差をつけているのでこれはもう「サーモンランは金イクラをチームで運ぶゲーム」と言い切っても過言ではないでしょう。逆に意外だったのは、個人が金イクラを納品する数というのはほとんど重要視されていないということです。個人の討伐数は金イクラ納品に比べて10倍くらい価値が高いということが示唆されています。倒せる方は倒したほうがいいということなんでしょうか?討伐率換算チームでオオモノを倒した数よりも、チームでオオモノを倒せた割合の方が大事なんじゃないかと思ったので、ボス討伐率に換算して計算してみました。t_golden_eggs-1.75100735371e-15するとオオモノ討伐率はほとんど関係ないことがわかりました。golden_eggs-1.4288863555e-17純粋な個人成績のみを計算するとこんな感じになりました。救助数があんまり重要視されていないのは、仲間の救助は誰でもできますが、自分がやられていると(上手いはずの)自分が行動不能になってしまうことが原因だと思います。想像以上に赤イクラが重要視されていることに驚きました。疑問は残るいくらなんでも金イクラのウェイトが高すぎる気がします。ボスを倒さないとそもそも金イクラが出現しないからです。この係数だとオオモノを2.67体倒してようやく金イクラ1個と重みが同じということになります。オオモノ20体倒してて金イクラ20納品とオオモノを一体も倒していないけど、金イクラを30個運んだ人のほうが優秀ということになるわけです。いくらなんでもそれはないでしょ、ということですね。正規化してるので多分この考え方であってると思うけど、間違ってたらコメントなりで連絡下さい。t_golden_eggs-9.55042625411e-17これだとオオモノ1体討伐が金イクラ7つ換算ということになり、この辺が落とし所なのかなという気がします。要は、余剰分の金イクラについては価値が低く、それ以外であれば価値を高くしたいわけなんですよね。ロジスティック回帰クリアしたかしてないかだけであればロジスティック回帰がいいらしいので、これを利用してみることにしました。ここまでやって気づいたんですが学習元のデータをちゃんと数えていませんでした()ロジスティック回帰でやりたいことは二値分類なので、それらを同数だけ用意しないとダメなんです。クリアしたかどうかをパラメータから判定させたいときにクリアデータが全体の八割あれば「パラメータに関係なくクリアと判定する」という愚直な作戦が八割成功してしまうからです。入力パラメータちゃんと説明しておかないと自分でもわけわからなくなりそうなので。自身に与えられたノルマ(全ノルマの25%)に対してどのくらい金イクラを運んだかどうか。キケン度MAXだとノルマの合計は69なので、もし69個納品すれば自身のノルマの4倍運んだことになるので4という値が得られる。四人の平均赤イクラ数よりもどれだけ赤イクラを稼いだかという割合。四人の平均が600のときに赤イクラ900稼げば1.5という値が得られる。したオオモノの25%が自身が倒すべきオオモノ数として、それに対してどのくらいオオモノを倒したかという割合。キケン度MAXだとオオモノは66体出現するので自身のノルマは約16.5体となり、この場合は33体倒せば2という値が得られる。1.47840009で、見ればわかるのだが金イクラ数が最も重みが大きいので全力で金イクラを運ぶのが正解である。シグモイド関数ロジスティック回帰では最終的にパラメータとバイアスの積の和のシグモイドをとるので、それを計算します。Swiftにシグモイドを計算する関数なんてあるのかなあと思ったのですが、シグモイド関数を計算するのに必要なtanh()を計算する関数が実装されていたのでなんとかなりました。実際に計算してみた今のところはどのオオモノを倒したかは全然重要視されていないので、金イクラ数が少ないとオオモノをそれなりに倒しても評価が悪くなります。ざっくばらんとしか言えないのですが、評価が90点を超えればキケン度MAXでもウェルカムくらいには上手なのではないでしょうか。これは他の方との比較をしてみなければなんともですが...まとめ実際に計算してみたところ結構楽しいことが判明した。倒したオオモノの種類などが全く検討されていないので改善は必要。倒すのに必要な移動距離や、インク効率などで計算すればより良い評価ができるかもしれない。自身を天才と信じて疑わないマッドサイエンティスト。十字架の疵は彼女につけられた。コメントをキャンセルメールアドレスが公開されることはありません。