今回は前回記事で紹介した多層パーセプトロンを応用して、特徴量抽出器としての使い方を解説します。
パーセプトロンの中間表現
多層パーセプトロンは通常分類や回帰といった予測問題を解くために使われるアルゴリズムです。例えば、「勝」か「負」を判定する多層パーセプトロンは以下の図のように、特徴ベクトル $ \mathbf{x} $ を入力として受け取り、いくつかの隠れ層を伝わって、最終的な予測ラベルが出力されます。
このとき、多層パーセプトロンに入力された特徴ベクトルは最初はただの数字の羅列ですが、隠れ層を通るたびに抽象度が増した表現へと変化していきます。このように隠れ層(中間層)から得られるデータの抽象的な表現は中間表現と呼ばれます。データの中間表現は、人間が直接目で見て理解することは難しいですが、機械学習モデルにとっては意味を理解しやすい表現となっています。
そのような中間表現の利点を活用するために、多層パーセプトロンを予測器ではなく、新しい特徴ベクトルを獲得するための特徴抽出器として利用する方法があります。例えば、勝ち or 負けを学習した多層パーセプトロンの中間表現を第9回の理論記事で紹介したサポートベクターマシン(SVM)の入力とする場合は、以下の図のようにモデルを構成します。
ここでは、中間表現を獲得するための多層パーセプトロンの学習とSVMの学習は別々に行われることに注意が必要です。上図のように組み合わせることにより、多層パーセプトロンとSVMという2つの異なるモデルの強みを享受することができるため、精度の向上が期待されます。
また、特徴抽出器としての多層パーセプトロンを学習する際は、目的とする勝ち or 負けの二値分類である必要はありません。別の方法としては、今回の実験では試しませんが、教師信号を入力 $ \mathbf{x} $ 自身とする自己符号化器(autoencoder)が挙げられます。自己符号化器は正解ラベルを必要としないため、一部のデータしか正解ラベルが用意できないデータセットに対して有効な手法です。
実験設定
今回は多層パーセプトロンの中間表現を入力としたサポートベクターマシンを使って複勝圏内予測と走破タイム回帰を解いていきます。実験に使うデータはこれまでの記事と同様に東京芝2,400mの古馬戦の条件とします。
特徴量も過去の実験と同様に、以下の14個を用います。
特徴量名 | カラム名 | 説明 |
---|---|---|
出走頭数 | num_horse | レースに出走する頭数 |
1着賞金 | win_prize | レースレベルの指標 |
馬齢 | age | 馬の年齢 |
性別 | gender | 牡・牝のダミー変数(騙馬は少ないのでダミー変数にしない) |
斤量 | burden | kg |
脚質 | run_style | 逃げ=1, 先行=2, 差し=3, 追込=4 |
馬複勝率 | place_ratio | 馬の通算複勝率 |
前走距離 | prev_length | メートル |
前走タイム差 | prev_time_diff | 1着との秒差 |
前走前3Fタイム | prev_first3f | 秒 |
前走後3Fタイム | prev_last3f | 秒 |
馬体重 | horse_weight | kg |
馬体重増減 | delta_weight | kg |
騎手複勝率 | jockey_place_ratio | 過去1ヶ月の騎手の複勝率 |
各特徴量はスケールが大きく異なると上手く学習ができない原因となるので、平均0、分散1になるように標準化処理をします。
学習から評価までのステップは以下の通りです。
- 多層パーセプトロンで複勝圏内予測 or 走破タイム予測のタスクを解き、グリッドサーチで最適なパラメータを探索する
- ステップ1で求めたパラメータで学習した多層パーセプトロンの隠れ層の出力をSVMの入力として複勝圏内予測 or 走破タイム予測のタスクを解き、グリッドサーチで最適なパラメータを探索する
- ステップ1,2で求めた多層パーセプトロンとSVMのパラメータを利用して、Top-N Box評価およびジャパンカップの予測を算出する
また、多層パーセプトロンの実装には、scikit-learnのMLPClassifierおよびMLPRegressor、SVMの実装にはSVCおよびSVRを利用しました。
多層パーセプトロンのパラメータの設定は以下の表の通りです。
パラメータの種類 | 値 |
---|---|
隠れ層の数 | $ 1 $ 層 |
隠れユニット数 | $ 4 $ ~ $ 10 $ |
活性化関数 | ReLU |
最適化アルゴリズム | SGD |
バッチサイズ | $ 128 $ |
alpha (L2正則化パラメータ) | $ 1^{-3} $ ~ $ 1^{-6} $ |
学習係数 | $ 1^{-2} $ 〜 $ 1^{-6} $ |
最大更新回数 | $ 5000$$ |
SVC・SVRのパラメータの設定は以下の表の通りです。
パラメータの種類 | 値 |
---|---|
カーネル関数 | rbf |
C | $ 10^2 $ ~ $ 10^{-2} $ |
gamma | $ 1^0 $ ~ $ 1^{-4} $ |
tol | $ 0.001 $ (デフォルト) |
epsilon | $ 0.1 $ (デフォルト) |
また、二値分類では正例と負例のサンプル数のバランスをとるため、クラスの割合が等しくなるようにネガティブサンプリングをしました。
ベースラインの評価
評価のベースラインとして、今回も過去記事と同様に単勝人気順位のTop-N Boxの評価を使います。評価値は以下の通りです。
---- Top-1 BOX
hit ret ret_std
win 0.314 0.717 1.132
place 0.629 0.786 0.616
---- Top-2 BOX
hit ret ret_std
win 0.486 0.680 0.787
place 0.800 0.766 0.466
quinella place 0.314 0.697 1.085
quinella 0.143 0.457 1.168
exacta 0.143 0.527 1.448
---- Top-3 BOX
hit ret ret_std
win 0.543 0.536 0.561
place 0.914 0.754 0.331
quinella place 0.543 0.634 0.765
quinella 0.200 0.250 0.529
exacta 0.200 0.245 0.539
trio 0.086 0.466 1.690
trifecta 0.086 0.253 0.918
---- Top-4 BOX
hit ret ret_std
win 0.686 0.669 0.642
place 0.971 0.746 0.254
quinella place 0.743 0.638 0.609
quinella 0.343 0.405 0.696
exacta 0.343 0.381 0.670
trio 0.171 0.416 1.032
trifecta 0.171 0.292 0.773
---- Top-5 BOX
hit ret ret_std
win 0.800 0.765 0.668
place 0.971 0.741 0.269
quinella place 0.886 0.710 0.642
quinella 0.514 0.608 0.831
exacta 0.514 0.595 0.878
trio 0.314 0.507 1.064
trifecta 0.314 0.513 1.331
複勝圏内予測
SVM(RBFカーネル)+中間表現によるTop-N Box評価の結果です。
▼ SVM(RBFカーネル)+中間表現
---- Top-1 BOX
hit ret ret_std
win 0.294 0.885 1.664
place 0.647 1.018 0.888
---- Top-2 BOX
hit ret ret_std
win 0.441 0.766 1.060
place 0.853 1.007 0.687
quinella place 0.324 1.291 2.269
quinella 0.147 1.597 4.660
exacta 0.147 1.368 3.815
---- Top-3 BOX
hit ret ret_std
win 0.529 0.666 0.840
place 0.882 0.818 0.496
quinella place 0.471 0.811 1.343
quinella 0.265 0.951 2.059
exacta 0.265 0.777 1.572
trio 0.088 1.365 5.135
trifecta 0.088 1.311 5.093
---- Top-4 BOX
hit ret ret_std
win 0.588 0.587 0.686
place 0.941 0.732 0.374
quinella place 0.529 0.586 0.778
quinella 0.353 0.585 1.054
exacta 0.353 0.469 0.800
trio 0.176 0.519 1.398
trifecta 0.176 0.437 1.312
---- Top-5 BOX
hit ret ret_std
win 0.706 0.773 0.912
place 0.971 0.768 0.549
quinella place 0.647 0.512 0.593
quinella 0.441 0.545 0.904
exacta 0.441 0.536 1.040
trio 0.235 0.344 0.780
trifecta 0.235 0.378 1.103
Top-1の複勝的中率がベースラインを上回っており、高い予測性能を持っていることがわかります。過去のSVM(RBFカーネル)による複勝分類予測の結果と比較すると、SVM+中間表現はTop-1の複勝的中率と回収率で大きく上回っており、精度が向上していることがわかります。この結果は、生の特徴ベクトルに比べてパーセプトロンの中間表現は入力の質が良く、SVMの予測精度を向上させたということを示唆しています。また、多層パーセプトロンの実験結果の実験結果と比較しても、単勝的中率は全体的に上回っており、さらに複勝的中率もTop-1は同等、Top-2では勝っていることがわかります。これは、出力部分をSVMに置き換えるという手法が効果的であるということを示していると考えられます。
走破タイム予測
SVR(RBFカーネル)+中間表現によるTop-N Box評価の結果です。
---- Top-1 BOX
hit ret ret_std
win 0.265 0.650 1.209
place 0.559 0.785 0.779
---- Top-2 BOX
hit ret ret_std
win 0.382 0.568 0.875
place 0.676 0.659 0.579
quinella place 0.206 0.676 1.613
quinella 0.029 0.091 0.524
exacta 0.029 0.101 0.583
---- Top-3 BOX
hit ret ret_std
win 0.441 0.514 0.773
place 0.824 0.695 0.463
quinella place 0.412 0.575 0.811
quinella 0.118 0.393 1.404
exacta 0.118 0.328 1.067
trio 0.029 0.129 0.743
trifecta 0.029 0.088 0.507
---- Top-4 BOX
hit ret ret_std
win 0.529 0.477 0.595
place 0.941 0.771 0.702
quinella place 0.529 0.452 0.629
quinella 0.206 0.346 0.937
exacta 0.206 0.265 0.673
trio 0.088 0.249 1.128
trifecta 0.088 0.227 1.126
---- Top-5 BOX
hit ret ret_std
win 0.647 0.591 0.819
place 0.971 0.768 0.567
quinella place 0.706 0.606 0.747
quinella 0.353 0.462 0.888
exacta 0.353 0.428 0.944
trio 0.235 0.489 1.100
trifecta 0.235 0.486 1.262
過去のSVR(RBFカーネル)による走破タイム予測の結果と比較すると、SVR+中間表現はTop-1,2の単勝の的中率と回収率で勝っているということがわかります。このことから、走破タイム回帰においても中間表現に置き換えることが有効であるということが考えられます。多層パーセプトロンの結果と比較すると、単勝の的中率ではやや劣っているということが読み取れます。今回の走破タイム予測というタスクにおいては、中間表現を入力とすることは有効なようですが、予測の出力部分についてはパーセプトロンの出力層である線形変換で十分だったということでしょう。
2016年ジャパンカップを予測する
最後に2016年ジャパンカップの複勝確率と走破タイムの予測結果を紹介します。
まず、レース結果は以下の通りです。
着順 | 馬番 | 馬名 | 人気 | 走破タイム |
---|---|---|---|---|
1 | 1 | キタサンブラック | 1 | 2:25.8 |
2 | 12 | サウンズオブアース | 5 | 2:26.2 |
3 | 17 | シュヴァルグラン | 6 | 2:26.3 |
4 | 3 | ゴールドアクター | 3 | 2:26.4 |
5 | 16 | リアルスティール | 2 | 2:26.4 |
6 | 14 | レインボーライン | 8 | 2:26.4 |
7 | 5 | イキートス | 16 | 2:26.4 |
8 | 7 | ワンアンドオンリー | 14 | 2:26.6 |
9 | 4 | ルージュバック | 7 | 2:26.8 |
10 | 6 | ラストインパクト | 13 | 2:26.9 |
11 | 10 | トーセンバジル | 12 | 2:26.9 |
12 | 15 | ナイトフラワー | 9 | 2:26.9 |
13 | 9 | ディーマジェスティ | 4 | 2:27.1 |
14 | 8 | イラプト | 10 | 2:27.1 |
15 | 13 | ヒットザターゲット | 17 | 2:27.2 |
16 | 2 | ビッシュ | 11 | 2:27.2 |
17 | 11 | フェイムゲーム | 15 | 2:27.3 |
次にSVM(SVR)+中間表現による予測結果です。
▼ 複勝圏内予測
予測順位 | 馬番 | 馬名 | 予測複勝確率 |
---|---|---|---|
1 | 1 | キタサンブラック | 0.832 |
2 | 9 | ディーマジェスティ | 0.829 |
3 | 16 | リアルスティール | 0.827 |
4 | 2 | ビッシュ | 0.817 |
5 | 4 | ルージュバック | 0.769 |
6 | 14 | レインボーライン | 0.756 |
7 | 3 | ゴールドアクター | 0.736 |
8 | 12 | サウンズオブアース | 0.711 |
9 | 17 | シュヴァルグラン | 0.710 |
10 | 10 | トーセンバジル | 0.688 |
11 | 6 | ラストインパクト | 0.579 |
12 | 7 | ワンアンドオンリー | 0.507 |
13 | 5 | イキートス | 0.500 |
14 | 15 | ナイトフラワー | 0.465 |
15 | 8 | イラプト | 0.456 |
16 | 13 | ヒットザターゲット | 0.179 |
17 | 11 | フェイムゲーム | 0.139 |
▼ 走破タイム予測
予測順位 | 馬番 | 馬名 | 予測タイム |
---|---|---|---|
1 | 3 | ゴールドアクター | 2:26.06 |
2 | 1 | キタサンブラック | 2:26.11 |
3 | 16 | リアルスティール | 2:26.16 |
4 | 17 | シュヴァルグラン | 2:26.20 |
5 | 13 | ヒットザターゲット | 2:26.28 |
6 | 9 | ディーマジェスティ | 2:26.29 |
7 | 8 | イラプト | 2:26.30 |
8 | 10 | トーセンバジル | 2:26.38 |
9 | 15 | ナイトフラワー | 2:26.39 |
10 | 4 | ルージュバック | 2:26.41 |
11 | 11 | フェイムゲーム | 2:26.44 |
12 | 12 | サウンズオブアース | 2:26.46 |
13 | 2 | ビッシュ | 2:26.52 |
14 | 6 | ラストインパクト | 2:26.55 |
15 | 14 | レインボーライン | 2:26.60 |
16 | 5 | イキートス | 2:26.64 |
17 | 7 | ワンアンドオンリー | 2:26.80 |
複勝圏内予測ではキタサンブラックを1位評価しており、見事Top-1で的中しています。走破タイム予測のほうではゴールドアクターが1位でキタサンブラックは2位予想となっていますが、シュヴァルグランが4番手と人気よりも高い評価がされており、良い予測と言えそうです。SVR(RBFカーネル)のジャパンカップの予測結果を見てみると、こちらもゴールドアクターが1位予想となっていますが、キタサンブラックが7位となっていることがわかります。この結果から、中間表現を入力としたことで精度が向上し、キタサンブラックが2位に浮上してきたのだと考えられます。
まとめ
今回は多層パーセプトロンを特徴抽出器として利用する方法を紹介しました。実験では中間表現を入力としたSVMによる複勝圏内予測と走破タイム予測を試し、通常の生の特徴ベクトルを入力するSVMよりも高い精度が出ることが確認できました。
このように複数のアルゴリズムを上手く組み合わせることで、高い性能の予測器を獲得することができます。しかしその反面、モデルの学習にかかるコストが増えてしまうという問題があるため、実際に導入するときはコスト対パフォーマンスをよく見極めてからの方が良いでしょう。