2015年 1月 の投稿一覧

Microsoft Azure の Machine Learning で作ったモデルをWeb API化する

前回に引き続き、Microsoft Azure の Machine Learning の紹介をしたいと思います。

前回作ったモデルは下記の通りです。
2015:01:31_blog.001

今回はこれを利用して、過去の馬の入賞率とその馬に乗る騎手の入賞率を投げると、レースで勝つ確率を返してくれるAPIを作成します。

 

1. Publish Inputの設定

「Score Model」アイテムのの「Dataset」ソースを右クリックして、「Set as Publish Input」に設定します。
2015:01:31_blog.002

 

2. Publish Outputの設定

「Score Model」アイテムのの「Scored Dataset」ソースを右クリックして、「Set as Publish Output」に設定します。
2015:01:31_blog.003

 

3. WebAPI化

実行後は、下部メニューの「Publish Web Service」がクリックできるようになりますので、クリックします。
2015:01:31_blog.005

 

4. クライアント設定

2015:01:31_blog.006
このページでリクエスト時に使うAPI Keyを取得できますので、メモしておきましょう。
「API help page」のリンクをクリックすると、自分が作成したWeb APIのAPI仕様を確認することができます。

下記はPythonでのPOST例です。ほとんどサンプルコードと同じですが。
過去の馬の入賞率が0.5、その馬に乗る騎手の入賞率が0.5である場合にそのレースで勝つ確率を予測するケースです。

実行結果 :

[“0.5″,”0.5″,”0″,”0.285396218299866”]

レスポンス仕様

UmaNyusyoRatio Numeric
KisyuNyusyoRatio Numeric
Scored Labels Numeric
Scored Probabilities Numeric


過去の馬の入賞率が0.5、その馬に乗る騎手の入賞率が0.5である場合、勝つ確率は28.53%ほどであることが分かりました。
非常に簡単に使えそうです!

Microsoft Azure の Machine Learning でロジスティック回帰分析

前回はRで競馬のデータをロジスティック回帰を使って分析しました。
今回はMicrosoft社が提供しているクラウドプラットフォームであるAzureのMachine Learningというサービスを使って
分析をしてみたいと思います。
前回やった分析の一部をAzureでやってみるといった内容です。
 

1. Microsoft Azureにログインします

アカウントの作成方法に関してはこちらを参考に

 

2. 左下のプラスボタンをクリックします

2015-01-21_blog.001

 

3.「DATA SERVICES」の「MACHINE LEARNING」の「QUICK CREATE」を選択します。

必要情報を記入し、「CREATE AN ML WORKSPACE」をクリックします。
STORAGE ACCOUNTがない場合は「Create a new storage account」を選択して作成する必要があります。
2015-01-21_blog-3.001
 

4. ML Studioへ

3.で作成したプロジェクトを選択します。
2015-01-21_blog.003
 

「Sign-in to ML Studio」をクリックします。
2015-01-21_blog-5.004

 

5. Experimentを作成

左下の「+NEW」をクリックします。
2015-01-21_blog.005
 

テンプレートの選択画面が出てきます。今回はロジスティック回帰を行いたいので、「Blank Experiment」を選択します。
2015-01-21_blog.006

 

6. データのアップロード

左メニューから使いたいアイテムを選んで、ドラッグアンドドロップで簡単に使うことができます。
基本的な操作方法等はこちらを参照ください。
使用感はKNIMEというソフトウェアとほぼ同じです。
2015-01-21_blog.007
 

分析に使うデータのアップロードを行います。
左下の「+NEW」をクリックします。
2015-01-21_blog.008
 

「DATASET」の「FROM LOCAL FILE」をクリックして、ローカルのデータをアップロードします。
2015-01-21_blog-4.001
 

データのアップロードが完了すると、左メニューの「Saved Datasets」から選べるようになります。
2015-01-21_blog.010

 

7. 構築したモデル

今回作ったモデルは下記のような感じです。
2015-01-21_blog.011
 

前回の記事で書いたように2クラスのロジスティック回帰の分析ですので、
今回は 「Two-Class Logistic Regression」アイテムを使っています。
「06_17_2500_l2.csv」はローカルからアップロードした学習用データです。
これらを「Train Model」アイテムにより学習させます。

学習したモデルと「06_20141228-10_17-2500_l2.csv」はローカルからアップロードした予測するためのデータで
「Score Model」アイテムにより、モデルへのあてはめ、確率を取得します。

今回は 「Two-Class Logistic Regression」アイテムを利用しましたが、
その他一般化線形モデルをはじめ、ニューラルネットワーク、SVMなんかも使えるようです。
また、Rのソースコードをワークフローに組み込むことも可能です。

「Score Model」アイテムの下側の丸を右クリックし、「Visualize」をクリックすると、予測結果を閲覧することができます。
2015-01-21_blog.012
 

このような形で、ロジスティック回帰分析による確率値の予測ができます。
2015-01-21_blog.013

 

Azure Machine Learningを使う利点・欠点

メリット
・プログラム不要。Webブラウザーで機械学習による分析ができる。
・作ったモデルをWebAPIしてくれ、外部プログラム・サービスから簡単に利用できる。
・R言語が使える。

デメリット
・Rによる分析に比べ、実行から予測結果の取得までにかかる時間が長い。
 (より大きなデータセットを扱うとまた違うかもしれません)
 
簡単にWeb API化してくれるのは便利ですね。
分析済みのモデルに関して、サクッとWebAPI化して、外部から利用するという用途はありかなと思っています。
また、Microsoft AzureのHDInsightというサービスと連携して、MapReduceすることもできるらしいです。

このあたり、今後も実験的に使っていこうと思います。

競馬のロジスティック回帰分析

最近社内の一部で、競馬のデータ分析が流行っています。
先週の社内勉強会で話した内容をまとめます。
 

競馬と統計的に考える意義

競馬の予想におけるIT活用度合いは、大きく分けると3段階あります。
1. 競馬新聞を眺めて予想
2. 過去データを集計して予想
3. 統計モデルを適用して予想

今回は3. によるアプローチなわけですが、3. で考える意義としては、
ある馬が勝ちに分類されのか、勝つ確率は何%あるのか等、
ベットするにあたっての判断の尺度を得ることができることです。
判断の尺度が得られると何が良いのかというと、分析の結果得られた判断の尺度をもとに、
賭けるルールを構築できることです。
この賭けるルールが明確になれば、PCを使ってシミュレーションを行うことができ、
賭けを行う前に、その手法が有効かを確かめることができます。

今回は過去データからモデルを作り、確率を計算し、一定のルールに従って賭け
をした場合にどの程度のリターンが得られるのかを計算します。
 

馬券戦略

競馬において確率を計算する場合、
どのような買い方にするか(単勝・複勝・馬連・馬単・ワイド…)によって、計算すべき確率が変わってきます。
したがって、分析に先立って買い方を決める必要があります。

今回は馬単*1をボックス*2で12点買う場合の確率を計算します。

2着以内に入る確率の高い馬を4頭選び、全ての組み合わせを購入します。
1レース1200円(4 × 3 = 12通り)という買い方になります。

分析に関しては、比較的簡単なモデルであるロジスティック回帰で分析を行います。
 

ロジスティック回帰分析とは

ロジスティック回帰分析とは1つのカテゴリカルデータを説明変数として、その説明変数を
その他の変数で説明する形のモデルを使って分析する手法で、
2値のみ取りうる値の発生確率を予測することができます。
いくつかの競馬関連の論文*3でも、ロジスティック回帰を用いた分析がなされています。
 

モデルと変数

今回のモデルと説明変数・被説明変数は下記の通り。

logit(p_i) = \alpha + \beta_0{UmaNyusyoRatio_i} + \beta_1{KisyuNyusyoRatio_i}
i = 1,...,n,

p_i : ある馬が2着以内の確率

UmaNyusyoRatio : 馬の過去2年間の出走レースのうち3着以内の比率
ある馬の過去2年間の出走レースのうち3着以内のレース数 / ある馬の過去2年間の出走レース総数

KisyuNyusyoRatio : 騎手の過去2年間の出走レースのうち3着以内の比率
ある騎手の過去2年間の出走レースのうち3着以内のレース数 / ある騎手の過去2年間の出走レース総数

被説明変数に関しては、上述の通り馬単をボックスで買うので、2着以内の確率を予測します。

説明変数に関しては、実力のある{馬, 騎手}が勝つ、という前提のもと、
実力のある{馬, 騎手}は過去に実績を出しているとし、
過去の出走レース時点での過去の入賞率を説明変数としました。

Rで分析を行う際には

glm(isIn2nd ~ UmaNyusyoRatio + KisyuNyusyoRatio, family = binomial)

で簡単に係数の推定を行うことができます。
isIn2nd : 2着以内かどうかの2値変数
 

回帰分析結果

中山競馬場の2012年1月1日 ~ 2014年11月30日に行われた距離・馬場種別(芝 or ダート)ごとにモデルを作りました。
回帰結果は下記の通りです。

馬場種別 距離(m) Coefficients Estimate Sth. Error z value Pr(>|z|)

1200

(Intercept)

-3.2049

0.2956

-10.842

<2e-16

***
UmaNyusyoRatio

2.3246

0.3894

5.970

2.37E-09

***
KisyuNyusyoRatio

2.5443

1.0634

2.393

0.0167

*

1600

(Intercept)

-3.2122

0.2282

-14.079

<2e-16

***
UmaNyusyoRatio

1.0175

0.2359

4.313

1.61E-05

***
KisyuNyusyoRatio

4.3761

0.8230

5.317

1.05E-07

***

1800

(Intercept)

-2.3396

0.2678

-8.738

<2e-16

***
UmaNyusyoRatio

1.0090

0.2868

3.518

0.000435

***
KisyuNyusyoRatio

1.7209

0.9895

1.739

0.082007

.

2000

(Intercept)

-3.5513

0.2430

-14.612

<2e-16

***
UmaNyusyoRatio

1.4076

0.2293

6.138

8.38E-10

***
KisyuNyusyoRatio

4.4332

0.8811

5.031

4.87E-07

***

2200

(Intercept)

-2.7367

0.3750

-7.298

2.92E-13

***
UmaNyusyoRatio

1.9329

0.4015

4.815

1.47E-06

***
KisyuNyusyoRatio

1.6534

1.4464

1.143

0.253

2500

(Intercept)

-3.1266

0.6074

-5.147

2.65E-07

***
UmaNyusyoRatio

2.7094

0.8944

3.029

0.00245

**
KisyuNyusyoRatio

1.7080

2.2039

0.775

0.43835

ダート

1200

(Intercept)

-3.3837

0.1394

-24.276

<2e-16

***
UmaNyusyoRatio

1.4241

0.1665

8.552

<2e-16

***
KisyuNyusyoRatio

5.1467

0.5113

10.066

<2e-16

***

1800

(Intercept)

-3.3797

0.1421

-23.785

<2e-16

***
UmaNyusyoRatio

1.5665

0.1590

9.851

<2e-16

***
KisyuNyusyoRatio

4.7882

0.5212

9.187

<2e-16

***

2400

(Intercept)

-2.3437

0.4655

-5.035

4.78E-07

***
UmaNyusyoRatio

1.4713

0.8553

1.720

0.0854

.
KisyuNyusyoRatio

1.4670

1.7373

0.844

0.3984

芝・ダートとも、2000mを超えると騎手の実績であるKisyuNyusyoRatioの係数が有意ではなくなりました。
距離が長くなると、別の要因が関係しているのではないかと考えられますが、
この調査は追ってやっていきたいと思います。
 

シミュレーション結果

シミュレーション期間 : 2014年12月1日 ~ 2014年12月30日

レース数 的中数 的中率 総投資額 回収額 回収率

74

21

28.4%

88,800円

113,910円

128.3%

的中レース

2014126 1R 2,500
2014126 3R 3,770
2014126 9R 1,780
2014126 10R 16,420
2014127 4R 1,590
2014127 12R 7,510
20141213 4R 1,440
20141213 7R 2,700
20141213 8R 1,330
20141213 10R 7,760
20141214 12R 3,180
20141220 1R 1,080
20141220 12R 1,800
20141221 3R 11,630
20141221 4R 5,600
20141227 2R 2,670
20141227 8R 6,280
20141227 9R 6,470
20141228 1R 2,890
20141228 5R 4,320
20141228 10R 21,190

なんと、回収率100%を超えました!
でも中山競馬場でしか評価をしていないし、
評価期間も1ヶ月と短いので、他の競馬場での賭けでも通用するかはなんとも言えませんので、ご利用は自己責任で。
他の競馬場・長い評価期間での分析も追ってやっていきたいと思います。


*1 : 1着と2着の馬を順番どおりに当てる
*2 : 選んだ馬の組み合わせを全通り買う買い方
*3 : Ruth N. Bolton・Randall G. Chapman (1986). Searching for Positive Returns at the Track, MANAGEMENT SCIENCE, Vol. 32 など

ブログを開設致しました

ブログを開設致しました。

 

データ分析・ビッグデータの最新情報をはじめ、データ分析の技術情報、オープンデータの分析結果等を

定期的に発信して行く予定です。

 

乞うご期待!