俺にも執筆活動させろボケ

みずはのめの公式botに賭けてみた結果

f:id:nemui3900:20190120200124p:plain

デーン、課金したのが5日ですw

頂点が5日です本当にありがとうございました。

まあ別に文句言うつもりもないし払ったことに後悔はない。

しかしスクレイピングできない人々はあれに払っても乗っかれないので

そこはどうにかしないと間口が狭くなっちゃうよねって思うよ。

 

まあひとの心配より自分だ、

あまりにも機械学習のことをわかっていなくていい加減kaggleやれって話ではある。

www.codexa.net

危機感からこれを買ったんだけどいろいろ考えた結果

LightGBMの方を使うことにした。

www.youtube.com

まあこれを見た影響ですよね。

だるくなってきたら楽しんでるやつを見るのは割といい解決策かもしれない。

あとGoogle colabが全然使い方わかんねーの、まさかファイルを開くだけでこれとは。

LightGBMの特徴量をどう作るかわからないので、しばらく座学で。

 

競艇にお金を賭けるスポーツと去年の振り返りと今年の目標

競艇のデータをいじっていて思う、これは計画と実行のタスク管理をするスポーツなんだ。

いかにGPUとCPUを止めずに動かし続けられるかが重要で見なければ(可視化)いけないデータは山ほどあるし、捨てていいのか悪いのかわからないデータもたくさんある。

イテレータを回すのが下手過ぎてそれさっきやっとけばこの行動の速度あがったなあってのがかなりある、今はまだ余計な重複をかなり含む(これがとてもストレスだ。

最近わかったが俺は余計なことがかなり嫌いだ。

初学者なのでまあそれはしょうがないのだが、あと一年以内にはなくしたい。

そのためにまずはクラウドをうまく使うようにすべきだ自由に使えるCPUを借りているのだからグリッドサーチみたいなものはそっちでやるべきだし。

 

Google Colabみたいなものは絶対に使うべきだ、明日絶対に触る。

www.codexa.net

 

ちょうどいいタイミングなので去年の振り返りと今年の目標。

去年の目標が1億w

今ほぼ無一文や、4枚あるモニターのいち枚が壊れて悩んでいるぐらいお金ないわ。

ボートで負けすぎたな、コインはそこまで負けてない。SFDをちゃんとしたら多分そこそこ勝てたけど仕事やめるぐらいの時間は必要だったな。jsonの操作がどうしても下手だった。フルタイムのトレーダーなら稼げたんだと思うが。live用のbotちゃんと書くのってそこそこ大変なんだぜ。あとあのapiと遅延はまじで糞だった。

スイング始めたタイミングも最悪だった、俺が稼ぐその前にコインのボラリティが死んだ。市場の魅力が死んだとも言える。

そうなってくるともう最悪だ、そこで今後も末永く同じことが起こるであろう方にシフトした競艇だ。

競艇に鞍替えしてこれは俺にあっていると感じたのでもっと早くそうしてればよかった、トレードなんてものは突き詰めるとどれだけ他人が嫌なタイミングでどれだけ買ってどれだけ売るかだ(かっこいい言葉をならべれなくもないがしない)。他人を一番不幸にしたやつに幸運が訪れる。

もちろんそういう善悪の話ではない。問題は他人の弱さに俺は興味がない。自分の弱さを補強するのは好きだが他人がどうなろうと知ったことではないのでまあ勝てなくても仕方がないのだ。自分という人間に興味を持つべきだった、そこで時間を無駄にした。

 

今年の目標

pandaspandaspandaspandasとにかくDataFrameの操作を不自由なくやる。

初速を失ってたるんでるのでいい加減ワープアの自覚を持って力づくで早く進むこと。

ロードマップを作って練ること、そしてそれにさっさと取り掛かること。

イテレータを回せ回せ。

ボートデータのDataFrameの結合から分割まで

ミズハノメから持ってきたデータは1ヶ月ごとなので、

しゃらくせえので全部合体する。

そのときに(左端)ゴミを消してset_index("dataid")としておく。

またjoinで出走、直前、オッズを結合します。

そうするとなぜかリザルトのrowとずれがあるので

indexのみのシリーズを作ってpd.concatしてoptionのjoin"inner"で共通している部分のみにします。

f:id:nemui3900:20190113191921j:plain

大体こんな感じ。

それから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で保存します。

わからないとこはドキュメントを参照してください、新しい機能とかサイレントで入っているので差分表示するか告知もうちょっと頑張って(応援。

docs.mizuhanome.net


 

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番人気のバックテスト

www.youtube.com

つーことで俺もやってみる。

f:id:nemui3900:20181227131156j:plain

結論
良くも悪くもほぼ控除率に収まったので高くもなく低くもない。

 

一応オッズによるフィルタをかましてみる。

10倍以上を買う。

 

f:id:nemui3900:20181227133736j:plain

的中率と回収率が下がった、オッズにつられて一番人気を買うのは基本悪手!!

 

ということで逆にk倍以内を買う

f:id:nemui3900:20181227133813j:plain

一番良いのは6倍以内を買う。

なんと回収率81%集合知の凄さを見た。

儲からないけど控除は超えたよ。

 

おしまい。

ボートレースでいかに機械学習するか。

一応一通り触ったので雑感を垂れ流す。

はじめに教師あり学習でDNNがいいと思う。

問題を何にするかというのは非常に興味深い問題で

3連複の予想ならone hotで20通りのラベルにするか

上位(3位まで)or下位の0or1の2通りにする。

競馬のようにタイムを予想するのは競艇には向かない(断言)。

一着のみの予想ならやってみればわかるがかなり精度が出せるので

3連単は2着3着を予想できれば解けると思うのだが3連単を単に当てるのと同じぐらい難しい。それに1着を予想した分逆に正解率は下がってしまう、難しいね。

特徴量には使わないがオッズは同時にとってこないと買い目を作るときにめんどくさいので最初からセットと考えたほうが良い。

ボートの勝ち方考察。

いま完璧に予想できるAIがある、

これで100%当たるか?と言われたらそんなことはない、

その完璧な予想は一番強い人の勝率でしか正解率がない、未来は誰にもわからないので。

誰が一番強くてどのくらい勝ちそうなのかはわかる。

そうしたらあとは単純な控除を考慮した足し算割り算だ、

そして重要なのは全部が全部期待値があるとは限らない。

みんなが完璧に予想できるAIでベットしたらそれは選手おのおのの勝率で分散させてみんなが75%払い戻しを受けることになる。

 

ここから現実的に予想が下手な自分はどう勝つか、

じゃあどうやって歪むか人気になりすぎるor人気がなさすぎる、

どこにどうやってバイアスがかかるのかを考えるべきなんだろうなあ、

優位に相関していない直近の成績とかを捨てるのはひょっとするともったいないのか?

独立したレースだからと考えがちだが前のレースに意味をもたせるべきなのか。

間違った人間がオッズを歪ませるではどうやって考えて間違えにたどり着き歪むかは常に考えていたい。

もちろんこんな考えをしなくても圧倒的に正しい予測ができれば勝てるはずだ。

だからもっと頑張ってモデルと学習と特徴量をどうにかしろという話なんだ。