AIで一口馬主の募集額を予想する【失敗】

 

競馬の順位予想が一番分かりやすい競馬の醍醐味です。しかし、競馬には他にも面白いことがあります。

そのなかでも、僕が好きなのが「一口馬主」です。

馬主になるには「スーパーお金持ちになるしかない」という固定概念をぶっ壊してくれます。数万円で馬主になれます。

まぁ、ガチの投資として一口馬主をしている人はごく少数だと思います。僕は、かなり魅力がある趣味として考えています。

ちなみに、僕が競馬予想を一番楽しんでいた時期は、ジェンティルドンナやオルフェーヴルが活躍していた頃です。芙蓉Sの最終コーナーのオルフェの前脚が好きでした。

前置きで話題がズレてしまいましたが、今回試してみるのは、AIで一口馬主の募集額を予想することです。

具体的には、AIで何段階かにランク分けをしてもらいます。

画像の用意

netkeiba さんを利用させていただきました。恒例ですね。

2016年、2017年生まれの約600頭の画像と募集額を取得しました。5000万以上、3200万以上、2500万以上、2000万以上、1600万以上、700万以上の6つに分けました。

画像データの水増しも行っています。画像の角度変える方法です。

AI(CNN)のモデル

AIのモデルについては、

model = Sequential()
    model.add(Convolution2D(32, 3, 3,
    border_mode='same',
    input_shape=in_shape))
    model.add(Activation('relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Convolution2D(64, 3, 3, border_mode='same'))
    model.add(Activation('relu'))
    model.add(Convolution2D(64, 3, 3))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.25))
    model.add(Flatten())
    model.add(Dense(512))
    model.add(Activation('relu'))
    model.add(Dropout(0.5))
    model.add(Dense(nb_classes))
    model.add(Activation('softmax'))
    model.compile(loss='categorical_crossentropy',
    optimizer='adam',
    metrics=['accuracy'])

これです。CNNってやつですね。

とりまやってみたかったので、詳しいことは調べずに無難そうなモデルにしました。

結果

6つに分けるパターンでは、ランダムに予想すると16.7%で的中します。

2回おこなったAIの予測では、23.3%と21.0%でした。テキトーに判断するより、良くても6%しか上回りませんでした。

分類数を減らして、3200万以上、2000万以上、700万以上の3つでも実験しました。が、48.9%と43.8%という結果。

何かしらの特徴は見つけることができたのでしょう。テキトーよりはマシな結果ですからね。

おわりに

改善点は山ほどあります。というか、それが素晴らしく楽しいので何も調べずにやってみました(笑)

今の予測精度のままでは、お金を浪費する趣味にしかならないです。何%まで良くなるかは検討もつきませんが、楽しんで改良していきたいと思います。

最後に…95年生まれでオルフェの頃に競馬予想?と疑問に思われた方もいらっしゃるかと思いますが、もちろん馬券は買っていなかったですよ。予想ブログはしていました(笑)

おーわり