clew

気になるモノ 気になる人 気になる言葉

*

第877回トトくじ予想 チーム別データによる予測 第2弾

      2016/10/04


3WAY方式による分類確率から勝敗を予測する

さて、第877回トト 今節は通常の開催日程、組み合わせですね。初日に J1 9試合、翌日に J2 4試合 という13枠。私が予想ターゲットとしているタイプの組み合わせです。初日の J1 に予測の重きを置いて、今節もチーム別データ、そして新しいテストデータを用いて機械予測に臨みます。

予測手法は 第876回予測 の 検証で使った方法を使用しています。

さっそく分類確率が出ましたので一覧表を載せます。(J1のみ)

j1-2-14%e4%ba%88%e6%b8%ac

少し説明を・・・

枠番についてはヤフースポーツにおける掲載順番を基本としています。データを管理するうえで枠順を統一しておく必要がありますからね。これがズレてくるとやっかいなことになります。確率についてはこれまでと全く同じで、左にAWAYを持ってきています。感覚的には逆となるので勘違いの恐れがありますが、現在使っている H2O-3 という予測アルゴリズムの出力に従って記入しています。

支持率と比較してみるとかなり違った予測をしている枠もあります。支持率は現在のチーム状況を表しているとも言えますが、一方で人気投票という側面もあります。過去においてトトくじはいくつも波乱試合を生み出し、そしてキャリーオーバーになってきました。まず順当結果で終わる回の方が少ないことを思うと、支持率をデータとして扱うことは必ずしも良い結果を生むとは考えにくいです。

私自身は支持率は全く無視しています。

第一候補の列は文字通り、一つを選ぶなら コレ というものです。ただし分類確率の比率を見て 「怪しいな・・」 という枠については マルチ買い で対応した方が良いかもしれません。

浦和ーガンバ大阪 などはどうなるか分からないといってよい。感覚的にもトリプルを選択する方は多いんじゃないかな。

意外な落とし穴として、確率を見る限り 湘南ー柏 があります。今季の直接対決を見る限り、柏優勢ではあるけれどどうか?

注1、湘南ー柏 の予測結果について手違いがありました。上の一覧表画像は修正して入れ替えてあります。

マリノス、鳥栖、神戸 なんかもすんなりとは行かないかもしれません。他にもマルチを検討する枠があります。

J2 については追記予定です。

ディープラーニング予測の注意点と問題

少し話題がずれるのですが、何度もディープラーニングを使って分類予測をするうえで気が付いたことを書きます。

その問題とは、同じトレーニングデータを使って複数回モデル構築して予測した場合に、出力結果が違ってくるケースがあるということ。

これはおそらく SEED に原因があると思います。これは乱数であり、H2O においては自動的に再設定されてしまいます。一応これを回避する方法もあります。*1

*1 ただいま検証中。

single_node_mode

上の箇所にチェックを入れて走らせれば再現性のあるモデルを構築できるはずです。

*1. 現在、検証中ですが、正直分からないですね。。どうも違う。チェックを入れて再検証して設定を確認していますが、どうやらチェックを入れても自動で書き換わっている模様。

過去開催回のデータで実際に再度予測させてみましたが、残念ながらいくつかの枠で確率が大きく変化してしまって ハズレ予測 となってしまうことを確認。困ったなあ。。

これまで同じテストを繰り返した経緯を振り返ってみると、私自身の 人為的入力ミス から違う結果が出力されていた・・・とこれまでは考えていましたが、じつは違う結果が出た原因というのは SEED にあったのではないか?

今節の 名古屋ー福岡 について 計3回 モデル構築をした結果について設定画面をまとめたものを挙げてみます。

seed%e6%a4%9c%e8%a8%bc

SEED の箇所だけピンクでマーキングしてあります。黄色は目印で、その下が計3回のそれぞれの数値となっています。

それぞれの左側 -1.4E+18  というのが初期設定数値であり、H2O-3 においては -1381671209919540000 と示されています。そのすぐ隣の数値がそれぞれのモデルで使われている乱数です。3か所とも違う数値が使われてモデルが構築されていることを確認できます。

つまり、これら3種類の予測モデルは すべて 名古屋ー福岡 についてのものですが、じつは過去データのサンプリングにおいては違う予測モデルだということです。したがって出力結果も変わってきます。

ただし乱数を固定すれば出力結果も再現できます。

大変やっかいな問題ですけど、これからはちょっと注意しなきゃなりませんね。検証作業をする上での注意点は 設定のコピーを撮ることです。モデル構築をしたあとに INSPECT→parameters という具合にボタンをクリックすると設定一覧が開きます。これをすべてコピーして検証ファイルを作成しておくべきです。

H2O-3 のパラメーターの注意書きには、乱数がサンプリングに影響を与えることが書かれています。

問題となるのは、どの乱数を設定すれば一番良い予測になるのか? これはちょっと分からない。。やっぱり過去検証から基準点を探るしかないかもしれません。それほど劇的に変化するわけではないようですが、予想が1枠ズレただけで入賞を逃すことを思うと慎重に考えなきゃいけませんね。

追記します。

ディープラーニングによる予測結果の不安定さについて

現段階での検証結果からは 「はっきりした原因は分からない」

残念ながら私の知識では不安定さの原因は突き止められません。SEED かもしれないし、その他に原因があるのかもしれません。ただ検証から言えることは・・・

同じデータ構成(トレーニングもテストも)で複数回モデル構築をし、それぞれでテストをやると確率がブレて違う予測結果を吐き出すケースがある。

また、上と同様なテストしても、まったく出力結果が変わらない枠もある。このことが予想の確実性を担保するわけではないが、ひょっとして、いわゆる鉄板予想を示している可能性もある。

非常に困った現象ですが、実際にあるんだからしょうがない。。これはもう追跡調査をして、ある程度の段階で見切りをつけるしかないかもしれないです。とりあえず初っ端の出力結果を事例として保存しておくことにします。べつに初っ端でなくてもいいんですが、どこか基準点を決めておかないと訳がわからなくなりますので。

ディープラーニング予測の不安定さについて その2

もうひとつ、気になっていたことがあります。それは 繰り返し回数 についてです。EPOCHS と表記されているこのパラメータ、これまでは初期設定である 10 に固定しての予測でしたが、これを一気に 100 に増やして予測させてみました。例として 今節の 広島ーFC東京 を挙げてみます。以下の画像がその詳細です。

%e3%82%b9%e3%82%b3%e3%82%a2%e3%83%aa%e3%83%b3%e3%82%b0%e3%82%b5%e3%83%b3%e3%83%97%e3%83%abこれは LOGLOSS と呼ばれる評価関数がもっとも低くなる回数はどこか? を表しています。この関数は低いほど良い。図を見ると22回の時点でゼロを示しています。つまり 繰り返し回数が10では学習が十分ではなくて、少なくとも22回の学習が必要であることを示しています。*1

*1.私自身、あまり知識はありませんので、もしこの理解が誤っているならば指摘していただけるとありがたいです。

このことに注目して再予測させた結果が以下の予測となります。

j1-2-14%e4%ba%88%e6%b8%ac%ef%bc%92

青のマーキング枠は、第一候補にまったく変化がなかった枠です。ただし確率的には少し変動があります。J1 の予測についてはこれで終わりにします。やりだすとキリがない。

次は J2 のトト対象枠について追記します。

J2 トト対象枠 J2-34節 の予測

トト対象だけですが予測一覧を挙げます。

j2-34%e4%ba%88%e6%b8%ac

上段と下段、それぞれ別の予測手法で行った結果です。基本的にはディープラーニング MAXOUT による予測ですが、トレーニングデータの属性項目を少し変えて2パターンで予測しました。

ちなみに上段の手法、パターンで予測させた前節予想ではJ2部門で全問クリアしています。

ただし、このやり方が今節も通用するかは分かりません。半分くらいは正解しているかも。J2 4枠にもマルチを使いたくなりますが、まずはJ1を無傷でやり過ごしたい。全体でダブル8という買い目の制約のなか、どうやってベストな予想案をつくるか?

 どうもすっきりしないので再予測する

予想が二転三転しちゃって、どうにもスッキリしないので再度、設定を変えて試行することにしました。条件を統一したかったので以下のようにしました。

1、EPOCHS は 100 で走らせる。

2、ディープラーニング の活性化関数は グリッドサーチで求める。

3、トレーニングデータ と テストデータ は先の予測方法とまったく同じにする。

この結果、活性化関数はすべての枠において、MAXOUT with DROPOUT を採用しています。予測結果一覧は以下です。

877%e4%ba%88%e6%b8%ac

湘南ー柏 ・・・ 間違ってるっぽい。当たればファインプレー。

乱数 SEED の件、全部ではないですがチェックしてみたところ、すべて固定されてるっぽいです。J2 の予測方法はJ1と同じで共通にしました。13枠すべて同じやり方で予測しています。これまでやったことがない予測方法なので、どれくらい期待できるかさっぱり分からないです。

J1 においてはほぼ大差をつけて確率が割れているのに比べ、J2 では セレッソー清水 などが怪しい確率の割れ方をしていますね。J2は感覚的にも一致しているような感じを受けます。J1 はなぜかくっきりと結果が示されている。これは EPOCHS の繰り返し回数による変化なのかもしれません。

アルゴリズムをドロップアウトにしたので、理論上は 「与えられたデータ情報量は50%になっている」

今回使用した MaxoutWithDropout は、初期設定においてはそういうアルゴリズムです。このタイプの関数を使用した理由は、先にも述べた通り グリッドサーチ による結果から選択したわけで、特に自分流の理由があってのことではないです。単純に LOGLOSS の値が一番低い・・・つまりトレーニングモデルにおいて予測精度が良いという理由からです。

テストデータの作り方に対する誤解

大変重要な点について判明したので事実だけを書き残しておきます。

テストデータは1トレーニングに対してひとつが原則

たとえば私が対象としているトトくじは 13枠の未知の結果を予測する ということです。したがってテスト対象は 13 ある。これをひとつのファイルでまとめて作成することも可能です。それぞれの行に 対応する予測試合の推定データ を並べていけば 13枠全体のテストデータを作ることができ、個別のトレーニングデータで作成したモデルを使ってアルゴリズムを走らせれば、対応する 行 の出力が 予測結果 として得ることができる。

しかし、検証の結果、この方法には重大な欠陥があることが判明しました。まとめて作成したテストデータの結果と個別に作成したテストデータの出力結果が異なるのです。トレーニングする段階、つまりモデル作成時の方法はまったく同じであっても、テストデータの構成によって出力確率が変わります。

ランダムフォレスト や、GBM で実際にやってみるとよくわかる。ディープラーニングではまだ未確認ですが、もう一度このことに留意してテストをしてみたい。

 


 

こんなに一つの開催回のためにテストを繰り返したことはない。。最後に・・・

じつはもうひとつ予測方法があります。今節の予想にあたり、いろいろと過去検証も含めて考えた方法です。ただし手法やアイデアの詳細は公開しませんし、予想も公開しません。今後ひっそりと予測と検証をやるつもり。

基本的かつ重要なことはこの記事ですべて書いてあるとおりで、アイデアとしては単なる組み合わせ問題というわけです。ただ、それを実行しようとすると大きな負担、ストレスがあるというだけ。

ちょっと疲れました。。

いろいろ予想パターンを出したので終わってからひとつひとつ検証というか、やり方について考えてみたい。

 第877回トトくじ 結果を見る

とりあえず感想。印象に残ったハズレだけね。

鹿島負けました。らしくないです。大宮が調子が良いのは分かってた。でも地力は鹿島、早い時間に点差を付けられて調子が狂ったか。次点で大宮を押さえるべきでした。機械判断ではノーチャンスでした。

らしくないのは 甲府 も。

堅いディフェンスはどうした? 斎藤学に何度も突破されました。両チームとも爆発的攻撃はないはず。ドロー本命とみていて次点ではマリノス押しだったけど、予想確率では甲府が次点。。仕方がありません。

鳥栖ー仙台 完全に予想の裏をいっていますね。鳥栖が追い上げてドローも期待できたけど展開としてはまったくの逆。てっきり仙台が追い上げる展開だと思ってました。 やっぱり予想難しい。。

神戸ー川崎 これも予想の斜め上。川崎 得点できない。。残り時間で追いつけるのか?

広島ーFC東京 平山 先発で 後半ロスタイム弾劇場は消滅。このままズルズルとドローか?それとも?

さあ J1 終了です。意外な結果が多かった。。予想はまたも惨敗。入賞を賭けた初日突破はなりませんでした。

多くの時間をかけて予想したわりにはまったく結果が伴いませんでした。。まあ予想というのはこんなものです。結果が出ないから いい加減にやってもいい というわけではないです。得るところもあったので良しとすべし。

引き続き機械予測を続けます。

WEKA と新しいアイデアについて

古いヴァージョンの WEKA を使った予測も再開しました。理由は 名義属性 での予測が簡単に行えるからです。確率構成も表示されますし、動作も軽い。また H2O のようにファイルを二つに分ける必要もなく、一つの予測ファイルですべて完結する点も良い。ディープラーニングはないですが、アルゴリズムも必要かつ十分揃っている。

データ構成を変えての検証も飽きずに行っています。いろいろアイデアも出てきたので次回も挑戦します。現在考えてるデータ構成のアイデアは次のようなものです。

1、よくある予測方法の考え方のひとつですが、「共通する対戦相手をはさんで勝敗の比較をする」 というものがあります。強いチームに対して勝った方が優勢になるだろう という単純な方式です。

2、具体例にはつぎのような感じ。 鹿島と大宮 の勝敗を予測するケース では、鹿島と川崎、大宮と川崎 というように、間に 共通する 川崎との対戦結果 というのをひとつの指標とします。これを他の共通するチームについても同じことを考えます。

3、以上のようにして、すべての共通する対戦結果についてリストアップして、それをデータとしてまとめる。

4、マトリクスの表現方法としてはいくつかパターンが考えられます。具体的データ構成については特に制約はなくて、一番良い構成をテストして決める。

5、まとめると、人力予想で脳内で行っていることをアルゴリズムで判断させているだけ。そのために 「どういう形でデータを与えるか?」 というところが一番重要なところ。

6、最後に実際にアルゴリズムを走らせるわけですが、データとの相性もあるので単純にベストなアルゴリズムを決める指標というのはありません。できるだけ標準的な出力を得られるものが比較検証としては適切かもしれません。

一般的には ランダムフォレスト 、あるいは J-48 という決定木とか。ナイーブベイズ とか、あるいは 過去事例推論をもとにしたアルゴリズムなど。こういったことを長くやってきて思うのは、「とにかくベストなものはない」 ということなので、自分で ベースとなる指標をきちんと決めることがまず大事かなと感じます。

 

 

 - トト予想