豆腐クマの人の日記

豆腐クマスタンプの作者です。

競馬を予測するってどういうことなんだろう?

先週から通勤と昼休みに読書するようにしました。スマホと違うのは、目障りな広告を見なくてもいいことですね。心なしか頭の働きも良くなってきた気がします。この調子でいろんな本を読んでいきたいと思います。

やっぱり勉強から始まるんだよ

今まで何度も競馬AI企画が頓挫した理由は勉強不足にあると先週反省したので、この1週間機械学習の基礎を勉強しました。

tutorials.chainer.org

その時使っていたのがこれ。labheaさんのプログラミング講座に負けず劣らずの完成度で(褒め過ぎ?)、機械学習に必要な数学の基礎からプログラミングの知識まで優しく解説してくれています。「機械学習を始めたい!」と思った人はぜひこれを読んでください。

その上で競馬データを機械学習して予測モデルを作るためには次の要素を決める必要があることが分かりました。

  1. インプットデータ(基本的に数値のみ)
  2. 機械学習のパラメータ
  3. アウトプットデータ

機械学習のイメージは、複雑な関数です。関数なのでもちろん数字でないといけません。文字、例えば馬の名前をそのまま使うことはできません。なんらかの形で数字に変換する必要があります。そのため、今手元にあるデータはそのまま使うことはできず、加工しないといけません。そして、アウトプットも数字ですがここが頭を使わないといけないところです。

競馬を予測している人は何人もいますが、そこにも必ずインプットデータとアウトプットデータがあるはずです。インプットデータは、馬の過去のレース結果や騎手、体重などがあります。では、アウトプットデータは?「そりゃ一番になる馬だよ!」と言われてしまいそうですが、ここが難しいところなんです。その馬単体の勝率を考えても他に強い馬がいることを考慮しないといけないですし、順位を予想するとしても他の馬と比べるための指標を考えないといけません。

機械学習が得意とするのは予測と分類なんですが、予測というのも競馬のような予測ではなく「部屋の広さ、駅からの距離、その土地の犯罪率からその物件の価格を予測する」といった他との比較を伴わない予測なんです。

競馬予想家たちは恐らく、それぞれの馬の強さを見積もってそれを他の馬と比較する、ということをしているはずです。これをそのまま実装するのはかなり難しそうです…。

もっとシンプルに考えよう!

深みにはまっていきそうなので、シンプルに考えることにします。結果として出すのは「その馬が3着以内に入るかどうか」ということにします。入る場合を1、入らない場合を0として、馬券に絡んでくる馬を見分けるAIを作ることにします。

インプットは「馬の情報」「騎手の情報」「レース場の情報」として、他の馬の情報は考慮しないこととします(難しくなるから)。とりあえずこの方針で今週頑張って作ってみます!

本で学んだこと

今読んでいる本は、「スタンフォードの自分を変える教室」といういかにも自己啓発系のニオイがする本です。「人はなぜ誘惑に負けてしまうのか」というテーマの心理学や経済学の研究結果をベースにした内容になっています。

ところで皆さんは、ダイエットとか禁煙とか禁酒とかに挑戦して失敗したことはないですか。「これをやろう!」ということならなんでもいいんですが、頑張っているとちょっとうまくいかないときってありますよね。ダイエット中なのにお菓子を食べてしまったり、禁煙しているのにたばこを吸ってしまったり、ブログを書こうと思っているのにサボってしまったり…。そういうときって「あーもうダメだ!もう止めちゃおう!」とやけくそになってしまうときってあると思うんです。これは意思の弱いからではなく、誰にでもあることなんだそうです。特に、自分に厳しいタイプに。

自分に厳しいとちょっとした失敗で自分を強く責めてしまい、それがストレスになります。ストレスが高くなると誘惑に対する耐性が弱くなってしまい、今まで我慢していたこと、やっちゃいけないと思っていたことをやってしまう。そしてまた自分を責めてしまうというスパイラルに…。だから、自分には優しくした方がいいんだそうです。失敗しても「仕方ないよ、人間だもの」と自分に優しくした方がその後うまくいく、という研究結果も出ています。

まとめ

ということで、ブログをちゃんと更新できなかった週もあまり自分を責めずに気楽にいこうと思います。