@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Kaggle: [30 Days of ML] Day 4

今日の課題。

  1. Read this tutorial (from Lesson 3 of the Python course)
  2. Complete this exercise (from Lesson 3 of the Python course)

最後の問題、ブラックジャック(トランプのゲーム)で次のカードを引くべきか判定する関数を実装せよ、というやつ。

Discord のチャンネルを見てたらどうも与えられる情報からは win rate 42% 台が上限らしい、という情報を得る。初期実装の「常に False を返す == 常にステイする(次のカードを引かない)」戦略が 38% は出していて悪くないので、40% を超えることを目標に置く。

ブラックジャックの戦略を調べると、そもそもお互いの手札の情報ありきだったので、この問題では真っ当なアルゴリズムを実装するのはおそらく難しいんだろう、と(Discord でもそんな会話があった。まぁ情報があったとしても自分で優秀なアルゴリズムを実装できる気はしないが)。

結局、エレガントさのかけらもない以下の実装で、最高 win rate 41.7% まで出せた。平均は 41.2 ~ 41.3% くらいか。

gist.github.com

考え方としては、return False でそこそこの win rate が出せるということは True を返しすぎる == 次のカードを引きすぎて 21 オーバーで負けるケースが多いのだろう、であれば「次のカードを引くべきなのは、どういう状況か?」だけを絞り込んで、そこだけ True を返せばいいのでは、という流れ(実際、そういう風に考えを整理する前に闇雲に実装したら win rate 0% になったりして、見直すと return True って書いてる回数が多かった)。

で、 <= 12 とか > 6 とかの数字を愚直に変えながら何度も実行して、一番スコアが良さそうな値を見つけた。

最初の一週間だか二週間は Python の話ばかりになるとカリキュラムに書いてあった通りだけど、はやく機械学習の何かをやりたい。