How many files(0-15)

競馬の予想システムで一儲を企むおっさんのヨコシマな横顔

機械学習で競馬予想 其の011 ~パラメータを足してみた~

前回のエントリの反省点を取り込んで見ました。反省点は以下の箇条書きのとおり。

  • パラメータとして(天候による)馬場の状態を追加する。
  • すべてのデータを使うよりも近場のデータ(直近2年分くらい?)を使う。
  • 開催地によってタイムが変わる(馬場の整備状態が違うらしい)のでそこもパラメータとして追加する。


これらをひとつずつ実装していきます。

はじめに、馬場の状態ですが、元データのtsvファイルでは、天候の部分が該当し「晴/稍重」や「曇/重」のような感じで、天気と馬場の状態をスラッシュで区切った形で設定してあります。
このままだと扱いづらいため、tsvファイル上の表現をキーとして、値を1から連番で振って一旦マスタ化しておきます。そして実際のデータ(ソース上ではweather配列)を置換していきます。

weather = horsedata[:,5] # 天候の配列を生成

# 天候/馬場の状態をマスタ化
weatherDict = {"晴/良":1, "晴/稍重":2, "晴/重":3, "晴/不良":4, 
               "曇/良":5, "曇/稍重":6, "曇/重":7, "曇/不良":8,
               "小雨/良":9, "小雨/稍重":10, "小雨/重":11, "小雨/不良":12,
               "雨/良":13, "雨/稍重":14, "雨/重":15, "雨/不良":16,
               "小雪/良":17, "小雪/稍重":18, "小雪/重":19, "小雪/不良":20,
               "雪/良":21, "雪/稍重":22, "雪/重":23, "雪/不良":24
              }

for idx, w in enumerate(weather):
    weather[idx] = weatherDict[w.encode('utf-8')]


次に直近の2年分くらいのデータを有効なデータとして取り扱うために以下のように、元データでyy/mm/ddとなっていた日付データを一旦yymmdd形式にして、基準日と比較し有効データを作成しています。基準日として今回の場合は20130101以降のデータを対象としています。細かい点ですが、日付が1月や1日のように1桁で表現できる場合に元データは前ゼロが付与されていないため、1桁の場合は前ゼロを付与するようにしています。

# 1桁の場合は前ゼロを付与
def addZero(data):
    if len(data) == 2:
        return data
    else:
        return "0" + str(data)

ymd = horsedata[:,0] # 開催日の配列を作成

# 日付データをyymmdd形式にそろえる。
for idx, date in enumerate(ymd):
    aryYmd = date.split("/")
    year = addZero(aryYmd[0])
    month = addZero(aryYmd[1])
    day = addZero(aryYmd[2])
    ymd[idx] = str(year) + str(month) + str(day)

# 古い開催データを除外(2013より古いデータは除去)
z = np.array([idx for idx, i in enumerate(ymd) if np.float32(i) >= np.float32(130101)])
ymd = ymd[z]


最後に開催地を条件として追加したいのですが、ちょっと後々のことを考えて、色々面倒なので、今回は大井競馬場開催のレースデータだけ分析対象するようにしています。なので、厳密には開催地をパラメータにはしていませんのでご注意ください。実装は以下のとおり。

loc = horsedata[:,1]  # 開催地の配列を生成

# 開催地が大井でないものは除外
z = np.array([idx for idx, i in enumerate(loc) if i == u'大井'])
loc = loc[z]


今回は全体のソース貼り付けはありません。
と言うのも、今回紹介した実装では、見苦しいくらいに冗長な実装になったので、次回とその次くらいで、リファクタリングを行い(多少なりとも)綺麗になった全体ソースを貼り付けたいと思います。


実践 機械学習システム

実践 機械学習システム