ボートデータのDataFrameの結合から分割まで
ミズハノメから持ってきたデータは1ヶ月ごとなので、
しゃらくせえので全部合体する。
そのときに(左端)ゴミを消してset_index("dataid")としておく。
またjoinで出走、直前、オッズを結合します。
そうするとなぜかリザルトのrowとずれがあるので
indexのみのシリーズを作ってpd.concatしてoptionのjoin"inner"で共通している部分のみにします。
大体こんな感じ。
それから3万12万3万に分けて
テスト トレインセット(train,test) バックテスト
に使う。
左から2015年9月で終わりが2018年の12月。
オッズを特徴量にしたい場合はトレインセットの始まりが17年の4月ぐらいになるように調整してください。
次回
決定木のeli5を使って特徴量の選別作業から。
460カラムあって使いそうなやつから20個ずつ、
なんとも地味な作業だ。嫌になるぜ。
みずはのめのデータ提供サービスのapiを利用してラベルの作成まで。
みずはのめのデータ提供サービスが開始されたので使ってみる。これで月5万ぐらいって恐ろしくお買い得だと俺は思っているがお金は増えていないw
1,データの保存。
requestsで認証してのgetでapiを叩いてio.StringIOでオブジェクトに変換して
pandasのdataframeにしてpklで保存します。
わからないとこはドキュメントを参照してください、新しい機能とかサイレントで入っているので差分表示するか告知もうちょっと頑張って(応援。
2,リザルトに3連単の組番を追加する。
def c_kumi(df_chk): ans = "" #print(np.where(df_chk.values=='1')[0][0]) dn = df_chk.values try: #文字列で生成 iti = str(np.where(dn=='1')[0][0]+1) ni = str(np.where(dn=='2')[0][0]+1) san = str(np.where(dn=='3')[0][0]+1) print(iti,ni,san) ans =iti+ni+san #三着まで入ってるか確認してなければ空にする if not san: ans = "" except: ans = "" return ans
関数の作成、同着が怪しいがまああまり気にしないで次。
dr["bangumi"]=dr[["player1_chk","player2_chk","player3_chk","player4_chk","player5_chk","player6_chk"]].apply(c_kumi,axis=1)
おまけ
ついでに払い戻しを一つのカラムに入れておく。
#順列の生成とオッズのカラムリスト生成 import itertools seq = ["1","2","3","4","5","6"] jy3 = list(itertools.permutations(seq, 3)) li = [] for j in jy3: li.append("odds_3t"+j[0]+j[1]+j[2]) dr["SRT_H"] = dr[li].max(axis=1)
ps
jupyterの整理とかしないといけないなあ。
払い戻しはもっと簡単なのがあるかもしれないね。
1番人気のバックテスト
ボートレースでいかに機械学習するか。
一応一通り触ったので雑感を垂れ流す。
はじめに教師あり学習でDNNがいいと思う。
問題を何にするかというのは非常に興味深い問題で
3連複の予想ならone hotで20通りのラベルにするか
上位(3位まで)or下位の0or1の2通りにする。
競馬のようにタイムを予想するのは競艇には向かない(断言)。
一着のみの予想ならやってみればわかるがかなり精度が出せるので
3連単は2着3着を予想できれば解けると思うのだが3連単を単に当てるのと同じぐらい難しい。それに1着を予想した分逆に正解率は下がってしまう、難しいね。
特徴量には使わないがオッズは同時にとってこないと買い目を作るときにめんどくさいので最初からセットと考えたほうが良い。
ボートの勝ち方考察。
いま完璧に予想できるAIがある、
これで100%当たるか?と言われたらそんなことはない、
その完璧な予想は一番強い人の勝率でしか正解率がない、未来は誰にもわからないので。
誰が一番強くてどのくらい勝ちそうなのかはわかる。
そうしたらあとは単純な控除を考慮した足し算割り算だ、
そして重要なのは全部が全部期待値があるとは限らない。
みんなが完璧に予想できるAIでベットしたらそれは選手おのおのの勝率で分散させてみんなが75%払い戻しを受けることになる。
ここから現実的に予想が下手な自分はどう勝つか、
じゃあどうやって歪むか人気になりすぎるor人気がなさすぎる、
どこにどうやってバイアスがかかるのかを考えるべきなんだろうなあ、
優位に相関していない直近の成績とかを捨てるのはひょっとするともったいないのか?
独立したレースだからと考えがちだが前のレースに意味をもたせるべきなのか。
間違った人間がオッズを歪ませるではどうやって考えて間違えにたどり着き歪むかは常に考えていたい。
もちろんこんな考えをしなくても圧倒的に正しい予測ができれば勝てるはずだ。
だからもっと頑張ってモデルと学習と特徴量をどうにかしろという話なんだ。