今回は前回記事で紹介した多層パーセプトロンを応用して、特徴量抽出器としての使い方を解説します。

パーセプトロンの中間表現

多層パーセプトロンは通常分類や回帰といった予測問題を解くために使われるアルゴリズムです。 例えば、「勝」か「負」を判定する多層パーセプトロンは以下の図のように、特徴ベクトルを入力として受け取り、いくつかの隠れ層を伝わって、最終的な予測ラベルが出力されます。

general_perceptron

このとき、多層パーセプトロンに入力された特徴ベクトルは最初はただの数字の羅列ですが、隠れ層を通るたびに抽象度が増した表現へと変化していきます。 このように隠れ層(中間層)から得られるデータの抽象的な表現は中間表現と呼ばれます。 データの中間表現は、人間が直接目で見て理解することは難しいですが、機械学習モデルにとっては意味を理解しやすい表現となっています。

そのような中間表現の利点を活用するために、多層パーセプトロンを予測器ではなく、新しい特徴ベクトルを獲得するための特徴抽出器として利用する方法があります。 例えば、勝ち or 負けを学習した多層パーセプトロンの中間表現を第9回の理論記事で紹介したサポートベクターマシン(SVM)の入力とする場合は、以下の図のようにモデルを構成します。

svm_with_perceptron

ここでは、中間表現を獲得するための多層パーセプトロンの学習とSVMの学習は別々に行われることに注意が必要です。 上図のように組み合わせることにより、多層パーセプトロンとSVMという2つの異なるモデルの強みを享受することができるため、精度の向上が期待されます。

また、特徴抽出器としての多層パーセプトロンを学習する際は、目的とする勝ち or 負けの二値分類である必要はありません。 別の方法としては、今回の実験では試しませんが、教師信号を入力自身とする自己符号化器(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になるように標準化処理をします。

学習から評価までのステップは以下の通りです。

  1. 多層パーセプトロンで複勝圏内予測 or 走破タイム予測のタスクを解き、グリッドサーチで最適なパラメータを探索する
  2. ステップ1で求めたパラメータで学習した多層パーセプトロンの隠れ層の出力をSVMの入力として複勝圏内予測 or 走破タイム予測のタスクを解き、グリッドサーチで最適なパラメータを探索する
  3. ステップ1,2で求めた多層パーセプトロンとSVMのパラメータを利用して、Top-N Box評価およびジャパンカップの予測を算出する

また、多層パーセプトロンの実装には、scikit-learnのMLPClassifierおよびMLPRegressor、SVMの実装にはSVCおよびSVRを利用しました。

多層パーセプトロンのパラメータの設定は以下の表の通りです。

パラメータの種類
隠れ層の数
隠れユニット数 ~
活性化関数 ReLU
最適化アルゴリズム SGD
バッチサイズ
alpha (L2正則化パラメータ) ~
学習係数
最大更新回数

SVC・SVRのパラメータの設定は以下の表の通りです。

パラメータの種類
カーネル関数 rbf
C ~
gamma ~
tol (デフォルト)
epsilon (デフォルト)

また、二値分類では正例と負例のサンプル数のバランスをとるため、クラスの割合が等しくなるようにネガティブサンプリングをしました。

ベースラインの評価

評価のベースラインとして、今回も過去記事と同様に単勝人気順位の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よりも高い精度が出ることが確認できました。

このように複数のアルゴリズムを上手く組み合わせることで、高い性能の予測器を獲得することができます。 しかしその反面、モデルの学習にかかるコストが増えてしまうという問題があるため、実際に導入するときはコスト対パフォーマンスをよく見極めてからの方が良いでしょう。